ETH Price: $2,722.39 (+4.42%)

Token

Shibana (SHIBANA)
 

Overview

Max Total Supply

69,000,000 SHIBANA

Holders

80

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,083.531583026 SHIBANA

Value
$0.00
0x76e39a9ac0ad6ab4269589f528ce82fe8d86d523
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:
Shibana

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 50 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-07
*/

// SPDX-License-Identifier: MIT


/*

    Shibana - DAO Empowered Charity

Telegram: https://t.me/ShibanaDAO
Twitter: https://twitter.com/shibanadao 
Website: https://shibanadao.com/

*/

pragma solidity ^0.8.13;


library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

     

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }
}


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


contract Ownable {
    address private _owner;
    address private _previousOwner;

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

    constructor () {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "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;
    }
}

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

interface IUniswapV2Router {
    function factory() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

contract Shibana is IERC20, Ownable {

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

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;

    mapping(address => bool) public botWallets;

    mapping(address => bool) private isPair;

    address[] private _excluded;
    
    using EnumerableSet for EnumerableSet.AddressSet;
    EnumerableSet.AddressSet electedCouncil;

    address constant public ZERO = address(0x0);
 
    address public DAOcandidate;
    uint256 public DAOcandidateScore;
    mapping(address => uint256) public DAOwinningBuy;
    
    uint256 public timeLastDAOcandidate;    
    uint256 public DAOcandidateRoundDuration = 1 minutes;    
    uint256 public totalDAOrewards;
    
    uint256 public launchBlock;
   
    uint256 public constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 69_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    address public autoLiquidityReceiver = 0x14a3F1f523C09eA1275D966ffa41AcA0216AD694;
    address public treasuryAddress = 0x506F5D1c3E403d234c9Df98Cb3a79F2fbCC905d1;
	address public developmentAddress = msg.sender;

    //Main * * * ** !
    address private constant USDCaddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address private constant WETHaddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    //Testnet
    // address private constant USDCaddress = 0xeb8f08a975Ab53E34D8a0330E0D34de942C95926;
    // address private constant WETHaddress = 0xc778417E063141139Fce010982780140Aa0cD5Ab;
    
    uint256 public charityFunds;
    uint256 public treasuryFunds;
    uint256 private developmentFunds;

    string private constant _name = "Shibana";
    string private constant _symbol = "SHIBANA";
    uint8 private constant _decimals = 9;
    
    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;
   
    uint256 public _liquidityFee = 9;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router public constant uniswapV2Router = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH;
    address public immutable uniswapV2Pair;
     
    bool inSwapAndLiquify;
    
    uint256 public walletRestrictionAmount; // max token transaction and wallet amount
    uint256 public constant MIN_WALLETRESTRICTION_AMOUNT = 3 * _tTotal / 200; // 1.5% 
 
    uint256 public numTokensSellToAddToLiquidity =  _tTotal / 300; // 0.33...%
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[msg.sender] = _rTotal;
        
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), WETHaddress);
        isPair[uniswapV2Pair] = true; 

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

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true; 
        _isExcludedFromFee[autoLiquidityReceiver] = true;        
        
        emit Transfer(address(0), msg.sender, _tTotal);
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure 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) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 _allowance = _allowances[sender][msg.sender];
        _approve(sender, msg.sender, _allowance - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        uint256 _allowance = _allowances[msg.sender][spender];
        _approve(msg.sender, spender, _allowance - subtractedValue);
        return true;
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    function deliver(uint256 tAmount) external {
        require(!_isExcluded[ msg.sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[ msg.sender] = _rOwned[ msg.sender]  - rAmount;
        _rTotal = _rTotal - rAmount;
        _tFeeTotal = _tFeeTotal + tAmount;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) {
        require(tAmount <= _tTotal, "Amount 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, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is 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 isExcludedFromReward(address account) external view returns (bool) {
        return _isExcluded[account];
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setSwapThresholdAmount(uint256 _numTokensSellToAddToLiquidity) external onlyOwner {
        require(_numTokensSellToAddToLiquidity >= _tTotal / 1000, "[0.1,MAXUINT_256] % supply)");
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity;
    }
    
    function claimStuckTokens(address tokenAddress, address walletaddress) external onlyOwner {
        require(tokenAddress != address(this));
        IERC20 token = IERC20(tokenAddress);
        token.transfer(walletaddress, token.balanceOf(address(this)));
    }
    
    function claimStuckBalance(address payable walletaddress) external onlyOwner {
        walletaddress.transfer(address(this).balance - charityFunds - developmentFunds - treasuryFunds);
    }
    
    function addBotWallet(address botwallet) external onlyOwner {
        require(block.number <= launchBlock + 60, "Antibot only first 60 blocks");
        botWallets[botwallet] = true;
    }
    
    function removeBotWallet(address botwallet) external onlyOwner {
        botWallets[botwallet] = false;
    }
    
    function allowtrading() external onlyOwner() {
        require(walletRestrictionAmount < MIN_WALLETRESTRICTION_AMOUNT, "Launched");
        walletRestrictionAmount = MIN_WALLETRESTRICTION_AMOUNT;
        launchBlock = block.number;        
    }    

    function setWalletRestrictionAmount(uint256 _walletRestrictionAmount) external onlyOwner {
        require(_walletRestrictionAmount >= MIN_WALLETRESTRICTION_AMOUNT, "[1.5, MAXUINT_256] %");
        walletRestrictionAmount = _walletRestrictionAmount;
    }

    function setFeeReceivers(address _treasuryAddress, address _developmentAddress) external onlyOwner {
        treasuryAddress = _treasuryAddress;
        developmentAddress = _developmentAddress;
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + 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 - tFee - tLiquidity;
        return (tTransferAmount, tFee, tLiquidity);
    }

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

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / 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 - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();        

        uint256 contractTokens = 7 * tLiquidity / 9;
        tLiquidity -= contractTokens;

        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[autoLiquidityReceiver] = _rOwned[autoLiquidityReceiver] + rLiquidity;
        if(_isExcluded[autoLiquidityReceiver])
            _tOwned[autoLiquidityReceiver] = _tOwned[autoLiquidityReceiver] + tLiquidity;

        rLiquidity = contractTokens * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + contractTokens;
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount * _taxFee / 10**2;
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount * _liquidityFee / 10**2;
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) external view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
  
    function _transfer(address from, address to, uint256 amount) private {
        require(amount > 0, "Transfer more than 0");
        require(!botWallets[from], "No bots");        

        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        else{
            uint256 _walletRestrictionAmount = walletRestrictionAmount;
            require(_walletRestrictionAmount >= MIN_WALLETRESTRICTION_AMOUNT, "Launching");
            //Limits in effect
            if(_walletRestrictionAmount < MAX){    
                require(amount <= _walletRestrictionAmount && 
               (to == uniswapV2Pair || (balanceOf(to) + amount <= _walletRestrictionAmount)), "maxTx/maxWallet");                      
            }
        }

        if(takeFee){
            address _DAOcandidate = DAOcandidate;
            if(isPair[from]){
                address[] memory path = new address[](2);
                path[0] = WETHaddress;
                path[1] = address(this);
                uint256 buyAmountETH = uniswapV2Router.getAmountsIn(amount, path)[0];                
                if(block.timestamp > timeLastDAOcandidate + DAOcandidateRoundDuration && _DAOcandidate != ZERO){
                    if(electedCouncil.contains(_DAOcandidate) == false){
                        electedCouncil.add(_DAOcandidate);
                    }                    
                    DAOwinningBuy[_DAOcandidate] = DAOcandidateScore;
                    DAOcandidateScore = 0;
                }
                if(buyAmountETH > DAOcandidateScore){                                    
                    if(_DAOcandidate != to){ 
                        DAOcandidate = to;
                    }
                    DAOcandidateScore = buyAmountETH;
                    timeLastDAOcandidate = block.timestamp;
                }
            }
            else{
                if(from == DAOcandidate){                       
                    DAOcandidate = ZERO;
                    DAOcandidateScore = 0;
                    timeLastDAOcandidate = block.timestamp;
                }
                else if(!inSwapAndLiquify){
                    if((balanceOf(autoLiquidityReceiver) >= numTokensSellToAddToLiquidity)){
                        addLiquidity(numTokensSellToAddToLiquidity);
                    }
                    else if(balanceOf(address(this)) >= numTokensSellToAddToLiquidity && _DAOcandidate != ZERO){
                        swapAndLiquify(numTokensSellToAddToLiquidity);
                    }
                }                                
            }
        }
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 tokenAmount) private lockTheSwap {

        uint256 oldBalance = address(this).balance;
        swapTokensForEth(tokenAmount); 
        uint256 swappedBalance = address(this).balance - oldBalance;

        treasuryFunds += swappedBalance * 3 / 7; 
		developmentFunds += swappedBalance / 7;
		charityFunds += swappedBalance * 2 / 7;
        uint256 DAOrewards = swappedBalance / 7;
        payable(DAOcandidate).transfer(DAOrewards);	 
        totalDAOrewards += DAOrewards;
    }

    function addLiquidity(uint256 tokenAmount) private lockTheSwap {
        _tokenTransfer(autoLiquidityReceiver, address(this), tokenAmount, false);      
        uint256 amountToLiquify = tokenAmount / 2;
        uint256 amountToSwap = tokenAmount - amountToLiquify;

        if( amountToSwap == 0 ) {
            return;
        }
        uint256 balanceBefore = address(this).balance;
        swapTokensForEth(amountToSwap);
        uint256 amountETHLiquidity = address(this).balance - balanceBefore;

        if (amountToLiquify > 0 && amountETHLiquidity > 0) { 
            uniswapV2Router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                owner(),
                block.timestamp
            );
        }
    }

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

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

    function donateToCharity(address _charityAddress, uint256 _charityContribution) external onlyOwner {
        payable(_charityAddress).transfer(_charityContribution);		
        charityFunds -= _charityContribution;
    }
    
    function transferToTreasury() external {
        require(msg.sender == treasuryAddress || msg.sender == owner());
        payable(treasuryAddress).transfer(treasuryFunds);
        treasuryFunds -= treasuryFunds;
    }
    function viewTreasuryFunds() external view returns (uint256) {
        return treasuryFunds;
    }
    function transferToDevelopment() external {
        require(msg.sender == developmentAddress || msg.sender == owner());
        payable(developmentAddress).transfer(developmentFunds);
        developmentFunds -= developmentFunds;
    }
    function viewDevelopmentFunds() external view returns (uint256) {
        require(msg.sender == developmentAddress || msg.sender == owner());
        return developmentFunds;
    }

    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] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + 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] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + 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] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _rOwned[recipient] = _rOwned[recipient] + 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] - tAmount;
        _rOwned[sender] = _rOwned[sender] - rAmount;
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function numDAOelected() external view returns (uint256) {
        return electedCouncil.length();
    }

    function viewDAOelected(uint256 index) external view returns (address) {
        return electedCouncil.at(index);
    }

    function estimatedUSD(uint256 amount) internal view returns (uint256) {
        address[] memory path = new address[](2);
        path[0] = USDCaddress;
        path[1] = WETHaddress; 
        return uniswapV2Router.getAmountsIn(amount, path)[0];
    }

    struct WalletData {
        uint256 tokenBalance;        
        uint256 DAOwinningBuy;        
    }

    struct TokenData {
        uint256 totalReflections;
        uint256 DAOcandidateRoundDuration;
        address DAOcandidate;
        uint256 DAOcandidateScore;
        uint256 timeLastDAOcandidate;
        uint256 numDAOmembers;
        uint256 totalDAOrewards;
        uint256 treasuryFunds;
        uint256 charityFunds;
        uint256 liquidityFunds;        
    }

    function fetchWalletData(address wallet) external view returns (WalletData memory) {
        return WalletData(balanceOf(wallet), DAOwinningBuy[wallet]);
    }

    function fetchBigDataA() external view returns (TokenData memory) {
        return TokenData(_tFeeTotal, DAOcandidateRoundDuration, DAOcandidate, DAOcandidateScore, timeLastDAOcandidate, electedCouncil.length(), totalDAOrewards, 
            treasuryFunds, charityFunds, IERC20(WETHaddress).balanceOf(uniswapV2Pair));
    }
    function fetchBigDataB() external view returns (TokenData memory) {
        return TokenData(_tFeeTotal, DAOcandidateRoundDuration, DAOcandidate, DAOcandidateScore, timeLastDAOcandidate, electedCouncil.length(), totalDAOrewards, 
            estimatedUSD(treasuryFunds), estimatedUSD(charityFunds), estimatedUSD(IERC20(WETHaddress).balanceOf(uniswapV2Pair)));
    }
     
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"DAOcandidate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAOcandidateRoundDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAOcandidateScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"DAOwinningBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_WALLETRESTRICTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"botWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"claimStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"developmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_charityAddress","type":"address"},{"internalType":"uint256","name":"_charityContribution","type":"uint256"}],"name":"donateToCharity","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":[],"name":"fetchBigDataA","outputs":[{"components":[{"internalType":"uint256","name":"totalReflections","type":"uint256"},{"internalType":"uint256","name":"DAOcandidateRoundDuration","type":"uint256"},{"internalType":"address","name":"DAOcandidate","type":"address"},{"internalType":"uint256","name":"DAOcandidateScore","type":"uint256"},{"internalType":"uint256","name":"timeLastDAOcandidate","type":"uint256"},{"internalType":"uint256","name":"numDAOmembers","type":"uint256"},{"internalType":"uint256","name":"totalDAOrewards","type":"uint256"},{"internalType":"uint256","name":"treasuryFunds","type":"uint256"},{"internalType":"uint256","name":"charityFunds","type":"uint256"},{"internalType":"uint256","name":"liquidityFunds","type":"uint256"}],"internalType":"struct Shibana.TokenData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fetchBigDataB","outputs":[{"components":[{"internalType":"uint256","name":"totalReflections","type":"uint256"},{"internalType":"uint256","name":"DAOcandidateRoundDuration","type":"uint256"},{"internalType":"address","name":"DAOcandidate","type":"address"},{"internalType":"uint256","name":"DAOcandidateScore","type":"uint256"},{"internalType":"uint256","name":"timeLastDAOcandidate","type":"uint256"},{"internalType":"uint256","name":"numDAOmembers","type":"uint256"},{"internalType":"uint256","name":"totalDAOrewards","type":"uint256"},{"internalType":"uint256","name":"treasuryFunds","type":"uint256"},{"internalType":"uint256","name":"charityFunds","type":"uint256"},{"internalType":"uint256","name":"liquidityFunds","type":"uint256"}],"internalType":"struct Shibana.TokenData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"fetchWalletData","outputs":[{"components":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"},{"internalType":"uint256","name":"DAOwinningBuy","type":"uint256"}],"internalType":"struct Shibana.WalletData","name":"","type":"tuple"}],"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":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numDAOelected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"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":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"},{"internalType":"address","name":"_developmentAddress","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletRestrictionAmount","type":"uint256"}],"name":"setWalletRestrictionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"timeLastDAOcandidate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"totalDAOrewards","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":"pure","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":"transferToDevelopment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"viewDAOelected","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewDevelopmentFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTreasuryFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletRestrictionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052603c601055620000176009600a620004c9565b620000279063041cdb40620004e1565b620000359060001962000519565b620000439060001962000530565b601355601580546001600160a01b03199081167314a3f1f523c09ea1275d966ffa41aca0216ad6941790915560168054821673506f5d1c3e403d234c9df98cb3a79f2fbcc905d117905560178054909116331790556003601b819055601c556009601d819055601e81905561012c90620000bf90600a620004c9565b620000cf9063041cdb40620004e1565b620000db91906200054a565b602155348015620000eb57600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36013543360009081526002602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9263c45a015592600480820193918290030181865afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b6919062000561565b6040516364e329cb60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201526001600160a01b03919091169063c9c65396906044016020604051808303816000875af115801562000219573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023f919062000561565b6001600160a01b031660808190526000908152600860205260409020805460ff191660011790556200028930737a250d5630b4cf539739df2c5dacb4c659f2488d60001962000353565b600160056000620002a26000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526005909352818320805485166001908117909155601554909116835290822080549093161790915533907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200032c6009600a620004c9565b6200033c9063041cdb40620004e1565b60405190815260200160405180910390a36200058c565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200040b578160001904821115620003ef57620003ef620003b4565b80851615620003fd57918102915b93841c9390800290620003cf565b509250929050565b6000826200042457506001620004c3565b816200043357506000620004c3565b81600181146200044c5760028114620004575762000477565b6001915050620004c3565b60ff8411156200046b576200046b620003b4565b50506001821b620004c3565b5060208310610133831016604e8410600b84101617156200049c575081810a620004c3565b620004a88383620003ca565b8060001904821115620004bf57620004bf620003b4565b0290505b92915050565b6000620004da60ff84168362000413565b9392505050565b6000816000190483118215151615620004fe57620004fe620003b4565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826200052b576200052b62000503565b500690565b600082821015620005455762000545620003b4565b500390565b6000826200055c576200055c62000503565b500490565b6000602082840312156200057457600080fd5b81516001600160a01b0381168114620004da57600080fd5b6080516137be620005bd6000396000818161066201528181610d8601528181611bdb0152611f1601526137be6000f3fe6080604052600436106103475760003560e01c806367b5096a116101b2578063a7a63722116100ed578063d49d518111610090578063d49d518114610a3a578063dd62ed3e14610a50578063e17901d814610a96578063ea2f0b3714610aac578063ecc9c0b314610acc578063ed5091c814610ae1578063f2fde38b14610b01578063f63821f614610b2157600080fd5b8063a7a6372214610962578063a8eb226d14610978578063a9059cbb14610998578063b782dd2d146109b8578063c5f956af146109ce578063ca33e64c146109ee578063d00efb2f14610a0e578063d12a768814610a2457600080fd5b806388f820201161015557806388f82020146108645780638da5cb5b1461089d57806395d89b41146108b25780639c01a401146108e2578063a3f8a329146108f8578063a457c2d71461090d578063a4b45c001461092d578063a63342311461094d57600080fd5b806367b5096a1461077e5780636bc87c3a1461079e5780636ff86162146107b457806370a08231146107c9578063715018a6146107e957806372bb61be146107fe57806381946a2514610813578063845dc2d21461084e57600080fd5b806339509351116102825780634aa46a35116102255780634aa46a351461068457806350e7c4a2146106a457806352390c02146106ba5780635342acb4146106da57806358fa63ca146107135780635b897c941461072857806360ffe08614610748578063638b1b141461075e57600080fd5b806339509351146105785780633b124fe7146105985780633b77f0eb146105ae5780633bd5d173146105c35780633c09f7de146105e3578063437823ec146106105780634549b0391461063057806349bd5a5e1461065057600080fd5b806323b872dd116102ea57806323b872dd1461047a57806326d510911461049a57806329e04b4a146104bc5780632a360631146104dc5780632d838119146104fc578063302707cb1461051c578063313ce5671461053c5780633685d4191461055857600080fd5b806301cfbeb7146103535780630305caff1461037b57806306fdde031461039d578063095ea7b3146103d657806313114a9d146104065780631694505e1461041b57806318160ddd1461045057806321fb7a751461046557600080fd5b3661034e57005b600080fd5b34801561035f57600080fd5b50610368610b51565b6040519081526020015b60405180910390f35b34801561038757600080fd5b5061039b61039636600461318d565b610b85565b005b3480156103a957600080fd5b5060408051808201909152600781526653686962616e6160c81b60208201525b60405161037291906131aa565b3480156103e257600080fd5b506103f66103f13660046131ff565b610bd9565b6040519015158152602001610372565b34801561041257600080fd5b50601454610368565b34801561042757600080fd5b50610443737a250d5630b4cf539739df2c5dacb4c659f2488d81565b604051610372919061322b565b34801561045c57600080fd5b50610368610bf0565b34801561047157600080fd5b5061039b610c11565b34801561048657600080fd5b506103f661049536600461323f565b610ca0565b3480156104a657600080fd5b506104af610cf3565b6040516103729190613280565b3480156104c857600080fd5b5061039b6104d7366004613302565b610e09565b3480156104e857600080fd5b5061039b6104f736600461318d565b610eac565b34801561050857600080fd5b50610368610517366004613302565b610f57565b34801561052857600080fd5b5061039b61053736600461318d565b610fdb565b34801561054857600080fd5b5060405160098152602001610372565b34801561056457600080fd5b5061039b61057336600461318d565b611066565b34801561058457600080fd5b506103f66105933660046131ff565b6111e8565b3480156105a457600080fd5b50610368601b5481565b3480156105ba57600080fd5b50601954610368565b3480156105cf57600080fd5b5061039b6105de366004613302565b61121f565b3480156105ef57600080fd5b506103686105fe36600461318d565b600e6020526000908152604090205481565b34801561061c57600080fd5b5061039b61062b36600461318d565b6112fa565b34801561063c57600080fd5b5061036861064b366004613329565b611348565b34801561065c57600080fd5b506104437f000000000000000000000000000000000000000000000000000000000000000081565b34801561069057600080fd5b5061044361069f366004613302565b6113ec565b3480156106b057600080fd5b5061036860115481565b3480156106c657600080fd5b5061039b6106d536600461318d565b6113f9565b3480156106e657600080fd5b506103f66106f536600461318d565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561071f57600080fd5b50610443600081565b34801561073457600080fd5b5061039b6107433660046131ff565b61151c565b34801561075457600080fd5b50610368600f5481565b34801561076a57600080fd5b50601754610443906001600160a01b031681565b34801561078a57600080fd5b5061039b610799366004613302565b611598565b3480156107aa57600080fd5b50610368601d5481565b3480156107c057600080fd5b5061039b61163e565b3480156107d557600080fd5b506103686107e436600461318d565b6116c6565b3480156107f557600080fd5b5061039b611725565b34801561080a57600080fd5b50610368611799565b34801561081f57600080fd5b5061083361082e36600461318d565b6117dd565b60408051825181526020928301519281019290925201610372565b34801561085a57600080fd5b50610368600d5481565b34801561087057600080fd5b506103f661087f36600461318d565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108a957600080fd5b5061044361182e565b3480156108be57600080fd5b5060408051808201909152600781526653484942414e4160c81b60208201526103c9565b3480156108ee57600080fd5b5061036860195481565b34801561090457600080fd5b5061036861183d565b34801561091957600080fd5b506103f66109283660046131ff565b611849565b34801561093957600080fd5b5061039b610948366004613359565b611888565b34801561095957600080fd5b5061039b6118e0565b34801561096e57600080fd5b5061036860105481565b34801561098457600080fd5b5061039b610993366004613359565b6119b0565b3480156109a457600080fd5b506103f66109b33660046131ff565b611add565b3480156109c457600080fd5b5061036860205481565b3480156109da57600080fd5b50601654610443906001600160a01b031681565b3480156109fa57600080fd5b50601554610443906001600160a01b031681565b348015610a1a57600080fd5b5061036860125481565b348015610a3057600080fd5b5061036860215481565b348015610a4657600080fd5b5061036860001981565b348015610a5c57600080fd5b50610368610a6b366004613359565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610aa257600080fd5b5061036860185481565b348015610ab857600080fd5b5061039b610ac736600461318d565b611aea565b348015610ad857600080fd5b506104af611b35565b348015610aed57600080fd5b50600c54610443906001600160a01b031681565b348015610b0d57600080fd5b5061039b610b1c36600461318d565b611c5c565b348015610b2d57600080fd5b506103f6610b3c36600461318d565b60076020526000908152604090205460ff1681565b60c8610b5f6009600a613481565b610b6d9063041cdb40613490565b610b78906003613490565b610b8291906134af565b81565b6000546001600160a01b03163314610bb85760405162461bcd60e51b8152600401610baf906134d1565b60405180910390fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000610be6338484611d46565b5060015b92915050565b6000610bfe6009600a613481565b610c0c9063041cdb40613490565b905090565b6017546001600160a01b0316331480610c425750610c2d61182e565b6001600160a01b0316336001600160a01b0316145b610c4b57600080fd5b601754601a546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610c87573d6000803e3d6000fd5b50601a8054906000610c998380613506565b9091555050565b6000610cad848484611da7565b6001600160a01b03841660009081526004602090815260408083203380855292529091205490610ce8908690610ce38685613506565b611d46565b506001949350505050565b610cfb613119565b604080516101408101825260145481526010546020820152600c546001600160a01b031691810191909152600d546060820152600f54608082015260a08101610d44600a612271565b815260200160115481526020016019548152602001601854815260200173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610dc1919061322b565b602060405180830381865afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e02919061351d565b9052919050565b6000546001600160a01b03163314610e335760405162461bcd60e51b8152600401610baf906134d1565b6103e8610e426009600a613481565b610e509063041cdb40613490565b610e5a91906134af565b811015610ea75760405162461bcd60e51b815260206004820152601b60248201527a5b302e312c4d415855494e545f3235365d202520737570706c792960281b6044820152606401610baf565b602155565b6000546001600160a01b03163314610ed65760405162461bcd60e51b8152600401610baf906134d1565b601254610ee490603c613536565b431115610f335760405162461bcd60e51b815260206004820152601c60248201527f416e7469626f74206f6e6c7920666972737420363020626c6f636b73000000006044820152606401610baf565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000601354821115610fbe5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610baf565b6000610fc861227b565b9050610fd481846134af565b9392505050565b6000546001600160a01b031633146110055760405162461bcd60e51b8152600401610baf906134d1565b806001600160a01b03166108fc601954601a54601854476110269190613506565b6110309190613506565b61103a9190613506565b6040518115909202916000818181858888f19350505050158015611062573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146110905760405162461bcd60e51b8152600401610baf906134d1565b6001600160a01b03811660009081526006602052604090205460ff166110c85760405162461bcd60e51b8152600401610baf9061354e565b60005b60095481101561106257816001600160a01b0316600982815481106110f2576110f2613583565b6000918252602090912001546001600160a01b0316036111d6576009805461111c90600190613506565b8154811061112c5761112c613583565b600091825260209091200154600980546001600160a01b03909216918390811061115857611158613583565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff1916905560098054806111b0576111b0613599565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111e0816135af565b9150506110cb565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610be6918590610ce3908690613536565b3360009081526006602052604090205460ff16156112945760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610baf565b600061129f8261229e565b5050336000908152600260205260409020549394506112c49385935091506135069050565b336000908152600260205260409020556013546112e2908290613506565b6013556014546112f3908390613536565b6014555050565b6000546001600160a01b031633146113245760405162461bcd60e51b8152600401610baf906134d1565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60006113566009600a613481565b6113649063041cdb40613490565b8311156113b35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610baf565b816113d25760006113c38461229e565b50939550610bea945050505050565b60006113dd8461229e565b50929550610bea945050505050565b6000610bea600a836122ed565b6000546001600160a01b031633146114235760405162461bcd60e51b8152600401610baf906134d1565b6001600160a01b03811660009081526006602052604090205460ff161561145c5760405162461bcd60e51b8152600401610baf9061354e565b6001600160a01b038116600090815260026020526040902054156114b6576001600160a01b03811660009081526002602052604090205461149c90610f57565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146115465760405162461bcd60e51b8152600401610baf906134d1565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561157c573d6000803e3d6000fd5b50806018600082825461158f9190613506565b90915550505050565b6000546001600160a01b031633146115c25760405162461bcd60e51b8152600401610baf906134d1565b60c86115d06009600a613481565b6115de9063041cdb40613490565b6115e9906003613490565b6115f391906134af565b8110156116395760405162461bcd60e51b81526020600482015260146024820152735b312e352c204d415855494e545f3235365d202560601b6044820152606401610baf565b602055565b6016546001600160a01b031633148061166f575061165a61182e565b6001600160a01b0316336001600160a01b0316145b61167857600080fd5b6016546019546040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156116b4573d6000803e3d6000fd5b5060198054906000610c998380613506565b6001600160a01b03811660009081526006602052604081205460ff161561170357506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610bea90610f57565b6000546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610baf906134d1565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6017546000906001600160a01b03163314806117cd57506117b861182e565b6001600160a01b0316336001600160a01b0316145b6117d657600080fd5b50601a5490565b60408051808201909152600080825260208201526040518060400160405280611805846116c6565b81526001600160a01b039093166000908152600e60209081526040909120549301929092525090565b6000546001600160a01b031690565b6000610c0c600a612271565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161187e9085610ce38685613506565b5060019392505050565b6000546001600160a01b031633146118b25760405162461bcd60e51b8152600401610baf906134d1565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000546001600160a01b0316331461190a5760405162461bcd60e51b8152600401610baf906134d1565b60c86119186009600a613481565b6119269063041cdb40613490565b611931906003613490565b61193b91906134af565b602054106119765760405162461bcd60e51b815260206004820152600860248201526713185d5b98da195960c21b6044820152606401610baf565b60c86119846009600a613481565b6119929063041cdb40613490565b61199d906003613490565b6119a791906134af565b60205543601255565b6000546001600160a01b031633146119da5760405162461bcd60e51b8152600401610baf906134d1565b306001600160a01b038316036119ef57600080fd5b6040516370a0823160e01b815282906001600160a01b0382169063a9059cbb90849083906370a0823190611a2790309060040161322b565b602060405180830381865afa158015611a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a68919061351d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad791906135c8565b50505050565b6000610be6338484611da7565b6000546001600160a01b03163314611b145760405162461bcd60e51b8152600401610baf906134d1565b6001600160a01b03166000908152600560205260409020805460ff19169055565b611b3d613119565b604080516101408101825260145481526010546020820152600c546001600160a01b031691810191909152600d546060820152600f54608082015260a08101611b86600a612271565b81526020016011548152602001611b9e6019546122f9565b8152602001611bae6018546122f9565b8152602001610e0273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401611c16919061322b565b602060405180830381865afa158015611c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c57919061351d565b6122f9565b6000546001600160a01b03163314611c865760405162461bcd60e51b8152600401610baf906134d1565b6001600160a01b038116611ceb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610baf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111611dee5760405162461bcd60e51b815260206004820152601460248201527305472616e73666572206d6f7265207468616e20360641b6044820152606401610baf565b6001600160a01b03831660009081526007602052604090205460ff1615611e415760405162461bcd60e51b81526020600482015260076024820152664e6f20626f747360c81b6044820152606401610baf565b6001600160a01b03831660009081526005602052604090205460019060ff1680611e8357506001600160a01b03831660009081526005602052604090205460ff165b15611e9057506000611fa7565b60205460c8611ea16009600a613481565b611eaf9063041cdb40613490565b611eba906003613490565b611ec491906134af565b811015611eff5760405162461bcd60e51b81526020600482015260096024820152684c61756e6368696e6760b81b6044820152606401610baf565b600019811015611fa557808311158015611f6757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480611f6757508083611f5a866116c6565b611f649190613536565b11155b611fa55760405162461bcd60e51b815260206004820152600f60248201526e1b585e151e0bdb585e15d85b1b195d608a1b6044820152606401610baf565b505b801561226557600c546001600160a01b0385811660009081526008602052604090205491169060ff16156121c65760408051600280825260608201835260009260208301908036833701905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061201e5761201e613583565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061205257612052613583565b6001600160a01b03909216602092830291909101909101526040516307c0329d60e21b8152600090737a250d5630b4cf539739df2c5dacb4c659f2488d90631f00ca74906120a6908890869060040161363f565b600060405180830381865afa1580156120c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120eb9190810190613660565b6000815181106120fd576120fd613583565b60200260200101519050601054600f546121179190613536565b4211801561212d57506001600160a01b03831615155b156121765761213d600a84612446565b151560000361215357612151600a84612468565b505b600d80546001600160a01b0385166000908152600e602052604081209190915590555b600d548111156121bf57856001600160a01b0316836001600160a01b0316146121b557600c80546001600160a01b0319166001600160a01b0388161790555b600d81905542600f555b5050612263565b600c546001600160a01b03908116908616036121fa57600c80546001600160a01b03191690556000600d5542600f55612263565b601f5460ff166122635760215460155461221c906001600160a01b03166116c6565b106122315761222c60215461247d565b612263565b60215461223d306116c6565b1015801561225357506001600160a01b03811615155b15612263576122636021546125c7565b505b611ad7848484846126da565b6000610bea825490565b6000806000612288612851565b909250905061229781836134af565b9250505090565b60008060008060008060008060006122b58a612a34565b92509250925060008060006122d38d86866122ce61227b565b612a77565b919f909e50909c50959a5093985091965092945050505050565b6000610fd48383612ace565b6040805160028082526060820183526000928392919060208301908036833701905050905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488160008151811061234657612346613583565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061238e5761238e613583565b6001600160a01b03909216602092830291909101909101526040516307c0329d60e21b8152737a250d5630b4cf539739df2c5dacb4c659f2488d90631f00ca74906123df908690859060040161363f565b600060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124249190810190613660565b60008151811061243657612436613583565b6020026020010151915050919050565b6001600160a01b03811660009081526001830160205260408120541515610fd4565b6000610fd4836001600160a01b038416612b54565b601f805460ff191660011790556015546124a3906001600160a01b0316308360006126da565b60006124b06002836134af565b905060006124be8284613506565b9050806000036124cf5750506125ba565b476124d982612ba3565b60006124e58247613506565b90506000841180156124f75750600081115b156125b557737a250d5630b4cf539739df2c5dacb4c659f2488d63f305d71982308760008061252461182e565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561258c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125b1919061371e565b5050505b505050505b50601f805460ff19169055565b601f805460ff19166001179055476125de82612ba3565b60006125ea8247613506565b905060076125f9826003613490565b61260391906134af565b601960008282546126149190613536565b9091555061262590506007826134af565b601a60008282546126369190613536565b9091555060079050612649826002613490565b61265391906134af565b601860008282546126649190613536565b90915550600090506126776007836134af565b600c546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156126b2573d6000803e3d6000fd5b5080601160008282546126c59190613536565b9091555050601f805460ff1916905550505050565b806126e7576126e7612cae565b6001600160a01b03841660009081526006602052604090205460ff16801561272857506001600160a01b03831660009081526006602052604090205460ff16155b1561273d57612738848484612cdc565b61283b565b6001600160a01b03841660009081526006602052604090205460ff1615801561277e57506001600160a01b03831660009081526006602052604090205460ff165b1561278e57612738848484612e05565b6001600160a01b03841660009081526006602052604090205460ff161580156127d057506001600160a01b03831660009081526006602052604090205460ff16155b156127e057612738848484612eb1565b6001600160a01b03841660009081526006602052604090205460ff16801561282057506001600160a01b03831660009081526006602052604090205460ff165b1561283057612738848484612ef6565b61283b848484612eb1565b80611ad757611ad7601c54601b55601e54601d55565b6013546000908190816128666009600a613481565b6128749063041cdb40613490565b905060005b6009548110156129d55782600260006009848154811061289b5761289b613583565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061290657508160036000600984815481106128df576128df613583565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156129335760135461291a6009600a613481565b6129289063041cdb40613490565b945094505050509091565b600260006009838154811061294a5761294a613583565b60009182526020808320909101546001600160a01b031683528201929092526040019020546129799084613506565b9250600360006009838154811061299257612992613583565b60009182526020808320909101546001600160a01b031683528201929092526040019020546129c19083613506565b9150806129cd816135af565b915050612879565b506129e26009600a613481565b6129f09063041cdb40613490565b6013546129fd91906134af565b821015612a2b57601354612a136009600a613481565b612a219063041cdb40613490565b9350935050509091565b90939092509050565b600080600080612a4385612f6b565b90506000612a5086612f87565b9050600081612a5f8489613506565b612a699190613506565b979296509094509092505050565b6000808080612a868589613490565b90506000612a948689613490565b90506000612aa28789613490565b9050600081612ab18486613506565b612abb9190613506565b939b939a50919850919650505050505050565b81546000908210612b2c5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610baf565b826000018281548110612b4157612b41613583565b9060005260206000200154905092915050565b6000818152600183016020526040812054612b9b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bea565b506000610bea565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bd857612bd8613583565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612c2057612c20613583565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790612c7890859060009086903090429060040161374c565b600060405180830381600087803b158015612c9257600080fd5b505af1158015612ca6573d6000803e3d6000fd5b505050505050565b601b54158015612cbe5750601d54155b15612cc557565b601b8054601c55601d8054601e5560009182905555565b600080600080600080612cee8761229e565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612d21908890613506565b6001600160a01b038a16600090815260036020908152604080832093909355600290522054612d51908790613506565b6001600160a01b03808b1660009081526002602052604080822093909355908a1681522054612d81908690613536565b6001600160a01b038916600090815260026020526040902055612da381612f99565b612dad84836130fa565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612df291815260200190565b60405180910390a3505050505050505050565b600080600080600080612e178761229e565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612e4a908790613506565b6001600160a01b03808b16600090815260026020908152604080832094909455918b16815260039091522054612e81908490613536565b6001600160a01b038916600090815260036020908152604080832093909355600290522054612d81908690613536565b600080600080600080612ec38761229e565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612d51908790613506565b600080600080600080612f088761229e565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612f3b908890613506565b6001600160a01b038a16600090815260036020908152604080832093909355600290522054612e4a908790613506565b60006064601b5483612f7d9190613490565b610bea91906134af565b60006064601d5483612f7d9190613490565b6000612fa361227b565b905060006009612fb4846007613490565b612fbe91906134af565b9050612fca8184613506565b92506000612fd88385613490565b6015546001600160a01b0316600090815260026020526040902054909150613001908290613536565b601580546001600160a01b03908116600090815260026020908152604080832095909555925490911681526006909152205460ff161561307d576015546001600160a01b0316600090815260036020526040902054613061908590613536565b6015546001600160a01b03166000908152600360205260409020555b6130878383613490565b306000908152600260205260409020549091506130a5908290613536565b3060009081526002602090815260408083209390935560069052205460ff1615611ad757306000908152600360205260409020546130e4908390613536565b3060009081526003602052604090205550505050565b816013546131089190613506565b6013556014546112f3908290613536565b604051806101400160405280600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461318a57600080fd5b50565b60006020828403121561319f57600080fd5b8135610fd481613175565b600060208083528351808285015260005b818110156131d7578581018301518582016040015282016131bb565b818111156131e9576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561321257600080fd5b823561321d81613175565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60008060006060848603121561325457600080fd5b833561325f81613175565b9250602084013561326f81613175565b929592945050506040919091013590565b600061014082019050825182526020830151602083015260408301516132b160408401826001600160a01b03169052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b60006020828403121561331457600080fd5b5035919050565b801515811461318a57600080fd5b6000806040838503121561333c57600080fd5b82359150602083013561334e8161331b565b809150509250929050565b6000806040838503121561336c57600080fd5b823561337781613175565b9150602083013561334e81613175565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156133d85781600019048211156133be576133be613387565b808516156133cb57918102915b93841c93908002906133a2565b509250929050565b6000826133ef57506001610bea565b816133fc57506000610bea565b8160018114613412576002811461341c57613438565b6001915050610bea565b60ff84111561342d5761342d613387565b50506001821b610bea565b5060208310610133831016604e8410600b841016171561345b575081810a610bea565b613465838361339d565b806000190482111561347957613479613387565b029392505050565b6000610fd460ff8416836133e0565b60008160001904831182151516156134aa576134aa613387565b500290565b6000826134cc57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008282101561351857613518613387565b500390565b60006020828403121561352f57600080fd5b5051919050565b6000821982111561354957613549613387565b500190565b6020808252601b908201527a1058d8dbdd5b9d081a5cc8185b1c9958591e48195e18db1d591959602a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016135c1576135c1613387565b5060010190565b6000602082840312156135da57600080fd5b8151610fd48161331b565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156136345781516001600160a01b03168752958201959082019060010161360f565b509495945050505050565b82815260406020820152600061365860408301846135fb565b949350505050565b6000602080838503121561367357600080fd5b825167ffffffffffffffff8082111561368b57600080fd5b818501915085601f83011261369f57600080fd5b8151818111156136b1576136b16135e5565b8060051b604051601f19603f830116810181811085821117156136d6576136d66135e5565b6040529182528482019250838101850191888311156136f457600080fd5b938501935b82851015613712578451845293850193928501926136f9565b98975050505050505050565b60008060006060848603121561373357600080fd5b8351925060208401519150604084015190509250925092565b85815284602082015260a06040820152600061376b60a08301866135fb565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220a64dc614b64b7386960bb5e7fc3e7d848ccb771a199ab49ca91f5fb7d992f9ca64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103475760003560e01c806367b5096a116101b2578063a7a63722116100ed578063d49d518111610090578063d49d518114610a3a578063dd62ed3e14610a50578063e17901d814610a96578063ea2f0b3714610aac578063ecc9c0b314610acc578063ed5091c814610ae1578063f2fde38b14610b01578063f63821f614610b2157600080fd5b8063a7a6372214610962578063a8eb226d14610978578063a9059cbb14610998578063b782dd2d146109b8578063c5f956af146109ce578063ca33e64c146109ee578063d00efb2f14610a0e578063d12a768814610a2457600080fd5b806388f820201161015557806388f82020146108645780638da5cb5b1461089d57806395d89b41146108b25780639c01a401146108e2578063a3f8a329146108f8578063a457c2d71461090d578063a4b45c001461092d578063a63342311461094d57600080fd5b806367b5096a1461077e5780636bc87c3a1461079e5780636ff86162146107b457806370a08231146107c9578063715018a6146107e957806372bb61be146107fe57806381946a2514610813578063845dc2d21461084e57600080fd5b806339509351116102825780634aa46a35116102255780634aa46a351461068457806350e7c4a2146106a457806352390c02146106ba5780635342acb4146106da57806358fa63ca146107135780635b897c941461072857806360ffe08614610748578063638b1b141461075e57600080fd5b806339509351146105785780633b124fe7146105985780633b77f0eb146105ae5780633bd5d173146105c35780633c09f7de146105e3578063437823ec146106105780634549b0391461063057806349bd5a5e1461065057600080fd5b806323b872dd116102ea57806323b872dd1461047a57806326d510911461049a57806329e04b4a146104bc5780632a360631146104dc5780632d838119146104fc578063302707cb1461051c578063313ce5671461053c5780633685d4191461055857600080fd5b806301cfbeb7146103535780630305caff1461037b57806306fdde031461039d578063095ea7b3146103d657806313114a9d146104065780631694505e1461041b57806318160ddd1461045057806321fb7a751461046557600080fd5b3661034e57005b600080fd5b34801561035f57600080fd5b50610368610b51565b6040519081526020015b60405180910390f35b34801561038757600080fd5b5061039b61039636600461318d565b610b85565b005b3480156103a957600080fd5b5060408051808201909152600781526653686962616e6160c81b60208201525b60405161037291906131aa565b3480156103e257600080fd5b506103f66103f13660046131ff565b610bd9565b6040519015158152602001610372565b34801561041257600080fd5b50601454610368565b34801561042757600080fd5b50610443737a250d5630b4cf539739df2c5dacb4c659f2488d81565b604051610372919061322b565b34801561045c57600080fd5b50610368610bf0565b34801561047157600080fd5b5061039b610c11565b34801561048657600080fd5b506103f661049536600461323f565b610ca0565b3480156104a657600080fd5b506104af610cf3565b6040516103729190613280565b3480156104c857600080fd5b5061039b6104d7366004613302565b610e09565b3480156104e857600080fd5b5061039b6104f736600461318d565b610eac565b34801561050857600080fd5b50610368610517366004613302565b610f57565b34801561052857600080fd5b5061039b61053736600461318d565b610fdb565b34801561054857600080fd5b5060405160098152602001610372565b34801561056457600080fd5b5061039b61057336600461318d565b611066565b34801561058457600080fd5b506103f66105933660046131ff565b6111e8565b3480156105a457600080fd5b50610368601b5481565b3480156105ba57600080fd5b50601954610368565b3480156105cf57600080fd5b5061039b6105de366004613302565b61121f565b3480156105ef57600080fd5b506103686105fe36600461318d565b600e6020526000908152604090205481565b34801561061c57600080fd5b5061039b61062b36600461318d565b6112fa565b34801561063c57600080fd5b5061036861064b366004613329565b611348565b34801561065c57600080fd5b506104437f0000000000000000000000001ad129a21bcb3e7fa3dd50d8b294f6b8e291c9f881565b34801561069057600080fd5b5061044361069f366004613302565b6113ec565b3480156106b057600080fd5b5061036860115481565b3480156106c657600080fd5b5061039b6106d536600461318d565b6113f9565b3480156106e657600080fd5b506103f66106f536600461318d565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561071f57600080fd5b50610443600081565b34801561073457600080fd5b5061039b6107433660046131ff565b61151c565b34801561075457600080fd5b50610368600f5481565b34801561076a57600080fd5b50601754610443906001600160a01b031681565b34801561078a57600080fd5b5061039b610799366004613302565b611598565b3480156107aa57600080fd5b50610368601d5481565b3480156107c057600080fd5b5061039b61163e565b3480156107d557600080fd5b506103686107e436600461318d565b6116c6565b3480156107f557600080fd5b5061039b611725565b34801561080a57600080fd5b50610368611799565b34801561081f57600080fd5b5061083361082e36600461318d565b6117dd565b60408051825181526020928301519281019290925201610372565b34801561085a57600080fd5b50610368600d5481565b34801561087057600080fd5b506103f661087f36600461318d565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108a957600080fd5b5061044361182e565b3480156108be57600080fd5b5060408051808201909152600781526653484942414e4160c81b60208201526103c9565b3480156108ee57600080fd5b5061036860195481565b34801561090457600080fd5b5061036861183d565b34801561091957600080fd5b506103f66109283660046131ff565b611849565b34801561093957600080fd5b5061039b610948366004613359565b611888565b34801561095957600080fd5b5061039b6118e0565b34801561096e57600080fd5b5061036860105481565b34801561098457600080fd5b5061039b610993366004613359565b6119b0565b3480156109a457600080fd5b506103f66109b33660046131ff565b611add565b3480156109c457600080fd5b5061036860205481565b3480156109da57600080fd5b50601654610443906001600160a01b031681565b3480156109fa57600080fd5b50601554610443906001600160a01b031681565b348015610a1a57600080fd5b5061036860125481565b348015610a3057600080fd5b5061036860215481565b348015610a4657600080fd5b5061036860001981565b348015610a5c57600080fd5b50610368610a6b366004613359565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610aa257600080fd5b5061036860185481565b348015610ab857600080fd5b5061039b610ac736600461318d565b611aea565b348015610ad857600080fd5b506104af611b35565b348015610aed57600080fd5b50600c54610443906001600160a01b031681565b348015610b0d57600080fd5b5061039b610b1c36600461318d565b611c5c565b348015610b2d57600080fd5b506103f6610b3c36600461318d565b60076020526000908152604090205460ff1681565b60c8610b5f6009600a613481565b610b6d9063041cdb40613490565b610b78906003613490565b610b8291906134af565b81565b6000546001600160a01b03163314610bb85760405162461bcd60e51b8152600401610baf906134d1565b60405180910390fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000610be6338484611d46565b5060015b92915050565b6000610bfe6009600a613481565b610c0c9063041cdb40613490565b905090565b6017546001600160a01b0316331480610c425750610c2d61182e565b6001600160a01b0316336001600160a01b0316145b610c4b57600080fd5b601754601a546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610c87573d6000803e3d6000fd5b50601a8054906000610c998380613506565b9091555050565b6000610cad848484611da7565b6001600160a01b03841660009081526004602090815260408083203380855292529091205490610ce8908690610ce38685613506565b611d46565b506001949350505050565b610cfb613119565b604080516101408101825260145481526010546020820152600c546001600160a01b031691810191909152600d546060820152600f54608082015260a08101610d44600a612271565b815260200160115481526020016019548152602001601854815260200173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03166370a082317f0000000000000000000000001ad129a21bcb3e7fa3dd50d8b294f6b8e291c9f86040518263ffffffff1660e01b8152600401610dc1919061322b565b602060405180830381865afa158015610dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e02919061351d565b9052919050565b6000546001600160a01b03163314610e335760405162461bcd60e51b8152600401610baf906134d1565b6103e8610e426009600a613481565b610e509063041cdb40613490565b610e5a91906134af565b811015610ea75760405162461bcd60e51b815260206004820152601b60248201527a5b302e312c4d415855494e545f3235365d202520737570706c792960281b6044820152606401610baf565b602155565b6000546001600160a01b03163314610ed65760405162461bcd60e51b8152600401610baf906134d1565b601254610ee490603c613536565b431115610f335760405162461bcd60e51b815260206004820152601c60248201527f416e7469626f74206f6e6c7920666972737420363020626c6f636b73000000006044820152606401610baf565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000601354821115610fbe5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610baf565b6000610fc861227b565b9050610fd481846134af565b9392505050565b6000546001600160a01b031633146110055760405162461bcd60e51b8152600401610baf906134d1565b806001600160a01b03166108fc601954601a54601854476110269190613506565b6110309190613506565b61103a9190613506565b6040518115909202916000818181858888f19350505050158015611062573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146110905760405162461bcd60e51b8152600401610baf906134d1565b6001600160a01b03811660009081526006602052604090205460ff166110c85760405162461bcd60e51b8152600401610baf9061354e565b60005b60095481101561106257816001600160a01b0316600982815481106110f2576110f2613583565b6000918252602090912001546001600160a01b0316036111d6576009805461111c90600190613506565b8154811061112c5761112c613583565b600091825260209091200154600980546001600160a01b03909216918390811061115857611158613583565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600382526040808220829055600690925220805460ff1916905560098054806111b0576111b0613599565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806111e0816135af565b9150506110cb565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610be6918590610ce3908690613536565b3360009081526006602052604090205460ff16156112945760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610baf565b600061129f8261229e565b5050336000908152600260205260409020549394506112c49385935091506135069050565b336000908152600260205260409020556013546112e2908290613506565b6013556014546112f3908390613536565b6014555050565b6000546001600160a01b031633146113245760405162461bcd60e51b8152600401610baf906134d1565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b60006113566009600a613481565b6113649063041cdb40613490565b8311156113b35760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610baf565b816113d25760006113c38461229e565b50939550610bea945050505050565b60006113dd8461229e565b50929550610bea945050505050565b6000610bea600a836122ed565b6000546001600160a01b031633146114235760405162461bcd60e51b8152600401610baf906134d1565b6001600160a01b03811660009081526006602052604090205460ff161561145c5760405162461bcd60e51b8152600401610baf9061354e565b6001600160a01b038116600090815260026020526040902054156114b6576001600160a01b03811660009081526002602052604090205461149c90610f57565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6000546001600160a01b031633146115465760405162461bcd60e51b8152600401610baf906134d1565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561157c573d6000803e3d6000fd5b50806018600082825461158f9190613506565b90915550505050565b6000546001600160a01b031633146115c25760405162461bcd60e51b8152600401610baf906134d1565b60c86115d06009600a613481565b6115de9063041cdb40613490565b6115e9906003613490565b6115f391906134af565b8110156116395760405162461bcd60e51b81526020600482015260146024820152735b312e352c204d415855494e545f3235365d202560601b6044820152606401610baf565b602055565b6016546001600160a01b031633148061166f575061165a61182e565b6001600160a01b0316336001600160a01b0316145b61167857600080fd5b6016546019546040516001600160a01b039092169181156108fc0291906000818181858888f193505050501580156116b4573d6000803e3d6000fd5b5060198054906000610c998380613506565b6001600160a01b03811660009081526006602052604081205460ff161561170357506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610bea90610f57565b6000546001600160a01b0316331461174f5760405162461bcd60e51b8152600401610baf906134d1565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6017546000906001600160a01b03163314806117cd57506117b861182e565b6001600160a01b0316336001600160a01b0316145b6117d657600080fd5b50601a5490565b60408051808201909152600080825260208201526040518060400160405280611805846116c6565b81526001600160a01b039093166000908152600e60209081526040909120549301929092525090565b6000546001600160a01b031690565b6000610c0c600a612271565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161187e9085610ce38685613506565b5060019392505050565b6000546001600160a01b031633146118b25760405162461bcd60e51b8152600401610baf906134d1565b601680546001600160a01b039384166001600160a01b03199182161790915560178054929093169116179055565b6000546001600160a01b0316331461190a5760405162461bcd60e51b8152600401610baf906134d1565b60c86119186009600a613481565b6119269063041cdb40613490565b611931906003613490565b61193b91906134af565b602054106119765760405162461bcd60e51b815260206004820152600860248201526713185d5b98da195960c21b6044820152606401610baf565b60c86119846009600a613481565b6119929063041cdb40613490565b61199d906003613490565b6119a791906134af565b60205543601255565b6000546001600160a01b031633146119da5760405162461bcd60e51b8152600401610baf906134d1565b306001600160a01b038316036119ef57600080fd5b6040516370a0823160e01b815282906001600160a01b0382169063a9059cbb90849083906370a0823190611a2790309060040161322b565b602060405180830381865afa158015611a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a68919061351d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611ab3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad791906135c8565b50505050565b6000610be6338484611da7565b6000546001600160a01b03163314611b145760405162461bcd60e51b8152600401610baf906134d1565b6001600160a01b03166000908152600560205260409020805460ff19169055565b611b3d613119565b604080516101408101825260145481526010546020820152600c546001600160a01b031691810191909152600d546060820152600f54608082015260a08101611b86600a612271565b81526020016011548152602001611b9e6019546122f9565b8152602001611bae6018546122f9565b8152602001610e0273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03166370a082317f0000000000000000000000001ad129a21bcb3e7fa3dd50d8b294f6b8e291c9f86040518263ffffffff1660e01b8152600401611c16919061322b565b602060405180830381865afa158015611c33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c57919061351d565b6122f9565b6000546001600160a01b03163314611c865760405162461bcd60e51b8152600401610baf906134d1565b6001600160a01b038116611ceb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610baf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60008111611dee5760405162461bcd60e51b815260206004820152601460248201527305472616e73666572206d6f7265207468616e20360641b6044820152606401610baf565b6001600160a01b03831660009081526007602052604090205460ff1615611e415760405162461bcd60e51b81526020600482015260076024820152664e6f20626f747360c81b6044820152606401610baf565b6001600160a01b03831660009081526005602052604090205460019060ff1680611e8357506001600160a01b03831660009081526005602052604090205460ff165b15611e9057506000611fa7565b60205460c8611ea16009600a613481565b611eaf9063041cdb40613490565b611eba906003613490565b611ec491906134af565b811015611eff5760405162461bcd60e51b81526020600482015260096024820152684c61756e6368696e6760b81b6044820152606401610baf565b600019811015611fa557808311158015611f6757507f0000000000000000000000001ad129a21bcb3e7fa3dd50d8b294f6b8e291c9f86001600160a01b0316846001600160a01b03161480611f6757508083611f5a866116c6565b611f649190613536565b11155b611fa55760405162461bcd60e51b815260206004820152600f60248201526e1b585e151e0bdb585e15d85b1b195d608a1b6044820152606401610baf565b505b801561226557600c546001600160a01b0385811660009081526008602052604090205491169060ff16156121c65760408051600280825260608201835260009260208301908036833701905050905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061201e5761201e613583565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061205257612052613583565b6001600160a01b03909216602092830291909101909101526040516307c0329d60e21b8152600090737a250d5630b4cf539739df2c5dacb4c659f2488d90631f00ca74906120a6908890869060040161363f565b600060405180830381865afa1580156120c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120eb9190810190613660565b6000815181106120fd576120fd613583565b60200260200101519050601054600f546121179190613536565b4211801561212d57506001600160a01b03831615155b156121765761213d600a84612446565b151560000361215357612151600a84612468565b505b600d80546001600160a01b0385166000908152600e602052604081209190915590555b600d548111156121bf57856001600160a01b0316836001600160a01b0316146121b557600c80546001600160a01b0319166001600160a01b0388161790555b600d81905542600f555b5050612263565b600c546001600160a01b03908116908616036121fa57600c80546001600160a01b03191690556000600d5542600f55612263565b601f5460ff166122635760215460155461221c906001600160a01b03166116c6565b106122315761222c60215461247d565b612263565b60215461223d306116c6565b1015801561225357506001600160a01b03811615155b15612263576122636021546125c7565b505b611ad7848484846126da565b6000610bea825490565b6000806000612288612851565b909250905061229781836134af565b9250505090565b60008060008060008060008060006122b58a612a34565b92509250925060008060006122d38d86866122ce61227b565b612a77565b919f909e50909c50959a5093985091965092945050505050565b6000610fd48383612ace565b6040805160028082526060820183526000928392919060208301908036833701905050905073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb488160008151811061234657612346613583565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061238e5761238e613583565b6001600160a01b03909216602092830291909101909101526040516307c0329d60e21b8152737a250d5630b4cf539739df2c5dacb4c659f2488d90631f00ca74906123df908690859060040161363f565b600060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124249190810190613660565b60008151811061243657612436613583565b6020026020010151915050919050565b6001600160a01b03811660009081526001830160205260408120541515610fd4565b6000610fd4836001600160a01b038416612b54565b601f805460ff191660011790556015546124a3906001600160a01b0316308360006126da565b60006124b06002836134af565b905060006124be8284613506565b9050806000036124cf5750506125ba565b476124d982612ba3565b60006124e58247613506565b90506000841180156124f75750600081115b156125b557737a250d5630b4cf539739df2c5dacb4c659f2488d63f305d71982308760008061252461182e565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561258c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125b1919061371e565b5050505b505050505b50601f805460ff19169055565b601f805460ff19166001179055476125de82612ba3565b60006125ea8247613506565b905060076125f9826003613490565b61260391906134af565b601960008282546126149190613536565b9091555061262590506007826134af565b601a60008282546126369190613536565b9091555060079050612649826002613490565b61265391906134af565b601860008282546126649190613536565b90915550600090506126776007836134af565b600c546040519192506001600160a01b03169082156108fc029083906000818181858888f193505050501580156126b2573d6000803e3d6000fd5b5080601160008282546126c59190613536565b9091555050601f805460ff1916905550505050565b806126e7576126e7612cae565b6001600160a01b03841660009081526006602052604090205460ff16801561272857506001600160a01b03831660009081526006602052604090205460ff16155b1561273d57612738848484612cdc565b61283b565b6001600160a01b03841660009081526006602052604090205460ff1615801561277e57506001600160a01b03831660009081526006602052604090205460ff165b1561278e57612738848484612e05565b6001600160a01b03841660009081526006602052604090205460ff161580156127d057506001600160a01b03831660009081526006602052604090205460ff16155b156127e057612738848484612eb1565b6001600160a01b03841660009081526006602052604090205460ff16801561282057506001600160a01b03831660009081526006602052604090205460ff165b1561283057612738848484612ef6565b61283b848484612eb1565b80611ad757611ad7601c54601b55601e54601d55565b6013546000908190816128666009600a613481565b6128749063041cdb40613490565b905060005b6009548110156129d55782600260006009848154811061289b5761289b613583565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061290657508160036000600984815481106128df576128df613583565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156129335760135461291a6009600a613481565b6129289063041cdb40613490565b945094505050509091565b600260006009838154811061294a5761294a613583565b60009182526020808320909101546001600160a01b031683528201929092526040019020546129799084613506565b9250600360006009838154811061299257612992613583565b60009182526020808320909101546001600160a01b031683528201929092526040019020546129c19083613506565b9150806129cd816135af565b915050612879565b506129e26009600a613481565b6129f09063041cdb40613490565b6013546129fd91906134af565b821015612a2b57601354612a136009600a613481565b612a219063041cdb40613490565b9350935050509091565b90939092509050565b600080600080612a4385612f6b565b90506000612a5086612f87565b9050600081612a5f8489613506565b612a699190613506565b979296509094509092505050565b6000808080612a868589613490565b90506000612a948689613490565b90506000612aa28789613490565b9050600081612ab18486613506565b612abb9190613506565b939b939a50919850919650505050505050565b81546000908210612b2c5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610baf565b826000018281548110612b4157612b41613583565b9060005260206000200154905092915050565b6000818152600183016020526040812054612b9b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bea565b506000610bea565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612bd857612bd8613583565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110612c2057612c20613583565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790612c7890859060009086903090429060040161374c565b600060405180830381600087803b158015612c9257600080fd5b505af1158015612ca6573d6000803e3d6000fd5b505050505050565b601b54158015612cbe5750601d54155b15612cc557565b601b8054601c55601d8054601e5560009182905555565b600080600080600080612cee8761229e565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612d21908890613506565b6001600160a01b038a16600090815260036020908152604080832093909355600290522054612d51908790613506565b6001600160a01b03808b1660009081526002602052604080822093909355908a1681522054612d81908690613536565b6001600160a01b038916600090815260026020526040902055612da381612f99565b612dad84836130fa565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612df291815260200190565b60405180910390a3505050505050505050565b600080600080600080612e178761229e565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612e4a908790613506565b6001600160a01b03808b16600090815260026020908152604080832094909455918b16815260039091522054612e81908490613536565b6001600160a01b038916600090815260036020908152604080832093909355600290522054612d81908690613536565b600080600080600080612ec38761229e565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612d51908790613506565b600080600080600080612f088761229e565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612f3b908890613506565b6001600160a01b038a16600090815260036020908152604080832093909355600290522054612e4a908790613506565b60006064601b5483612f7d9190613490565b610bea91906134af565b60006064601d5483612f7d9190613490565b6000612fa361227b565b905060006009612fb4846007613490565b612fbe91906134af565b9050612fca8184613506565b92506000612fd88385613490565b6015546001600160a01b0316600090815260026020526040902054909150613001908290613536565b601580546001600160a01b03908116600090815260026020908152604080832095909555925490911681526006909152205460ff161561307d576015546001600160a01b0316600090815260036020526040902054613061908590613536565b6015546001600160a01b03166000908152600360205260409020555b6130878383613490565b306000908152600260205260409020549091506130a5908290613536565b3060009081526002602090815260408083209390935560069052205460ff1615611ad757306000908152600360205260409020546130e4908390613536565b3060009081526003602052604090205550505050565b816013546131089190613506565b6013556014546112f3908290613536565b604051806101400160405280600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461318a57600080fd5b50565b60006020828403121561319f57600080fd5b8135610fd481613175565b600060208083528351808285015260005b818110156131d7578581018301518582016040015282016131bb565b818111156131e9576000604083870101525b50601f01601f1916929092016040019392505050565b6000806040838503121561321257600080fd5b823561321d81613175565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60008060006060848603121561325457600080fd5b833561325f81613175565b9250602084013561326f81613175565b929592945050506040919091013590565b600061014082019050825182526020830151602083015260408301516132b160408401826001600160a01b03169052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525092915050565b60006020828403121561331457600080fd5b5035919050565b801515811461318a57600080fd5b6000806040838503121561333c57600080fd5b82359150602083013561334e8161331b565b809150509250929050565b6000806040838503121561336c57600080fd5b823561337781613175565b9150602083013561334e81613175565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156133d85781600019048211156133be576133be613387565b808516156133cb57918102915b93841c93908002906133a2565b509250929050565b6000826133ef57506001610bea565b816133fc57506000610bea565b8160018114613412576002811461341c57613438565b6001915050610bea565b60ff84111561342d5761342d613387565b50506001821b610bea565b5060208310610133831016604e8410600b841016171561345b575081810a610bea565b613465838361339d565b806000190482111561347957613479613387565b029392505050565b6000610fd460ff8416836133e0565b60008160001904831182151516156134aa576134aa613387565b500290565b6000826134cc57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008282101561351857613518613387565b500390565b60006020828403121561352f57600080fd5b5051919050565b6000821982111561354957613549613387565b500190565b6020808252601b908201527a1058d8dbdd5b9d081a5cc8185b1c9958591e48195e18db1d591959602a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b6000600182016135c1576135c1613387565b5060010190565b6000602082840312156135da57600080fd5b8151610fd48161331b565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b838110156136345781516001600160a01b03168752958201959082019060010161360f565b509495945050505050565b82815260406020820152600061365860408301846135fb565b949350505050565b6000602080838503121561367357600080fd5b825167ffffffffffffffff8082111561368b57600080fd5b818501915085601f83011261369f57600080fd5b8151818111156136b1576136b16135e5565b8060051b604051601f19603f830116810181811085821117156136d6576136d66135e5565b6040529182528482019250838101850191888311156136f457600080fd5b938501935b82851015613712578451845293850193928501926136f9565b98975050505050505050565b60008060006060848603121561373357600080fd5b8351925060208401519150604084015190509250925092565b85815284602082015260a06040820152600061376b60a08301866135fb565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220a64dc614b64b7386960bb5e7fc3e7d848ccb771a199ab49ca91f5fb7d992f9ca64736f6c634300080d0033

Deployed Bytecode Sourcemap

8375:24210:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10921:72;;;;;;;;;;;;;:::i;:::-;;;160:25:1;;;148:2;133:18;10921:72:0;;;;;;;;17068:111;;;;;;;;;;-1:-1:-1;17068:111:0;;;;;:::i;:::-;;:::i;:::-;;11839:85;;;;;;;;;;-1:-1:-1;11911:5:0;;;;;;;;;;;;-1:-1:-1;;;11911:5:0;;;;11839:85;;;;;;;:::i;12761:161::-;;;;;;;;;;-1:-1:-1;12761:161:0;;;;;:::i;:::-;;:::i;:::-;;;1671:14:1;;1664:22;1646:41;;1634:2;1619:18;12761:161:0;1506:187:1;13738:89:0;;;;;;;;;;-1:-1:-1;13809:10:0;;13738:89;;10604:111;;;;;;;;;;;;10672:42;10604:111;;;;;;;;;:::i;12122:97::-;;;;;;;;;;;;;:::i;27044:239::-;;;;;;;;;;;;;:::i;12930:306::-;;;;;;;;;;-1:-1:-1;12930:306:0;;;;;:::i;:::-;;:::i;31840:326::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16102:271::-;;;;;;;;;;-1:-1:-1;16102:271:0;;;;;:::i;:::-;;:::i;16865:191::-;;;;;;;;;;-1:-1:-1;16865:191:0;;;;;:::i;:::-;;:::i;14639:250::-;;;;;;;;;;-1:-1:-1;14639:250:0;;;;;:::i;:::-;;:::i;16662:191::-;;;;;;;;;;-1:-1:-1;16662:191:0;;;;;:::i;:::-;;:::i;12029:85::-;;;;;;;;;;-1:-1:-1;12029:85:0;;10403:1;3993:36:1;;3981:2;3966:18;12029:85:0;3851:184:1;15240:479:0;;;;;;;;;;-1:-1:-1;15240:479:0;;;;;:::i;:::-;;:::i;13244:213::-;;;;;;;;;;-1:-1:-1;13244:213:0;;;;;:::i;:::-;;:::i;10417:26::-;;;;;;;;;;;;;;;;26938:100;;;;;;;;;;-1:-1:-1;27017:13:0;;26938:100;;13839:346;;;;;;;;;;-1:-1:-1;13839:346:0;;;;;:::i;:::-;;:::i;9076:48::-;;;;;;;;;;-1:-1:-1;9076:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;15857:113;;;;;;;;;;-1:-1:-1;15857:113:0;;;;;:::i;:::-;;:::i;14193:438::-;;;;;;;;;;-1:-1:-1;14193:438:0;;;;;:::i;:::-;;:::i;10747:38::-;;;;;;;;;;;;;;;30776:121;;;;;;;;;;-1:-1:-1;30776:121:0;;;;;:::i;:::-;;:::i;9246:30::-;;;;;;;;;;;;;;;;14897:335;;;;;;;;;;-1:-1:-1;14897:335:0;;;;;:::i;:::-;;:::i;21431:125::-;;;;;;;;;;-1:-1:-1;21431:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;21521:27:0;21497:4;21521:27;;;:18;:27;;;;;;;;;21431:125;8950:43;;;;;;;;;;;;8989:3;8950:43;;26477:222;;;;;;;;;;-1:-1:-1;26477:222:0;;;;;:::i;:::-;;:::i;9137:35::-;;;;;;;;;;;;;;;;9701:46;;;;;;;;;;-1:-1:-1;9701:46:0;;;;-1:-1:-1;;;;;9701:46:0;;;17452:258;;;;;;;;;;-1:-1:-1;17452:258:0;;;;;:::i;:::-;;:::i;10503:32::-;;;;;;;;;;;;;;;;26711:221;;;;;;;;;;;;;:::i;12227:198::-;;;;;;;;;;-1:-1:-1;12227:198:0;;;;;:::i;:::-;;:::i;7147:148::-;;;;;;;;;;;;;:::i;27289:183::-;;;;;;;;;;;;;:::i;31671:161::-;;;;;;;;;;-1:-1:-1;31671:161:0;;;;;:::i;:::-;;:::i;:::-;;;;4905:13:1;;4887:32;;4975:4;4963:17;;;4957:24;4935:20;;;4928:54;;;;4860:18;31671:161:0;4685:303:1;9037:32:0;;;;;;;;;;;;;;;;15727:122;;;;;;;;;;-1:-1:-1;15727:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;15821:20:0;15797:4;15821:20;;;:11;:20;;;;;;;;;15727:122;6935:79;;;;;;;;;;;;;:::i;11932:89::-;;;;;;;;;;-1:-1:-1;12006:7:0;;;;;;;;;;;;-1:-1:-1;;;12006:7:0;;;;11932:89;;10194:28;;;;;;;;;;;;;;;;30662:106;;;;;;;;;;;;;:::i;13465:265::-;;;;;;;;;;-1:-1:-1;13465:265:0;;;;;:::i;:::-;;:::i;17718:203::-;;;;;;;;;;-1:-1:-1;17718:203:0;;;;;:::i;:::-;;:::i;17191:249::-;;;;;;;;;;;;;:::i;9183:52::-;;;;;;;;;;;;;;;;16385:265;;;;;;;;;;-1:-1:-1;16385:265:0;;;;;:::i;:::-;;:::i;12433:167::-;;;;;;;;;;-1:-1:-1;12433:167:0;;;;;:::i;:::-;;:::i;10833:38::-;;;;;;;;;;;;;;;;9622:75;;;;;;;;;;-1:-1:-1;9622:75:0;;;;-1:-1:-1;;;;;9622:75:0;;;9534:81;;;;;;;;;;-1:-1:-1;9534:81:0;;;;-1:-1:-1;;;;;9534:81:0;;;9289:26;;;;;;;;;;;;;;;;11012:61;;;;;;;;;;;;;;;;9327:41;;;;;;;;;;-1:-1:-1;9327:41:0;-1:-1:-1;;9327:41:0;;12608:145;;;;;;;;;;-1:-1:-1;12608:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;12718:18:0;;;12691:7;12718:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12608:145;10160:27;;;;;;;;;;;;;;;;15982:112;;;;;;;;;;-1:-1:-1;15982:112:0;;;;;:::i;:::-;;:::i;32172:368::-;;;;;;;;;;;;;:::i;9003:27::-;;;;;;;;;;-1:-1:-1;9003:27:0;;;;-1:-1:-1;;;;;9003:27:0;;;7303:244;;;;;;;;;;-1:-1:-1;7303:244:0;;;;;:::i;:::-;;:::i;8708:42::-;;;;;;;;;;-1:-1:-1;8708:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10921:72;10990:3;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;;:10;:26;:::i;:::-;10976:11;;:1;:11;:::i;:::-;:17;;;;:::i;:::-;10921:72;:::o;17068:111::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;17142:21:0::1;17166:5;17142:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;17142:29:0::1;::::0;;17068:111::o;12761:161::-;12838:4;12855:37;12864:10;12876:7;12885:6;12855:8;:37::i;:::-;-1:-1:-1;12910:4:0;12761:161;;;;;:::o;12122:97::-;12177:7;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;;:10;:26;:::i;:::-;12197:14;;12122:97;:::o;27044:239::-;27119:18;;-1:-1:-1;;;;;27119:18:0;27105:10;:32;;:57;;;27155:7;:5;:7::i;:::-;-1:-1:-1;;;;;27141:21:0;:10;-1:-1:-1;;;;;27141:21:0;;27105:57;27097:66;;;;;;27182:18;;27211:16;;27174:54;;-1:-1:-1;;;;;27182:18:0;;;;27174:54;;;;;27211:16;27182:18;27174:54;27182:18;27174:54;27211:16;27182:18;27174:54;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27259:16:0;;;;27239;:36;27259:16;;27239:36;:::i;:::-;;;;-1:-1:-1;;27044:239:0:o;12930:306::-;13030:4;13047:36;13057:6;13065:9;13076:6;13047:9;:36::i;:::-;-1:-1:-1;;;;;13115:19:0;;13094:18;13115:19;;;:11;:19;;;;;;;;13135:10;13115:31;;;;;;;;;;13157:49;;13127:6;;13186:19;13199:6;13115:31;13186:19;:::i;:::-;13157:8;:49::i;:::-;-1:-1:-1;13224:4:0;;12930:306;-1:-1:-1;;;;12930:306:0:o;31840:326::-;31888:16;;:::i;:::-;31924:234;;;;;;;;31934:10;;31924:234;;31946:25;;31924:234;;;;31973:12;;-1:-1:-1;;;;;31973:12:0;31924:234;;;;;;;31987:17;;31924:234;;;;32006:20;;31924:234;;;;;;;32028:23;:14;:21;:23::i;:::-;31924:234;;;;32053:15;;31924:234;;;;32084:13;;31924:234;;;;32099:12;;31924:234;;;;9906:42;-1:-1:-1;;;;;32113:29:0;;32143:13;32113:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31924:234;;31917:241;31840:326;-1:-1:-1;31840:326:0:o;16102:271::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;16256:4:::1;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;::::0;:10:::1;:26;:::i;:::-;16246:14;;;;:::i;:::-;16212:30;:48;;16204:88;;;::::0;-1:-1:-1;;;16204:88:0;;8178:2:1;16204:88:0::1;::::0;::::1;8160:21:1::0;8217:2;8197:18;;;8190:30;-1:-1:-1;;;8236:18:1;;;8229:57;8303:18;;16204:88:0::1;7976:351:1::0;16204:88:0::1;16303:29;:62:::0;16102:271::o;16865:191::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;16960:11:::1;::::0;:16:::1;::::0;16974:2:::1;16960:16;:::i;:::-;16944:12;:32;;16936:73;;;::::0;-1:-1:-1;;;16936:73:0;;8667:2:1;16936:73:0::1;::::0;::::1;8649:21:1::0;8706:2;8686:18;;;8679:30;8745;8725:18;;;8718:58;8793:18;;16936:73:0::1;8465:352:1::0;16936:73:0::1;-1:-1:-1::0;;;;;17020:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;17020:28:0::1;17044:4;17020:28;::::0;;16865:191::o;14639:250::-;14705:7;14744;;14733;:18;;14725:73;;;;-1:-1:-1;;;14725:73:0;;9024:2:1;14725:73:0;;;9006:21:1;9063:2;9043:18;;;9036:30;9102:34;9082:18;;;9075:62;-1:-1:-1;;;9153:18:1;;;9146:40;9203:19;;14725:73:0;8822:406:1;14725:73:0;14809:19;14832:10;:8;:10::i;:::-;14809:33;-1:-1:-1;14860:21:0;14809:33;14860:7;:21;:::i;:::-;14853:28;14639:250;-1:-1:-1;;;14639:250:0:o;16662:191::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;16750:13:::1;-1:-1:-1::0;;;;;16750:22:0::1;:95;16831:13;;16812:16;;16797:12;;16773:21;:36;;;;:::i;:::-;:55;;;;:::i;:::-;:71;;;;:::i;:::-;16750:95;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16662:191:::0;:::o;15240:479::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15322:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;15314:60;;;;-1:-1:-1::0;;;15314:60:0::1;;;;;;;:::i;:::-;15390:9;15385:327;15409:9;:16:::0;15405:20;::::1;15385:327;;;15467:7;-1:-1:-1::0;;;;;15451:23:0::1;:9;15461:1;15451:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;15451:12:0::1;:23:::0;15447:254:::1;;15510:9;15520:16:::0;;:20:::1;::::0;15539:1:::1;::::0;15520:20:::1;:::i;:::-;15510:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;15495:9:::1;:12:::0;;-1:-1:-1;;;;;15510:31:0;;::::1;::::0;15505:1;;15495:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;15495:46:0::1;-1:-1:-1::0;;;;;15495:46:0;;::::1;;::::0;;15560:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;15599:11:::1;:20:::0;;;;:28;;-1:-1:-1;;15599:28:0::1;::::0;;15646:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;15646:15:0;;;;;-1:-1:-1;;;;;;15646:15:0::1;::::0;;;;;16750:95:::1;16662:191:::0;:::o;15447:254::-:1;15427:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15385:327;;13244:213:::0;13360:10;13334:4;13381:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13381:32:0;;;;;;;;;;13334:4;;13351:76;;13372:7;;13381:45;;13416:10;;13381:45;:::i;13839:346::-;13915:10;13902:24;;;;:11;:24;;;;;;;;13901:25;13893:82;;;;-1:-1:-1;;;13893:82:0;;10195:2:1;13893:82:0;;;10177:21:1;10234:2;10214:18;;;10207:30;10273:34;10253:18;;;10246:62;-1:-1:-1;;;10324:18:1;;;10317:42;10376:19;;13893:82:0;9993:408:1;13893:82:0;13987:15;14011:19;14022:7;14011:10;:19::i;:::-;-1:-1:-1;;14073:10:0;14064:20;;;;:7;:20;;;;;;13986:44;;-1:-1:-1;14064:31:0;;13986:44;;-1:-1:-1;14064:20:0;-1:-1:-1;14064:31:0;;-1:-1:-1;14064:31:0:i;:::-;14050:10;14041:20;;;;:7;:20;;;;;:54;14116:7;;:17;;14126:7;;14116:17;:::i;:::-;14106:7;:27;14157:10;;:20;;14170:7;;14157:20;:::i;:::-;14144:10;:33;-1:-1:-1;;13839:346:0:o;15857:113::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15928:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;15928:34:0::1;15958:4;15928:34;::::0;;15857:113::o;14193:438::-;14285:7;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;;:10;:26;:::i;:::-;14313:7;:18;;14305:62;;;;-1:-1:-1;;;14305:62:0;;10608:2:1;14305:62:0;;;10590:21:1;10647:2;10627:18;;;10620:30;10686:33;10666:18;;;10659:61;10737:18;;14305:62:0;10406:355:1;14305:62:0;14383:17;14378:246;;14418:15;14442:19;14453:7;14442:10;:19::i;:::-;-1:-1:-1;14417:44:0;;-1:-1:-1;14476:14:0;;-1:-1:-1;;;;;14476:14:0;14378:246;14525:23;14556:19;14567:7;14556:10;:19::i;:::-;-1:-1:-1;14523:52:0;;-1:-1:-1;14590:22:0;;-1:-1:-1;;;;;14590:22:0;30776:121;30838:7;30865:24;:14;30883:5;30865:17;:24::i;14897:335::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14982:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;14981:21;14973:61;;;;-1:-1:-1::0;;;14973:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15048:16:0;::::1;15067:1;15048:16:::0;;;:7:::1;:16;::::0;;;;;:20;15045:108:::1;;-1:-1:-1::0;;;;;15124:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;15104:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;15085:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;15045:108:::1;-1:-1:-1::0;;;;;15163:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;15163:27:0::1;15186:4;15163:27:::0;;::::1;::::0;;;15201:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;15201:23:0::1;::::0;;::::1;::::0;;14897:335::o;26477:222::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;26587:55:::1;::::0;-1:-1:-1;;;;;26587:33:0;::::1;::::0;:55;::::1;;;::::0;26621:20;;26587:55:::1;::::0;;;26621:20;26587:33;:55;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;26671:20;26655:12;;:36;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;26477:222:0:o;17452:258::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;10990:3:::1;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;::::0;:10:::1;:26;:::i;:::-;10976:11;::::0;:1:::1;:11;:::i;:::-;:17;;;;:::i;:::-;17560:24;:56;;17552:89;;;::::0;-1:-1:-1;;;17552:89:0;;10968:2:1;17552:89:0::1;::::0;::::1;10950:21:1::0;11007:2;10987:18;;;10980:30;-1:-1:-1;;;11026:18:1;;;11019:50;11086:18;;17552:89:0::1;10766:344:1::0;17552:89:0::1;17652:23;:50:::0;17452:258::o;26711:221::-;26783:15;;-1:-1:-1;;;;;26783:15:0;26769:10;:29;;:54;;;26816:7;:5;:7::i;:::-;-1:-1:-1;;;;;26802:21:0;:10;-1:-1:-1;;;;;26802:21:0;;26769:54;26761:63;;;;;;26843:15;;26869:13;;26835:48;;-1:-1:-1;;;;;26843:15:0;;;;26835:48;;;;;26869:13;26843:15;26835:48;26843:15;26835:48;26869:13;26843:15;26835:48;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26911:13:0;;;;26894;:30;26911:13;;26894:30;:::i;12227:198::-;-1:-1:-1;;;;;12317:20:0;;12293:7;12317:20;;;:11;:20;;;;;;;;12313:49;;;-1:-1:-1;;;;;;12346:16:0;;;;;:7;:16;;;;;;;12227:198::o;12313:49::-;-1:-1:-1;;;;;12400:16:0;;;;;;:7;:16;;;;;;12380:37;;:19;:37::i;7147:148::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;7254:1:::1;7238:6:::0;;7217:40:::1;::::0;-1:-1:-1;;;;;7238:6:0;;::::1;::::0;7217:40:::1;::::0;7254:1;;7217:40:::1;7285:1;7268:19:::0;;-1:-1:-1;;;;;;7268:19:0::1;::::0;;7147:148::o;27289:183::-;27386:18;;27344:7;;-1:-1:-1;;;;;27386:18:0;27372:10;:32;;:57;;;27422:7;:5;:7::i;:::-;-1:-1:-1;;;;;27408:21:0;:10;-1:-1:-1;;;;;27408:21:0;;27372:57;27364:66;;;;;;-1:-1:-1;27448:16:0;;;27289:183::o;31671:161::-;-1:-1:-1;;;;;;;;;;;;;;;;;31772:52:0;;;;;;;;31783:17;31793:6;31783:9;:17::i;:::-;31772:52;;-1:-1:-1;;;;;31802:21:0;;;;;;;:13;31772:52;31802:21;;;;;;;;31772:52;;;;;;-1:-1:-1;31765:59:0;31671:161::o;6935:79::-;6973:7;7000:6;-1:-1:-1;;;;;7000:6:0;;6935:79::o;30662:106::-;30710:7;30737:23;:14;:21;:23::i;13465:265::-;13610:10;13560:4;13598:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13598:32:0;;;;;;;;;;13560:4;;13641:59;;13622:7;13671:28;13684:15;13598:32;13671:28;:::i;13641:59::-;-1:-1:-1;13718:4:0;;13465:265;-1:-1:-1;;;13465:265:0:o;17718:203::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;17828:15:::1;:34:::0;;-1:-1:-1;;;;;17828:34:0;;::::1;-1:-1:-1::0;;;;;;17828:34:0;;::::1;;::::0;;;17873:18:::1;:40:::0;;;;;::::1;::::0;::::1;;::::0;;17718:203::o;17191:249::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;10990:3:::1;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;::::0;:10:::1;:26;:::i;:::-;10976:11;::::0;:1:::1;:11;:::i;:::-;:17;;;;:::i;:::-;17255:23;;:54;17247:75;;;::::0;-1:-1:-1;;;17247:75:0;;11317:2:1;17247:75:0::1;::::0;::::1;11299:21:1::0;11356:1;11336:18;;;11329:29;-1:-1:-1;;;11374:18:1;;;11367:38;11422:18;;17247:75:0::1;11115:331:1::0;17247:75:0::1;10990:3;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;::::0;:10:::1;:26;:::i;:::-;10976:11;::::0;:1:::1;:11;:::i;:::-;:17;;;;:::i;:::-;17333:23;:54:::0;17412:12:::1;17398:11;:26:::0;17191:249::o;16385:265::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;16518:4:::1;-1:-1:-1::0;;;;;16494:29:0;::::1;::::0;16486:38:::1;;;::::0;::::1;;16611:30;::::0;-1:-1:-1;;;16611:30:0;;16557:12;;-1:-1:-1;;;;;16581:14:0;::::1;::::0;::::1;::::0;16596:13;;16581:14;;16611:15:::1;::::0;:30:::1;::::0;16635:4:::1;::::0;16611:30:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16581:61;::::0;-1:-1:-1;;;;;;16581:61:0::1;::::0;;;;;;-1:-1:-1;;;;;11643:32:1;;;16581:61:0::1;::::0;::::1;11625:51:1::0;11692:18;;;11685:34;11598:18;;16581:61:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16475:175;16385:265:::0;;:::o;12433:167::-;12513:4;12530:40;12540:10;12552:9;12563:6;12530:9;:40::i;15982:112::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16051:27:0::1;16081:5;16051:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;16051:35:0::1;::::0;;15982:112::o;32172:368::-;32220:16;;:::i;:::-;32256:276;;;;;;;;32266:10;;32256:276;;32278:25;;32256:276;;;;32305:12;;-1:-1:-1;;;;;32305:12:0;32256:276;;;;;;;32319:17;;32256:276;;;;32338:20;;32256:276;;;;;;;32360:23;:14;:21;:23::i;:::-;32256:276;;;;32385:15;;32256:276;;;;32416:27;32429:13;;32416:12;:27::i;:::-;32256:276;;;;32445:26;32458:12;;32445;:26::i;:::-;32256:276;;;;32473:58;9906:42;-1:-1:-1;;;;;32486:29:0;;32516:13;32486:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32473:12;:58::i;7303:244::-;7062:6;;-1:-1:-1;;;;;7062:6:0;7072:10;7062:20;7054:65;;;;-1:-1:-1;;;7054:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7392:22:0;::::1;7384:73;;;::::0;-1:-1:-1;;;7384:73:0;;12182:2:1;7384:73:0::1;::::0;::::1;12164:21:1::0;12221:2;12201:18;;;12194:30;12260:34;12240:18;;;12233:62;-1:-1:-1;;;12311:18:1;;;12304:36;12357:19;;7384:73:0::1;11980:402:1::0;7384:73:0::1;7494:6;::::0;;7473:38:::1;::::0;-1:-1:-1;;;;;7473:38:0;;::::1;::::0;7494:6;::::1;::::0;7473:38:::1;::::0;::::1;7522:6;:17:::0;;-1:-1:-1;;;;;;7522:17:0::1;-1:-1:-1::0;;;;;7522:17:0;;;::::1;::::0;;;::::1;::::0;;7303:244::o;21564:177::-;-1:-1:-1;;;;;21649:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21701:32;;160:25:1;;;21701:32:0;;133:18:1;21701:32:0;;;;;;;21564:177;;;:::o;21751:2766::-;21848:1;21839:6;:10;21831:43;;;;-1:-1:-1;;;21831:43:0;;12589:2:1;21831:43:0;;;12571:21:1;12628:2;12608:18;;;12601:30;-1:-1:-1;;;12647:18:1;;;12640:50;12707:18;;21831:43:0;12387:344:1;21831:43:0;-1:-1:-1;;;;;21894:16:0;;;;;;:10;:16;;;;;;;;21893:17;21885:37;;;;-1:-1:-1;;;21885:37:0;;12938:2:1;21885:37:0;;;12920:21:1;12977:1;12957:18;;;12950:29;-1:-1:-1;;;12995:18:1;;;12988:37;13042:18;;21885:37:0;12736:330:1;21885:37:0;-1:-1:-1;;;;;21976:24:0;;21943:12;21976:24;;;:18;:24;;;;;;21958:4;;21976:24;;;:50;;-1:-1:-1;;;;;;22004:22:0;;;;;;:18;:22;;;;;;;;21976:50;21973:589;;;-1:-1:-1;22052:5:0;21973:589;;;22133:23;;10990:3;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;;:10;:26;:::i;:::-;10976:11;;:1;:11;:::i;:::-;:17;;;;:::i;:::-;22179:24;:56;;22171:78;;;;-1:-1:-1;;;22171:78:0;;13273:2:1;22171:78:0;;;13255:21:1;13312:1;13292:18;;;13285:29;-1:-1:-1;;;13330:18:1;;;13323:39;13379:18;;22171:78:0;13071:332:1;22171:78:0;-1:-1:-1;;22299:30:0;;22296:255;;;22371:24;22361:6;:34;;:132;;;;;22423:13;-1:-1:-1;;;;;22417:19:0;:2;-1:-1:-1;;;;;22417:19:0;;:75;;;;22467:24;22457:6;22441:13;22451:2;22441:9;:13::i;:::-;:22;;;;:::i;:::-;:50;;22417:75;22353:160;;;;-1:-1:-1;;;22353:160:0;;13610:2:1;22353:160:0;;;13592:21:1;13649:2;13629:18;;;13622:30;-1:-1:-1;;;13668:18:1;;;13661:45;13723:18;;22353:160:0;13408:339:1;22353:160:0;22083:479;21973:589;22577:7;22574:1887;;;22624:12;;-1:-1:-1;;;;;22654:12:0;;;22600:21;22654:12;;;:6;:12;;;;;;22624;;;22654;;22651:1799;;;22710:16;;;22724:1;22710:16;;;;;;;;22686:21;;22710:16;;;;;;;;;;-1:-1:-1;22710:16:0;22686:40;;9906:42;22745:4;22750:1;22745:7;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;22745:21:0;;;-1:-1:-1;;;;;22745:21:0;;;;;22803:4;22785;22790:1;22785:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22785:23:0;;;:7;;;;;;;;;;;:23;22850:42;;-1:-1:-1;;;22850:42:0;;22827:20;;10672:42;;22850:28;;:42;;22879:6;;22887:4;;22850:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22850:42:0;;;;;;;;;;;;:::i;:::-;22893:1;22850:45;;;;;;;;:::i;:::-;;;;;;;22827:68;;22974:25;;22951:20;;:48;;;;:::i;:::-;22933:15;:66;:91;;;;-1:-1:-1;;;;;;23003:21:0;;;;22933:91;22930:407;;;23051:38;:14;23075:13;23051:23;:38::i;:::-;:47;;23093:5;23051:47;23048:135;;23126:33;:14;23145:13;23126:18;:33::i;:::-;;23048:135;23256:17;;;-1:-1:-1;;;;;23225:28:0;;;;;;:13;:28;;;;;:48;;;;23296:21;;22930:407;23373:17;;23358:12;:32;23355:322;;;23470:2;-1:-1:-1;;;;;23453:19:0;:13;-1:-1:-1;;;;;23453:19:0;;23450:92;;23501:12;:17;;-1:-1:-1;;;;;;23501:17:0;-1:-1:-1;;;;;23501:17:0;;;;;23450:92;23564:17;:32;;;23642:15;23619:20;:38;23355:322;22667:1025;;22651:1799;;;23740:12;;-1:-1:-1;;;;;23740:12:0;;;23732:20;;;;23729:674;;23799:12;:19;;-1:-1:-1;;;;;;23799:19:0;;;8989:3;23841:17;:21;23908:15;23885:20;:38;23729:674;;;23970:16;;;;23966:437;;24050:29;;24024:21;;24014:32;;-1:-1:-1;;;;;24024:21:0;24014:9;:32::i;:::-;:65;24010:374;;24108:43;24121:29;;24108:12;:43::i;:::-;24010:374;;;24233:29;;24205:24;24223:4;24205:9;:24::i;:::-;:57;;:82;;;;-1:-1:-1;;;;;;24266:21:0;;;;24205:82;24202:182;;;24315:45;24330:29;;24315:14;:45::i;:::-;22585:1876;22574:1887;24471:38;24486:4;24491:2;24494:6;24501:7;24471:14;:38::i;5323:117::-;5386:7;5413:19;5421:3;3661:18;;3578:109;19273:160;19314:7;19335:15;19352;19371:19;:17;:19::i;:::-;19334:56;;-1:-1:-1;19334:56:0;-1:-1:-1;19408:17:0;19334:56;;19408:17;:::i;:::-;19401:24;;;;19273:160;:::o;18078:419::-;18137:7;18146;18155;18164;18173;18182;18203:23;18228:12;18242:18;18264:20;18276:7;18264:11;:20::i;:::-;18202:82;;;;;;18296:15;18313:23;18338:12;18354:50;18366:7;18375:4;18381:10;18393;:8;:10::i;:::-;18354:11;:50::i;:::-;18295:109;;;;-1:-1:-1;18295:109:0;;-1:-1:-1;18455:15:0;;-1:-1:-1;18472:4:0;;-1:-1:-1;18478:10:0;;-1:-1:-1;18078:419:0;;-1:-1:-1;;;;;18078:419:0:o;5784:158::-;5858:7;5909:22;5913:3;5925:5;5909:3;:22::i;30905:257::-;31010:16;;;31024:1;31010:16;;;;;;;;30966:7;;;;31010:16;31024:1;31010:16;;;;;;;;;;-1:-1:-1;31010:16:0;30986:40;;9818:42;31037:4;31042:1;31037:7;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;31037:21:0;;;-1:-1:-1;;;;;31037:21:0;;;;;9906:42;31069:4;31074:1;31069:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31069:21:0;;;:7;;;;;;;;;;;:21;31109:42;;-1:-1:-1;;;31109:42:0;;10672;;31109:28;;:42;;31138:6;;31146:4;;31109:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31109:42:0;;;;;;;;;;;;:::i;:::-;31152:1;31109:45;;;;;;;;:::i;:::-;;;;;;;31102:52;;;30905:257;;;:::o;5070:167::-;-1:-1:-1;;;;;5204:23:0;;5150:4;3460:19;;;:12;;;:19;;;;;;:24;;5174:55;3363:129;4498:152;4568:4;4592:50;4597:3;-1:-1:-1;;;;;4617:23:0;;4592:4;:50::i;25056:902::-;11204:16;:23;;-1:-1:-1;;11204:23:0;11223:4;11204:23;;;25145:21:::1;::::0;25130:72:::1;::::0;-1:-1:-1;;;;;25145:21:0::1;25176:4;25183:11:::0;11204:16;25130:14:::1;:72::i;:::-;25219:23;25245:15;25259:1;25245:11:::0;:15:::1;:::i;:::-;25219:41:::0;-1:-1:-1;25271:20:0::1;25294:29;25219:41:::0;25294:11;:29:::1;:::i;:::-;25271:52;;25340:12;25356:1;25340:17:::0;25336:57:::1;;25375:7;;;;25336:57;25427:21;25459:30;25476:12:::0;25459:16:::1;:30::i;:::-;25500:26;25529:37;25553:13:::0;25529:21:::1;:37;:::i;:::-;25500:66;;25601:1;25583:15;:19;:45;;;;;25627:1;25606:18;:22;25583:45;25579:372;;;10672:42;25646:31;25685:18:::0;25731:4:::1;25755:15:::0;25789:1:::1;::::0;25883:7:::1;:5;:7::i;:::-;25646:293;::::0;::::1;::::0;;;-1:-1:-1;;;;;;25646:293:0;;;-1:-1:-1;;;;;16156:15:1;;;25646:293:0::1;::::0;::::1;16138:34:1::0;16188:18;;;16181:34;;;;16231:18;;;16224:34;;;;16274:18;;;16267:34;16338:15;;;16317:19;;;16310:44;25909:15:0::1;16370:19:1::0;;;16363:35;16072:19;;25646:293:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25579:372;25119:839;;;;11238:1;-1:-1:-1::0;11250:16:0;:24;;-1:-1:-1;;11250:24:0;;;25056:902::o;24525:523::-;11204:16;:23;;-1:-1:-1;;11204:23:0;11223:4;11204:23;;;24624:21:::1;24656:29;24673:11:::0;24656:16:::1;:29::i;:::-;24697:22;24722:34;24746:10:::0;24722:21:::1;:34;:::i;:::-;24697:59:::0;-1:-1:-1;24807:1:0::1;24786:18;24697:59:::0;24803:1:::1;24786:18;:::i;:::-;:22;;;;:::i;:::-;24769:13;;:39;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;24834:18:0::1;::::0;-1:-1:-1;24851:1:0::1;24834:14:::0;:18:::1;:::i;:::-;24814:16;;:38;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;24894:1:0::1;::::0;-1:-1:-1;24873:18:0::1;:14:::0;24890:1:::1;24873:18;:::i;:::-;:22;;;;:::i;:::-;24857:12;;:38;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;24906:18:0::1;::::0;-1:-1:-1;24927:18:0::1;24944:1;24927:14:::0;:18:::1;:::i;:::-;24964:12;::::0;24956:42:::1;::::0;24906:39;;-1:-1:-1;;;;;;24964:12:0::1;::::0;24956:42;::::1;;;::::0;24906:39;;24964:12:::1;24956:42:::0;24964:12;24956:42;24906:39;24964:12;24956:42;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25030:10;25011:15;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;11250:16:0;:24;;-1:-1:-1;;11250:24:0;;;-1:-1:-1;;;;24525:523:0:o;27480:834::-;27591:7;27587:40;;27613:14;:12;:14::i;:::-;-1:-1:-1;;;;;27652:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;27676:22:0;;;;;;:11;:22;;;;;;;;27675:23;27652:46;27648:597;;;27715:48;27737:6;27745:9;27756:6;27715:21;:48::i;:::-;27648:597;;;-1:-1:-1;;;;;27786:19:0;;;;;;:11;:19;;;;;;;;27785:20;:46;;;;-1:-1:-1;;;;;;27809:22:0;;;;;;:11;:22;;;;;;;;27785:46;27781:464;;;27848:46;27868:6;27876:9;27887:6;27848:19;:46::i;27781:464::-;-1:-1:-1;;;;;27917:19:0;;;;;;:11;:19;;;;;;;;27916:20;:47;;;;-1:-1:-1;;;;;;27941:22:0;;;;;;:11;:22;;;;;;;;27940:23;27916:47;27912:333;;;27980:44;27998:6;28006:9;28017:6;27980:17;:44::i;27912:333::-;-1:-1:-1;;;;;28046:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28069:22:0;;;;;;:11;:22;;;;;;;;28046:45;28042:203;;;28108:48;28130:6;28138:9;28149:6;28108:21;:48::i;28042:203::-;28189:44;28207:6;28215:9;28226:6;28189:17;:44::i;:::-;28269:7;28265:41;;28291:15;21348;;21338:7;:25;21390:21;;21374:13;:37;21294:125;19441:552;19538:7;;19491;;;;;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;;:10;:26;:::i;:::-;19556:25;;19603:9;19598:283;19622:9;:16;19618:20;;19598:283;;;19688:7;19664;:21;19672:9;19682:1;19672:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19672:12:0;19664:21;;;;;;;;;;;;;:31;;:66;;;19723:7;19699;:21;19707:9;19717:1;19707:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19707:12:0;19699:21;;;;;;;;;;;;;:31;19664:66;19660:97;;;19740:7;;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;;:10;:26;:::i;:::-;19732:25;;;;;;;19441:552;;:::o;19660:97::-;19792:7;:21;19800:9;19810:1;19800:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19800:12:0;19792:21;;;;;;;;;;;;;19782:31;;:7;:31;:::i;:::-;19772:41;;19848:7;:21;19856:9;19866:1;19856:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19856:12:0;19848:21;;;;;;;;;;;;;19838:31;;:7;:31;:::i;:::-;19828:41;-1:-1:-1;19640:3:0;;;;:::i;:::-;;;;19598:283;;;-1:-1:-1;9423:13:0;10403:1;9423:2;:13;:::i;:::-;9410:26;;:10;:26;:::i;:::-;19905:7;;:17;;;;:::i;:::-;19895:7;:27;19891:58;;;19932:7;;9423:13;10403:1;9423:2;:13;:::i;:::-;9410:26;;:10;:26;:::i;:::-;19924:25;;;;;;19441:552;;:::o;19891:58::-;19968:7;;19977;;-1:-1:-1;19441:552:0;-1:-1:-1;19441:552:0:o;18505:324::-;18565:7;18574;18583;18603:12;18618:24;18634:7;18618:15;:24::i;:::-;18603:39;;18653:18;18674:30;18696:7;18674:21;:30::i;:::-;18653:51;-1:-1:-1;18715:23:0;18653:51;18741:14;18751:4;18741:7;:14;:::i;:::-;:27;;;;:::i;:::-;18715:53;18804:4;;-1:-1:-1;18810:10:0;;-1:-1:-1;18505:324:0;;-1:-1:-1;;;18505:324:0:o;18837:428::-;18966:7;;;;19022:21;19032:11;19022:7;:21;:::i;:::-;19004:39;-1:-1:-1;19054:12:0;19069:18;19076:11;19069:4;:18;:::i;:::-;19054:33;-1:-1:-1;19098:18:0;19119:24;19132:11;19119:10;:24;:::i;:::-;19098:45;-1:-1:-1;19154:23:0;19098:45;19180:14;19190:4;19180:7;:14;:::i;:::-;:27;;;;:::i;:::-;19226:7;;;;-1:-1:-1;19252:4:0;;-1:-1:-1;18837:428:0;;-1:-1:-1;;;;;;;18837:428:0:o;4031:204::-;4126:18;;4098:7;;4126:26;-1:-1:-1;4118:73:0;;;;-1:-1:-1;;;4118:73:0;;16922:2:1;4118:73:0;;;16904:21:1;16961:2;16941:18;;;16934:30;17000:34;16980:18;;;16973:62;-1:-1:-1;;;17051:18:1;;;17044:32;17093:19;;4118:73:0;16720:398:1;4118:73:0;4209:3;:11;;4221:5;4209:18;;;;;;;;:::i;:::-;;;;;;;;;4202:25;;4031:204;;;;:::o;1143:414::-;1206:4;3460:19;;;:12;;;:19;;;;;;1223:327;;-1:-1:-1;1266:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;1449:18;;1427:19;;;:12;;;:19;;;;;;:40;;;;1482:11;;1223:327;-1:-1:-1;1533:5:0;1526:12;;25966:503;26116:16;;;26130:1;26116:16;;;;;;;;26092:21;;26116:16;;;;;;;;;;-1:-1:-1;26116:16:0;26092:40;;26161:4;26143;26148:1;26143:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;26143:23:0;;;-1:-1:-1;;;;;26143:23:0;;;;;9906:42;26177:4;26182:1;26177:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26177:21:0;;;:7;;;;;;;;;;;:21;26237:224;;-1:-1:-1;;;26237:224:0;;10672:42;;26237:66;;:224;;26318:11;;26344:1;;26388:4;;26415;;26435:15;;26237:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26021:448;25966:503;:::o;21032:250::-;21078:7;;:12;:34;;;;-1:-1:-1;21094:13:0;;:18;21078:34;21075:46;;;21032:250::o;21075:46::-;21159:7;;;21141:15;:25;21201:13;;;21177:21;:37;-1:-1:-1;21235:11:0;;;;21257:17;21032:250::o;29435:569::-;29538:15;29555:23;29580:12;29606:23;29631:12;29645:18;29667:19;29678:7;29667:10;:19::i;:::-;-1:-1:-1;;;;;29715:15:0;;;;;;:7;:15;;;;;;29537:149;;-1:-1:-1;29537:149:0;;-1:-1:-1;29537:149:0;;-1:-1:-1;29537:149:0;-1:-1:-1;29537:149:0;-1:-1:-1;29537:149:0;-1:-1:-1;29715:25:0;;29733:7;;29715:25;:::i;:::-;-1:-1:-1;;;;;29697:15:0;;;;;;:7;:15;;;;;;;;:43;;;;29769:7;:15;;;;:25;;29787:7;;29769:25;:::i;:::-;-1:-1:-1;;;;;29751:15:0;;;;;;;:7;:15;;;;;;:43;;;;29826:18;;;;;;;:36;;29847:15;;29826:36;:::i;:::-;-1:-1:-1;;;;;29805:18:0;;;;;;:7;:18;;;;;:57;29876:26;29891:10;29876:14;:26::i;:::-;29913:23;29925:4;29931;29913:11;:23::i;:::-;29969:9;-1:-1:-1;;;;;29952:44:0;29961:6;-1:-1:-1;;;;;29952:44:0;;29980:15;29952:44;;;;160:25:1;;148:2;133:18;;14:177;29952:44:0;;;;;;;;29526:478;;;;;;29435:569;;;:::o;28838:589::-;28939:15;28956:23;28981:12;29007:23;29032:12;29046:18;29068:19;29079:7;29068:10;:19::i;:::-;-1:-1:-1;;;;;29116:15:0;;;;;;:7;:15;;;;;;28938:149;;-1:-1:-1;28938:149:0;;-1:-1:-1;28938:149:0;;-1:-1:-1;28938:149:0;-1:-1:-1;28938:149:0;-1:-1:-1;28938:149:0;-1:-1:-1;29116:25:0;;28938:149;;29116:25;:::i;:::-;-1:-1:-1;;;;;29098:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;29173:18;;;;;:7;:18;;;;;:36;;29194:15;;29173:36;:::i;:::-;-1:-1:-1;;;;;29152:18:0;;;;;;:7;:18;;;;;;;;:57;;;;29241:7;:18;;;;:36;;29262:15;;29241:36;:::i;28322:508::-;28421:15;28438:23;28463:12;28489:23;28514:12;28528:18;28550:19;28561:7;28550:10;:19::i;:::-;-1:-1:-1;;;;;28598:15:0;;;;;;:7;:15;;;;;;28420:149;;-1:-1:-1;28420:149:0;;-1:-1:-1;28420:149:0;;-1:-1:-1;28420:149:0;-1:-1:-1;28420:149:0;-1:-1:-1;28420:149:0;-1:-1:-1;28598:25:0;;28420:149;;28598:25;:::i;30012:642::-;30115:15;30132:23;30157:12;30183:23;30208:12;30222:18;30244:19;30255:7;30244:10;:19::i;:::-;-1:-1:-1;;;;;30292:15:0;;;;;;:7;:15;;;;;;30114:149;;-1:-1:-1;30114:149:0;;-1:-1:-1;30114:149:0;;-1:-1:-1;30114:149:0;-1:-1:-1;30114:149:0;-1:-1:-1;30114:149:0;-1:-1:-1;30292:25:0;;30310:7;;30292:25;:::i;:::-;-1:-1:-1;;;;;30274:15:0;;;;;;:7;:15;;;;;;;;:43;;;;30346:7;:15;;;;:25;;30364:7;;30346:25;:::i;20752:124::-;20816:7;20863:5;20853:7;;20843;:17;;;;:::i;:::-;:25;;;;:::i;20884:136::-;20954:7;21007:5;20991:13;;20981:7;:23;;;;:::i;20005:735::-;20068:19;20091:10;:8;:10::i;:::-;20068:33;-1:-1:-1;20122:22:0;20164:1;20147:14;20151:10;20147:1;:14;:::i;:::-;:18;;;;:::i;:::-;20122:43;-1:-1:-1;20176:28:0;20122:43;20176:28;;:::i;:::-;;-1:-1:-1;20217:18:0;20238:24;20251:11;20176:28;20238:24;:::i;:::-;20314:21;;-1:-1:-1;;;;;20314:21:0;20306:30;;;;:7;:30;;;;;;20217:45;;-1:-1:-1;20306:43:0;;20217:45;;20306:43;:::i;:::-;20281:21;;;-1:-1:-1;;;;;20281:21:0;;;20273:30;;;;:7;:30;;;;;;;;:76;;;;20375:21;;;;;20363:34;;:11;:34;;;;;;;20360:128;;;20453:21;;-1:-1:-1;;;;;20453:21:0;20445:30;;;;:7;:30;;;;;;:43;;20478:10;;20445:43;:::i;:::-;20420:21;;-1:-1:-1;;;;;20420:21:0;20412:30;;;;:7;:30;;;;;:76;20360:128;20514:28;20531:11;20514:14;:28;:::i;:::-;20594:4;20578:22;;;;:7;:22;;;;;;20501:41;;-1:-1:-1;20578:35:0;;20501:41;;20578:35;:::i;:::-;20569:4;20553:22;;;;:7;:22;;;;;;;;:60;;;;20627:11;:26;;;;;;20624:108;;;20709:4;20693:22;;;;:7;:22;;;;;;:39;;20718:14;;20693:39;:::i;:::-;20684:4;20668:22;;;;:7;:22;;;;;:64;20057:683;;;20005:735;:::o;17929:141::-;18017:4;18007:7;;:14;;;;:::i;:::-;17997:7;:24;18045:10;;:17;;18058:4;;18045:17;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;251:70;196:131;:::o;332:247::-;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;584:597::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;1022:6;1019:1;1016:13;1013:91;;;1092:1;1087:2;1078:6;1067:9;1063:22;1059:31;1052:42;1013:91;-1:-1:-1;1165:2:1;1144:15;-1:-1:-1;;1140:29:1;1125:45;;;;1172:2;1121:54;;584:597;-1:-1:-1;;;584:597:1:o;1186:315::-;1254:6;1262;1315:2;1303:9;1294:7;1290:23;1286:32;1283:52;;;1331:1;1328;1321:12;1283:52;1370:9;1357:23;1389:31;1414:5;1389:31;:::i;:::-;1439:5;1491:2;1476:18;;;;1463:32;;-1:-1:-1;;;1186:315:1:o;1698:227::-;-1:-1:-1;;;;;1886:32:1;;;;1868:51;;1856:2;1841:18;;1698:227::o;1930:456::-;2007:6;2015;2023;2076:2;2064:9;2055:7;2051:23;2047:32;2044:52;;;2092:1;2089;2082:12;2044:52;2131:9;2118:23;2150:31;2175:5;2150:31;:::i;:::-;2200:5;-1:-1:-1;2257:2:1;2242:18;;2229:32;2270:33;2229:32;2270:33;:::i;:::-;1930:456;;2322:7;;-1:-1:-1;;;2376:2:1;2361:18;;;;2348:32;;1930:456::o;2500:901::-;2646:4;2688:3;2677:9;2673:19;2665:27;;2725:6;2719:13;2708:9;2701:32;2789:4;2781:6;2777:17;2771:24;2764:4;2753:9;2749:20;2742:54;2843:4;2835:6;2831:17;2825:24;2858:54;2906:4;2895:9;2891:20;2877:12;-1:-1:-1;;;;;2457:31:1;2445:44;;2391:104;2858:54;;2968:4;2960:6;2956:17;2950:24;2943:4;2932:9;2928:20;2921:54;3031:4;3023:6;3019:17;3013:24;3006:4;2995:9;2991:20;2984:54;3094:4;3086:6;3082:17;3076:24;3069:4;3058:9;3054:20;3047:54;3157:4;3149:6;3145:17;3139:24;3132:4;3121:9;3117:20;3110:54;3220:4;3212:6;3208:17;3202:24;3195:4;3184:9;3180:20;3173:54;3246:6;3306:2;3298:6;3294:15;3288:22;3283:2;3272:9;3268:18;3261:50;;3330:6;3390:2;3382:6;3378:15;3372:22;3367:2;3356:9;3352:18;3345:50;;2500:901;;;;:::o;3406:180::-;3465:6;3518:2;3506:9;3497:7;3493:23;3489:32;3486:52;;;3534:1;3531;3524:12;3486:52;-1:-1:-1;3557:23:1;;3406:180;-1:-1:-1;3406:180:1:o;4040:118::-;4126:5;4119:13;4112:21;4105:5;4102:32;4092:60;;4148:1;4145;4138:12;4163:309;4228:6;4236;4289:2;4277:9;4268:7;4264:23;4260:32;4257:52;;;4305:1;4302;4295:12;4257:52;4341:9;4328:23;4318:33;;4401:2;4390:9;4386:18;4373:32;4414:28;4436:5;4414:28;:::i;:::-;4461:5;4451:15;;;4163:309;;;;;:::o;4993:388::-;5061:6;5069;5122:2;5110:9;5101:7;5097:23;5093:32;5090:52;;;5138:1;5135;5128:12;5090:52;5177:9;5164:23;5196:31;5221:5;5196:31;:::i;:::-;5246:5;-1:-1:-1;5303:2:1;5288:18;;5275:32;5316:33;5275:32;5316:33;:::i;5386:127::-;5447:10;5442:3;5438:20;5435:1;5428:31;5478:4;5475:1;5468:15;5502:4;5499:1;5492:15;5518:422;5607:1;5650:5;5607:1;5664:270;5685:7;5675:8;5672:21;5664:270;;;5744:4;5740:1;5736:6;5732:17;5726:4;5723:27;5720:53;;;5753:18;;:::i;:::-;5803:7;5793:8;5789:22;5786:55;;;5823:16;;;;5786:55;5902:22;;;;5862:15;;;;5664:270;;;5668:3;5518:422;;;;;:::o;5945:806::-;5994:5;6024:8;6014:80;;-1:-1:-1;6065:1:1;6079:5;;6014:80;6113:4;6103:76;;-1:-1:-1;6150:1:1;6164:5;;6103:76;6195:4;6213:1;6208:59;;;;6281:1;6276:130;;;;6188:218;;6208:59;6238:1;6229:10;;6252:5;;;6276:130;6313:3;6303:8;6300:17;6297:43;;;6320:18;;:::i;:::-;-1:-1:-1;;6376:1:1;6362:16;;6391:5;;6188:218;;6490:2;6480:8;6477:16;6471:3;6465:4;6462:13;6458:36;6452:2;6442:8;6439:16;6434:2;6428:4;6425:12;6421:35;6418:77;6415:159;;;-1:-1:-1;6527:19:1;;;6559:5;;6415:159;6606:34;6631:8;6625:4;6606:34;:::i;:::-;6676:6;6672:1;6668:6;6664:19;6655:7;6652:32;6649:58;;;6687:18;;:::i;:::-;6725:20;;5945:806;-1:-1:-1;;;5945:806:1:o;6756:140::-;6814:5;6843:47;6884:4;6874:8;6870:19;6864:4;6843:47;:::i;6901:168::-;6941:7;7007:1;7003;6999:6;6995:14;6992:1;6989:21;6984:1;6977:9;6970:17;6966:45;6963:71;;;7014:18;;:::i;:::-;-1:-1:-1;7054:9:1;;6901:168::o;7074:217::-;7114:1;7140;7130:132;;7184:10;7179:3;7175:20;7172:1;7165:31;7219:4;7216:1;7209:15;7247:4;7244:1;7237:15;7130:132;-1:-1:-1;7276:9:1;;7074:217::o;7296:356::-;7498:2;7480:21;;;7517:18;;;7510:30;7576:34;7571:2;7556:18;;7549:62;7643:2;7628:18;;7296:356::o;7657:125::-;7697:4;7725:1;7722;7719:8;7716:34;;;7730:18;;:::i;:::-;-1:-1:-1;7767:9:1;;7657:125::o;7787:184::-;7857:6;7910:2;7898:9;7889:7;7885:23;7881:32;7878:52;;;7926:1;7923;7916:12;7878:52;-1:-1:-1;7949:16:1;;7787:184;-1:-1:-1;7787:184:1:o;8332:128::-;8372:3;8403:1;8399:6;8396:1;8393:13;8390:39;;;8409:18;;:::i;:::-;-1:-1:-1;8445:9:1;;8332:128::o;9233:351::-;9435:2;9417:21;;;9474:2;9454:18;;;9447:30;-1:-1:-1;;;9508:2:1;9493:18;;9486:57;9575:2;9560:18;;9233:351::o;9589:127::-;9650:10;9645:3;9641:20;9638:1;9631:31;9681:4;9678:1;9671:15;9705:4;9702:1;9695:15;9721:127;9782:10;9777:3;9773:20;9770:1;9763:31;9813:4;9810:1;9803:15;9837:4;9834:1;9827:15;9853:135;9892:3;9913:17;;;9910:43;;9933:18;;:::i;:::-;-1:-1:-1;9980:1:1;9969:13;;9853:135::o;11730:245::-;11797:6;11850:2;11838:9;11829:7;11825:23;11821:32;11818:52;;;11866:1;11863;11856:12;11818:52;11898:9;11892:16;11917:28;11939:5;11917:28;:::i;13752:127::-;13813:10;13808:3;13804:20;13801:1;13794:31;13844:4;13841:1;13834:15;13868:4;13865:1;13858:15;13884:461;13937:3;13975:5;13969:12;14002:6;13997:3;13990:19;14028:4;14057:2;14052:3;14048:12;14041:19;;14094:2;14087:5;14083:14;14115:1;14125:195;14139:6;14136:1;14133:13;14125:195;;;14204:13;;-1:-1:-1;;;;;14200:39:1;14188:52;;14260:12;;;;14295:15;;;;14236:1;14154:9;14125:195;;;-1:-1:-1;14336:3:1;;13884:461;-1:-1:-1;;;;;13884:461:1:o;14350:332::-;14557:6;14546:9;14539:25;14600:2;14595;14584:9;14580:18;14573:30;14520:4;14620:56;14672:2;14661:9;14657:18;14649:6;14620:56;:::i;:::-;14612:64;14350:332;-1:-1:-1;;;;14350:332:1:o;14687:1105::-;14782:6;14813:2;14856;14844:9;14835:7;14831:23;14827:32;14824:52;;;14872:1;14869;14862:12;14824:52;14905:9;14899:16;14934:18;14975:2;14967:6;14964:14;14961:34;;;14991:1;14988;14981:12;14961:34;15029:6;15018:9;15014:22;15004:32;;15074:7;15067:4;15063:2;15059:13;15055:27;15045:55;;15096:1;15093;15086:12;15045:55;15125:2;15119:9;15147:2;15143;15140:10;15137:36;;;15153:18;;:::i;:::-;15199:2;15196:1;15192:10;15231:2;15225:9;15294:2;15290:7;15285:2;15281;15277:11;15273:25;15265:6;15261:38;15349:6;15337:10;15334:22;15329:2;15317:10;15314:18;15311:46;15308:72;;;15360:18;;:::i;:::-;15396:2;15389:22;15446:18;;;15480:15;;;;-1:-1:-1;15522:11:1;;;15518:20;;;15550:19;;;15547:39;;;15582:1;15579;15572:12;15547:39;15606:11;;;;15626:135;15642:6;15637:3;15634:15;15626:135;;;15708:10;;15696:23;;15659:12;;;;15739;;;;15626:135;;;15780:6;14687:1105;-1:-1:-1;;;;;;;;14687:1105:1:o;16409:306::-;16497:6;16505;16513;16566:2;16554:9;16545:7;16541:23;16537:32;16534:52;;;16582:1;16579;16572:12;16534:52;16611:9;16605:16;16595:26;;16661:2;16650:9;16646:18;16640:25;16630:35;;16705:2;16694:9;16690:18;16684:25;16674:35;;16409:306;;;;;:::o;17123:582::-;17422:6;17411:9;17404:25;17465:6;17460:2;17449:9;17445:18;17438:34;17508:3;17503:2;17492:9;17488:18;17481:31;17385:4;17529:57;17581:3;17570:9;17566:19;17558:6;17529:57;:::i;:::-;-1:-1:-1;;;;;17622:32:1;;;;17617:2;17602:18;;17595:60;-1:-1:-1;17686:3:1;17671:19;17664:35;17521:65;17123:582;-1:-1:-1;;;17123:582:1:o

Swarm Source

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