ETH Price: $3,377.02 (-1.95%)
Gas: 2 Gwei

Token

BABY XEN (BBXEN)
 

Overview

Max Total Supply

100,000,000,000 BBXEN

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
XEN Crypto: XEN Token
Balance
99.75 BBXEN

Value
$0.00
0x06450dee7fd2fb8e39061434babcfc05599a6fb8
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BabyXen

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-11
*/

/**
 BabyXen is an ERC20 token that pays you in XEN token dividends right into your wallet. 
 3% of all transactions will be put towards the dividends and it will be distributed to 
 all wallets holding more than 1,000,000 BabyXen.

BabyXen is a super deflationary token with 1% Burn rate from all
 transactions. 
1% of all transactions will be sent to the liquidity pool to stabilize the price of the token as we go.

Telegram Group: https://t.me/BBXEN
Website: https://www.babyxen.cc

*/


// SPDX-License-Identifier: MIT

pragma solidity ^0.8.15;

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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


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

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

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

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


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;

       
        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) {
       
        require(b != -1 || a != MIN_INT256);

       
        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 => uint256) values;
        mapping(address => uint256) indexOf;
        mapping(address => bool) inserted;
    }

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

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

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

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

    function set(
        Map storage map,
        address key,
        uint256 val
    ) internal {
        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) internal {
        if (!map.inserted[key]) {
            return;
        }

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

        uint256 index = map.indexOf[key];
        uint256 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();
    }
}


library Address {
    
    function isContract(address account) internal view returns (bool) {
        
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

   
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

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

        
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

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

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

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

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

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

    
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        

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


abstract contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    
    function unlock() public virtual {
        require(
            _previousOwner == msg.sender,
            "You don't have permission to unlock the token contract"
        );
        require(block.timestamp > _lockTime, "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}



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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.6.2;

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

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

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

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

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

contract BabyXen is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    using Address for address;
    using SafeERC20 for IERC20;
    using IterableMapping for IterableMapping.Map;

    address dead = 0x000000000000000000000000000000000000dEaD;

    uint8 public maxLiqFee = 10;
    uint8 public maxTaxFee = 10;
    uint8 public maxBurnFee = 10;
    uint8 public maxWalletFee = 10;
    uint8 public maxBuybackFee = 10;
    uint8 public minMxTxPercentage = 1;
    uint8 public minMxWalletPercentage = 1;

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

    /* Dividend Trackers */
    uint256 public _tDividendTotal = 0;
    uint256 internal constant magnitude = 2**128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    uint256 public totalDividendsDistributed;
    IterableMapping.Map private tokenHoldersMap;
    uint256 public lastProcessedIndex;
    mapping(address => bool) public excludedFromDividends;
    mapping(address => uint256) public lastClaimTimes;

    uint256 public claimWait = 3600;
    uint256 public minimumTokenBalanceForDividends = 1;

    // use by default 300,000 gas to process auto-claiming dividends
    uint256 public gasForProcessing = 300000;

    event DividendsDistributed(uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );
    event ProcessedDividendTracker(
        uint256 iterations,
        uint256 claims,
        uint256 lastProcessedIndex,
        bool indexed automatic,
        uint256 gas,
        address indexed processor
    );
    /* Dividend end*/

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    address public router;

    address public rewardToken;

    uint256 private constant MAX = ~uint256(0);
    uint256 public _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    

    string public _name;
    string public _symbol;
    uint8 private _decimals;

    uint8 public _taxFee;
    uint8 private _previousTaxFee = _taxFee;

    uint8 public _rewardFee;
    uint8 private _previousRewardFee = _rewardFee;

    uint8 public _liquidityFee;
    uint8 private _previousLiquidityFee = _liquidityFee;

    uint8 public _burnFee;
    uint8 private _previousBurnFee = _burnFee;

    uint8 public _walletFee;
    uint8 private _previousWalletFee = _walletFee;

    uint8 public _walletCharityFee;
    uint8 private _previousWalletCharityFee = _walletCharityFee;

    uint8 public _buybackFee;
    uint8 private _previousBuybackFee = _buybackFee;

    IUniswapV2Router02 public pcsV2Router;
    address public pcsV2Pair;
    address payable public feeWallet;
    address payable public feeWalletCharity;

    bool walletFeeInBNB = false;
    bool walletCharityFeeInBNB = false;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount;
    uint256 public _maxWalletAmount;
    uint256 public numTokensSellToAddToLiquidity;
    uint256 private buyBackUpperLimit;

    

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    struct Fee {
        uint8 setTaxFee;
        uint8 setLiqFee;
        uint8 setBurnFee;
        uint8 setWalletFee;
        uint8 setBuybackFee;
        uint8 setWalletCharityFee;
        uint8 setRewardFee;
    }

    struct FeeWallet {
        address payable wallet;
        address payable walletCharity;
        bool walletFeeInBNB;
        bool walletCharityFeeInBNB;
    }

    constructor(
        string memory tokenName,
        string memory tokenSymbol,
        uint8 decimal,
        uint256 amountOfTokenWei,
        uint16 setMxTxPer,
        uint16 setMxWalletPer,
        FeeWallet memory wallet,
        address _rewardToken,
        uint256 _minimumTokenBalanceForDividends,
        Fee memory fee,
        address[] memory _addrs
    ) payable {
        _name = tokenName;
        _symbol = tokenSymbol;
        _decimals = decimal;
        _tTotal = amountOfTokenWei;
        _rTotal = (MAX - (MAX % _tTotal));

        _rOwned[_msgSender()] = _rTotal;

        feeWallet = wallet.wallet;
        feeWalletCharity = wallet.walletCharity;
        walletFeeInBNB = wallet.walletFeeInBNB;
        walletCharityFeeInBNB = wallet.walletCharityFeeInBNB;

        rewardToken = _rewardToken;
        minimumTokenBalanceForDividends = _minimumTokenBalanceForDividends;

        _maxTxAmount = _tTotal.mul(setMxTxPer).div(10**4);
        _maxWalletAmount = _tTotal.mul(setMxWalletPer).div(10**4);

        numTokensSellToAddToLiquidity = amountOfTokenWei.mul(1).div(1000);

        buyBackUpperLimit = 1 * 10**uint256(_decimals);

        router = _addrs[0];
        payable(_addrs[1]).transfer(msg.value);

        IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(router);
        // Create a uniswap pair for this new token
        pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory()).createPair(
            address(this),
            _pcsV2Router.WETH()
        );

        // set the rest of the contract variables
        pcsV2Router = _pcsV2Router;

        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;

        excludedFromDividends[address(this)] = true;
        excludedFromDividends[_msgSender()] = true;
        excludedFromDividends[address(pcsV2Router)] = true;
        excludedFromDividends[address(0xdead)] = true;
        excludedFromDividends[address(pcsV2Pair)] = true;

        require(fee.setTaxFee >= 0 && fee.setTaxFee <= maxTaxFee, "TF err");
        require(fee.setLiqFee >= 0 && fee.setLiqFee <= maxLiqFee, "LF err");
        require(fee.setBurnFee >= 0 && fee.setBurnFee <= maxBurnFee, "BF err");
        require(
            fee.setWalletFee >= 0 && fee.setWalletFee <= maxWalletFee,
            "WF err"
        );
        require(
            fee.setBuybackFee >= 0 && fee.setBuybackFee <= maxBuybackFee,
            "BBF err"
        );
        require(
            fee.setWalletCharityFee >= 0 &&
                fee.setWalletCharityFee <= maxWalletFee,
            "WFT err"
        );
        require(
            fee.setRewardFee >= 0 && fee.setRewardFee <= maxTaxFee,
            "RF err"
        );
        //both tax fee and reward fee cannot be set
        
        _taxFee = fee.setTaxFee;
        _liquidityFee = fee.setLiqFee;
        _burnFee = fee.setBurnFee;
        _buybackFee = fee.setBuybackFee;
        _walletFee = fee.setWalletFee;
        _walletCharityFee = fee.setWalletCharityFee;
        _rewardFee = fee.setRewardFee;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

    function updatePcsV2Router(address newAddress) public onlyOwner {
        require(
            newAddress != address(pcsV2Router),
            "The router already has that address"
        );
        IUniswapV2Router02 _pcsV2Router = IUniswapV2Router02(newAddress);
        // Create a uniswap pair for this new token
        pcsV2Pair = IUniswapV2Factory(_pcsV2Router.factory()).createPair(
            address(this),
            _pcsV2Router.WETH()
        );

        // set the rest of the contract variables
        pcsV2Router = _pcsV2Router;
    }

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public 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 isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        (uint256 rAmount, , , , , ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amt must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(rAmount <= _rTotal, "Amt must be less than tot refl");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(
            !_isExcluded[account],
            "Account is already excluded from reward"
        );
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }


    function buyBackUpperLimitAmount() public view returns (uint256) {
        return buyBackUpperLimit;
    }

    function setBuybackUpperLimit(uint256 buyBackLimit) external onlyOwner {
        buyBackUpperLimit = buyBackLimit * 10**uint256(_decimals);
    }

  

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

   


    function setMinimumTokenBalanceForDividends(
        uint256 _minimumTokenBalanceForDividends
    ) external onlyOwner {
        require(
            _minimumTokenBalanceForDividends >= 1 &&
                _minimumTokenBalanceForDividends <= totalSupply().div(100),
            "err"
        );
        minimumTokenBalanceForDividends = _minimumTokenBalanceForDividends;
    }

    
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return
            _amount
                .mul(
                    _liquidityFee +
                        _burnFee +
                        _walletFee +
                        _buybackFee +
                        _walletCharityFee +
                        _rewardFee
                )
                .div(10**2);
    }

    function removeAllFee() private {
        if (
            _taxFee == 0 &&
            _liquidityFee == 0 &&
            _burnFee == 0 &&
            _walletFee == 0 &&
            _buybackFee == 0 &&
            _walletCharityFee == 0 &&
            _rewardFee == 0
        ) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;
        _previousWalletFee = _walletFee;
        _previousBuybackFee = _buybackFee;
        _previousWalletCharityFee = _walletCharityFee;
        _previousRewardFee = _rewardFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _burnFee = 0;
        _walletFee = 0;
        _buybackFee = 0;
        _walletCharityFee = 0;
        _rewardFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _burnFee = _previousBurnFee;
        _walletFee = _previousWalletFee;
        _buybackFee = _previousBuybackFee;
        _walletCharityFee = _previousWalletCharityFee;
        _rewardFee = _previousRewardFee;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

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

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

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

        if (from != owner() && to != owner())
            require(
                amount <= _maxTxAmount,
                "Transfer amount exceeds the maxTxAmount."
            );

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != dead &&
            to != pcsV2Pair
        ) {
            uint256 contractBalanceRecepient = balanceOf(to);
            require(
                contractBalanceRecepient + amount <= _maxWalletAmount,
                "Exceeds maximum wallet amount"
            );
        }
        
        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (!inSwapAndLiquify && to == pcsV2Pair && swapAndLiquifyEnabled) {
            if (overMinTokenBalance) {
                contractTokenBalance = numTokensSellToAddToLiquidity;
                
                swapAndLiquify(contractTokenBalance);
            }
            if (_buybackFee != 0) {
                uint256 balance = address(this).balance;
                if (balance > uint256(1 * 10**uint256(_decimals))) {
                    if (balance > buyBackUpperLimit)
                        balance = buyBackUpperLimit;

                    buyBackTokens(balance.div(100));
                }
            }

            if (_rewardFee != 0) {
                uint256 gas = gasForProcessing;

                (
                    uint256 iterations,
                    uint256 claims,
                    uint256 _lastProcessedIndex
                ) = process(gas);
                emit ProcessedDividendTracker(
                    iterations,
                    claims,
                    _lastProcessedIndex,
                    true,
                    gas,
                    tx.origin
                );
            }
        }

        
        bool takeFee = true;

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

       
        uint256 currentBalanceFrom = balanceOf(from);
        uint256 currentBalanceTo = balanceOf(to);

        _tokenTransfer(from, to, amount, takeFee);

        setBalance(payable(from), balanceOf(from), currentBalanceFrom);
        setBalance(payable(to), balanceOf(to), currentBalanceTo);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        
        uint8 totFee = _burnFee +
            _walletFee +
            _liquidityFee +
            _buybackFee +
            _walletCharityFee +
            _rewardFee;
        uint256 spentAmount = 0;
        uint256 totSpentAmount = 0;
        if (_burnFee != 0) {
            spentAmount = contractTokenBalance.div(totFee).mul(_burnFee);
            _tokenTransferNoFee(address(this), dead, spentAmount);
            totSpentAmount = spentAmount;
        }

        if (_walletFee != 0) {
            spentAmount = contractTokenBalance.div(totFee).mul(_walletFee);
            if (!walletFeeInBNB) {
                uint256 currentBalance = balanceOf(feeWallet);
                _tokenTransferNoFee(address(this), feeWallet, spentAmount);
                setBalance(
                    payable(feeWallet),
                    balanceOf(feeWallet),
                    currentBalance
                );
            } else {
                uint256 initialBalance = address(this).balance;
                
                swapTokensForBNB(spentAmount);
                
                uint256 newBalance = address(this).balance.sub(initialBalance);
                transferEth(feeWallet, newBalance);
            }
            totSpentAmount = totSpentAmount + spentAmount;
        }

        if (_buybackFee != 0) {
            spentAmount = contractTokenBalance.div(totFee).mul(_buybackFee);
            swapTokensForBNB(spentAmount);
            totSpentAmount = totSpentAmount + spentAmount;
        }

        if (_walletCharityFee != 0) {
            spentAmount = contractTokenBalance.div(totFee).mul(
                _walletCharityFee
            );

            if (!walletCharityFeeInBNB) {
                uint256 currentBalance = balanceOf(feeWalletCharity);
                _tokenTransferNoFee(
                    address(this),
                    feeWalletCharity,
                    spentAmount
                );
                setBalance(
                    payable(feeWalletCharity),
                    balanceOf(feeWalletCharity),
                    currentBalance
                );
            } else {
                uint256 initialBalance = address(this).balance;
                
                swapTokensForBNB(spentAmount);
                
                uint256 newBalance = address(this).balance.sub(initialBalance);
                transferEth(feeWalletCharity, newBalance);
            }
            totSpentAmount = totSpentAmount + spentAmount;
        }

        if (_rewardFee != 0) {
            spentAmount = contractTokenBalance.div(totFee).mul(_rewardFee);
            uint256 initialBalance = IERC20(rewardToken).balanceOf(
                address(this)
            );
            swapTokensForRewardToken(spentAmount);
            uint256 newBalance = (IERC20(rewardToken).balanceOf(address(this)))
                .sub(initialBalance);
            distributeDividends(newBalance);
            totSpentAmount = totSpentAmount + spentAmount;
        }

        if (_liquidityFee != 0) {
            contractTokenBalance = contractTokenBalance.sub(totSpentAmount);

            
            uint256 half = contractTokenBalance.div(2);
            uint256 otherHalf = contractTokenBalance.sub(half);

            
            uint256 initialBalance = address(this).balance;

            
            swapTokensForBNB(half); 

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

            
            addLiquidity(otherHalf, newBalance);

            emit SwapAndLiquify(half, newBalance, otherHalf);
        }
    }

    function buyBackTokens(uint256 amount) private lockTheSwap {
        if (amount > 0) {
            swapBNBForTokens(amount);
        }
    }

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

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

        
        pcsV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBNBForTokens(uint256 amount) private {
        
        address[] memory path = new address[](2);
        path[0] = pcsV2Router.WETH();
        path[1] = address(this);

        
        pcsV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(
            0, 
            path,
            dead, 
            block.timestamp.add(300)
        );
    }

    function swapTokensForRewardToken(uint256 tokenAmount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = pcsV2Router.WETH();
        path[2] = rewardToken;

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

        
        pcsV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp.add(300)
        );
    }

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

        
        pcsV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, 
            0, 
            dead,
            block.timestamp
        );
    }

    
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _tokenTransferNoFee(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        uint256 currentRate = _getRate();
        uint256 rAmount = amount.mul(currentRate);

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rAmount);

        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        }
        emit Transfer(sender, recipient, amount);
    }

    function transferEth(address recipient, uint256 amount) private {
        (bool res, ) = recipient.call{value: amount}("");
        require(res, "ETH TRANSFER FAILED");
    }

    function recoverBEP20(address tokenAddress, uint256 tokenAmount)
        public
        onlyOwner
    {
        
        require(tokenAddress != address(this), "Self withdraw");
        require(tokenAddress != rewardToken, "reward withdraw");
        IERC20(tokenAddress).transfer(owner(), tokenAmount);
    }

    
    function distributeDividends(uint256 amount) internal {
        require(_tDividendTotal > 0);

        if (amount > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (amount).mul(magnitude) / _tDividendTotal
            );
            emit DividendsDistributed(amount);

            totalDividendsDistributed = totalDividendsDistributed.add(amount);
        }
    }

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

    function _withdrawDividendOfUser(address payable user)
        internal
        returns (uint256)
    {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            
            uint256 curBalance = IERC20(rewardToken).balanceOf(address(this));
            if (curBalance < _withdrawableDividend) {
                return 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 returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

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

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

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

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

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

    function _dmint(address account, uint256 value) internal {
        _tDividendTotal = _tDividendTotal + value;
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _dburn(address account, uint256 value) internal {
        _tDividendTotal = _tDividendTotal - value;
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _setBalance(
        address account,
        uint256 newBalance,
        uint256 currentBalance
    ) internal {
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _dmint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _dburn(account, burnAmount);
        }
    }

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

        uint256 currentBalance = balanceOf(account);
        if (currentBalance < minimumTokenBalanceForDividends) {
            
            currentBalance = 0;
        }
        _setBalance(account, 0, currentBalance);
        tokenHoldersMap.remove(account);

        emit ExcludeFromDividends(account);
    }

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

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

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

    function getAccountDividendsInfo(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 getAccountDividendsInfoAtIndex(uint256 index)
        public
        view
        returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        if (index >= tokenHoldersMap.size()) {
            return (address(0), -1, -1, 0, 0, 0, 0, 0);
        }

        address account = tokenHoldersMap.getKeyAtIndex(index);

        return getAccountDividendsInfo(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,
        uint256 currentBalance
    ) private {
        if (excludedFromDividends[account]) {
            return;
        }
        if (currentBalance < minimumTokenBalanceForDividends) {
            //if existing balance was less than min, the entry is not there
            currentBalance = 0;
        }
        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance, currentBalance);
            tokenHoldersMap.set(account, newBalance);
        } else {
            _setBalance(account, 0, currentBalance);
            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)
        internal
        returns (bool)
    {
        if (!tokenHoldersMap.inserted[account]) {
            return false;
        }

        uint256 amount = _withdrawDividendOfUser(account);

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

        return false;
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(
            newValue >= 200000 && newValue <= 5000000,
            "gasForProcessing must be between 200,000 and 5,000,000"
        );
        gasForProcessing = newValue;
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint8","name":"decimal","type":"uint8"},{"internalType":"uint256","name":"amountOfTokenWei","type":"uint256"},{"internalType":"uint16","name":"setMxTxPer","type":"uint16"},{"internalType":"uint16","name":"setMxWalletPer","type":"uint16"},{"components":[{"internalType":"address payable","name":"wallet","type":"address"},{"internalType":"address payable","name":"walletCharity","type":"address"},{"internalType":"bool","name":"walletFeeInBNB","type":"bool"},{"internalType":"bool","name":"walletCharityFeeInBNB","type":"bool"}],"internalType":"struct BabyXen.FeeWallet","name":"wallet","type":"tuple"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_minimumTokenBalanceForDividends","type":"uint256"},{"components":[{"internalType":"uint8","name":"setTaxFee","type":"uint8"},{"internalType":"uint8","name":"setLiqFee","type":"uint8"},{"internalType":"uint8","name":"setBurnFee","type":"uint8"},{"internalType":"uint8","name":"setWalletFee","type":"uint8"},{"internalType":"uint8","name":"setBuybackFee","type":"uint8"},{"internalType":"uint8","name":"setWalletCharityFee","type":"uint8"},{"internalType":"uint8","name":"setRewardFee","type":"uint8"}],"internalType":"struct BabyXen.Fee","name":"fee","type":"tuple"},{"internalType":"address[]","name":"_addrs","type":"address[]"}],"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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"ClaimWaitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buybackFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tDividendTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletCharityFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackUpperLimitAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeWalletCharity","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"int256","name":"index","type":"int256"},{"internalType":"int256","name":"iterationsUntilProcessed","type":"int256"},{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"},{"internalType":"uint256","name":"nextClaimTime","type":"uint256"},{"internalType":"uint256","name":"secondsUntilAutoClaimAvailable","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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBurnFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuybackFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLiqFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTaxFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minMxTxPercentage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minMxWalletPercentage","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pcsV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverBEP20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokenBalanceForDividends","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":"unlock","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":"address","name":"newAddress","type":"address"}],"name":"updatePcsV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040819052600380546001600160d81b0319167a01010a0a0a0a0a000000000000000000000000000000000000dead1790556000600755610e106013556001601455620493e06015556020805460ff60701b1962ff00ff60501b1962ff00ff60301b1964ff00ff000019841660ff60201b1960ff61010087048116620100000291821692909217630100000062ff000019909716909117959095048116640100000000029490941790811660ff60401b1965010000000000830486166601000000000000029081169190911767010000000000000060ff60301b1990931690911791909104841668010000000000000000021790811660ff60601b196901000000000000000000830485166a010000000000000000000002908116919091176b01000000000000000000000060ff60501b199093169091179190910483166c010000000000000000000000000217908116600160681b909104909116600160701b0217905560248054600160b81b63ff00ffff60a01b199091161790556200651d388190039081908339810160408190526200019d9162000e4b565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601e620001ec8c8262001002565b50601f620001fb8b8262001002565b506020805460ff191660ff8b16179055601b8890556200021e88600019620010e4565b6200022c9060001962001111565b601c81905533600090815260046020908152604091829020929092558651602380546001600160a01b039283166001600160a01b0319918216179091558884015160248054948b015160608c01511515600160a81b0260ff60a81b19911515600160a01b026001600160a81b031990971693861693909317959095179490941617909255601a8054918816919092161790556014849055601b54620002fd9161271091620002e99161ffff8c16906200259a620009f9821b17901c565b62000a8c60201b6200261c1790919060201c565b6025819055506200032a612710620002e98861ffff16601b54620009f960201b6200259a1790919060201c565b6026556200034d6103e8620002e98a6001620009f9602090811b6200259a17901c565b602755602054620003639060ff16600a62001228565b6200037090600162001236565b6028558051819060009062000389576200038962001258565b6020026020010151601960006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600181518110620003cd57620003cd62001258565b60200260200101516001600160a01b03166108fc349081150290604051600060405180830381858888f193505050501580156200040e573d6000803e3d6000fd5b506019546040805163c45a015560e01b815290516001600160a01b0390921691829163c45a01559160048083019260209291908290030181865afa1580156200045b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048191906200126e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f591906200126e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200056991906200126e565b602280546001600160a01b03199081166001600160a01b039384161790915560218054909116918316919091179055600160166000620005a63390565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152601683528181208054851660019081179091556011938490529181208054909416821790935591620006043390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556021548216815260119093528183208054851660019081179091557f97847ee99463795296047093514439c3127772df3715e628aa85601cf85417168054861682179055602254909116835291208054909216811790915550600354835160ff600160a81b909204821691161115620006db5760405162461bcd60e51b81526020600482015260066024820152652a231032b93960d11b60448201526064015b60405180910390fd5b600354602084015160ff600160a01b9092048216911611156200072a5760405162461bcd60e51b815260206004820152600660248201526526231032b93960d11b6044820152606401620006d2565b600354604084015160ff600160b01b909204821691161115620007795760405162461bcd60e51b815260206004820152600660248201526521231032b93960d11b6044820152606401620006d2565b600354606084015160ff600160b81b909204821691161115620007c85760405162461bcd60e51b81526020600482015260066024820152652ba31032b93960d11b6044820152606401620006d2565b600354608084015160ff600160c01b909204821691161115620008185760405162461bcd60e51b81526020600482015260076024820152662121231032b93960c91b6044820152606401620006d2565b60035460a084015160ff600160b81b909204821691161115620008685760405162461bcd60e51b81526020600482015260076024820152662ba32a1032b93960c91b6044820152606401620006d2565b60035460c084015160ff600160a81b909204821691161115620008b75760405162461bcd60e51b815260206004820152600660248201526529231032b93960d11b6044820152606401620006d2565b8251602080548186015160408701516080880151606089015160a08a015160c08b015165ff000000ff001990961661010060ff998a160260ff60281b19161765010000000000958916959095029490941766ff0000000000ff60381b19166701000000000000009388169390930260ff60681b191692909217600160681b918716919091021762ff00ff60481b191669010000000000000000009186169190910260ff60581b1916176b010000000000000000000000918516919091021763ff000000191663010000009390911692909202919091179055620009973390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601b54604051620009df91815260200190565b60405180910390a3505050505050505050505050620012da565b60008260000362000a0d5750600062000a86565b600062000a1b838562001236565b90508262000a2a85836200128e565b1462000a835760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401620006d2565b90505b92915050565b600062000a8383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000ad660201b60201c565b6000818362000afa5760405162461bcd60e51b8152600401620006d29190620012a5565b50600062000b0984866200128e565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000b535762000b5362000b12565b604052919050565b60005b8381101562000b7857818101518382015260200162000b5e565b8381111562000b88576000848401525b50505050565b600082601f83011262000ba057600080fd5b81516001600160401b0381111562000bbc5762000bbc62000b12565b62000bd1601f8201601f191660200162000b28565b81815284602083860101111562000be757600080fd5b62000bfa82602083016020870162000b5b565b949350505050565b805160ff8116811462000c1457600080fd5b919050565b805161ffff8116811462000c1457600080fd5b6001600160a01b038116811462000c4257600080fd5b50565b8051801515811462000c1457600080fd5b60006080828403121562000c6957600080fd5b604051608081016001600160401b038111828210171562000c8e5762000c8e62000b12565b8060405250809150825162000ca38162000c2c565b8152602083015162000cb58162000c2c565b602082015262000cc86040840162000c45565b604082015262000cdb6060840162000c45565b60608201525092915050565b805162000c148162000c2c565b600060e0828403121562000d0757600080fd5b60405160e081016001600160401b038111828210171562000d2c5762000d2c62000b12565b60405290508062000d3d8362000c02565b815262000d4d6020840162000c02565b602082015262000d606040840162000c02565b604082015262000d736060840162000c02565b606082015262000d866080840162000c02565b608082015262000d9960a0840162000c02565b60a082015262000dac60c0840162000c02565b60c08201525092915050565b600082601f83011262000dca57600080fd5b815160206001600160401b0382111562000de85762000de862000b12565b8160051b62000df982820162000b28565b928352848101820192828101908785111562000e1457600080fd5b83870192505b8483101562000e4057825162000e308162000c2c565b8252918301919083019062000e1a565b979650505050505050565b60008060008060008060008060008060006102808c8e03121562000e6e57600080fd5b8b516001600160401b0381111562000e8557600080fd5b62000e938e828f0162000b8e565b60208e0151909c5090506001600160401b0381111562000eb257600080fd5b62000ec08e828f0162000b8e565b9a505062000ed160408d0162000c02565b985060608c0151975062000ee860808d0162000c19565b965062000ef860a08d0162000c19565b955062000f098d60c08e0162000c56565b945062000f1a6101408d0162000ce7565b93506101608c0151925062000f348d6101808e0162000cf4565b6102608d01519092506001600160401b0381111562000f5257600080fd5b62000f608e828f0162000db8565b9150509295989b509295989b9093969950565b600181811c9082168062000f8857607f821691505b60208210810362000fa957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000ffd57600081815260208120601f850160051c8101602086101562000fd85750805b601f850160051c820191505b8181101562000ff95782815560010162000fe4565b5050505b505050565b81516001600160401b038111156200101e576200101e62000b12565b62001036816200102f845462000f73565b8462000faf565b602080601f8311600181146200106e5760008415620010555750858301515b600019600386901b1c1916600185901b17855562000ff9565b600085815260208120601f198616915b828110156200109f578886015182559484019460019091019084016200107e565b5085821015620010be5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b600082620010f657620010f6620010ce565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620011265762001126620010fb565b500390565b600181815b808511156200116c578160001904821115620011505762001150620010fb565b808516156200115e57918102915b93841c939080029062001130565b509250929050565b600082620011855750600162000a86565b81620011945750600062000a86565b8160018114620011ad5760028114620011b857620011d8565b600191505062000a86565b60ff841115620011cc57620011cc620010fb565b50506001821b62000a86565b5060208310610133831016604e8410600b8410161715620011fd575081810a62000a86565b6200120983836200112b565b8060001904821115620012205762001220620010fb565b029392505050565b600062000a83838362001174565b6000816000190483118215151615620012535762001253620010fb565b500290565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156200128157600080fd5b815162000a838162000c2c565b600082620012a057620012a0620010ce565b500490565b6020815260008251806020840152620012c681604085016020870162000b5b565b601f01601f19169190910160400192915050565b61523380620012ea6000396000f3fe6080604052600436106104985760003560e01c806370a0823111610260578063bdc653ef11610144578063e7841ec0116100c1578063f25f4b5611610085578063f25f4b5614610e75578063f27fd25414610e95578063f2fde38b14610eb5578063f7c618c114610ed5578063f887ea4014610ef5578063ffb2c47914610f1557600080fd5b8063e7841ec014610de0578063e98030c714610df5578063ea2f0b3714610e15578063ec9257d414610e35578063efa0880614610e5557600080fd5b8063caebb84311610108578063caebb84314610d2f578063d12a768814610d4f578063d28d885214610d65578063dd46706414610d7a578063dd62ed3e14610d9a57600080fd5b8063bdc653ef14610ca2578063be10b61414610cb7578063c0b0fda214610ccd578063c49b9a8014610cee578063c7992f9a14610d0e57600080fd5b80639c1b8af5116101dd578063aafd847a116101a1578063aafd847a14610bb1578063ad56c13c14610be7578063af465a2714610c4c578063b09f126614610c62578063b1c16b1214610c77578063b6c5232414610c8d57600080fd5b80639c1b8af514610b26578063a457c2d714610b3c578063a69df4b514610b5c578063a8b9d24014610b71578063a9059cbb14610b9157600080fd5b8063871c128d11610224578063871c128d14610a7a57806388f8202014610a9a5780638da5cb5b14610ad357806391b89fba14610af157806395d89b4114610b1157600080fd5b806370a08231146109f9578063715018a614610a195780637d1db4a514610a2e57806382d2a4bb14610a4457806385a6b3ae14610a6457600080fd5b80633c81385c1161038757806352390c02116103045780636a474002116102c85780636a474002146109565780636bc87c3a1461096b5780636c0a24eb1461098c5780636f2789ec146109a2578063700bb191146109b857806370690b11146109d857600080fd5b806352390c02146108a75780635342acb4146108c757806354ce6578146109005780635ebf4db91461092157806364b0f6531461094157600080fd5b80634e71d92d1161034b5780634e71d92d146108005780634e7b827f1461081557806351330a191461084557806351fde4bb14610866578063521432901461088757600080fd5b80633c81385c1461075d578063430ca0901461077e578063437823ec1461079f5780634549b039146107bf5780634a74bb02146107df57600080fd5b80632d6abf8711610415578063324f8dbf116103d9578063324f8dbf146106bd5780633685d419146106de57806339509351146106fe5780633b124fe71461071e5780633bd5d1731461073d57600080fd5b80632d6abf87146106155780632d8381191461064d5780633009a6091461066d578063313ce5671461068357806331e79db01461069b57600080fd5b806318160ddd1161045c57806318160ddd1461057257806319de79ab14610587578063226cfa3d146105a857806323b872dd146105d557806327ce0147146105f557600080fd5b806306fdde03146104a4578063095ea7b3146104cf5780630f94892c146104ff57806313114a9d1461053257806315fa749a1461055157600080fd5b3661049f57005b600080fd5b3480156104b057600080fd5b506104b9610f50565b6040516104c69190614bf5565b60405180910390f35b3480156104db57600080fd5b506104ef6104ea366004614c5f565b610fe2565b60405190151581526020016104c6565b34801561050b57600080fd5b5060205461052090600160581b900460ff1681565b60405160ff90911681526020016104c6565b34801561053e57600080fd5b50601d545b6040519081526020016104c6565b34801561055d57600080fd5b5060035461052090600160c01b900460ff1681565b34801561057e57600080fd5b50601b54610543565b34801561059357600080fd5b5060205461052090600160681b900460ff1681565b3480156105b457600080fd5b506105436105c3366004614c8b565b60126020526000908152604090205481565b3480156105e157600080fd5b506104ef6105f0366004614ca8565b610ff9565b34801561060157600080fd5b50610543610610366004614c8b565b611062565b34801561062157600080fd5b50602154610635906001600160a01b031681565b6040516001600160a01b0390911681526020016104c6565b34801561065957600080fd5b50610543610668366004614ce9565b6110bb565b34801561067957600080fd5b5061054360105481565b34801561068f57600080fd5b5060205460ff16610520565b3480156106a757600080fd5b506106bb6106b6366004614c8b565b611131565b005b3480156106c957600080fd5b5060035461052090600160c81b900460ff1681565b3480156106ea57600080fd5b506106bb6106f9366004614c8b565b61120c565b34801561070a57600080fd5b506104ef610719366004614c5f565b6113b5565b34801561072a57600080fd5b5060205461052090610100900460ff1681565b34801561074957600080fd5b506106bb610758366004614ce9565b6113eb565b34801561076957600080fd5b5060035461052090600160b01b900460ff1681565b34801561078a57600080fd5b5060035461052090600160a01b900460ff1681565b3480156107ab57600080fd5b506106bb6107ba366004614c8b565b6114d5565b3480156107cb57600080fd5b506105436107da366004614d10565b611523565b3480156107eb57600080fd5b506024546104ef90600160b81b900460ff1681565b34801561080c57600080fd5b506106bb6115b0565b34801561082157600080fd5b506104ef610830366004614c8b565b60116020526000908152604090205460ff1681565b34801561085157600080fd5b5060035461052090600160b81b900460ff1681565b34801561087257600080fd5b50602054610520906301000000900460ff1681565b34801561089357600080fd5b50602254610635906001600160a01b031681565b3480156108b357600080fd5b506106bb6108c2366004614c8b565b6115be565b3480156108d357600080fd5b506104ef6108e2366004614c8b565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561090c57600080fd5b5060205461052090600160481b900460ff1681565b34801561092d57600080fd5b506106bb61093c366004614ce9565b611721565b34801561094d57600080fd5b50600c54610543565b34801561096257600080fd5b506106bb6117a6565b34801561097757600080fd5b5060205461052090600160281b900460ff1681565b34801561099857600080fd5b5061054360265481565b3480156109ae57600080fd5b5061054360135481565b3480156109c457600080fd5b506106bb6109d3366004614ce9565b6117af565b3480156109e457600080fd5b5060035461052090600160d01b900460ff1681565b348015610a0557600080fd5b50610543610a14366004614c8b565b611818565b348015610a2557600080fd5b506106bb611877565b348015610a3a57600080fd5b5061054360255481565b348015610a5057600080fd5b506106bb610a5f366004614ce9565b6118d9565b348015610a7057600080fd5b50610543600b5481565b348015610a8657600080fd5b506106bb610a95366004614ce9565b611924565b348015610aa657600080fd5b506104ef610ab5366004614c8b565b6001600160a01b031660009081526017602052604090205460ff1690565b348015610adf57600080fd5b506000546001600160a01b0316610635565b348015610afd57600080fd5b50610543610b0c366004614c8b565b6119d4565b348015610b1d57600080fd5b506104b96119df565b348015610b3257600080fd5b5061054360155481565b348015610b4857600080fd5b506104ef610b57366004614c5f565b6119ee565b348015610b6857600080fd5b506106bb611a3d565b348015610b7d57600080fd5b50610543610b8c366004614c8b565b611b56565b348015610b9d57600080fd5b506104ef610bac366004614c5f565b611b82565b348015610bbd57600080fd5b50610543610bcc366004614c8b565b6001600160a01b03166000908152600a602052604090205490565b348015610bf357600080fd5b50610c07610c02366004614c8b565b611b8f565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016104c6565b348015610c5857600080fd5b50610543601b5481565b348015610c6e57600080fd5b506104b9611c78565b348015610c8357600080fd5b5061054360075481565b348015610c9957600080fd5b50600254610543565b348015610cae57600080fd5b50602854610543565b348015610cc357600080fd5b5061054360145481565b348015610cd957600080fd5b5060205461052090600160381b900460ff1681565b348015610cfa57600080fd5b506106bb610d09366004614d40565b611d06565b348015610d1a57600080fd5b5060035461052090600160a81b900460ff1681565b348015610d3b57600080fd5b506106bb610d4a366004614c8b565b611d88565b348015610d5b57600080fd5b5061054360275481565b348015610d7157600080fd5b506104b9611f97565b348015610d8657600080fd5b506106bb610d95366004614ce9565b611fa4565b348015610da657600080fd5b50610543610db5366004614d5d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610dec57600080fd5b50601054610543565b348015610e0157600080fd5b506106bb610e10366004614ce9565b612029565b348015610e2157600080fd5b506106bb610e30366004614c8b565b612192565b348015610e4157600080fd5b50602454610635906001600160a01b031681565b348015610e6157600080fd5b506106bb610e70366004614c5f565b6121dd565b348015610e8157600080fd5b50602354610635906001600160a01b031681565b348015610ea157600080fd5b50610c07610eb0366004614ce9565b612336565b348015610ec157600080fd5b506106bb610ed0366004614c8b565b6123a5565b348015610ee157600080fd5b50601a54610635906001600160a01b031681565b348015610f0157600080fd5b50601954610635906001600160a01b031681565b348015610f2157600080fd5b50610f35610f30366004614ce9565b61247d565b604080519384526020840192909252908201526060016104c6565b6060601e8054610f5f90614d8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8b90614d8b565b8015610fd85780601f10610fad57610100808354040283529160200191610fd8565b820191906000526020600020905b815481529060010190602001808311610fbb57829003601f168201915b5050505050905090565b6000610fef33848461265e565b5060015b92915050565b600061100684848461276b565b611058843361105385604051806060016040528060288152602001615191602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612beb565b61265e565b5060019392505050565b6001600160a01b038116600090815260096020526040812054600160801b906110b1906110ac906110a66110a161109888611818565b6008549061259a565b612c25565b90612c35565b612c73565b610ff39190614ddb565b6000601c548211156111145760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c000060448201526064015b60405180910390fd5b600061111e612c86565b905061112a838261261c565b9392505050565b6000546001600160a01b0316331461115b5760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b03811660009081526011602052604090205460ff161561118157600080fd5b6001600160a01b0381166000908152601160205260408120805460ff191660011790556111ad82611818565b90506014548110156111bd575060005b6111c982600083612ca9565b6111d4600c83612cef565b6040516001600160a01b038316907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a25050565b6000546001600160a01b031633146112365760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b03811660009081526017602052604090205460ff166112915760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b604482015260640161110b565b60005b6018548110156113b157816001600160a01b0316601882815481106112bb576112bb614e32565b6000918252602090912001546001600160a01b03160361139f57601880546112e590600190614e48565b815481106112f5576112f5614e32565b600091825260209091200154601880546001600160a01b03909216918390811061132157611321614e32565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055601790925220805460ff19169055601880548061137957611379614e5f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806113a981614e75565b915050611294565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610fef9185906110539086612e2a565b3360008181526017602052604090205460ff16156114605760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161110b565b600061146b83612e89565b505050506001600160a01b03841660009081526004602052604090205491925061149791905082612ed8565b6001600160a01b038316600090815260046020526040902055601c546114bd9082612ed8565b601c55601d546114cd9084612e2a565b601d55505050565b6000546001600160a01b031633146114ff5760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b03166000908152601660205260409020805460ff19166001179055565b6000601b548311156115775760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c7900000000604482015260640161110b565b8161159657600061158784612e89565b50939550610ff3945050505050565b60006115a184612e89565b50929550610ff3945050505050565b6115bb336000612f1a565b50565b6000546001600160a01b031633146115e85760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b03811660009081526017602052604090205460ff16156116615760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b606482015260840161110b565b6001600160a01b038116600090815260046020526040902054156116bb576001600160a01b0381166000908152600460205260409020546116a1906110bb565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152601760205260408120805460ff191660019081179091556018805491820181559091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461174b5760405162461bcd60e51b815260040161110b90614dfd565b6001811015801561176f575061176b6064611765601b5490565b9061261c565b8111155b6117a15760405162461bcd60e51b815260206004820152600360248201526232b93960e91b604482015260640161110b565b601455565b6115bb33612fc3565b60008060006117bd8461247d565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b03811660009081526017602052604081205460ff161561185557506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610ff3906110bb565b6000546001600160a01b031633146118a15760405162461bcd60e51b815260040161110b90614dfd565b600080546040516001600160a01b03909116906000805160206151b9833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146119035760405162461bcd60e51b815260040161110b90614dfd565b6020546119149060ff16600a614f72565b61191e9082614f7e565b60285550565b6000546001600160a01b0316331461194e5760405162461bcd60e51b815260040161110b90614dfd565b62030d4081101580156119645750624c4b408111155b6119cf5760405162461bcd60e51b815260206004820152603660248201527f676173466f7250726f63657373696e67206d757374206265206265747765656e6044820152750203230302c30303020616e6420352c3030302c3030360541b606482015260840161110b565b601555565b6000610ff382611b56565b6060601f8054610f5f90614d8b565b6000610fef3384611053856040518060600160405280602581526020016151d9602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612beb565b6001546001600160a01b03163314611ab65760405162461bcd60e51b815260206004820152603660248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152751bd8dac81d1a19481d1bdad95b8818dbdb9d1c9858dd60521b606482015260840161110b565b6002544211611b075760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015260640161110b565b600154600080546040516001600160a01b0393841693909116916000805160206151b983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0381166000908152600a6020526040812054610ff390611b7c84611062565b90612ed8565b6000610fef33848461276b565b806000808080808080611ba3600c896131ac565b9650600019955060008712611c0557601054871115611bd157601054611bca9088906131f7565b9550611c05565b601054600c5460009110611be6576000611bf5565b601054600c54611bf591612ed8565b9050611c018882612c35565b9650505b611c0e88611b56565b9450611c1988611062565b6001600160a01b038916600090815260126020526040902054909450925082611c43576000611c51565b601354611c51908490612e2a565b9150428211611c61576000611c6b565b611c6b8242612ed8565b9050919395975091939597565b601f8054611c8590614d8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb190614d8b565b8015611cfe5780601f10611cd357610100808354040283529160200191611cfe565b820191906000526020600020905b815481529060010190602001808311611ce157829003601f168201915b505050505081565b6000546001600160a01b03163314611d305760405162461bcd60e51b815260040161110b90614dfd565b60248054821515600160b81b0260ff60b81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611d7d90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611db25760405162461bcd60e51b815260040161110b90614dfd565b6021546001600160a01b0390811690821603611e1c5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b606482015260840161110b565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e839190614f9d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef49190614f9d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190614f9d565b602280546001600160a01b039283166001600160a01b0319918216179091556021805493909216921691909117905550565b601e8054611c8590614d8b565b6000546001600160a01b03163314611fce5760405162461bcd60e51b815260040161110b90614dfd565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611ffd8142614fba565b600255600080546040516001600160a01b03909116906000805160206151b9833981519152908390a350565b6000546001600160a01b031633146120535760405162461bcd60e51b815260040161110b90614dfd565b610e1081101580156120685750620151808111155b6120e85760405162461bcd60e51b815260206004820152604560248201527f4469766964656e645f547261636b65723a20636c61696d57616974206d75737460448201527f206265207570646174656420746f206265747765656e203120616e6420323420606482015264686f75727360d81b608482015260a40161110b565b601354810361215f5760405162461bcd60e51b815260206004820152603760248201527f4469766964656e645f547261636b65723a2043616e6e6f74207570646174652060448201527f636c61696d5761697420746f2073616d652076616c7565000000000000000000606482015260840161110b565b60135460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601355565b6000546001600160a01b031633146121bc5760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b03166000908152601660205260409020805460ff19169055565b6000546001600160a01b031633146122075760405162461bcd60e51b815260040161110b90614dfd565b306001600160a01b0383160361224f5760405162461bcd60e51b815260206004820152600d60248201526c53656c6620776974686472617760981b604482015260640161110b565b601a546001600160a01b039081169083160361229f5760405162461bcd60e51b815260206004820152600f60248201526e72657761726420776974686472617760881b604482015260640161110b565b816001600160a01b031663a9059cbb6122c06000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561230d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123319190614fd2565b505050565b60008060008060008060008061234b600c5490565b891061237057506000965060001995508594508693508392508291508190508061239a565b600061237d600c8b613234565b905061238881611b8f565b98509850985098509850985098509850505b919395975091939597565b6000546001600160a01b031633146123cf5760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b0381166124345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161110b565b600080546040516001600160a01b03808516939216916000805160206151b983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600c546000908190819080820361249f57505060105460009250829150612593565b6010546000805a90506000805b89841080156124ba57508582105b1561258257846124c981614e75565b600c54909650861090506124dc57600094505b6000600c60000186815481106124f4576124f4614e32565b60009182526020808320909101546001600160a01b0316808352601290915260409091205490915061252590613267565b1561254857612535816001612f1a565b15612548578161254481614e75565b9250505b8261255281614e75565b93505060005a9050808511156125795761257661256f8683612ed8565b8790612e2a565b95505b93506124ac9050565b601085905590975095509193505050505b9193909250565b6000826000036125ac57506000610ff3565b60006125b88385614f7e565b9050826125c58583614ddb565b1461112a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161110b565b600061112a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061328e565b6001600160a01b0383166126b45760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f2061646472657373604482015260640161110b565b6001600160a01b03821661270a5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f20616464726573730000604482015260640161110b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166127cb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b606482015260840161110b565b6001600160a01b0382166128215760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f206164647265737300604482015260640161110b565b600081116128835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161110b565b6000546001600160a01b038481169116148015906128af57506000546001600160a01b03838116911614155b15612917576025548111156129175760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161110b565b6000546001600160a01b0384811691161480159061294357506000546001600160a01b03838116911614155b801561295757506001600160a01b03821615155b801561297157506003546001600160a01b03838116911614155b801561298b57506022546001600160a01b03838116911614155b156129fb57600061299b83611818565b6026549091506129ab8383614fba565b11156129f95760405162461bcd60e51b815260206004820152601d60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e74000000604482015260640161110b565b505b6000612a0630611818565b90506025548110612a1657506025545b6027546024549082101590600160b01b900460ff16158015612a4557506022546001600160a01b038581169116145b8015612a5a5750602454600160b81b900460ff165b15612b4a578015612a73576027549150612a73826132bc565b602054600160681b900460ff1615612ace576020544790612a989060ff16600a614f72565b612aa3906001614f7e565b811115612acc57602854811115612ab957506028545b612acc612ac782606461261c565b613791565b505b6020546301000000900460ff1615612b4a5760155460008080612af08461247d565b604080518481526020810184905290810182905260608101889052929550909350915032906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a3505050505b6001600160a01b03851660009081526016602052604090205460019060ff1680612b8c57506001600160a01b03851660009081526016602052604090205460ff165b15612b95575060005b6000612ba087611818565b90506000612bad87611818565b9050612bbb888888866137c3565b612bce88612bc88a611818565b84613a3a565b612be187612bdb89611818565b83613a3a565b5050505050505050565b60008184841115612c0f5760405162461bcd60e51b815260040161110b9190614bf5565b506000612c1c8486614e48565b95945050505050565b60008181811215610ff357600080fd5b600080612c428385614fef565b905060008312158015612c555750838112155b80612c6a5750600083128015612c6a57508381125b61112a57600080fd5b600080821215612c8257600080fd5b5090565b6000806000612c93613ab5565b9092509050612ca2828261261c565b9250505090565b80821115612ccf576000612cbd8383612ed8565b9050612cc98482613c37565b50505050565b80821015612331576000612ce38284612ed8565b9050612cc98482613c9c565b6001600160a01b038116600090815260038301602052604090205460ff16612d15575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff1916905560018086018352818420849055600286019092528220548454909291612d5f91614e48565b90506000846000018281548110612d7857612d78614e32565b60009182526020808320909101546001600160a01b03908116808452600289019092526040808420879055908716835282209190915585549091508190869085908110612dc757612dc7614e32565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558454859080612e0157612e01614e5f565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600080612e378385614fba565b90508381101561112a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161110b565b6000806000806000806000806000612ea08a613ce1565b9250925092506000806000612ebe8d8686612eb9612c86565b613d1d565b919f909e50909c50959a5093985091965092945050505050565b600061112a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612beb565b6001600160a01b0382166000908152600f602052604081205460ff16612f4257506000610ff3565b6000612f4d84612fc3565b90508015612fb9576001600160a01b038416600081815260126020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290612fa79085815260200190565b60405180910390a36001915050610ff3565b5060009392505050565b600080612fcf83611b56565b905080156131a357601a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130449190615030565b905081811015613058575060009392505050565b6001600160a01b0384166000908152600a602052604090205461307b9083612e2a565b6001600160a01b0385166000818152600a6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906130ca9085815260200190565b60405180910390a2601a5460405163a9059cbb60e01b81526001600160a01b03868116600483015260248201859052600092169063a9059cbb906044016020604051808303816000875af1158015613126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314a9190614fd2565b90508061319a576001600160a01b0385166000908152600a60205260409020546131749084612ed8565b6001600160a01b039095166000908152600a602052604081209590955550929392505050565b50909392505050565b50600092915050565b6001600160a01b038116600090815260038301602052604081205460ff166131d75750600019610ff3565b506001600160a01b03166000908152600291909101602052604090205490565b6000806132048385615049565b9050600083121580156132175750838113155b80612c6a5750600083128015612c6a575083811361112a57600080fd5b600082600001828154811061324b5761324b614e32565b6000918252602090912001546001600160a01b03169392505050565b60004282111561327957506000919050565b6013546132864284612ed8565b101592915050565b600081836132af5760405162461bcd60e51b815260040161110b9190614bf5565b506000612c1c8486614ddb565b6024805460ff60b01b1916600160b01b1790556020546000906301000000810460ff90811691600160581b8104821691600160681b8204811691600160281b810482169161331c91600160481b8104821691600160381b90910416615088565b6133269190615088565b6133309190615088565b61333a9190615088565b6133449190615088565b6020549091506000908190600160381b900460ff16156133a3576020546133859060ff600160381b90910481169061337f908790871661261c565b9061259a565b6003549092506133a09030906001600160a01b031684613d6d565b50805b602054600160481b900460ff161561347b576020546133d69060ff600160481b90910481169061337f908790871661261c565b602454909250600160a01b900460ff1661343c57602354600090613402906001600160a01b0316611818565b60235490915061341d9030906001600160a01b031685613d6d565b602354613436906001600160a01b0316612bdb81611818565b5061346e565b4761344683613efd565b60006134524783612ed8565b60235490915061346b906001600160a01b031682614057565b50505b6134788282614fba565b90505b602054600160681b900460ff16156134c6576020546134ae9060ff600160681b90910481169061337f908790871661261c565b91506134b982613efd565b6134c38282614fba565b90505b602054600160581b900460ff161561359e576020546134f99060ff600160581b90910481169061337f908790871661261c565b602454909250600160a81b900460ff1661355f57602454600090613525906001600160a01b0316611818565b6024549091506135409030906001600160a01b031685613d6d565b602454613559906001600160a01b0316612bdb81611818565b50613591565b4761356983613efd565b60006135754783612ed8565b60245490915061358e906001600160a01b031682614057565b50505b61359b8282614fba565b90505b6020546301000000900460ff16156136db576020546135d19060ff630100000090910481169061337f908790871661261c565b601a546040516370a0823160e01b81523060048201529193506000916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561361f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136439190615030565b905061364e836140f0565b601a546040516370a0823160e01b81523060048201526000916136c19184916001600160a01b0316906370a0823190602401602060405180830381865afa15801561369d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7c9190615030565b90506136cc81614250565b6136d68484614fba565b925050505b602054600160281b900460ff161561377e576136f78482612ed8565b9350600061370685600261261c565b905060006137148683612ed8565b90504761372083613efd565b600061372c4783612ed8565b905061373883826142d6565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1505050505b50506024805460ff60b01b191690555050565b6024805460ff60b01b1916600160b01b17905580156137b3576137b38161438a565b506024805460ff60b01b19169055565b806137d0576137d06144ee565b6001600160a01b03841660009081526017602052604090205460ff16801561381157506001600160a01b03831660009081526017602052604090205460ff16155b1561382657613821848484614771565b613924565b6001600160a01b03841660009081526017602052604090205460ff1615801561386757506001600160a01b03831660009081526017602052604090205460ff165b1561387757613821848484614897565b6001600160a01b03841660009081526017602052604090205460ff161580156138b957506001600160a01b03831660009081526017602052604090205460ff16155b156138c957613821848484614940565b6001600160a01b03841660009081526017602052604090205460ff16801561390957506001600160a01b03831660009081526017602052604090205460ff165b1561391957613821848484614984565b613924848484614940565b80612cc9576020805463ff0000001962ff00ff60581b1969ff00ff000000000000001965ff000000ff0019841665ff00000000001961010062010000870460ff9081169190910291821692909217660100000000000061ff0019909716909117959095048116600160281b029490941790811669ff000000000000000000196801000000000000000083048616600160381b0290811691909117600160501b67ff0000000000000019909316909117919091048416600160481b021790811660ff60581b19600160701b83048516600160681b0290811691909117600160601b60ff60681b19909316909117919091048316600160581b0217908116640100000000909104909116630100000002179055612cc9565b6001600160a01b03831660009081526011602052604090205460ff1615613a6057505050565b601454811015613a6e575060005b6014548210613a9357613a82838383612ca9565b613a8e600c84846149f7565b613aaa565b613a9f83600083612ca9565b613aaa600c84612cef565b612cc9836001612f1a565b601c54601b546000918291825b601854811015613c0757826004600060188481548110613ae457613ae4614e32565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613b4f5750816005600060188481548110613b2857613b28614e32565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613b6557601c54601b54945094505050509091565b613bab6004600060188481548110613b7f57613b7f614e32565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612ed8565b9250613bf36005600060188481548110613bc757613bc7614e32565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612ed8565b915080613bff81614e75565b915050613ac2565b50601b54601c54613c179161261c565b821015613c2e57601c54601b549350935050509091565b90939092509050565b80600754613c459190614fba565b600755600854613c7c90613c5d906110a1908461259a565b6001600160a01b038416600090815260096020526040902054906131f7565b6001600160a01b0390921660009081526009602052604090209190915550565b80600754613caa9190614e48565b600755600854613c7c90613cc2906110a1908461259a565b6001600160a01b03841660009081526009602052604090205490612c35565b600080600080613cf085614aa0565b90506000613cfd86614ac0565b90506000613d0f82611b7c8986612ed8565b979296509094509092505050565b6000808080613d2c888661259a565b90506000613d3a888761259a565b90506000613d48888861259a565b90506000613d5a82611b7c8686612ed8565b939b939a50919850919650505050505050565b6000613d77612c86565b90506000613d85838361259a565b6001600160a01b038616600090815260046020526040902054909150613dab9082612ed8565b6001600160a01b038087166000908152600460205260408082209390935590861681522054613dda9082612e2a565b6001600160a01b0380861660009081526004602090815260408083209490945591881681526017909152205460ff1615613e4b576001600160a01b038516600090815260056020526040902054613e319084612ed8565b6001600160a01b0386166000908152600560205260409020555b6001600160a01b03841660009081526017602052604090205460ff1615613ea9576001600160a01b038416600090815260056020526040902054613e8f9084612e2a565b6001600160a01b0385166000908152600560205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613eee91815260200190565b60405180910390a35050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613f3257613f32614e32565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613faf9190614f9d565b81600181518110613fc257613fc2614e32565b6001600160a01b039283166020918202929092010152602154613fe8913091168461265e565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac947906140219085906000908690309042906004016150f1565b600060405180830381600087803b15801561403b57600080fd5b505af115801561404f573d6000803e3d6000fd5b505050505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146140a4576040519150601f19603f3d011682016040523d82523d6000602084013e6140a9565b606091505b50509050806123315760405162461bcd60e51b8152602060048201526013602482015272115512081514905394d1915488119052531151606a1b604482015260640161110b565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061412757614127614e32565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a49190614f9d565b816001815181106141b7576141b7614e32565b6001600160a01b039283166020918202929092010152601a548251911690829060029081106141e8576141e8614e32565b6001600160a01b03928316602091820292909201015260215461420e913091168461265e565b6021546001600160a01b0316635c11d79583600084306142304261012c612e2a565b6040518663ffffffff1660e01b81526004016140219594939291906150f1565b60006007541161425f57600080fd5b80156115bb5760075461428d9061427a83600160801b61259a565b6142849190614ddb565b60085490612e2a565b6008556040518181527f051019b59d3b24249903e46fd05b6def7f293fc3de54eca64b3d32743f27fc8e9060200160405180910390a1600b546142d09082612e2a565b600b5550565b6021546142ee9030906001600160a01b03168461265e565b60215460035460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561435e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614383919061512d565b5050505050565b6040805160028082526060820183526000926020830190803683375050602154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156143f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144189190614f9d565b8160008151811061442b5761442b614e32565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061445f5761445f614e32565b6001600160a01b0392831660209182029290920101526021546003549082169163b6f9de959185916000918691166144994261012c612e2a565b6040518663ffffffff1660e01b81526004016144b8949392919061515b565b6000604051808303818588803b1580156144d157600080fd5b505af11580156144e5573d6000803e3d6000fd5b50505050505050565b602054610100900460ff161580156145105750602054600160281b900460ff16155b80156145265750602054600160381b900460ff16155b801561453c5750602054600160481b900460ff16155b80156145525750602054600160681b900460ff16155b80156145685750602054600160581b900460ff16155b801561457e57506020546301000000900460ff16155b1561458557565b602060019054906101000a900460ff16602060026101000a81548160ff021916908360ff160217905550602060059054906101000a900460ff16602060066101000a81548160ff021916908360ff160217905550602060079054906101000a900460ff16602060086101000a81548160ff021916908360ff160217905550602060099054906101000a900460ff166020600a6101000a81548160ff021916908360ff1602179055506020600d9054906101000a900460ff166020600e6101000a81548160ff021916908360ff1602179055506020600b9054906101000a900460ff166020600c6101000a81548160ff021916908360ff160217905550602060039054906101000a900460ff16602060046101000a81548160ff021916908360ff1602179055506000602060016101000a81548160ff021916908360ff1602179055506000602060056101000a81548160ff021916908360ff1602179055506000602060076101000a81548160ff021916908360ff1602179055506000602060096101000a81548160ff021916908360ff16021790555060006020600d6101000a81548160ff021916908360ff16021790555060006020600b6101000a81548160ff021916908360ff1602179055506000602060036101000a81548160ff021916908360ff160217905550565b60008060008060008061478387612e89565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506147b59088612ed8565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546147e49087612ed8565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546148139086612e2a565b6001600160a01b03891660009081526004602052604090205561483581614b49565b61483f8483614bd1565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161488491815260200190565b60405180910390a3505050505050505050565b6000806000806000806148a987612e89565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506148db9087612ed8565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546149119084612e2a565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546148139086612e2a565b60008060008060008061495287612e89565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506147e49087612ed8565b60008060008060008061499687612e89565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506149c89088612ed8565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546148db9087612ed8565b6001600160a01b038216600090815260038401602052604090205460ff1615614a3c576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b602054600090610ff390606490611765908590610100900460ff1661259a565b602054600090610ff3906064906117659060ff63010000008204811691600160581b8104821691600160681b8204811691600160481b8104821691614b1791600160381b8104821691600160281b90910416615088565b614b219190615088565b614b2b9190615088565b614b359190615088565b614b3f9190615088565b859060ff1661259a565b6000614b53612c86565b90506000614b61838361259a565b30600090815260046020526040902054909150614b7e9082612e2a565b3060009081526004602090815260408083209390935560179052205460ff16156123315730600090815260056020526040902054614bbc9084612e2a565b30600090815260056020526040902055505050565b601c54614bde9083612ed8565b601c55601d54614bee9082612e2a565b601d555050565b600060208083528351808285015260005b81811015614c2257858101830151858201604001528201614c06565b81811115614c34576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146115bb57600080fd5b60008060408385031215614c7257600080fd5b8235614c7d81614c4a565b946020939093013593505050565b600060208284031215614c9d57600080fd5b813561112a81614c4a565b600080600060608486031215614cbd57600080fd5b8335614cc881614c4a565b92506020840135614cd881614c4a565b929592945050506040919091013590565b600060208284031215614cfb57600080fd5b5035919050565b80151581146115bb57600080fd5b60008060408385031215614d2357600080fd5b823591506020830135614d3581614d02565b809150509250929050565b600060208284031215614d5257600080fd5b813561112a81614d02565b60008060408385031215614d7057600080fd5b8235614d7b81614c4a565b91506020830135614d3581614c4a565b600181811c90821680614d9f57607f821691505b602082108103614dbf57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082614df857634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600082821015614e5a57614e5a614dc5565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201614e8757614e87614dc5565b5060010190565b600181815b80851115614ec9578160001904821115614eaf57614eaf614dc5565b80851615614ebc57918102915b93841c9390800290614e93565b509250929050565b600082614ee057506001610ff3565b81614eed57506000610ff3565b8160018114614f035760028114614f0d57614f29565b6001915050610ff3565b60ff841115614f1e57614f1e614dc5565b50506001821b610ff3565b5060208310610133831016604e8410600b8410161715614f4c575081810a610ff3565b614f568383614e8e565b8060001904821115614f6a57614f6a614dc5565b029392505050565b600061112a8383614ed1565b6000816000190483118215151615614f9857614f98614dc5565b500290565b600060208284031215614faf57600080fd5b815161112a81614c4a565b60008219821115614fcd57614fcd614dc5565b500190565b600060208284031215614fe457600080fd5b815161112a81614d02565b600080821280156001600160ff1b038490038513161561501157615011614dc5565b600160ff1b839003841281161561502a5761502a614dc5565b50500190565b60006020828403121561504257600080fd5b5051919050565b60008083128015600160ff1b85018412161561506757615067614dc5565b6001600160ff1b038401831381161561508257615082614dc5565b50500390565b600060ff821660ff84168060ff038211156150a5576150a5614dc5565b019392505050565b600081518084526020808501945080840160005b838110156150e65781516001600160a01b0316875295820195908201906001016150c1565b509495945050505050565b85815284602082015260a06040820152600061511060a08301866150ad565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561514257600080fd5b8351925060208401519150604084015190509250925092565b84815260806020820152600061517460808301866150ad565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220523ea8452afcf4e4c0cffa1cbb48e1e55238350bd061ae3bba8b1c390b8c2c6564736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000001431e0fae6d7217caa000000000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000006450dee7fd2fb8e39061434babcfc05599a6fb800000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000008424142592058454e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005424258454e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000002746a00becc83ba3f5377e77caf139dbd1960f0b

Deployed Bytecode

0x6080604052600436106104985760003560e01c806370a0823111610260578063bdc653ef11610144578063e7841ec0116100c1578063f25f4b5611610085578063f25f4b5614610e75578063f27fd25414610e95578063f2fde38b14610eb5578063f7c618c114610ed5578063f887ea4014610ef5578063ffb2c47914610f1557600080fd5b8063e7841ec014610de0578063e98030c714610df5578063ea2f0b3714610e15578063ec9257d414610e35578063efa0880614610e5557600080fd5b8063caebb84311610108578063caebb84314610d2f578063d12a768814610d4f578063d28d885214610d65578063dd46706414610d7a578063dd62ed3e14610d9a57600080fd5b8063bdc653ef14610ca2578063be10b61414610cb7578063c0b0fda214610ccd578063c49b9a8014610cee578063c7992f9a14610d0e57600080fd5b80639c1b8af5116101dd578063aafd847a116101a1578063aafd847a14610bb1578063ad56c13c14610be7578063af465a2714610c4c578063b09f126614610c62578063b1c16b1214610c77578063b6c5232414610c8d57600080fd5b80639c1b8af514610b26578063a457c2d714610b3c578063a69df4b514610b5c578063a8b9d24014610b71578063a9059cbb14610b9157600080fd5b8063871c128d11610224578063871c128d14610a7a57806388f8202014610a9a5780638da5cb5b14610ad357806391b89fba14610af157806395d89b4114610b1157600080fd5b806370a08231146109f9578063715018a614610a195780637d1db4a514610a2e57806382d2a4bb14610a4457806385a6b3ae14610a6457600080fd5b80633c81385c1161038757806352390c02116103045780636a474002116102c85780636a474002146109565780636bc87c3a1461096b5780636c0a24eb1461098c5780636f2789ec146109a2578063700bb191146109b857806370690b11146109d857600080fd5b806352390c02146108a75780635342acb4146108c757806354ce6578146109005780635ebf4db91461092157806364b0f6531461094157600080fd5b80634e71d92d1161034b5780634e71d92d146108005780634e7b827f1461081557806351330a191461084557806351fde4bb14610866578063521432901461088757600080fd5b80633c81385c1461075d578063430ca0901461077e578063437823ec1461079f5780634549b039146107bf5780634a74bb02146107df57600080fd5b80632d6abf8711610415578063324f8dbf116103d9578063324f8dbf146106bd5780633685d419146106de57806339509351146106fe5780633b124fe71461071e5780633bd5d1731461073d57600080fd5b80632d6abf87146106155780632d8381191461064d5780633009a6091461066d578063313ce5671461068357806331e79db01461069b57600080fd5b806318160ddd1161045c57806318160ddd1461057257806319de79ab14610587578063226cfa3d146105a857806323b872dd146105d557806327ce0147146105f557600080fd5b806306fdde03146104a4578063095ea7b3146104cf5780630f94892c146104ff57806313114a9d1461053257806315fa749a1461055157600080fd5b3661049f57005b600080fd5b3480156104b057600080fd5b506104b9610f50565b6040516104c69190614bf5565b60405180910390f35b3480156104db57600080fd5b506104ef6104ea366004614c5f565b610fe2565b60405190151581526020016104c6565b34801561050b57600080fd5b5060205461052090600160581b900460ff1681565b60405160ff90911681526020016104c6565b34801561053e57600080fd5b50601d545b6040519081526020016104c6565b34801561055d57600080fd5b5060035461052090600160c01b900460ff1681565b34801561057e57600080fd5b50601b54610543565b34801561059357600080fd5b5060205461052090600160681b900460ff1681565b3480156105b457600080fd5b506105436105c3366004614c8b565b60126020526000908152604090205481565b3480156105e157600080fd5b506104ef6105f0366004614ca8565b610ff9565b34801561060157600080fd5b50610543610610366004614c8b565b611062565b34801561062157600080fd5b50602154610635906001600160a01b031681565b6040516001600160a01b0390911681526020016104c6565b34801561065957600080fd5b50610543610668366004614ce9565b6110bb565b34801561067957600080fd5b5061054360105481565b34801561068f57600080fd5b5060205460ff16610520565b3480156106a757600080fd5b506106bb6106b6366004614c8b565b611131565b005b3480156106c957600080fd5b5060035461052090600160c81b900460ff1681565b3480156106ea57600080fd5b506106bb6106f9366004614c8b565b61120c565b34801561070a57600080fd5b506104ef610719366004614c5f565b6113b5565b34801561072a57600080fd5b5060205461052090610100900460ff1681565b34801561074957600080fd5b506106bb610758366004614ce9565b6113eb565b34801561076957600080fd5b5060035461052090600160b01b900460ff1681565b34801561078a57600080fd5b5060035461052090600160a01b900460ff1681565b3480156107ab57600080fd5b506106bb6107ba366004614c8b565b6114d5565b3480156107cb57600080fd5b506105436107da366004614d10565b611523565b3480156107eb57600080fd5b506024546104ef90600160b81b900460ff1681565b34801561080c57600080fd5b506106bb6115b0565b34801561082157600080fd5b506104ef610830366004614c8b565b60116020526000908152604090205460ff1681565b34801561085157600080fd5b5060035461052090600160b81b900460ff1681565b34801561087257600080fd5b50602054610520906301000000900460ff1681565b34801561089357600080fd5b50602254610635906001600160a01b031681565b3480156108b357600080fd5b506106bb6108c2366004614c8b565b6115be565b3480156108d357600080fd5b506104ef6108e2366004614c8b565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561090c57600080fd5b5060205461052090600160481b900460ff1681565b34801561092d57600080fd5b506106bb61093c366004614ce9565b611721565b34801561094d57600080fd5b50600c54610543565b34801561096257600080fd5b506106bb6117a6565b34801561097757600080fd5b5060205461052090600160281b900460ff1681565b34801561099857600080fd5b5061054360265481565b3480156109ae57600080fd5b5061054360135481565b3480156109c457600080fd5b506106bb6109d3366004614ce9565b6117af565b3480156109e457600080fd5b5060035461052090600160d01b900460ff1681565b348015610a0557600080fd5b50610543610a14366004614c8b565b611818565b348015610a2557600080fd5b506106bb611877565b348015610a3a57600080fd5b5061054360255481565b348015610a5057600080fd5b506106bb610a5f366004614ce9565b6118d9565b348015610a7057600080fd5b50610543600b5481565b348015610a8657600080fd5b506106bb610a95366004614ce9565b611924565b348015610aa657600080fd5b506104ef610ab5366004614c8b565b6001600160a01b031660009081526017602052604090205460ff1690565b348015610adf57600080fd5b506000546001600160a01b0316610635565b348015610afd57600080fd5b50610543610b0c366004614c8b565b6119d4565b348015610b1d57600080fd5b506104b96119df565b348015610b3257600080fd5b5061054360155481565b348015610b4857600080fd5b506104ef610b57366004614c5f565b6119ee565b348015610b6857600080fd5b506106bb611a3d565b348015610b7d57600080fd5b50610543610b8c366004614c8b565b611b56565b348015610b9d57600080fd5b506104ef610bac366004614c5f565b611b82565b348015610bbd57600080fd5b50610543610bcc366004614c8b565b6001600160a01b03166000908152600a602052604090205490565b348015610bf357600080fd5b50610c07610c02366004614c8b565b611b8f565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016104c6565b348015610c5857600080fd5b50610543601b5481565b348015610c6e57600080fd5b506104b9611c78565b348015610c8357600080fd5b5061054360075481565b348015610c9957600080fd5b50600254610543565b348015610cae57600080fd5b50602854610543565b348015610cc357600080fd5b5061054360145481565b348015610cd957600080fd5b5060205461052090600160381b900460ff1681565b348015610cfa57600080fd5b506106bb610d09366004614d40565b611d06565b348015610d1a57600080fd5b5060035461052090600160a81b900460ff1681565b348015610d3b57600080fd5b506106bb610d4a366004614c8b565b611d88565b348015610d5b57600080fd5b5061054360275481565b348015610d7157600080fd5b506104b9611f97565b348015610d8657600080fd5b506106bb610d95366004614ce9565b611fa4565b348015610da657600080fd5b50610543610db5366004614d5d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610dec57600080fd5b50601054610543565b348015610e0157600080fd5b506106bb610e10366004614ce9565b612029565b348015610e2157600080fd5b506106bb610e30366004614c8b565b612192565b348015610e4157600080fd5b50602454610635906001600160a01b031681565b348015610e6157600080fd5b506106bb610e70366004614c5f565b6121dd565b348015610e8157600080fd5b50602354610635906001600160a01b031681565b348015610ea157600080fd5b50610c07610eb0366004614ce9565b612336565b348015610ec157600080fd5b506106bb610ed0366004614c8b565b6123a5565b348015610ee157600080fd5b50601a54610635906001600160a01b031681565b348015610f0157600080fd5b50601954610635906001600160a01b031681565b348015610f2157600080fd5b50610f35610f30366004614ce9565b61247d565b604080519384526020840192909252908201526060016104c6565b6060601e8054610f5f90614d8b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8b90614d8b565b8015610fd85780601f10610fad57610100808354040283529160200191610fd8565b820191906000526020600020905b815481529060010190602001808311610fbb57829003601f168201915b5050505050905090565b6000610fef33848461265e565b5060015b92915050565b600061100684848461276b565b611058843361105385604051806060016040528060288152602001615191602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190612beb565b61265e565b5060019392505050565b6001600160a01b038116600090815260096020526040812054600160801b906110b1906110ac906110a66110a161109888611818565b6008549061259a565b612c25565b90612c35565b612c73565b610ff39190614ddb565b6000601c548211156111145760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c000060448201526064015b60405180910390fd5b600061111e612c86565b905061112a838261261c565b9392505050565b6000546001600160a01b0316331461115b5760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b03811660009081526011602052604090205460ff161561118157600080fd5b6001600160a01b0381166000908152601160205260408120805460ff191660011790556111ad82611818565b90506014548110156111bd575060005b6111c982600083612ca9565b6111d4600c83612cef565b6040516001600160a01b038316907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a25050565b6000546001600160a01b031633146112365760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b03811660009081526017602052604090205460ff166112915760405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e18db1d59195960821b604482015260640161110b565b60005b6018548110156113b157816001600160a01b0316601882815481106112bb576112bb614e32565b6000918252602090912001546001600160a01b03160361139f57601880546112e590600190614e48565b815481106112f5576112f5614e32565b600091825260209091200154601880546001600160a01b03909216918390811061132157611321614e32565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055601790925220805460ff19169055601880548061137957611379614e5f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806113a981614e75565b915050611294565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610fef9185906110539086612e2a565b3360008181526017602052604090205460ff16156114605760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b606482015260840161110b565b600061146b83612e89565b505050506001600160a01b03841660009081526004602052604090205491925061149791905082612ed8565b6001600160a01b038316600090815260046020526040902055601c546114bd9082612ed8565b601c55601d546114cd9084612e2a565b601d55505050565b6000546001600160a01b031633146114ff5760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b03166000908152601660205260409020805460ff19166001179055565b6000601b548311156115775760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c7900000000604482015260640161110b565b8161159657600061158784612e89565b50939550610ff3945050505050565b60006115a184612e89565b50929550610ff3945050505050565b6115bb336000612f1a565b50565b6000546001600160a01b031633146115e85760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b03811660009081526017602052604090205460ff16156116615760405162461bcd60e51b815260206004820152602760248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015266081c995dd85c9960ca1b606482015260840161110b565b6001600160a01b038116600090815260046020526040902054156116bb576001600160a01b0381166000908152600460205260409020546116a1906110bb565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152601760205260408120805460ff191660019081179091556018805491820181559091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319169091179055565b6000546001600160a01b0316331461174b5760405162461bcd60e51b815260040161110b90614dfd565b6001811015801561176f575061176b6064611765601b5490565b9061261c565b8111155b6117a15760405162461bcd60e51b815260206004820152600360248201526232b93960e91b604482015260640161110b565b601455565b6115bb33612fc3565b60008060006117bd8461247d565b604080518481526020810184905290810182905260608101889052929550909350915032906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b6001600160a01b03811660009081526017602052604081205460ff161561185557506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610ff3906110bb565b6000546001600160a01b031633146118a15760405162461bcd60e51b815260040161110b90614dfd565b600080546040516001600160a01b03909116906000805160206151b9833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146119035760405162461bcd60e51b815260040161110b90614dfd565b6020546119149060ff16600a614f72565b61191e9082614f7e565b60285550565b6000546001600160a01b0316331461194e5760405162461bcd60e51b815260040161110b90614dfd565b62030d4081101580156119645750624c4b408111155b6119cf5760405162461bcd60e51b815260206004820152603660248201527f676173466f7250726f63657373696e67206d757374206265206265747765656e6044820152750203230302c30303020616e6420352c3030302c3030360541b606482015260840161110b565b601555565b6000610ff382611b56565b6060601f8054610f5f90614d8b565b6000610fef3384611053856040518060600160405280602581526020016151d9602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190612beb565b6001546001600160a01b03163314611ab65760405162461bcd60e51b815260206004820152603660248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152751bd8dac81d1a19481d1bdad95b8818dbdb9d1c9858dd60521b606482015260840161110b565b6002544211611b075760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015260640161110b565b600154600080546040516001600160a01b0393841693909116916000805160206151b983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0381166000908152600a6020526040812054610ff390611b7c84611062565b90612ed8565b6000610fef33848461276b565b806000808080808080611ba3600c896131ac565b9650600019955060008712611c0557601054871115611bd157601054611bca9088906131f7565b9550611c05565b601054600c5460009110611be6576000611bf5565b601054600c54611bf591612ed8565b9050611c018882612c35565b9650505b611c0e88611b56565b9450611c1988611062565b6001600160a01b038916600090815260126020526040902054909450925082611c43576000611c51565b601354611c51908490612e2a565b9150428211611c61576000611c6b565b611c6b8242612ed8565b9050919395975091939597565b601f8054611c8590614d8b565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb190614d8b565b8015611cfe5780601f10611cd357610100808354040283529160200191611cfe565b820191906000526020600020905b815481529060010190602001808311611ce157829003601f168201915b505050505081565b6000546001600160a01b03163314611d305760405162461bcd60e51b815260040161110b90614dfd565b60248054821515600160b81b0260ff60b81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611d7d90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611db25760405162461bcd60e51b815260040161110b90614dfd565b6021546001600160a01b0390811690821603611e1c5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b606482015260840161110b565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e839190614f9d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef49190614f9d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190614f9d565b602280546001600160a01b039283166001600160a01b0319918216179091556021805493909216921691909117905550565b601e8054611c8590614d8b565b6000546001600160a01b03163314611fce5760405162461bcd60e51b815260040161110b90614dfd565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611ffd8142614fba565b600255600080546040516001600160a01b03909116906000805160206151b9833981519152908390a350565b6000546001600160a01b031633146120535760405162461bcd60e51b815260040161110b90614dfd565b610e1081101580156120685750620151808111155b6120e85760405162461bcd60e51b815260206004820152604560248201527f4469766964656e645f547261636b65723a20636c61696d57616974206d75737460448201527f206265207570646174656420746f206265747765656e203120616e6420323420606482015264686f75727360d81b608482015260a40161110b565b601354810361215f5760405162461bcd60e51b815260206004820152603760248201527f4469766964656e645f547261636b65723a2043616e6e6f74207570646174652060448201527f636c61696d5761697420746f2073616d652076616c7565000000000000000000606482015260840161110b565b60135460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601355565b6000546001600160a01b031633146121bc5760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b03166000908152601660205260409020805460ff19169055565b6000546001600160a01b031633146122075760405162461bcd60e51b815260040161110b90614dfd565b306001600160a01b0383160361224f5760405162461bcd60e51b815260206004820152600d60248201526c53656c6620776974686472617760981b604482015260640161110b565b601a546001600160a01b039081169083160361229f5760405162461bcd60e51b815260206004820152600f60248201526e72657761726420776974686472617760881b604482015260640161110b565b816001600160a01b031663a9059cbb6122c06000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561230d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123319190614fd2565b505050565b60008060008060008060008061234b600c5490565b891061237057506000965060001995508594508693508392508291508190508061239a565b600061237d600c8b613234565b905061238881611b8f565b98509850985098509850985098509850505b919395975091939597565b6000546001600160a01b031633146123cf5760405162461bcd60e51b815260040161110b90614dfd565b6001600160a01b0381166124345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161110b565b600080546040516001600160a01b03808516939216916000805160206151b983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600c546000908190819080820361249f57505060105460009250829150612593565b6010546000805a90506000805b89841080156124ba57508582105b1561258257846124c981614e75565b600c54909650861090506124dc57600094505b6000600c60000186815481106124f4576124f4614e32565b60009182526020808320909101546001600160a01b0316808352601290915260409091205490915061252590613267565b1561254857612535816001612f1a565b15612548578161254481614e75565b9250505b8261255281614e75565b93505060005a9050808511156125795761257661256f8683612ed8565b8790612e2a565b95505b93506124ac9050565b601085905590975095509193505050505b9193909250565b6000826000036125ac57506000610ff3565b60006125b88385614f7e565b9050826125c58583614ddb565b1461112a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161110b565b600061112a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061328e565b6001600160a01b0383166126b45760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f2061646472657373604482015260640161110b565b6001600160a01b03821661270a5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f20616464726573730000604482015260640161110b565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166127cb5760405162461bcd60e51b815260206004820152602160248201527f45524332303a207472616e736665722066726f6d207a65726f206164647265736044820152607360f81b606482015260840161110b565b6001600160a01b0382166128215760405162461bcd60e51b815260206004820152601f60248201527f45524332303a207472616e7366657220746f207a65726f206164647265737300604482015260640161110b565b600081116128835760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161110b565b6000546001600160a01b038481169116148015906128af57506000546001600160a01b03838116911614155b15612917576025548111156129175760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161110b565b6000546001600160a01b0384811691161480159061294357506000546001600160a01b03838116911614155b801561295757506001600160a01b03821615155b801561297157506003546001600160a01b03838116911614155b801561298b57506022546001600160a01b03838116911614155b156129fb57600061299b83611818565b6026549091506129ab8383614fba565b11156129f95760405162461bcd60e51b815260206004820152601d60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e74000000604482015260640161110b565b505b6000612a0630611818565b90506025548110612a1657506025545b6027546024549082101590600160b01b900460ff16158015612a4557506022546001600160a01b038581169116145b8015612a5a5750602454600160b81b900460ff165b15612b4a578015612a73576027549150612a73826132bc565b602054600160681b900460ff1615612ace576020544790612a989060ff16600a614f72565b612aa3906001614f7e565b811115612acc57602854811115612ab957506028545b612acc612ac782606461261c565b613791565b505b6020546301000000900460ff1615612b4a5760155460008080612af08461247d565b604080518481526020810184905290810182905260608101889052929550909350915032906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a3505050505b6001600160a01b03851660009081526016602052604090205460019060ff1680612b8c57506001600160a01b03851660009081526016602052604090205460ff165b15612b95575060005b6000612ba087611818565b90506000612bad87611818565b9050612bbb888888866137c3565b612bce88612bc88a611818565b84613a3a565b612be187612bdb89611818565b83613a3a565b5050505050505050565b60008184841115612c0f5760405162461bcd60e51b815260040161110b9190614bf5565b506000612c1c8486614e48565b95945050505050565b60008181811215610ff357600080fd5b600080612c428385614fef565b905060008312158015612c555750838112155b80612c6a5750600083128015612c6a57508381125b61112a57600080fd5b600080821215612c8257600080fd5b5090565b6000806000612c93613ab5565b9092509050612ca2828261261c565b9250505090565b80821115612ccf576000612cbd8383612ed8565b9050612cc98482613c37565b50505050565b80821015612331576000612ce38284612ed8565b9050612cc98482613c9c565b6001600160a01b038116600090815260038301602052604090205460ff16612d15575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff1916905560018086018352818420849055600286019092528220548454909291612d5f91614e48565b90506000846000018281548110612d7857612d78614e32565b60009182526020808320909101546001600160a01b03908116808452600289019092526040808420879055908716835282209190915585549091508190869085908110612dc757612dc7614e32565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558454859080612e0157612e01614e5f565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600080612e378385614fba565b90508381101561112a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161110b565b6000806000806000806000806000612ea08a613ce1565b9250925092506000806000612ebe8d8686612eb9612c86565b613d1d565b919f909e50909c50959a5093985091965092945050505050565b600061112a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612beb565b6001600160a01b0382166000908152600f602052604081205460ff16612f4257506000610ff3565b6000612f4d84612fc3565b90508015612fb9576001600160a01b038416600081815260126020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290612fa79085815260200190565b60405180910390a36001915050610ff3565b5060009392505050565b600080612fcf83611b56565b905080156131a357601a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130449190615030565b905081811015613058575060009392505050565b6001600160a01b0384166000908152600a602052604090205461307b9083612e2a565b6001600160a01b0385166000818152600a6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906130ca9085815260200190565b60405180910390a2601a5460405163a9059cbb60e01b81526001600160a01b03868116600483015260248201859052600092169063a9059cbb906044016020604051808303816000875af1158015613126573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314a9190614fd2565b90508061319a576001600160a01b0385166000908152600a60205260409020546131749084612ed8565b6001600160a01b039095166000908152600a602052604081209590955550929392505050565b50909392505050565b50600092915050565b6001600160a01b038116600090815260038301602052604081205460ff166131d75750600019610ff3565b506001600160a01b03166000908152600291909101602052604090205490565b6000806132048385615049565b9050600083121580156132175750838113155b80612c6a5750600083128015612c6a575083811361112a57600080fd5b600082600001828154811061324b5761324b614e32565b6000918252602090912001546001600160a01b03169392505050565b60004282111561327957506000919050565b6013546132864284612ed8565b101592915050565b600081836132af5760405162461bcd60e51b815260040161110b9190614bf5565b506000612c1c8486614ddb565b6024805460ff60b01b1916600160b01b1790556020546000906301000000810460ff90811691600160581b8104821691600160681b8204811691600160281b810482169161331c91600160481b8104821691600160381b90910416615088565b6133269190615088565b6133309190615088565b61333a9190615088565b6133449190615088565b6020549091506000908190600160381b900460ff16156133a3576020546133859060ff600160381b90910481169061337f908790871661261c565b9061259a565b6003549092506133a09030906001600160a01b031684613d6d565b50805b602054600160481b900460ff161561347b576020546133d69060ff600160481b90910481169061337f908790871661261c565b602454909250600160a01b900460ff1661343c57602354600090613402906001600160a01b0316611818565b60235490915061341d9030906001600160a01b031685613d6d565b602354613436906001600160a01b0316612bdb81611818565b5061346e565b4761344683613efd565b60006134524783612ed8565b60235490915061346b906001600160a01b031682614057565b50505b6134788282614fba565b90505b602054600160681b900460ff16156134c6576020546134ae9060ff600160681b90910481169061337f908790871661261c565b91506134b982613efd565b6134c38282614fba565b90505b602054600160581b900460ff161561359e576020546134f99060ff600160581b90910481169061337f908790871661261c565b602454909250600160a81b900460ff1661355f57602454600090613525906001600160a01b0316611818565b6024549091506135409030906001600160a01b031685613d6d565b602454613559906001600160a01b0316612bdb81611818565b50613591565b4761356983613efd565b60006135754783612ed8565b60245490915061358e906001600160a01b031682614057565b50505b61359b8282614fba565b90505b6020546301000000900460ff16156136db576020546135d19060ff630100000090910481169061337f908790871661261c565b601a546040516370a0823160e01b81523060048201529193506000916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561361f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136439190615030565b905061364e836140f0565b601a546040516370a0823160e01b81523060048201526000916136c19184916001600160a01b0316906370a0823190602401602060405180830381865afa15801561369d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7c9190615030565b90506136cc81614250565b6136d68484614fba565b925050505b602054600160281b900460ff161561377e576136f78482612ed8565b9350600061370685600261261c565b905060006137148683612ed8565b90504761372083613efd565b600061372c4783612ed8565b905061373883826142d6565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1505050505b50506024805460ff60b01b191690555050565b6024805460ff60b01b1916600160b01b17905580156137b3576137b38161438a565b506024805460ff60b01b19169055565b806137d0576137d06144ee565b6001600160a01b03841660009081526017602052604090205460ff16801561381157506001600160a01b03831660009081526017602052604090205460ff16155b1561382657613821848484614771565b613924565b6001600160a01b03841660009081526017602052604090205460ff1615801561386757506001600160a01b03831660009081526017602052604090205460ff165b1561387757613821848484614897565b6001600160a01b03841660009081526017602052604090205460ff161580156138b957506001600160a01b03831660009081526017602052604090205460ff16155b156138c957613821848484614940565b6001600160a01b03841660009081526017602052604090205460ff16801561390957506001600160a01b03831660009081526017602052604090205460ff165b1561391957613821848484614984565b613924848484614940565b80612cc9576020805463ff0000001962ff00ff60581b1969ff00ff000000000000001965ff000000ff0019841665ff00000000001961010062010000870460ff9081169190910291821692909217660100000000000061ff0019909716909117959095048116600160281b029490941790811669ff000000000000000000196801000000000000000083048616600160381b0290811691909117600160501b67ff0000000000000019909316909117919091048416600160481b021790811660ff60581b19600160701b83048516600160681b0290811691909117600160601b60ff60681b19909316909117919091048316600160581b0217908116640100000000909104909116630100000002179055612cc9565b6001600160a01b03831660009081526011602052604090205460ff1615613a6057505050565b601454811015613a6e575060005b6014548210613a9357613a82838383612ca9565b613a8e600c84846149f7565b613aaa565b613a9f83600083612ca9565b613aaa600c84612cef565b612cc9836001612f1a565b601c54601b546000918291825b601854811015613c0757826004600060188481548110613ae457613ae4614e32565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613b4f5750816005600060188481548110613b2857613b28614e32565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613b6557601c54601b54945094505050509091565b613bab6004600060188481548110613b7f57613b7f614e32565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612ed8565b9250613bf36005600060188481548110613bc757613bc7614e32565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612ed8565b915080613bff81614e75565b915050613ac2565b50601b54601c54613c179161261c565b821015613c2e57601c54601b549350935050509091565b90939092509050565b80600754613c459190614fba565b600755600854613c7c90613c5d906110a1908461259a565b6001600160a01b038416600090815260096020526040902054906131f7565b6001600160a01b0390921660009081526009602052604090209190915550565b80600754613caa9190614e48565b600755600854613c7c90613cc2906110a1908461259a565b6001600160a01b03841660009081526009602052604090205490612c35565b600080600080613cf085614aa0565b90506000613cfd86614ac0565b90506000613d0f82611b7c8986612ed8565b979296509094509092505050565b6000808080613d2c888661259a565b90506000613d3a888761259a565b90506000613d48888861259a565b90506000613d5a82611b7c8686612ed8565b939b939a50919850919650505050505050565b6000613d77612c86565b90506000613d85838361259a565b6001600160a01b038616600090815260046020526040902054909150613dab9082612ed8565b6001600160a01b038087166000908152600460205260408082209390935590861681522054613dda9082612e2a565b6001600160a01b0380861660009081526004602090815260408083209490945591881681526017909152205460ff1615613e4b576001600160a01b038516600090815260056020526040902054613e319084612ed8565b6001600160a01b0386166000908152600560205260409020555b6001600160a01b03841660009081526017602052604090205460ff1615613ea9576001600160a01b038416600090815260056020526040902054613e8f9084612e2a565b6001600160a01b0385166000908152600560205260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613eee91815260200190565b60405180910390a35050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613f3257613f32614e32565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613faf9190614f9d565b81600181518110613fc257613fc2614e32565b6001600160a01b039283166020918202929092010152602154613fe8913091168461265e565b60215460405163791ac94760e01b81526001600160a01b039091169063791ac947906140219085906000908690309042906004016150f1565b600060405180830381600087803b15801561403b57600080fd5b505af115801561404f573d6000803e3d6000fd5b505050505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146140a4576040519150601f19603f3d011682016040523d82523d6000602084013e6140a9565b606091505b50509050806123315760405162461bcd60e51b8152602060048201526013602482015272115512081514905394d1915488119052531151606a1b604482015260640161110b565b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061412757614127614e32565b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015614180573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a49190614f9d565b816001815181106141b7576141b7614e32565b6001600160a01b039283166020918202929092010152601a548251911690829060029081106141e8576141e8614e32565b6001600160a01b03928316602091820292909201015260215461420e913091168461265e565b6021546001600160a01b0316635c11d79583600084306142304261012c612e2a565b6040518663ffffffff1660e01b81526004016140219594939291906150f1565b60006007541161425f57600080fd5b80156115bb5760075461428d9061427a83600160801b61259a565b6142849190614ddb565b60085490612e2a565b6008556040518181527f051019b59d3b24249903e46fd05b6def7f293fc3de54eca64b3d32743f27fc8e9060200160405180910390a1600b546142d09082612e2a565b600b5550565b6021546142ee9030906001600160a01b03168461265e565b60215460035460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561435e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614383919061512d565b5050505050565b6040805160028082526060820183526000926020830190803683375050602154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156143f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144189190614f9d565b8160008151811061442b5761442b614e32565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061445f5761445f614e32565b6001600160a01b0392831660209182029290920101526021546003549082169163b6f9de959185916000918691166144994261012c612e2a565b6040518663ffffffff1660e01b81526004016144b8949392919061515b565b6000604051808303818588803b1580156144d157600080fd5b505af11580156144e5573d6000803e3d6000fd5b50505050505050565b602054610100900460ff161580156145105750602054600160281b900460ff16155b80156145265750602054600160381b900460ff16155b801561453c5750602054600160481b900460ff16155b80156145525750602054600160681b900460ff16155b80156145685750602054600160581b900460ff16155b801561457e57506020546301000000900460ff16155b1561458557565b602060019054906101000a900460ff16602060026101000a81548160ff021916908360ff160217905550602060059054906101000a900460ff16602060066101000a81548160ff021916908360ff160217905550602060079054906101000a900460ff16602060086101000a81548160ff021916908360ff160217905550602060099054906101000a900460ff166020600a6101000a81548160ff021916908360ff1602179055506020600d9054906101000a900460ff166020600e6101000a81548160ff021916908360ff1602179055506020600b9054906101000a900460ff166020600c6101000a81548160ff021916908360ff160217905550602060039054906101000a900460ff16602060046101000a81548160ff021916908360ff1602179055506000602060016101000a81548160ff021916908360ff1602179055506000602060056101000a81548160ff021916908360ff1602179055506000602060076101000a81548160ff021916908360ff1602179055506000602060096101000a81548160ff021916908360ff16021790555060006020600d6101000a81548160ff021916908360ff16021790555060006020600b6101000a81548160ff021916908360ff1602179055506000602060036101000a81548160ff021916908360ff160217905550565b60008060008060008061478387612e89565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506147b59088612ed8565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546147e49087612ed8565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546148139086612e2a565b6001600160a01b03891660009081526004602052604090205561483581614b49565b61483f8483614bd1565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161488491815260200190565b60405180910390a3505050505050505050565b6000806000806000806148a987612e89565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506148db9087612ed8565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546149119084612e2a565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546148139086612e2a565b60008060008060008061495287612e89565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506147e49087612ed8565b60008060008060008061499687612e89565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506149c89088612ed8565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546148db9087612ed8565b6001600160a01b038216600090815260038401602052604090205460ff1615614a3c576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b602054600090610ff390606490611765908590610100900460ff1661259a565b602054600090610ff3906064906117659060ff63010000008204811691600160581b8104821691600160681b8204811691600160481b8104821691614b1791600160381b8104821691600160281b90910416615088565b614b219190615088565b614b2b9190615088565b614b359190615088565b614b3f9190615088565b859060ff1661259a565b6000614b53612c86565b90506000614b61838361259a565b30600090815260046020526040902054909150614b7e9082612e2a565b3060009081526004602090815260408083209390935560179052205460ff16156123315730600090815260056020526040902054614bbc9084612e2a565b30600090815260056020526040902055505050565b601c54614bde9083612ed8565b601c55601d54614bee9082612e2a565b601d555050565b600060208083528351808285015260005b81811015614c2257858101830151858201604001528201614c06565b81811115614c34576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146115bb57600080fd5b60008060408385031215614c7257600080fd5b8235614c7d81614c4a565b946020939093013593505050565b600060208284031215614c9d57600080fd5b813561112a81614c4a565b600080600060608486031215614cbd57600080fd5b8335614cc881614c4a565b92506020840135614cd881614c4a565b929592945050506040919091013590565b600060208284031215614cfb57600080fd5b5035919050565b80151581146115bb57600080fd5b60008060408385031215614d2357600080fd5b823591506020830135614d3581614d02565b809150509250929050565b600060208284031215614d5257600080fd5b813561112a81614d02565b60008060408385031215614d7057600080fd5b8235614d7b81614c4a565b91506020830135614d3581614c4a565b600181811c90821680614d9f57607f821691505b602082108103614dbf57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082614df857634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600082821015614e5a57614e5a614dc5565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201614e8757614e87614dc5565b5060010190565b600181815b80851115614ec9578160001904821115614eaf57614eaf614dc5565b80851615614ebc57918102915b93841c9390800290614e93565b509250929050565b600082614ee057506001610ff3565b81614eed57506000610ff3565b8160018114614f035760028114614f0d57614f29565b6001915050610ff3565b60ff841115614f1e57614f1e614dc5565b50506001821b610ff3565b5060208310610133831016604e8410600b8410161715614f4c575081810a610ff3565b614f568383614e8e565b8060001904821115614f6a57614f6a614dc5565b029392505050565b600061112a8383614ed1565b6000816000190483118215151615614f9857614f98614dc5565b500290565b600060208284031215614faf57600080fd5b815161112a81614c4a565b60008219821115614fcd57614fcd614dc5565b500190565b600060208284031215614fe457600080fd5b815161112a81614d02565b600080821280156001600160ff1b038490038513161561501157615011614dc5565b600160ff1b839003841281161561502a5761502a614dc5565b50500190565b60006020828403121561504257600080fd5b5051919050565b60008083128015600160ff1b85018412161561506757615067614dc5565b6001600160ff1b038401831381161561508257615082614dc5565b50500390565b600060ff821660ff84168060ff038211156150a5576150a5614dc5565b019392505050565b600081518084526020808501945080840160005b838110156150e65781516001600160a01b0316875295820195908201906001016150c1565b509495945050505050565b85815284602082015260a06040820152600061511060a08301866150ad565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561514257600080fd5b8351925060208401519150604084015190509250925092565b84815260806020820152600061517460808301866150ad565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220523ea8452afcf4e4c0cffa1cbb48e1e55238350bd061ae3bba8b1c390b8c2c6564736f6c634300080f0033

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

000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000001431e0fae6d7217caa000000000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000006450dee7fd2fb8e39061434babcfc05599a6fb800000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000008424142592058454e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005424258454e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000002746a00becc83ba3f5377e77caf139dbd1960f0b

-----Decoded View---------------
Arg [0] : tokenName (string): BABY XEN
Arg [1] : tokenSymbol (string): BBXEN
Arg [2] : decimal (uint8): 18
Arg [3] : amountOfTokenWei (uint256): 100000000000000000000000000000
Arg [4] : setMxTxPer (uint16): 10000
Arg [5] : setMxWalletPer (uint16): 10000
Arg [6] : wallet (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [7] : _rewardToken (address): 0x06450dEe7FD2Fb8E39061434BAbCFC05599a6Fb8
Arg [8] : _minimumTokenBalanceForDividends (uint256): 1000000
Arg [9] : fee (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [10] : _addrs (address[]): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,0x2746a00BECC83bA3f5377E77caf139dBD1960F0b

-----Encoded View---------------
27 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [1] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000001431e0fae6d7217caa0000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [5] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [10] : 00000000000000000000000006450dee7fd2fb8e39061434babcfc05599a6fb8
Arg [11] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000300
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [21] : 424142592058454e000000000000000000000000000000000000000000000000
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [23] : 424258454e000000000000000000000000000000000000000000000000000000
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [25] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [26] : 0000000000000000000000002746a00becc83ba3f5377e77caf139dbd1960f0b


Deployed Bytecode Sourcemap

20254:43806:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27914:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29475:193;;;;;;;;;;-1:-1:-1;29475:193:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;29475:193:0;1072:187:1;23305:30:0;;;;;;;;;;-1:-1:-1;23305:30:0;;;;-1:-1:-1;;;23305:30:0;;;;;;;;;1436:4:1;1424:17;;;1406:36;;1394:2;1379:18;23305:30:0;1264:184:1;30974:87:0;;;;;;;;;;-1:-1:-1;31043:10:0;;30974:87;;;1599:25:1;;;1587:2;1572:18;30974:87:0;1453:177:1;20736:31:0;;;;;;;;;;-1:-1:-1;20736:31:0;;;;-1:-1:-1;;;20736:31:0;;;;;;28767:95;;;;;;;;;;-1:-1:-1;28847:7:0;;28767:95;;23410:24;;;;;;;;;;-1:-1:-1;23410:24:0;;;;-1:-1:-1;;;23410:24:0;;;;;;21538:49;;;;;;;;;;-1:-1:-1;21538:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;29676:446;;;;;;;;;;-1:-1:-1;29676:446:0;;;;;:::i;:::-;;:::i;55127:354::-;;;;;;;;;;-1:-1:-1;55127:354:0;;;;;:::i;:::-;;:::i;23497:37::-;;;;;;;;;;-1:-1:-1;23497:37:0;;;;-1:-1:-1;;;;;23497:37:0;;;;;;-1:-1:-1;;;;;2539:32:1;;;2521:51;;2509:2;2494:18;23497:37:0;2348:230:1;31980:273:0;;;;;;;;;;-1:-1:-1;31980:273:0;;;;;:::i;:::-;;:::i;21438:33::-;;;;;;;;;;;;;;;;28676:83;;;;;;;;;;-1:-1:-1;28742:9:0;;;;28676:83;;57051:489;;;;;;;;;;-1:-1:-1;57051:489:0;;;;;:::i;:::-;;:::i;:::-;;20774:34;;;;;;;;;;-1:-1:-1;20774:34:0;;;;-1:-1:-1;;;20774:34:0;;;;;;32650:466;;;;;;;;;;-1:-1:-1;32650:466:0;;;;;:::i;:::-;;:::i;30130:300::-;;;;;;;;;;-1:-1:-1;30130:300:0;;;;;:::i;:::-;;:::i;22891:20::-;;;;;;;;;;-1:-1:-1;22891:20:0;;;;;;;;;;;31069:419;;;;;;;;;;-1:-1:-1;31069:419:0;;;;;:::i;:::-;;:::i;20664:28::-;;;;;;;;;;-1:-1:-1;20664:28:0;;;;-1:-1:-1;;;20664:28:0;;;;;;20596:27;;;;;;;;;;-1:-1:-1;20596:27:0;;;;-1:-1:-1;;;20596:27:0;;;;;;33124:111;;;;;;;;;;-1:-1:-1;33124:111:0;;;;;:::i;:::-;;:::i;31496:476::-;;;;;;;;;;-1:-1:-1;31496:476:0;;;;;:::i;:::-;;:::i;23764:40::-;;;;;;;;;;-1:-1:-1;23764:40:0;;;;-1:-1:-1;;;23764:40:0;;;;;;63970:87;;;;;;;;;;;;;:::i;21478:53::-;;;;;;;;;;-1:-1:-1;21478:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20699:30;;;;;;;;;;-1:-1:-1;20699:30:0;;;;-1:-1:-1;;;20699:30:0;;;;;;22966:23;;;;;;;;;;-1:-1:-1;22966:23:0;;;;;;;;;;;23541:24;;;;;;;;;;-1:-1:-1;23541:24:0;;;;-1:-1:-1;;;;;23541:24:0;;;32261:381;;;;;;;;;;-1:-1:-1;32261:381:0;;;;;:::i;:::-;;:::i;39059:124::-;;;;;;;;;;-1:-1:-1;39059:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;39148:27:0;39124:4;39148:27;;;:18;:27;;;;;;;;;39059:124;23221:23;;;;;;;;;;-1:-1:-1;23221:23:0;;;;-1:-1:-1;;;23221:23:0;;;;;;33828:386;;;;;;;;;;-1:-1:-1;33828:386:0;;;;;:::i;:::-;;:::i;58155:128::-;;;;;;;;;;-1:-1:-1;58248:15:0;:27;58155:128;;53503:106;;;;;;;;;;;;;:::i;23050:26::-;;;;;;;;;;-1:-1:-1;23050:26:0;;;;-1:-1:-1;;;23050:26:0;;;;;;23847:31;;;;;;;;;;;;;;;;21596;;;;;;;;;;;;;;;;63561:396;;;;;;;;;;-1:-1:-1;63561:396:0;;;;;:::i;:::-;;:::i;20815:38::-;;;;;;;;;;-1:-1:-1;20815:38:0;;;;-1:-1:-1;;;20815:38:0;;;;;;28870:198;;;;;;;;;;-1:-1:-1;28870:198:0;;;;;:::i;:::-;;:::i;12604:148::-;;;;;;;;;;;;;:::i;23813:27::-;;;;;;;;;;;;;;;;33479:147;;;;;;;;;;-1:-1:-1;33479:147:0;;;;;:::i;:::-;;:::i;21341:40::-;;;;;;;;;;;;;;;;63284:269;;;;;;;;;;-1:-1:-1;63284:269:0;;;;;:::i;:::-;;:::i;30846:120::-;;;;;;;;;;-1:-1:-1;30846:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30938:20:0;30914:4;30938:20;;;:11;:20;;;;;;;;;30846:120;12378:79;;;;;;;;;;-1:-1:-1;12416:7:0;12443:6;-1:-1:-1;;;;;12443:6:0;12378:79;;54656:122;;;;;;;;;;-1:-1:-1;54656:122:0;;;;;:::i;:::-;;:::i;28581:87::-;;;;;;;;;;;;;:::i;21763:40::-;;;;;;;;;;;;;;;;30438:400;;;;;;;;;;-1:-1:-1;30438:400:0;;;;;:::i;:::-;;:::i;13398:360::-;;;;;;;;;;;;;:::i;54786:198::-;;;;;;;;;;-1:-1:-1;54786:198:0;;;;;:::i;:::-;;:::i;29076:199::-;;;;;;;;;;-1:-1:-1;29076:199:0;;;;;:::i;:::-;;:::i;54992:127::-;;;;;;;;;;-1:-1:-1;54992:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;55085:26:0;55058:7;55085:26;;;:18;:26;;;;;;;54992:127;58291:1576;;;;;;;;;;-1:-1:-1;58291:1576:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3770:32:1;;;3752:51;;3834:2;3819:18;;3812:34;;;;3862:18;;;3855:34;;;;3920:2;3905:18;;3898:34;;;;3963:3;3948:19;;3941:35;3790:3;3992:19;;3985:35;4051:3;4036:19;;4029:35;4095:3;4080:19;;4073:35;3739:3;3724:19;58291:1576:0;3413:701:1;22703:22:0;;;;;;;;;;;;;;;;22831:21;;;;;;;;;;;;;:::i;21067:34::-;;;;;;;;;;;;;;;;13055:89;;;;;;;;;;-1:-1:-1;13127:9:0;;13055:89;;33363:108;;;;;;;;;;-1:-1:-1;33446:17:0;;33363:108;;21634:50;;;;;;;;;;;;;;;;23143:21;;;;;;;;;;-1:-1:-1;23143:21:0;;;;-1:-1:-1;;;23143:21:0;;;;;;33640:171;;;;;;;;;;-1:-1:-1;33640:171:0;;;;;:::i;:::-;;:::i;20630:27::-;;;;;;;;;;-1:-1:-1;20630:27:0;;;;-1:-1:-1;;;20630:27:0;;;;;;28005:568;;;;;;;;;;-1:-1:-1;28005:568:0;;;;;:::i;:::-;;:::i;23885:44::-;;;;;;;;;;;;;;;;22805:19;;;;;;;;;;;;;:::i;13158:226::-;;;;;;;;;;-1:-1:-1;13158:226:0;;;;;:::i;:::-;;:::i;29283:184::-;;;;;;;;;;-1:-1:-1;29283:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;29432:18:0;;;29400:7;29432:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29283:184;58038:109;;;;;;;;;;-1:-1:-1;58121:18:0;;58038:109;;57548:482;;;;;;;;;;-1:-1:-1;57548:482:0;;;;;:::i;:::-;;:::i;33243:110::-;;;;;;;;;;-1:-1:-1;33243:110:0;;;;;:::i;:::-;;:::i;23611:39::-;;;;;;;;;;-1:-1:-1;23611:39:0;;;;-1:-1:-1;;;;;23611:39:0;;;52746:317;;;;;;;;;;-1:-1:-1;52746:317:0;;;;;:::i;:::-;;:::i;23572:32::-;;;;;;;;;;-1:-1:-1;23572:32:0;;;;-1:-1:-1;;;;;23572:32:0;;;59875:536;;;;;;;;;;-1:-1:-1;59875:536:0;;;;;:::i;:::-;;:::i;12766:281::-;;;;;;;;;;-1:-1:-1;12766:281:0;;;;;:::i;:::-;;:::i;22619:26::-;;;;;;;;;;-1:-1:-1;22619:26:0;;;;-1:-1:-1;;;;;22619:26:0;;;22589:21;;;;;;;;;;-1:-1:-1;22589:21:0;;;;-1:-1:-1;;;;;22589:21:0;;;61422:1375;;;;;;;;;;-1:-1:-1;61422:1375:0;;;;;:::i;:::-;;:::i;:::-;;;;5184:25:1;;;5240:2;5225:18;;5218:34;;;;5268:18;;;5261:34;5172:2;5157:18;61422:1375:0;4982:319:1;27914:83:0;27951:13;27984:5;27977:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27914:83;:::o;29475:193::-;29577:4;29599:39;3186:10;29622:7;29631:6;29599:8;:39::i;:::-;-1:-1:-1;29656:4:0;29475:193;;;;;:::o;29676:446::-;29808:4;29825:36;29835:6;29843:9;29854:6;29825:9;:36::i;:::-;29872:220;29895:6;3186:10;29943:138;29999:6;29943:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29943:19:0;;;;;;:11;:19;;;;;;;;3186:10;29943:33;;;;;;;;;;:37;:138::i;:::-;29872:8;:220::i;:::-;-1:-1:-1;30110:4:0;29676:446;;;;;:::o;55127:354::-;-1:-1:-1;;;;;55390:36:0;;55223:7;55390:36;;;:28;:36;;;;;;-1:-1:-1;;;21146:6:0;55268:193;;:159;;:99;:66;55316:17;55419:6;55316:9;:17::i;:::-;55268:25;;;:47;:66::i;:::-;:97;:99::i;:::-;:121;;:159::i;:::-;:191;:193::i;:::-;:205;;;;:::i;31980:273::-;32074:7;32118;;32107;:18;;32099:61;;;;-1:-1:-1;;;32099:61:0;;6247:2:1;32099:61:0;;;6229:21:1;6286:2;6266:18;;;6259:30;6325:32;6305:18;;;6298:60;6375:18;;32099:61:0;;;;;;;;;32171:19;32193:10;:8;:10::i;:::-;32171:32;-1:-1:-1;32221:24:0;:7;32171:32;32221:11;:24::i;:::-;32214:31;31980:273;-1:-1:-1;;;31980:273:0:o;57051:489::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;57135:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;57134:31;57126:40;;;::::0;::::1;;-1:-1:-1::0;;;;;57177:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;:37;;-1:-1:-1;;57177:37:0::1;57210:4;57177:37;::::0;;57252:18:::1;57199:7:::0;57252:9:::1;:18::i;:::-;57227:43;;57302:31;;57285:14;:48;57281:113;;;-1:-1:-1::0;57381:1:0::1;57281:113;57404:39;57416:7;57425:1;57428:14;57404:11;:39::i;:::-;57454:31;:15;57477:7:::0;57454:22:::1;:31::i;:::-;57503:29;::::0;-1:-1:-1;;;;;57503:29:0;::::1;::::0;::::1;::::0;;;::::1;57115:425;57051:489:::0;:::o;32650:466::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32730:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32722:49;;;::::0;-1:-1:-1;;;32722:49:0;;6967:2:1;32722:49:0::1;::::0;::::1;6949:21:1::0;7006:2;6986:18;;;6979:30;-1:-1:-1;;;7025:18:1;;;7018:46;7081:18;;32722:49:0::1;6765:340:1::0;32722:49:0::1;32787:9;32782:327;32806:9;:16:::0;32802:20;::::1;32782:327;;;32864:7;-1:-1:-1::0;;;;;32848:23:0::1;:9;32858:1;32848:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32848:12:0::1;:23:::0;32844:254:::1;;32907:9;32917:16:::0;;:20:::1;::::0;32936:1:::1;::::0;32917:20:::1;:::i;:::-;32907:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32892:9:::1;:12:::0;;-1:-1:-1;;;;;32907:31:0;;::::1;::::0;32902:1;;32892:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32892:46:0::1;-1:-1:-1::0;;;;;32892:46:0;;::::1;;::::0;;32957:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32996:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32996:28:0::1;::::0;;33043:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33043:15:0;;;;;-1:-1:-1;;;;;;33043:15:0::1;::::0;;;;;32782:327:::1;32650:466:::0;:::o;32844:254::-:1;32824:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32782:327;;;;32650:466:::0;:::o;30130:300::-;3186:10;30245:4;30339:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30339:34:0;;;;;;;;;;30245:4;;30267:133;;30317:7;;30339:50;;30378:10;30339:38;:50::i;31069:419::-;3186:10;31121:14;31184:19;;;:11;:19;;;;;;;;31183:20;31161:114;;;;-1:-1:-1;;;31161:114:0;;7846:2:1;31161:114:0;;;7828:21:1;7885:2;7865:18;;;7858:30;7924:34;7904:18;;;7897:62;-1:-1:-1;;;7975:18:1;;;7968:42;8027:19;;31161:114:0;7644:408:1;31161:114:0;31287:15;31316:19;31327:7;31316:10;:19::i;:::-;-1:-1:-1;;;;;;;;;31364:15:0;;;;;;:7;:15;;;;;;31286:49;;-1:-1:-1;31364:28:0;;:15;-1:-1:-1;31286:49:0;31364:19;:28::i;:::-;-1:-1:-1;;;;;31346:15:0;;;;;;:7;:15;;;;;:46;31413:7;;:20;;31425:7;31413:11;:20::i;:::-;31403:7;:30;31457:10;;:23;;31472:7;31457:14;:23::i;:::-;31444:10;:36;-1:-1:-1;;;31069:419:0:o;33124:111::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33193:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33193:34:0::1;33223:4;33193:34;::::0;;33124:111::o;31496:476::-;31614:7;31658;;31647;:18;;31639:59;;;;-1:-1:-1;;;31639:59:0;;8259:2:1;31639:59:0;;;8241:21:1;8298:2;8278:18;;;8271:30;8337;8317:18;;;8310:58;8385:18;;31639:59:0;8057:352:1;31639:59:0;31714:17;31709:256;;31749:15;31778:19;31789:7;31778:10;:19::i;:::-;-1:-1:-1;31748:49:0;;-1:-1:-1;31812:14:0;;-1:-1:-1;;;;;31812:14:0;31709:256;31862:23;31897:19;31908:7;31897:10;:19::i;:::-;-1:-1:-1;31859:57:0;;-1:-1:-1;31931:22:0;;-1:-1:-1;;;;;31931:22:0;63970:87;64007:42;64030:10;64043:5;64007:14;:42::i;:::-;;63970:87::o;32261:381::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32356:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32355:21;32333:110;;;::::0;-1:-1:-1;;;32333:110:0;;8616:2:1;32333:110:0::1;::::0;::::1;8598:21:1::0;8655:2;8635:18;;;8628:30;8694:34;8674:18;;;8667:62;-1:-1:-1;;;8745:18:1;;;8738:37;8792:19;;32333:110:0::1;8414:403:1::0;32333:110:0::1;-1:-1:-1::0;;;;;32458:16:0;::::1;32477:1;32458:16:::0;;;:7:::1;:16;::::0;;;;;:20;32454:109:::1;;-1:-1:-1::0;;;;;32534:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32514:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32495:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32454:109:::1;-1:-1:-1::0;;;;;32573:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32573:27:0::1;32596:4;32573:27:::0;;::::1;::::0;;;32611:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32611:23:0::1;::::0;;::::1;::::0;;32261:381::o;33828:386::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;34018:1:::1;33982:32;:37;;:116;;;;;34076:22;34094:3;34076:13;28847:7:::0;;;28767:95;34076:13:::1;:17:::0;::::1;:22::i;:::-;34040:32;:58;;33982:116;33960:169;;;::::0;-1:-1:-1;;;33960:169:0;;9024:2:1;33960:169:0::1;::::0;::::1;9006:21:1::0;9063:1;9043:18;;;9036:29;-1:-1:-1;;;9081:18:1;;;9074:33;9124:18;;33960:169:0::1;8822:326:1::0;33960:169:0::1;34140:31;:66:::0;33828:386::o;53503:106::-;53557:44;53589:10;53557:23;:44::i;63561:396::-;63641:18;63674:14;63703:27;63744:12;63752:3;63744:7;:12::i;:::-;63772:177;;;9384:25:1;;;9440:2;9425:18;;9418:34;;;9468:18;;;9461:34;;;9526:2;9511:18;;9504:34;;;63626:130:0;;-1:-1:-1;63626:130:0;;-1:-1:-1;63626:130:0;-1:-1:-1;63929:9:0;;63891:5;;63772:177;;9371:3:1;9356:19;63772:177:0;;;;;;;63615:342;;;63561:396;:::o;28870:198::-;-1:-1:-1;;;;;28960:20:0;;28936:7;28960:20;;;:11;:20;;;;;;;;28956:49;;;-1:-1:-1;;;;;;28989:16:0;;;;;:7;:16;;;;;;;28870:198::o;28956:49::-;-1:-1:-1;;;;;29043:16:0;;;;;;:7;:16;;;;;;29023:37;;:19;:37::i;12604:148::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;12711:1:::1;12695:6:::0;;12674:40:::1;::::0;-1:-1:-1;;;;;12695:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;12674:40:0;12711:1;;12674:40:::1;12742:1;12725:19:::0;;-1:-1:-1;;;;;;12725:19:0::1;::::0;;12604:148::o;33479:147::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;33608:9:::1;::::0;33596:22:::1;::::0;33608:9:::1;;33596:2;:22;:::i;:::-;33581:37;::::0;:12;:37:::1;:::i;:::-;33561:17;:57:::0;-1:-1:-1;33479:147:0:o;63284:269::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;63396:6:::1;63384:8;:18;;:41;;;;;63418:7;63406:8;:19;;63384:41;63362:145;;;::::0;-1:-1:-1;;;63362:145:0;;11298:2:1;63362:145:0::1;::::0;::::1;11280:21:1::0;11337:2;11317:18;;;11310:30;11376:34;11356:18;;;11349:62;-1:-1:-1;;;11427:18:1;;;11420:52;11489:19;;63362:145:0::1;11096:418:1::0;63362:145:0::1;63518:16;:27:::0;63284:269::o;54656:122::-;54713:7;54740:30;54763:6;54740:22;:30::i;28581:87::-;28620:13;28653:7;28646:14;;;;;:::i;30438:400::-;30558:4;30580:228;3186:10;30630:7;30652:145;30709:15;30652:145;;;;;;;;;;;;;;;;;3186:10;30652:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30652:34:0;;;;;;;;;;;;:38;:145::i;13398:360::-;13464:14;;-1:-1:-1;;;;;13464:14:0;13482:10;13464:28;13442:132;;;;-1:-1:-1;;;13442:132:0;;11721:2:1;13442:132:0;;;11703:21:1;11760:2;11740:18;;;11733:30;11799:34;11779:18;;;11772:62;-1:-1:-1;;;11850:18:1;;;11843:52;11912:19;;13442:132:0;11519:418:1;13442:132:0;13611:9;;13593:15;:27;13585:71;;;;-1:-1:-1;;;13585:71:0;;12144:2:1;13585:71:0;;;12126:21:1;12183:2;12163:18;;;12156:30;12222:33;12202:18;;;12195:61;12273:18;;13585:71:0;11942:355:1;13585:71:0;13701:14;;;13693:6;;13672:44;;-1:-1:-1;;;;;13701:14:0;;;;13693:6;;;;-1:-1:-1;;;;;;;;;;;13672:44:0;;13736:14;;;13727:23;;-1:-1:-1;;;;;;13727:23:0;-1:-1:-1;;;;;13736:14:0;;;13727:23;;;;;;13398:360::o;54786:198::-;-1:-1:-1;;;;;54949:26:0;;54882:7;54949:26;;;:18;:26;;;;;;54914:62;;:30;54968:6;54914:22;:30::i;:::-;:34;;:62::i;29076:199::-;29181:4;29203:42;3186:10;29227:9;29238:6;29203:9;:42::i;58291:1576::-;58736:8;58404:15;;;;;;;58765:38;:15;58736:8;58765:29;:38::i;:::-;58757:46;;-1:-1:-1;;58816:29:0;;58871:1;58862:5;:10;58858:598;;58910:18;;58901:5;58893:35;58889:556;;;59015:18;;58976:77;;:5;;:9;:77::i;:::-;58949:104;;58889:556;;;59180:18;;59129:15;:27;59094:32;;-1:-1:-1;59129:169:0;;59297:1;59129:169;;;59254:18;;59222:15;:27;:51;;:31;:51::i;:::-;59094:204;-1:-1:-1;59346:83:0;:5;59094:204;59346:9;:83::i;:::-;59319:110;;59075:370;58889:556;59492:31;59515:7;59492:22;:31::i;:::-;59468:55;;59551:31;59574:7;59551:22;:31::i;:::-;-1:-1:-1;;;;;59611:23:0;;;;;;:14;:23;;;;;;59534:48;;-1:-1:-1;59611:23:0;-1:-1:-1;59663:17:0;:52;;59714:1;59663:52;;;59701:9;;59683:28;;:13;;:17;:28::i;:::-;59647:68;;59777:15;59761:13;:31;:98;;59858:1;59761:98;;;59808:34;:13;59826:15;59808:17;:34::i;:::-;59728:131;;58291:1576;;;;;;;;;:::o;22831:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33640:171::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;33717:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;33717:32:0::1;-1:-1:-1::0;;;;33717:32:0;;::::1;;::::0;;33765:38:::1;::::0;::::1;::::0;::::1;::::0;33741:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;33765:38:0::1;;;;;;;;33640:171:::0;:::o;28005:568::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;28124:11:::1;::::0;-1:-1:-1;;;;;28124:11:0;;::::1;28102:34:::0;;::::1;::::0;28080:119:::1;;;::::0;-1:-1:-1;;;28080:119:0;;12504:2:1;28080:119:0::1;::::0;::::1;12486:21:1::0;12543:2;12523:18;;;12516:30;12582:34;12562:18;;;12555:62;-1:-1:-1;;;12633:18:1;;;12626:33;12676:19;;28080:119:0::1;12302:399:1::0;28080:119:0::1;28210:31;28263:10;28210:64;;28368:12;-1:-1:-1::0;;;;;28368:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28350:52:0::1;;28425:4;28445:12;-1:-1:-1::0;;;;;28445:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28350:125;::::0;-1:-1:-1;;;;;;28350:125:0::1;::::0;;;;;;-1:-1:-1;;;;;13192:15:1;;;28350:125:0::1;::::0;::::1;13174:34:1::0;13244:15;;13224:18;;;13217:43;13109:18;;28350:125:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28338:9;:137:::0;;-1:-1:-1;;;;;28338:137:0;;::::1;-1:-1:-1::0;;;;;;28338:137:0;;::::1;;::::0;;;28539:11:::1;:26:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;28005:568:0:o;22805:19::-;;;;;;;:::i;13158:226::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;13239:6:::1;::::0;;;13222:23;;-1:-1:-1;;;;;;13222:23:0;;::::1;-1:-1:-1::0;;;;;13239:6:0;::::1;13222:23;::::0;;;13256:19:::1;::::0;;13298:22:::1;13316:4:::0;13298:15:::1;:22;:::i;:::-;13286:9;:34:::0;13373:1:::1;13357:6:::0;;13336:40:::1;::::0;-1:-1:-1;;;;;13357:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;13336:40:0;13373:1;;13336:40:::1;13158:226:::0;:::o;57548:482::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;57663:4:::1;57647:12;:20;;:45;;;;;57687:5;57671:12;:21;;57647:45;57625:164;;;::::0;-1:-1:-1;;;57625:164:0;;13606:2:1;57625:164:0::1;::::0;::::1;13588:21:1::0;13645:2;13625:18;;;13618:30;13684:34;13664:18;;;13657:62;13755:34;13735:18;;;13728:62;-1:-1:-1;;;13806:19:1;;;13799:36;13852:19;;57625:164:0::1;13404:473:1::0;57625:164:0::1;57838:9;;57822:12;:25:::0;57800:130:::1;;;::::0;-1:-1:-1;;;57800:130:0;;14084:2:1;57800:130:0::1;::::0;::::1;14066:21:1::0;14123:2;14103:18;;;14096:30;14162:34;14142:18;;;14135:62;14233:25;14213:18;;;14206:53;14276:19;;57800:130:0::1;13882:419:1::0;57800:130:0::1;57977:9;::::0;57946:41:::1;::::0;57963:12;;57946:41:::1;::::0;;;::::1;57998:9;:24:::0;57548:482::o;33243:110::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33310:27:0::1;33340:5;33310:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33310:35:0::1;::::0;;33243:110::o;52746:317::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;52904:4:::1;-1:-1:-1::0;;;;;52880:29:0;::::1;::::0;52872:55:::1;;;::::0;-1:-1:-1;;;52872:55:0;;14508:2:1;52872:55:0::1;::::0;::::1;14490:21:1::0;14547:2;14527:18;;;14520:30;-1:-1:-1;;;14566:18:1;;;14559:43;14619:18;;52872:55:0::1;14306:337:1::0;52872:55:0::1;52962:11;::::0;-1:-1:-1;;;;;52962:11:0;;::::1;52946:27:::0;;::::1;::::0;52938:55:::1;;;::::0;-1:-1:-1;;;52938:55:0;;14850:2:1;52938:55:0::1;::::0;::::1;14832:21:1::0;14889:2;14869:18;;;14862:30;-1:-1:-1;;;14908:18:1;;;14901:45;14963:18;;52938:55:0::1;14648:339:1::0;52938:55:0::1;53011:12;-1:-1:-1::0;;;;;53004:29:0::1;;53034:7;12416::::0;12443:6;-1:-1:-1;;;;;12443:6:0;;12378:79;53034:7:::1;53004:51;::::0;-1:-1:-1;;;;;;53004:51:0::1;::::0;;;;;;-1:-1:-1;;;;;15184:32:1;;;53004:51:0::1;::::0;::::1;15166::1::0;15233:18;;;15226:34;;;15139:18;;53004:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;52746:317:::0;;:::o;59875:536::-;59992:7;60014:6;60035;60056:7;60078;60100;60122;60144;60192:22;:15;5605;;5524:104;60192:22;60183:5;:31;60179:106;;-1:-1:-1;60247:1:0;;-1:-1:-1;;;60251:2:0;-1:-1:-1;60251:2:0;;-1:-1:-1;60247:1:0;;-1:-1:-1;60247:1:0;;-1:-1:-1;60247:1:0;;-1:-1:-1;60247:1:0;;-1:-1:-1;60247:1:0;60231:42;;60179:106;60297:15;60315:36;:15;60345:5;60315:29;:36::i;:::-;60297:54;;60371:32;60395:7;60371:23;:32::i;:::-;60364:39;;;;;;;;;;;;;;;;;59875:536;;;;;;;;;;:::o;12766:281::-;12511:6;;-1:-1:-1;;;;;12511:6:0;3186:10;12511:22;12503:67;;;;-1:-1:-1;;;12503:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12869:22:0;::::1;12847:110;;;::::0;-1:-1:-1;;;12847:110:0;;15723:2:1;12847:110:0::1;::::0;::::1;15705:21:1::0;15762:2;15742:18;;;15735:30;15801:34;15781:18;;;15774:62;-1:-1:-1;;;15852:18:1;;;15845:36;15898:19;;12847:110:0::1;15521:402:1::0;12847:110:0::1;12994:6;::::0;;12973:38:::1;::::0;-1:-1:-1;;;;;12973:38:0;;::::1;::::0;12994:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;12973:38:0;::::1;13022:6;:17:::0;;-1:-1:-1;;;;;;13022:17:0::1;-1:-1:-1::0;;;;;13022:17:0;;;::::1;::::0;;;::::1;::::0;;12766:281::o;61422:1375::-;61610:15;:27;61500:7;;;;;;61654:25;;;61650:91;;-1:-1:-1;;61710:18:0;;61704:1;;-1:-1:-1;61704:1:0;;-1:-1:-1;61696:33:0;;61650:91;61783:18;;61753:27;;61864:9;61846:27;;61886:18;61919:14;61950:729;61967:3;61957:7;:13;:50;;;;;61987:20;61974:10;:33;61957:50;61950:729;;;62024:21;;;;:::i;:::-;62089:15;:27;62024:21;;-1:-1:-1;62066:50:0;;;-1:-1:-1;62062:114:0;;62159:1;62137:23;;62062:114;62192:15;62210;:20;;62231:19;62210:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;62210:41:0;62285:23;;;:14;:23;;;;;;;;62210:41;;-1:-1:-1;62272:37:0;;:12;:37::i;:::-;62268:172;;;62334:38;62357:7;62367:4;62334:14;:38::i;:::-;62330:95;;;62397:8;;;;:::i;:::-;;;;62330:95;62454:12;;;;:::i;:::-;;;;62481:18;62502:9;62481:30;;62540:10;62530:7;:20;62526:107;;;62581:36;62593:23;:7;62605:10;62593:11;:23::i;:::-;62581:7;;:11;:36::i;:::-;62571:46;;62526:107;62657:10;-1:-1:-1;61950:729:0;;-1:-1:-1;61950:729:0;;62691:18;:40;;;62750:10;;-1:-1:-1;62762:6:0;-1:-1:-1;62712:19:0;;-1:-1:-1;;;;61422:1375:0;;;;;;:::o;2029:260::-;2087:7;2121:1;2126;2121:6;2117:47;;-1:-1:-1;2151:1:0;2144:8;;2117:47;2176:9;2188:5;2192:1;2188;:5;:::i;:::-;2176:17;-1:-1:-1;2221:1:0;2212:5;2216:1;2176:17;2212:5;:::i;:::-;:10;2204:56;;;;-1:-1:-1;;;2204:56:0;;16130:2:1;2204:56:0;;;16112:21:1;16169:2;16149:18;;;16142:30;16208:34;16188:18;;;16181:62;-1:-1:-1;;;16259:18:1;;;16252:31;16300:19;;2204:56:0;15928:397:1;2303:132:0;2361:7;2388:39;2392:1;2395;2388:39;;;;;;;;;;;;;;;;;:3;:39::i;39191:363::-;-1:-1:-1;;;;;39318:19:0;;39310:64;;;;-1:-1:-1;;;39310:64:0;;16532:2:1;39310:64:0;;;16514:21:1;;;16551:18;;;16544:30;16610:34;16590:18;;;16583:62;16662:18;;39310:64:0;16330:356:1;39310:64:0;-1:-1:-1;;;;;39393:21:0;;39385:64;;;;-1:-1:-1;;;39385:64:0;;16893:2:1;39385:64:0;;;16875:21:1;16932:2;16912:18;;;16905:30;16971:32;16951:18;;;16944:60;17021:18;;39385:64:0;16691:354:1;39385:64:0;-1:-1:-1;;;;;39462:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39514:32;;1599:25:1;;;39514:32:0;;1572:18:1;39514:32:0;;;;;;;39191:363;;;:::o;39562:2918::-;-1:-1:-1;;;;;39684:18:0;;39676:64;;;;-1:-1:-1;;;39676:64:0;;17252:2:1;39676:64:0;;;17234:21:1;17291:2;17271:18;;;17264:30;17330:34;17310:18;;;17303:62;-1:-1:-1;;;17381:18:1;;;17374:31;17422:19;;39676:64:0;17050:397:1;39676:64:0;-1:-1:-1;;;;;39759:16:0;;39751:60;;;;-1:-1:-1;;;39751:60:0;;17654:2:1;39751:60:0;;;17636:21:1;17693:2;17673:18;;;17666:30;17732:33;17712:18;;;17705:61;17783:18;;39751:60:0;17452:355:1;39751:60:0;39839:1;39830:6;:10;39822:64;;;;-1:-1:-1;;;39822:64:0;;18014:2:1;39822:64:0;;;17996:21:1;18053:2;18033:18;;;18026:30;18092:34;18072:18;;;18065:62;-1:-1:-1;;;18143:18:1;;;18136:39;18192:19;;39822:64:0;17812:405:1;39822:64:0;12416:7;12443:6;-1:-1:-1;;;;;39923:15:0;;;12443:6;;39923:15;;;;:32;;-1:-1:-1;12416:7:0;12443:6;-1:-1:-1;;;;;39942:13:0;;;12443:6;;39942:13;;39923:32;39919:175;;;40006:12;;39996:6;:22;;39970:124;;;;-1:-1:-1;;;39970:124:0;;18424:2:1;39970:124:0;;;18406:21:1;18463:2;18443:18;;;18436:30;18502:34;18482:18;;;18475:62;-1:-1:-1;;;18553:18:1;;;18546:38;18601:19;;39970:124:0;18222:404:1;39970:124:0;12416:7;12443:6;-1:-1:-1;;;;;40125:15:0;;;12443:6;;40125:15;;;;:45;;-1:-1:-1;12416:7:0;12443:6;-1:-1:-1;;;;;40157:13:0;;;12443:6;;40157:13;;40125:45;:78;;;;-1:-1:-1;;;;;;40187:16:0;;;;40125:78;:105;;;;-1:-1:-1;40226:4:0;;-1:-1:-1;;;;;40220:10:0;;;40226:4;;40220:10;;40125:105;:137;;;;-1:-1:-1;40253:9:0;;-1:-1:-1;;;;;40247:15:0;;;40253:9;;40247:15;;40125:137;40107:401;;;40289:32;40324:13;40334:2;40324:9;:13::i;:::-;40415:16;;40289:48;;-1:-1:-1;40378:33:0;40405:6;40289:48;40378:33;:::i;:::-;:53;;40352:144;;;;-1:-1:-1;;;40352:144:0;;18833:2:1;40352:144:0;;;18815:21:1;18872:2;18852:18;;;18845:30;18911:31;18891:18;;;18884:59;18960:18;;40352:144:0;18631:353:1;40352:144:0;40274:234;40107:401;40528:28;40559:24;40577:4;40559:9;:24::i;:::-;40528:55;;40624:12;;40600:20;:36;40596:104;;-1:-1:-1;40676:12:0;;40596:104;40776:29;;40821:16;;40739:66;;;;;-1:-1:-1;;;40821:16:0;;;;40820:17;:36;;;;-1:-1:-1;40847:9:0;;-1:-1:-1;;;;;40841:15:0;;;40847:9;;40841:15;40820:36;:61;;;;-1:-1:-1;40860:21:0;;-1:-1:-1;;;40860:21:0;;;;40820:61;40816:1182;;;40902:19;40898:185;;;40965:29;;40942:52;;41031:36;41046:20;41031:14;:36::i;:::-;41101:11;;-1:-1:-1;;;41101:11:0;;;;:16;41097:349;;41234:9;;41156:21;;41222:22;;41234:9;;41222:2;:22;:::i;:::-;41218:26;;:1;:26;:::i;:::-;41200:7;:45;41196:235;;;41284:17;;41274:7;:27;41270:85;;;-1:-1:-1;41338:17:0;;41270:85;41380:31;41394:16;:7;41406:3;41394:11;:16::i;:::-;41380:13;:31::i;:::-;41119:327;41097:349;41466:10;;;;;;;:15;41462:525;;41516:16;;41502:11;;;41703:12;41516:16;41703:7;:12::i;:::-;41739:232;;;9384:25:1;;;9440:2;9425:18;;9418:34;;;9468:18;;;9461:34;;;9526:2;9511:18;;9504:34;;;41553:162:0;;-1:-1:-1;41553:162:0;;-1:-1:-1;41553:162:0;-1:-1:-1;41943:9:0;;41890:4;;41739:232;;9371:3:1;9356:19;41739:232:0;;;;;;;41483:504;;;;41462:525;-1:-1:-1;;;;;42066:24:0;;42020:12;42066:24;;;:18;:24;;;;;;42035:4;;42066:24;;;:50;;-1:-1:-1;;;;;;42094:22:0;;;;;;:18;:22;;;;;;;;42066:50;42062:98;;;-1:-1:-1;42143:5:0;42062:98;42181:26;42210:15;42220:4;42210:9;:15::i;:::-;42181:44;;42236:24;42263:13;42273:2;42263:9;:13::i;:::-;42236:40;;42289:41;42304:4;42310:2;42314:6;42322:7;42289:14;:41::i;:::-;42343:62;42362:4;42369:15;42379:4;42369:9;:15::i;:::-;42386:18;42343:10;:62::i;:::-;42416:56;42435:2;42440:13;42450:2;42440:9;:13::i;:::-;42455:16;42416:10;:56::i;:::-;39665:2815;;;;;39562:2918;;;:::o;1789:226::-;1909:7;1945:12;1937:6;;;;1929:29;;;;-1:-1:-1;;;1929:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1969:9:0;1981:5;1985:1;1981;:5;:::i;:::-;1969:17;1789:226;-1:-1:-1;;;;;1789:226:0:o;4609:148::-;4665:6;4702:1;4723:6;;;;4715:15;;;;;4122:176;4178:6;;4208:5;4212:1;4208;:5;:::i;:::-;4197:16;;4238:1;4233;:6;;:16;;;;;4248:1;4243;:6;;4233:16;4232:38;;;;4259:1;4255;:5;:14;;;;;4268:1;4264;:5;4255:14;4224:47;;;;;4445:127;4501:7;4534:1;4529;:6;;4521:15;;;;;;-1:-1:-1;4562:1:0;4445:127::o;36152:164::-;36194:7;36215:15;36232;36251:19;:17;:19::i;:::-;36214:56;;-1:-1:-1;36214:56:0;-1:-1:-1;36288:20:0;36214:56;;36288:11;:20::i;:::-;36281:27;;;;36152:164;:::o;56588:455::-;56741:14;56728:10;:27;56724:312;;;56772:18;56793:30;:10;56808:14;56793;:30::i;:::-;56772:51;;56838:27;56845:7;56854:10;56838:6;:27::i;:::-;56757:120;53004:51:::1;52746:317:::0;;:::o;56724:312::-;56900:14;56887:10;:27;56883:153;;;56931:18;56952:30;:14;56971:10;56952:18;:30::i;:::-;56931:51;;56997:27;57004:7;57013:10;56997:6;:27::i;6007:481::-;-1:-1:-1;;;;;6078:17:0;;;;;;:12;;;:17;;;;;;;;6073:57;;6007:481;;:::o;6073:57::-;-1:-1:-1;;;;;6149:17:0;;;;;;:12;;;:17;;;;;;;;6142:24;;-1:-1:-1;;6142:24:0;;;;6184:10;;;:15;;;;;6177:22;;;6228:11;;;:16;;;;;;6275:15;;6228:16;;6149:17;6275:19;;;:::i;:::-;6255:39;;6305:15;6323:3;:8;;6332:9;6323:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;6323:19:0;;;6355:20;;;:11;;;:20;;;;;;;:28;;;6401:16;;;;;;;6394:23;;;;6430:15;;6323:19;;-1:-1:-1;6323:19:0;;6355:3;;6378:5;;6430:15;;;;;;:::i;:::-;;;;;;;;;;:25;;-1:-1:-1;;;;;;6430:25:0;-1:-1:-1;;;;;6430:25:0;;;;;;;;;;6466:14;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;6466:14:0;;;;;-1:-1:-1;;;;;;6466:14:0;;;;;;-1:-1:-1;;;;;6007:481:0:o;1445:181::-;1503:7;;1535:5;1539:1;1535;:5;:::i;:::-;1523:17;;1564:1;1559;:6;;1551:46;;;;-1:-1:-1;;;1551:46:0;;19461:2:1;1551:46:0;;;19443:21:1;19500:2;19480:18;;;19473:30;19539:29;19519:18;;;19512:57;19586:18;;1551:46:0;19259:351:1;34420:742:0;34520:7;34542;34564;34586;34608;34630;34680:23;34718:12;34745:18;34777:20;34789:7;34777:11;:20::i;:::-;34665:132;;;;;;34809:15;34826:23;34851:12;34867:113;34893:7;34915:4;34934:10;34959;:8;:10::i;:::-;34867:11;:113::i;:::-;34808:172;;;;-1:-1:-1;34808:172:0;;-1:-1:-1;35084:15:0;;-1:-1:-1;35114:4:0;;-1:-1:-1;35133:10:0;;-1:-1:-1;34420:742:0;;-1:-1:-1;;;;;34420:742:0:o;1640:136::-;1698:7;1725:43;1729:1;1732;1725:43;;;;;;;;;;;;;;;;;:3;:43::i;62805:471::-;-1:-1:-1;;;;;62933:33:0;;62906:4;62933:33;;;:24;:33;;;;;;;;62928:79;;-1:-1:-1;62990:5:0;62983:12;;62928:79;63019:14;63036:32;63060:7;63036:23;:32::i;:::-;63019:49;-1:-1:-1;63085:10:0;;63081:163;;-1:-1:-1;;;;;63112:23:0;;;;;;:14;:23;;;;;;;63138:15;63112:41;;63173:33;;;;;63112:23;63173:33;;;;63188:6;1599:25:1;;1587:2;1572:18;;1453:177;63173:33:0;;;;;;;;63228:4;63221:11;;;;;63081:163;-1:-1:-1;63263:5:0;;62805:471;-1:-1:-1;;;62805:471:0:o;53617:1031::-;53708:7;53733:29;53765:28;53788:4;53765:22;:28::i;:::-;53733:60;-1:-1:-1;53808:25:0;;53804:818;;53892:11;;53885:44;;-1:-1:-1;;;53885:44:0;;53923:4;53885:44;;;2521:51:1;53864:18:0;;-1:-1:-1;;;;;53892:11:0;;53885:29;;2494:18:1;;53885:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53864:65;;53961:21;53948:10;:34;53944:83;;;-1:-1:-1;54010:1:0;;53617:1031;-1:-1:-1;;;53617:1031:0:o;53944:83::-;-1:-1:-1;;;;;54070:24:0;;;;;;:18;:24;;;;;;:83;;54117:21;54070:28;:83::i;:::-;-1:-1:-1;;;;;54043:24:0;;;;;;:18;:24;;;;;;;:110;;;;54173:46;;;;;;54197:21;1599:25:1;;1587:2;1572:18;;1453:177;54173:46:0;;;;;;;;54256:11;;54249:106;;-1:-1:-1;;;54249:106:0;;-1:-1:-1;;;;;15184:32:1;;;54249:106:0;;;15166:51:1;15233:18;;;15226:34;;;54234:12:0;;54256:11;;54249:28;;15139:18:1;;54249:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54234:121;;54377:7;54372:194;;-1:-1:-1;;;;;54432:24:0;;;;;;:18;:24;;;;;;:91;;54483:21;54432:28;:91::i;:::-;-1:-1:-1;;;;;54405:24:0;;;;;;;:18;:24;;;;;:118;;;;-1:-1:-1;54405:24:0;;53617:1031;-1:-1:-1;;;53617:1031:0:o;54372:194::-;-1:-1:-1;54589:21:0;;53617:1031;-1:-1:-1;;;53617:1031:0:o;53804:818::-;-1:-1:-1;54639:1:0;;53617:1031;-1:-1:-1;;53617:1031:0:o;5112:236::-;-1:-1:-1;;;;;5244:17:0;;5215:6;5244:17;;;:12;;;:17;;;;;;;;5239:60;;-1:-1:-1;;;5278:9:0;;5239:60;-1:-1:-1;;;;;;5323:16:0;;;;;:11;;;;;:16;;;;;;;5112:236::o;3932:176::-;3988:6;;4018:5;4022:1;4018;:5;:::i;:::-;4007:16;;4048:1;4043;:6;;:16;;;;;4058:1;4053;:6;;4043:16;4042:38;;;;4069:1;4065;:5;:14;;;;;4078:1;4074;:5;4034:47;;;;;5356:160;5461:7;5493:3;:8;;5502:5;5493:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;5493:15:0;;5356:160;-1:-1:-1;;;5356:160:0:o;60419:234::-;60486:4;60523:15;60507:13;:31;60503:76;;;-1:-1:-1;60562:5:0;;60419:234;-1:-1:-1;60419:234:0:o;60503:76::-;60636:9;;60598:34;:15;60618:13;60598:19;:34::i;:::-;:47;;;60419:234;-1:-1:-1;;60419:234:0:o;2449:235::-;2569:7;2604:12;2597:5;2589:28;;;;-1:-1:-1;;;2589:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2628:9:0;2640:5;2644:1;2640;:5;:::i;42488:3796::-;24210:16;:23;;-1:-1:-1;;;;24210:23:0;-1:-1:-1;;;24210:23:0;;;42737:10:::1;::::0;24210:23;;42737:10;;::::1;24210:23:::0;42737:10;;::::1;::::0;-1:-1:-1;;;42704:17:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;42677:11:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;42648:13:0;::::1;::::0;::::1;::::0;42598:34:::1;::::0;-1:-1:-1;;;42622:10:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;42598:8:0;;::::1;;:34;:::i;:::-;:63;;;;:::i;:::-;:90;;;;:::i;:::-;:123;;;;:::i;:::-;:149;;;;:::i;:::-;42833:8;::::0;42583:164;;-1:-1:-1;42758:19:0::1;::::0;;;-1:-1:-1;;;42833:8:0;::::1;;;:13:::0;42829:217:::1;;42914:8;::::0;42877:46:::1;::::0;42914:8:::1;-1:-1:-1::0;;;42914:8:0;;::::1;::::0;::::1;::::0;42877:32:::1;::::0;:20;;:32;::::1;:24;:32::i;:::-;:36:::0;::::1;:46::i;:::-;42973:4;::::0;42863:60;;-1:-1:-1;42938:53:0::1;::::0;42966:4:::1;::::0;-1:-1:-1;;;;;42973:4:0::1;42863:60:::0;42938:19:::1;:53::i;:::-;-1:-1:-1::0;43023:11:0;42829:217:::1;43062:10;::::0;-1:-1:-1;;;43062:10:0;::::1;;;:15:::0;43058:836:::1;;43145:10;::::0;43108:48:::1;::::0;43145:10:::1;-1:-1:-1::0;;;43145:10:0;;::::1;::::0;::::1;::::0;43108:32:::1;::::0;:20;;:32;::::1;:24;:32::i;:48::-;43176:14;::::0;43094:62;;-1:-1:-1;;;;43176:14:0;::::1;;;43171:652;;43246:9;::::0;43211:22:::1;::::0;43236:20:::1;::::0;-1:-1:-1;;;;;43246:9:0::1;43236;:20::i;:::-;43310:9;::::0;43211:45;;-1:-1:-1;43275:58:0::1;::::0;43303:4:::1;::::0;-1:-1:-1;;;;;43310:9:0::1;43321:11:::0;43275:19:::1;:58::i;:::-;43393:9;::::0;43352:150:::1;::::0;-1:-1:-1;;;;;43393:9:0::1;43426:20;43393:9:::0;43426::::1;:20::i;43352:150::-;43192:326;43171:652;;;43568:21;43626:29;43643:11:::0;43626:16:::1;:29::i;:::-;43692:18;43713:41;:21;43739:14:::0;43713:25:::1;:41::i;:::-;43785:9;::::0;43692:62;;-1:-1:-1;43773:34:0::1;::::0;-1:-1:-1;;;;;43785:9:0::1;43692:62:::0;43773:11:::1;:34::i;:::-;43524:299;;43171:652;43854:28;43871:11:::0;43854:14;:28:::1;:::i;:::-;43837:45;;43058:836;43910:11;::::0;-1:-1:-1;;;43910:11:0;::::1;;;:16:::0;43906:216:::1;;43994:11;::::0;43957:49:::1;::::0;43994:11:::1;-1:-1:-1::0;;;43994:11:0;;::::1;::::0;::::1;::::0;43957:32:::1;::::0;:20;;:32;::::1;:24;:32::i;:49::-;43943:63;;44021:29;44038:11;44021:16;:29::i;:::-;44082:28;44099:11:::0;44082:14;:28:::1;:::i;:::-;44065:45;;43906:216;44138:17;::::0;-1:-1:-1;;;44138:17:0;::::1;;;:22:::0;44134:1008:::1;;44246:17;::::0;44191:87:::1;::::0;44246:17:::1;-1:-1:-1::0;;;44246:17:0;;::::1;::::0;::::1;::::0;44191:32:::1;::::0;:20;;:32;::::1;:24;:32::i;:87::-;44300:21;::::0;44177:101;;-1:-1:-1;;;;44300:21:0;::::1;;;44295:776;;44377:16;::::0;44342:22:::1;::::0;44367:27:::1;::::0;-1:-1:-1;;;;;44377:16:0::1;44367:9;:27::i;:::-;44491:16;::::0;44342:52;;-1:-1:-1;44413:147:0::1;::::0;44463:4:::1;::::0;-1:-1:-1;;;;;44491:16:0::1;44530:11:::0;44413:19:::1;:147::i;:::-;44620:16;::::0;44579:164:::1;::::0;-1:-1:-1;;;;;44620:16:0::1;44660:27;44620:16:::0;44660:9:::1;:27::i;44579:164::-;44323:436;44295:776;;;44809:21;44867:29;44884:11:::0;44867:16:::1;:29::i;:::-;44933:18;44954:41;:21;44980:14:::0;44954:25:::1;:41::i;:::-;45026:16;::::0;44933:62;;-1:-1:-1;45014:41:0::1;::::0;-1:-1:-1;;;;;45026:16:0::1;44933:62:::0;45014:11:::1;:41::i;:::-;44765:306;;44295:776;45102:28;45119:11:::0;45102:14;:28:::1;:::i;:::-;45085:45;;44134:1008;45158:10;::::0;;;::::1;;;:15:::0;45154:504:::1;;45241:10;::::0;45204:48:::1;::::0;45241:10:::1;::::0;;;::::1;::::0;::::1;::::0;45204:32:::1;::::0;:20;;:32;::::1;:24;:32::i;:48::-;45299:11;::::0;45292:76:::1;::::0;-1:-1:-1;;;45292:76:0;;45348:4:::1;45292:76;::::0;::::1;2521:51:1::0;45190:62:0;;-1:-1:-1;45267:22:0::1;::::0;-1:-1:-1;;;;;45299:11:0;;::::1;::::0;45292:29:::1;::::0;2494:18:1;;45292:76:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45267:101;;45383:37;45408:11;45383:24;:37::i;:::-;45464:11;::::0;45457:44:::1;::::0;-1:-1:-1;;;45457:44:0;;45495:4:::1;45457:44;::::0;::::1;2521:51:1::0;45435:18:0::1;::::0;45456:84:::1;::::0;45525:14;;-1:-1:-1;;;;;45464:11:0::1;::::0;45457:29:::1;::::0;2494:18:1;;45457:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45456:84::-;45435:105;;45555:31;45575:10;45555:19;:31::i;:::-;45618:28;45635:11:::0;45618:14;:28:::1;:::i;:::-;45601:45;;45175:483;;45154:504;45674:13;::::0;-1:-1:-1;;;45674:13:0;::::1;;;:18:::0;45670:607:::1;;45732:40;:20:::0;45757:14;45732:24:::1;:40::i;:::-;45709:63:::0;-1:-1:-1;45803:12:0::1;45818:27;45709:63:::0;45843:1:::1;45818:24;:27::i;:::-;45803:42:::0;-1:-1:-1;45860:17:0::1;45880:30;:20:::0;45803:42;45880:24:::1;:30::i;:::-;45860:50:::0;-1:-1:-1;45966:21:0::1;46018:22;46035:4:::0;46018:16:::1;:22::i;:::-;46072:18;46093:41;:21;46119:14:::0;46093:25:::1;:41::i;:::-;46072:62;;46165:35;46178:9;46189:10;46165:12;:35::i;:::-;46222:43;::::0;;5184:25:1;;;5240:2;5225:18;;5218:34;;;5268:18;;;5261:34;;;46222:43:0::1;::::0;5172:2:1;5157:18;46222:43:0::1;;;;;;;45694:583;;;;45670:607;-1:-1:-1::0;;24256:16:0;:24;;-1:-1:-1;;;;24256:24:0;;;-1:-1:-1;;42488:3796:0:o;46292:144::-;24210:16;:23;;-1:-1:-1;;;;24210:23:0;-1:-1:-1;;;24210:23:0;;;46366:10;;46362:67:::1;;46393:24;46410:6;46393:16;:24::i;:::-;-1:-1:-1::0;24256:16:0;:24;;-1:-1:-1;;;;24256:24:0;;;46292:144::o;48286:838::-;48442:7;48437:28;;48451:14;:12;:14::i;:::-;-1:-1:-1;;;;;48482:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;48506:22:0;;;;;;:11;:22;;;;;;;;48505:23;48482:46;48478:597;;;48545:48;48567:6;48575:9;48586:6;48545:21;:48::i;:::-;48478:597;;;-1:-1:-1;;;;;48616:19:0;;;;;;:11;:19;;;;;;;;48615:20;:46;;;;-1:-1:-1;;;;;;48639:22:0;;;;;;:11;:22;;;;;;;;48615:46;48611:464;;;48678:46;48698:6;48706:9;48717:6;48678:19;:46::i;48611:464::-;-1:-1:-1;;;;;48747:19:0;;;;;;:11;:19;;;;;;;;48746:20;:47;;;;-1:-1:-1;;;;;;48771:22:0;;;;;;:11;:22;;;;;;;;48770:23;48746:47;48742:333;;;48810:44;48828:6;48836:9;48847:6;48810:17;:44::i;48742:333::-;-1:-1:-1;;;;;48876:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;48899:22:0;;;;;;:11;:22;;;;;;;;48876:45;48872:203;;;48938:48;48960:6;48968:9;48979:6;48938:21;:48::i;48872:203::-;49019:44;49037:6;49045:9;49056:6;49019:17;:44::i;:::-;49092:7;49087:29;;38758:15;;;-1:-1:-1;;;;;;;;;;38784:37:0;;-1:-1:-1;;38758:15:0;;;;;;;;38748:25;;;;38784:37;;;;;;;38800:21;-1:-1:-1;;38748:25:0;;;;;;38800:21;;;;;;-1:-1:-1;;;38784:37:0;;;;;38870:31;;;-1:-1:-1;;38843:16:0;;;;;-1:-1:-1;;;38832:27:0;38870:31;;;;;;;-1:-1:-1;;;;;38832:27:0;;;;;;38883:18;;;;;;-1:-1:-1;;;38870:31:0;;38956:45;;;-1:-1:-1;;;;;;;38926:19:0;;;;-1:-1:-1;;;38912:33:0;38956:45;;;;;;;-1:-1:-1;;;;;;;38912:33:0;;;;;;38976:25;;;;;;-1:-1:-1;;;38956:45:0;;39012:31;;;39025:18;;;;;;;39012:31;;;;;49101:15;38704:347;60661:753;-1:-1:-1;;;;;60807:30:0;;;;;;:21;:30;;;;;;;;60803:69;;;60661:753;;;:::o;60803:69::-;60903:31;;60886:14;:48;60882:176;;;-1:-1:-1;61045:1:0;60882:176;61086:31;;61072:10;:45;61068:299;;61134:48;61146:7;61155:10;61167:14;61134:11;:48::i;:::-;61197:40;:15;61217:7;61226:10;61197:19;:40::i;:::-;61068:299;;;61270:39;61282:7;61291:1;61294:14;61270:11;:39::i;:::-;61324:31;:15;61347:7;61324:22;:31::i;:::-;61377:29;61392:7;61401:4;61377:14;:29::i;36324:605::-;36422:7;;36458;;36375;;;;;36476:338;36500:9;:16;36496:20;;36476:338;;;36584:7;36560;:21;36568:9;36578:1;36568:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36568:12:0;36560:21;;;;;;;;;;;;;:31;;:83;;;36636:7;36612;:21;36620:9;36630:1;36620:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36620:12:0;36612:21;;;;;;;;;;;;;:31;36560:83;36538:146;;;36667:7;;36676;;36659:25;;;;;;;36324:605;;:::o;36538:146::-;36709:34;36721:7;:21;36729:9;36739:1;36729:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36729:12:0;36721:21;;;;;;;;;;;;;36709:7;;:11;:34::i;:::-;36699:44;;36768:34;36780:7;:21;36788:9;36798:1;36788:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36788:12:0;36780:21;;;;;;;;;;;;;36768:7;;:11;:34::i;:::-;36758:44;-1:-1:-1;36518:3:0;;;;:::i;:::-;;;;36476:338;;;-1:-1:-1;36850:7:0;;36838;;:20;;:11;:20::i;:::-;36828:7;:30;36824:61;;;36868:7;;36877;;36860:25;;;;;;36324:605;;:::o;36824:61::-;36904:7;;36913;;-1:-1:-1;36324:605:0;-1:-1:-1;36324:605:0:o;55996:288::-;56100:5;56082:15;;:23;;;;:::i;:::-;56064:15;:41;56223:25;;56156:120;;56222:53;;56223:36;;56253:5;56223:29;:36::i;56222:53::-;-1:-1:-1;;;;;56156:61:0;;;;;;:28;:61;;;;;;;:65;:120::i;:::-;-1:-1:-1;;;;;56116:37:0;;;;;;;:28;:37;;;;;:160;;;;-1:-1:-1;55996:288:0:o;56292:::-;56396:5;56378:15;;:23;;;;:::i;:::-;56360:15;:41;56519:25;;56452:120;;56518:53;;56519:36;;56549:5;56519:29;:36::i;56518:53::-;-1:-1:-1;;;;;56452:61:0;;;;;;:28;:61;;;;;;;:65;:120::i;35170:412::-;35271:7;35293;35315;35350:12;35365:24;35381:7;35365:15;:24::i;:::-;35350:39;;35400:18;35421:30;35443:7;35421:21;:30::i;:::-;35400:51;-1:-1:-1;35462:23:0;35488:33;35400:51;35488:17;:7;35500:4;35488:11;:17::i;:33::-;35462:59;35557:4;;-1:-1:-1;35563:10:0;;-1:-1:-1;35170:412:0;;-1:-1:-1;;;35170:412:0:o;35590:554::-;35789:7;;;;35886:24;:7;35898:11;35886;:24::i;:::-;35868:42;-1:-1:-1;35921:12:0;35936:21;:4;35945:11;35936:8;:21::i;:::-;35921:36;-1:-1:-1;35968:18:0;35989:27;:10;36004:11;35989:14;:27::i;:::-;35968:48;-1:-1:-1;36027:23:0;36053:33;35968:48;36053:17;:7;36065:4;36053:11;:17::i;:33::-;36105:7;;;;-1:-1:-1;36131:4:0;;-1:-1:-1;35590:554:0;;-1:-1:-1;;;;;;;35590:554:0:o;51930:623::-;52063:19;52085:10;:8;:10::i;:::-;52063:32;-1:-1:-1;52106:15:0;52124:23;:6;52063:32;52124:10;:23::i;:::-;-1:-1:-1;;;;;52178:15:0;;;;;;:7;:15;;;;;;52106:41;;-1:-1:-1;52178:28:0;;52106:41;52178:19;:28::i;:::-;-1:-1:-1;;;;;52160:15:0;;;;;;;:7;:15;;;;;;:46;;;;52238:18;;;;;;;:31;;52261:7;52238:22;:31::i;:::-;-1:-1:-1;;;;;52217:18:0;;;;;;;:7;:18;;;;;;;;:52;;;;52286:19;;;;;:11;:19;;;;;;;52282:97;;;-1:-1:-1;;;;;52340:15:0;;;;;;:7;:15;;;;;;:27;;52360:6;52340:19;:27::i;:::-;-1:-1:-1;;;;;52322:15:0;;;;;;:7;:15;;;;;:45;52282:97;-1:-1:-1;;;;;52393:22:0;;;;;;:11;:22;;;;;;;;52389:106;;;-1:-1:-1;;;;;52453:18:0;;;;;;:7;:18;;;;;;:30;;52476:6;52453:22;:30::i;:::-;-1:-1:-1;;;;;52432:18:0;;;;;;:7;:18;;;;;:51;52389:106;52527:9;-1:-1:-1;;;;;52510:35:0;52519:6;-1:-1:-1;;;;;52510:35:0;;52538:6;52510:35;;;;1599:25:1;;1587:2;1572:18;;1453:177;52510:35:0;;;;;;;;52052:501;;51930:623;;;:::o;46444:484::-;46544:16;;;46558:1;46544:16;;;;;;;;46520:21;;46544:16;;;;;;;;;;-1:-1:-1;46544:16:0;46520:40;;46589:4;46571;46576:1;46571:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46571:23:0;;;:7;;;;;;;;;;:23;;;;46615:11;;:18;;;-1:-1:-1;;;46615:18:0;;;;:11;;;;;:16;;:18;;;;;46571:7;;46615:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46605:4;46610:1;46605:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46605:28:0;;;:7;;;;;;;;;:28;46678:11;;46646:58;;46663:4;;46678:11;46692;46646:8;:58::i;:::-;46727:11;;:193;;-1:-1:-1;;;46727:193:0;;-1:-1:-1;;;;;46727:11:0;;;;:62;;:193;;46804:11;;46727;;46847:4;;46874;;46894:15;;46727:193;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46499:429;46444:484;:::o;52561:177::-;52637:8;52651:9;-1:-1:-1;;;;;52651:14:0;52673:6;52651:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52636:48;;;52703:3;52695:35;;;;-1:-1:-1;;;52695:35:0;;22169:2:1;52695:35:0;;;22151:21:1;22208:2;22188:18;;;22181:30;-1:-1:-1;;;22227:18:1;;;22220:49;22286:18;;52695:35:0;21967:343:1;47366:525:0;47464:16;;;47478:1;47464:16;;;;;;;;;47440:21;;47464:16;;;;;;;;;;-1:-1:-1;47464:16:0;47440:40;;47509:4;47491;47496:1;47491:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47491:23:0;;;:7;;;;;;;;;;:23;;;;47535:11;;:18;;;-1:-1:-1;;;47535:18:0;;;;:11;;;;;:16;;:18;;;;;47491:7;;47535:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47525:4;47530:1;47525:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47525:28:0;;;:7;;;;;;;;;:28;47574:11;;47564:7;;47574:11;;;47564:4;;47569:1;;47564:7;;;;;;:::i;:::-;-1:-1:-1;;;;;47564:21:0;;;:7;;;;;;;;;:21;47630:11;;47598:58;;47615:4;;47630:11;47644;47598:8;:58::i;:::-;47679:11;;-1:-1:-1;;;;;47679:11:0;:65;47759:11;47679;47801:4;47828;47848:24;:15;47868:3;47848:19;:24::i;:::-;47679:204;;;;;;;;;;;;;;;;;;;:::i;53077:418::-;53168:1;53150:15;;:19;53142:28;;;;;;53187:10;;53183:305;;53316:15;;53242:104;;53290:23;53291:6;-1:-1:-1;;;53290:12:0;:23::i;:::-;:41;;;;:::i;:::-;53242:25;;;:29;:104::i;:::-;53214:25;:132;53366:28;;1599:25:1;;;53366:28:0;;1587:2:1;1572:18;53366:28:0;;;;;;;53439:25;;:37;;53469:6;53439:29;:37::i;:::-;53411:25;:65;53077:418;:::o;47899:373::-;48022:11;;47990:58;;48007:4;;-1:-1:-1;;;;;48022:11:0;48036;47990:8;:58::i;:::-;48071:11;;48219:4;;48071:193;;-1:-1:-1;;;48071:193:0;;48139:4;48071:193;;;22656:34:1;22706:18;;;22699:34;;;48071:11:0;22749:18:1;;;22742:34;;;22792:18;;;22785:34;-1:-1:-1;;;;;48219:4:0;;;22835:19:1;;;22828:44;48238:15:0;22888:19:1;;;22881:35;48071:11:0;;;:27;;48106:9;;22590:19:1;;48071:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47899:373;;:::o;46936:422::-;47031:16;;;47045:1;47031:16;;;;;;;;47007:21;;47031:16;;;;;;;;-1:-1:-1;;47068:11:0;;:18;;;-1:-1:-1;;;47068:18:0;;;;47007:40;;-1:-1:-1;;;;;;47068:11:0;;;;:16;;-1:-1:-1;47068:18:0;;;;;;;;;;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47058:4;47063:1;47058:7;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;47058:28:0;;;-1:-1:-1;;;;;47058:28:0;;;;;47115:4;47097;47102:1;47097:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47097:23:0;;;:7;;;;;;;;;:23;47143:11;;47295:4;;47143:11;;;;:62;;47227:6;;47143:11;;47276:4;;47295;47315:24;:15;47335:3;47315:19;:24::i;:::-;47143:207;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46986:372;46936:422;:::o;37905:791::-;37966:7;;;;;;;:12;:47;;;;-1:-1:-1;37995:13:0;;-1:-1:-1;;;37995:13:0;;;;:18;37966:47;:77;;;;-1:-1:-1;38030:8:0;;-1:-1:-1;;;38030:8:0;;;;:13;37966:77;:109;;;;-1:-1:-1;38060:10:0;;-1:-1:-1;;;38060:10:0;;;;:15;37966:109;:142;;;;-1:-1:-1;38092:11:0;;-1:-1:-1;;;38092:11:0;;;;:16;37966:142;:181;;;;-1:-1:-1;38125:17:0;;-1:-1:-1;;;38125:17:0;;;;:22;37966:181;:213;;;;-1:-1:-1;38164:10:0;;;;;;;:15;37966:213;37948:250;;;37905:791::o;37948:250::-;38228:7;;;;;;;;;;;38210:15;;:25;;;;;;;;;;;;;;;;;;38270:13;;;;;;;;;;;38246:21;;:37;;;;;;;;;;;;;;;;;;38313:8;;;;;;;;;;;38294:16;;:27;;;;;;;;;;;;;;;;;;38353:10;;;;;;;;;;;38332:18;;:31;;;;;;;;;;;;;;;;;;38396:11;;;;;;;;;;;38374:19;;:33;;;;;;;;;;;;;;;;;;38446:17;;;;;;;;;;;38418:25;;:45;;;;;;;;;;;;;;;;;;38495:10;;;;;;;;;;;38474:18;;:31;;;;;;;;;;;;;;;;;;38528:1;38518:7;;:11;;;;;;;;;;;;;;;;;;38556:1;38540:13;;:17;;;;;;;;;;;;;;;;;;38579:1;38568:8;;:12;;;;;;;;;;;;;;;;;;38604:1;38591:10;;:14;;;;;;;;;;;;;;;;;;38630:1;38616:11;;:15;;;;;;;;;;;;;;;;;;38662:1;38642:17;;:21;;;;;;;;;;;;;;;;;;38687:1;38674:10;;:14;;;;;;;;;;;;;;;;;;37905:791::o;50471:686::-;50622:15;50652:23;50690:12;50717:23;50755:12;50782:18;50814:19;50825:7;50814:10;:19::i;:::-;-1:-1:-1;;;;;50862:15:0;;;;;;:7;:15;;;;;;50607:226;;-1:-1:-1;50607:226:0;;-1:-1:-1;50607:226:0;;-1:-1:-1;50607:226:0;-1:-1:-1;50607:226:0;-1:-1:-1;50607:226:0;-1:-1:-1;50862:28:0;;50882:7;50862:19;:28::i;:::-;-1:-1:-1;;;;;50844:15:0;;;;;;:7;:15;;;;;;;;:46;;;;50919:7;:15;;;;:28;;50939:7;50919:19;:28::i;:::-;-1:-1:-1;;;;;50901:15:0;;;;;;;:7;:15;;;;;;:46;;;;50979:18;;;;;;;:39;;51002:15;50979:22;:39::i;:::-;-1:-1:-1;;;;;50958:18:0;;;;;;:7;:18;;;;;:60;51029:26;51044:10;51029:14;:26::i;:::-;51066:23;51078:4;51084;51066:11;:23::i;:::-;51122:9;-1:-1:-1;;;;;51105:44:0;51114:6;-1:-1:-1;;;;;51105:44:0;;51133:15;51105:44;;;;1599:25:1;;1587:2;1572:18;;1453:177;51105:44:0;;;;;;;;50596:561;;;;;;50471:686;;;:::o;49765:698::-;49914:15;49944:23;49982:12;50009:23;50047:12;50074:18;50106:19;50117:7;50106:10;:19::i;:::-;-1:-1:-1;;;;;50154:15:0;;;;;;:7;:15;;;;;;49899:226;;-1:-1:-1;49899:226:0;;-1:-1:-1;49899:226:0;;-1:-1:-1;49899:226:0;-1:-1:-1;49899:226:0;-1:-1:-1;49899:226:0;-1:-1:-1;50154:28:0;;49899:226;50154:19;:28::i;:::-;-1:-1:-1;;;;;50136:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;50214:18;;;;;:7;:18;;;;;:39;;50237:15;50214:22;:39::i;:::-;-1:-1:-1;;;;;50193:18:0;;;;;;:7;:18;;;;;;;;:60;;;;50285:7;:18;;;;:39;;50308:15;50285:22;:39::i;49132:625::-;49279:15;49309:23;49347:12;49374:23;49412:12;49439:18;49471:19;49482:7;49471:10;:19::i;:::-;-1:-1:-1;;;;;49519:15:0;;;;;;:7;:15;;;;;;49264:226;;-1:-1:-1;49264:226:0;;-1:-1:-1;49264:226:0;;-1:-1:-1;49264:226:0;-1:-1:-1;49264:226:0;-1:-1:-1;49264:226:0;-1:-1:-1;49519:28:0;;49264:226;49519:19;:28::i;51165:757::-;51316:15;51346:23;51384:12;51411:23;51449:12;51476:18;51508:19;51519:7;51508:10;:19::i;:::-;-1:-1:-1;;;;;51556:15:0;;;;;;:7;:15;;;;;;51301:226;;-1:-1:-1;51301:226:0;;-1:-1:-1;51301:226:0;;-1:-1:-1;51301:226:0;-1:-1:-1;51301:226:0;-1:-1:-1;51301:226:0;-1:-1:-1;51556:28:0;;51576:7;51556:19;:28::i;:::-;-1:-1:-1;;;;;51538:15:0;;;;;;:7;:15;;;;;;;;:46;;;;51613:7;:15;;;;:28;;51633:7;51613:19;:28::i;5636:363::-;-1:-1:-1;;;;;5750:17:0;;;;;;:12;;;:17;;;;;;;;5746:246;;;-1:-1:-1;;;;;5784:15:0;;;;;;:10;;;:15;;;;;:21;;;53004:51:::1;52746:317:::0;;:::o;5746:246::-;-1:-1:-1;;;;;5838:17:0;;;;;;:12;;;:17;;;;;;;;:24;;-1:-1:-1;;5838:24:0;5858:4;5838:24;;;;;;5877:10;;;:15;;;;;:21;;;5932:15;;5913:11;;;:16;;;;;:34;;;5962:18;;;;;;;;;;;;-1:-1:-1;;;;;;5962:18:0;;;;;;5636:363;;;:::o;37300:130::-;37403:7;;37364;;37391:31;;37416:5;;37391:20;;:7;;37403;;;;;37391:11;:20::i;37438:459::-;37831:10;;37535:7;;37580:309;;37883:5;;37580:280;;37831:10;;;;;;;-1:-1:-1;;;37786:17:0;;;;;-1:-1:-1;;;37747:11:0;;;;;-1:-1:-1;;;37709:10:0;;;;;37632:49;;-1:-1:-1;;;37673:8:0;;;;;-1:-1:-1;;;37632:13:0;;;;:49;:::i;:::-;:87;;;;:::i;:::-;:126;;;;:::i;:::-;:171;;;;:::i;:::-;:209;;;;:::i;:::-;37580:7;;:280;;:29;:280::i;36937:355::-;37000:19;37022:10;:8;:10::i;:::-;37000:32;-1:-1:-1;37043:18:0;37064:27;:10;37000:32;37064:14;:27::i;:::-;37143:4;37127:22;;;;:7;:22;;;;;;37043:48;;-1:-1:-1;37127:38:0;;37043:48;37127:26;:38::i;:::-;37118:4;37102:22;;;;:7;:22;;;;;;;;:63;;;;37180:11;:26;;;;;;37176:108;;;37262:4;37246:22;;;;:7;:22;;;;;;:38;;37273:10;37246:26;:38::i;:::-;37237:4;37221:22;;;;:7;:22;;;;;:63;36989:303;;36937:355;:::o;34265:147::-;34343:7;;:17;;34355:4;34343:11;:17::i;:::-;34333:7;:27;34384:10;;:20;;34399:4;34384:14;:20::i;:::-;34371:10;:33;-1:-1:-1;;34265:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1635:247::-;1694:6;1747:2;1735:9;1726:7;1722:23;1718:32;1715:52;;;1763:1;1760;1753:12;1715:52;1802:9;1789:23;1821:31;1846:5;1821:31;:::i;1887:456::-;1964:6;1972;1980;2033:2;2021:9;2012:7;2008:23;2004:32;2001:52;;;2049:1;2046;2039:12;2001:52;2088:9;2075:23;2107:31;2132:5;2107:31;:::i;:::-;2157:5;-1:-1:-1;2214:2:1;2199:18;;2186:32;2227:33;2186:32;2227:33;:::i;:::-;1887:456;;2279:7;;-1:-1:-1;;;2333:2:1;2318:18;;;;2305:32;;1887:456::o;2583:180::-;2642:6;2695:2;2683:9;2674:7;2670:23;2666:32;2663:52;;;2711:1;2708;2701:12;2663:52;-1:-1:-1;2734:23:1;;2583:180;-1:-1:-1;2583:180:1:o;2768:118::-;2854:5;2847:13;2840:21;2833:5;2830:32;2820:60;;2876:1;2873;2866:12;2891:309;2956:6;2964;3017:2;3005:9;2996:7;2992:23;2988:32;2985:52;;;3033:1;3030;3023:12;2985:52;3069:9;3056:23;3046:33;;3129:2;3118:9;3114:18;3101:32;3142:28;3164:5;3142:28;:::i;:::-;3189:5;3179:15;;;2891:309;;;;;:::o;4119:241::-;4175:6;4228:2;4216:9;4207:7;4203:23;4199:32;4196:52;;;4244:1;4241;4234:12;4196:52;4283:9;4270:23;4302:28;4324:5;4302:28;:::i;4365:388::-;4433:6;4441;4494:2;4482:9;4473:7;4469:23;4465:32;4462:52;;;4510:1;4507;4500:12;4462:52;4549:9;4536:23;4568:31;4593:5;4568:31;:::i;:::-;4618:5;-1:-1:-1;4675:2:1;4660:18;;4647:32;4688:33;4647:32;4688:33;:::i;5306:380::-;5385:1;5381:12;;;;5428;;;5449:61;;5503:4;5495:6;5491:17;5481:27;;5449:61;5556:2;5548:6;5545:14;5525:18;5522:38;5519:161;;5602:10;5597:3;5593:20;5590:1;5583:31;5637:4;5634:1;5627:15;5665:4;5662:1;5655:15;5519:161;;5306:380;;;:::o;5691:127::-;5752:10;5747:3;5743:20;5740:1;5733:31;5783:4;5780:1;5773:15;5807:4;5804:1;5797:15;5823:217;5863:1;5889;5879:132;;5933:10;5928:3;5924:20;5921:1;5914:31;5968:4;5965:1;5958:15;5996:4;5993:1;5986:15;5879:132;-1:-1:-1;6025:9:1;;5823:217::o;6404:356::-;6606:2;6588:21;;;6625:18;;;6618:30;6684:34;6679:2;6664:18;;6657:62;6751:2;6736:18;;6404:356::o;7110:127::-;7171:10;7166:3;7162:20;7159:1;7152:31;7202:4;7199:1;7192:15;7226:4;7223:1;7216:15;7242:125;7282:4;7310:1;7307;7304:8;7301:34;;;7315:18;;:::i;:::-;-1:-1:-1;7352:9:1;;7242:125::o;7372:127::-;7433:10;7428:3;7424:20;7421:1;7414:31;7464:4;7461:1;7454:15;7488:4;7485:1;7478:15;7504:135;7543:3;7564:17;;;7561:43;;7584:18;;:::i;:::-;-1:-1:-1;7631:1:1;7620:13;;7504:135::o;9549:422::-;9638:1;9681:5;9638:1;9695:270;9716:7;9706:8;9703:21;9695:270;;;9775:4;9771:1;9767:6;9763:17;9757:4;9754:27;9751:53;;;9784:18;;:::i;:::-;9834:7;9824:8;9820:22;9817:55;;;9854:16;;;;9817:55;9933:22;;;;9893:15;;;;9695:270;;;9699:3;9549:422;;;;;:::o;9976:806::-;10025:5;10055:8;10045:80;;-1:-1:-1;10096:1:1;10110:5;;10045:80;10144:4;10134:76;;-1:-1:-1;10181:1:1;10195:5;;10134:76;10226:4;10244:1;10239:59;;;;10312:1;10307:130;;;;10219:218;;10239:59;10269:1;10260:10;;10283:5;;;10307:130;10344:3;10334:8;10331:17;10328:43;;;10351:18;;:::i;:::-;-1:-1:-1;;10407:1:1;10393:16;;10422:5;;10219:218;;10521:2;10511:8;10508:16;10502:3;10496:4;10493:13;10489:36;10483:2;10473:8;10470:16;10465:2;10459:4;10456:12;10452:35;10449:77;10446:159;;;-1:-1:-1;10558:19:1;;;10590:5;;10446:159;10637:34;10662:8;10656:4;10637:34;:::i;:::-;10707:6;10703:1;10699:6;10695:19;10686:7;10683:32;10680:58;;;10718:18;;:::i;:::-;10756:20;;9976:806;-1:-1:-1;;;9976:806:1:o;10787:131::-;10847:5;10876:36;10903:8;10897:4;10876:36;:::i;10923:168::-;10963:7;11029:1;11025;11021:6;11017:14;11014:1;11011:21;11006:1;10999:9;10992:17;10988:45;10985:71;;;11036:18;;:::i;:::-;-1:-1:-1;11076:9:1;;10923:168::o;12706:251::-;12776:6;12829:2;12817:9;12808:7;12804:23;12800:32;12797:52;;;12845:1;12842;12835:12;12797:52;12877:9;12871:16;12896:31;12921:5;12896:31;:::i;13271:128::-;13311:3;13342:1;13338:6;13335:1;13332:13;13329:39;;;13348:18;;:::i;:::-;-1:-1:-1;13384:9:1;;13271:128::o;15271:245::-;15338:6;15391:2;15379:9;15370:7;15366:23;15362:32;15359:52;;;15407:1;15404;15397:12;15359:52;15439:9;15433:16;15458:28;15480:5;15458:28;:::i;18989:265::-;19028:3;19056:9;;;19081:10;;-1:-1:-1;;;;;19100:27:1;;;19093:35;;19077:52;19074:78;;;19132:18;;:::i;:::-;-1:-1:-1;;;19179:19:1;;;19172:27;;19164:36;;19161:62;;;19203:18;;:::i;:::-;-1:-1:-1;;19239:9:1;;18989:265::o;19615:184::-;19685:6;19738:2;19726:9;19717:7;19713:23;19709:32;19706:52;;;19754:1;19751;19744:12;19706:52;-1:-1:-1;19777:16:1;;19615:184;-1:-1:-1;19615:184:1:o;20091:267::-;20130:4;20159:9;;;20184:10;;-1:-1:-1;;;20203:19:1;;20196:27;;20180:44;20177:70;;;20227:18;;:::i;:::-;-1:-1:-1;;;;;20274:27:1;;20267:35;;20259:44;;20256:70;;;20306:18;;:::i;:::-;-1:-1:-1;;20343:9:1;;20091:267::o;20363:204::-;20401:3;20437:4;20434:1;20430:12;20469:4;20466:1;20462:12;20504:3;20498:4;20494:14;20489:3;20486:23;20483:49;;;20512:18;;:::i;:::-;20548:13;;20363:204;-1:-1:-1;;;20363:204:1:o;20704:461::-;20757:3;20795:5;20789:12;20822:6;20817:3;20810:19;20848:4;20877:2;20872:3;20868:12;20861:19;;20914:2;20907:5;20903:14;20935:1;20945:195;20959:6;20956:1;20953:13;20945:195;;;21024:13;;-1:-1:-1;;;;;21020:39:1;21008:52;;21080:12;;;;21115:15;;;;21056:1;20974:9;20945:195;;;-1:-1:-1;21156:3:1;;20704:461;-1:-1:-1;;;;;20704:461:1:o;21170:582::-;21469:6;21458:9;21451:25;21512:6;21507:2;21496:9;21492:18;21485:34;21555:3;21550:2;21539:9;21535:18;21528:31;21432:4;21576:57;21628:3;21617:9;21613:19;21605:6;21576:57;:::i;:::-;-1:-1:-1;;;;;21669:32:1;;;;21664:2;21649:18;;21642:60;-1:-1:-1;21733:3:1;21718:19;21711:35;21568:65;21170:582;-1:-1:-1;;;21170:582:1:o;22927:306::-;23015:6;23023;23031;23084:2;23072:9;23063:7;23059:23;23055:32;23052:52;;;23100:1;23097;23090:12;23052:52;23129:9;23123:16;23113:26;;23179:2;23168:9;23164:18;23158:25;23148:35;;23223:2;23212:9;23208:18;23202:25;23192:35;;22927:306;;;;;:::o;23238:510::-;23509:6;23498:9;23491:25;23552:3;23547:2;23536:9;23532:18;23525:31;23472:4;23573:57;23625:3;23614:9;23610:19;23602:6;23573:57;:::i;:::-;-1:-1:-1;;;;;23666:32:1;;;;23661:2;23646:18;;23639:60;-1:-1:-1;23730:2:1;23715:18;23708:34;23565:65;23238:510;-1:-1:-1;;23238:510:1:o

Swarm Source

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