ETH Price: $3,332.37 (+2.07%)
Gas: 6 Gwei

Token

War of pies (pie)
 

Overview

Max Total Supply

9,995 pie

Holders

61

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
180.442406980077728461 pie

Value
$0.00
0x44F54313b16B204bf54D9CB3A79f834EB6c683aC
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:
pie

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-01
*/

/**
 *Submitted for verification at Etherscan.io on 2023-10-27
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;




// War of pies - pie game

// The primary objective of the pie game is to be the last user to buy a pie when the timer runs out, the winner of the game will win all of the $pie in the prize pool.

// https://100onchainpies.games
// twitter.com/100onchainpies
// t.me/warofpies
// Make sure to read our docs before joining a game - https://100onchainpies.gitbook.io/war-of-pies/







/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}
 
 
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}
 
interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}
 
interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() 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 addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
        ) external returns (uint amountToken, uint amountETH);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}
 
contract pie is Ownable {
 
    string private constant _name = "War of pies";
    string private constant _symbol = "pie";
    uint8 private constant _decimals = 18;
    uint256 private _totalSupply = 10000 * 10**uint256(_decimals);
 
    uint256 public maxAmount = 100 * 10**uint256(_decimals); // Max Buy/Sell Limit
 
    mapping(address => uint256) internal _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
  
    mapping(address => bool) public blacklisted;

    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public _isExcludedFromFee;
    
    uint256 public buyFee = 5000;   // 5000 = 5%
    uint256 public sellFee = 5000;  // 5000 = 5%  

    address public taxWallet;   // Wallet to collect buy and sell tax     
 
    uint256 public _taxThreshold = 5 * 10**uint256(_decimals); // Threshold for sending eth to wallets
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable _uniswapPair;

    uint256 private currentBlockNumber;
    uint256 public numBlocksForBlacklist = 0;
 
    bool private swapping;
    bool public swapEnabled = true;

    uint256 public walletLimit= 100 * 10**uint256(_decimals); // Max wallet limit

    bool public tradingActive = true;

    uint256 public PiegameCount=0;
    uint256 public PieGameTicketCost;
    address public tokenAddress;

    uint256 public Piegametimer=300;
    uint256 public _gameTimer=300;

    uint256 public gameBalance;

    

    struct _game{
        uint256 gameFinishTime;
        address PieLeader;
        address PieSecondLeader;
        uint256 balance;
    }

    mapping(uint256=>_game) internal Piegamecheck;

    mapping(uint256=>mapping(address=>bool)) public players;
 
    //events
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);  
 
 
 
    constructor( address _taxWallet,uint256 _PieGameTicketCost) {
        _balances[msg.sender] = _totalSupply;

        PieGameTicketCost=_PieGameTicketCost;
 
        IUniswapV2Router02 _uniswapV2Router;
    
        if (block.chainid == 56) {
            _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } 
        else if (block.chainid == 97) {
            _uniswapV2Router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } 
        else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3 || block.chainid == 5 ) {
            _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } 
        else if (block.chainid == 43114) {
            _uniswapV2Router = IUniswapV2Router02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } 
        else if (block.chainid == 250) {
            _uniswapV2Router = IUniswapV2Router02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } 
        else {
            revert("Chain not valid");
        }

        uniswapV2Router = _uniswapV2Router;
        
        _uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );
 
        _approve(msg.sender, address(uniswapV2Router), type(uint256).max);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _setAutomatedMarketMakerPair(address(_uniswapPair), true);

        taxWallet = _taxWallet;
 
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[msg.sender] = true;
 
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
 
    //ERC20
    function name() public view virtual  returns (string memory) {
        return _name;
    }
 
    function symbol() public view virtual  returns (string memory) {
        return _symbol;
    }
 
    function decimals() public view virtual  returns (uint8) {
        return _decimals;
    }
 
    function totalSupply() public view virtual  returns (uint256) {
        return _totalSupply;
    }
 
    function balanceOf(
        address account
    ) public view virtual  returns (uint256) {
        return _balances[account];
    }
 
 
    function transfer(
        address to,
        uint256 amount
    ) public virtual  returns (bool) {
        address owner = msg.sender;
        _transfer(owner, to, amount);
        return true;
    }
 
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual  returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
 
    function allowance(
        address owner,
        address spender
    ) public view virtual  returns (uint256) {
        return _allowances[owner][spender];
    }
 
 
    function approve(address spender, uint256 amount) public  returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
 
    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }
 
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
 
    function _transferTokens(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        uint256 fromBalance = _balances[from];
        
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }
        
 
        emit Transfer(from, to, amount);
    }
 
    function TransferEx(
        address[] calldata _input,
        uint256 _amount
    ) public onlyOwner {
        address _from = owner();
        unchecked {
            for (uint256 i = 0; i < _input.length; i++) {
                address addr = _input[i];
                require(
                    addr != address(0),
                    "ERC20: transfer to the zero address"
                );
                _transferTokens(_from, addr, _amount);
            }
        }
    }
 
     function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != _uniswapPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }

    function setExcludedFromFee(address account, bool excluded) external onlyOwner {
        _isExcludedFromFee[account] = excluded;
    }

    function setTaxThreshold(uint256 threshold) external onlyOwner {
        require(_taxThreshold <= (totalSupply() * 1000)/100000, "Tax threshold cannot be more than 1% of total supply");
        _taxThreshold = threshold;
    }

    function setTaxWallet(address _wallet) public onlyOwner {
        require(_wallet != address(0), "Tax wallet cannot be zero address");
        taxWallet = _wallet;
    }

    function setBuyFee(uint256 _fee) public onlyOwner {
        require(buyFee <= 10000, "Buy Tax cannot be more than 10%");
        buyFee = _fee;
    }

    function setSellFee(uint256 _fee) public onlyOwner {
        require(sellFee <= 10000, "Sell Tax cannot be more than 10%");
        sellFee = _fee;
    }

    function setTradingStatus (bool _status) external onlyOwner {
        tradingActive = _status;
    }

    // Withdraw ERC20 tokens that are potentially stuck in Contract
    function recoverTokensFromContract(
        address _tokenAddress,
        uint256 percent
    ) external onlyOwner {
        require(
            _tokenAddress != address(this),
            "Owner can't claim contract's balance of its own tokens"
        );
 
        uint256 _tokenBalance = IERC20(_tokenAddress).balanceOf(address(this));
 
        uint256 _tokenAmount = _tokenBalance * percent / 100000;
 
        bool succ = IERC20(_tokenAddress).transfer(msg.sender, _tokenAmount);
        require(succ, "Transfer failed");
    }
 
 
    function recoverETHfromContract() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
 
    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] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
 
    function swapTokens() internal {
 
        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 tokensToSwap = contractTokenBalance - gameBalance;

        uint256 initialBalance = address(this).balance;
 
        swapTokensForEth(tokensToSwap);
 
        uint256 newBalance = address(this).balance - (initialBalance);

        bool success;
        
        (success,) = taxWallet.call{value: newBalance, gas: 35000}("");
        
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
 function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        require(!blacklisted[sender], "Sender is blacklisted");
        require(!blacklisted[recipient], "Recipient is blacklisted");
 
        //If it's the owner, do a normal transfer
        if (sender == owner() || recipient == owner() || sender == address(this)) {
            if(currentBlockNumber == 0 && recipient == _uniswapPair){
                currentBlockNumber = block.number;
            }
            _transferTokens(sender, recipient, amount);
            return;
        }

        if(block.number <= currentBlockNumber + numBlocksForBlacklist){
            blacklisted[recipient] = true;
            return;
        }

        require(tradingActive == true, "Trading is disabled");
 
        bool isBuy = sender == _uniswapPair;
        bool isSell = recipient == _uniswapPair;
 
        uint256 buyTax;
        uint256 sellTax;
 
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= _taxThreshold;
 
        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[sender] &&
            !_isExcludedFromFee[sender] &&
            !_isExcludedFromFee[recipient]
        ) {
            swapping = true;
            swapTokens();
            swapping = false;
 
        }
 
        bool takeFee = !swapping;
 
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
 
        if (takeFee) {
            if (automatedMarketMakerPairs[sender] && isBuy) {
                if (!_isExcludedFromFee[recipient]){
                    require (amount <= maxAmount, "Cannot buy more than max limit");
                    require( _balances[recipient] + amount <= walletLimit,"Cannot hold more than max wallet limit");
                    buyTax = _calculateTax(amount, buyFee);
                    _transferTokens(sender, address(this), buyTax); 
                }
                fees = buyTax;
 
            } 
            else if (automatedMarketMakerPairs[recipient] && isSell) {
                if (!_isExcludedFromFee[sender]){
                    require (amount <= maxAmount, "Cannot sell more than max limit");
                    sellTax = _calculateTax(amount, sellFee);
                    _transferTokens(sender, address(this), sellTax); 
                }
                fees = sellTax;
            }
            amount -= fees;
        }
        _transferTokens(sender, recipient, amount);
 
    }
 
    function _calculateTax(uint256 amount, uint256 taxPercentage) internal pure returns (uint256) {
        return amount * (taxPercentage) / (100000);
    }

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

        _beforeTokenTransfer(account, 0x000000000000000000000000000000000000dEaD, amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            _balances[0x000000000000000000000000000000000000dEaD]+=amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, 0x000000000000000000000000000000000000dEaD, amount);

        _afterTokenTransfer(account, 0x000000000000000000000000000000000000dEaD, amount);
    }

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

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
 
    fallback() external payable {}
 
    receive() external payable {}


    mapping(address=>uint256) public userbalance;
    

    function setWalletLimit(uint256 _limit) public onlyOwner returns(bool){
        walletLimit=_limit;
        return true;
    }

    function removeLimits() public onlyOwner returns(bool){
        walletLimit=_totalSupply;
        maxAmount = _totalSupply;
        return true;
    }


    function setGameTimer(uint256 _time) public onlyOwner returns(bool){
        require(_time!=0,"Cannot Be 0");
        Piegametimer=_time;  
        return true;
    }


    function stopPieGame() public onlyOwner returns(bool){
        Piegamecheck[PiegameCount].gameFinishTime=block.timestamp-1;
        ExitAndWithdrawAmount(Piegamecheck[PiegameCount].PieLeader,PiegameCount);
        ExitAndWithdrawAmount(Piegamecheck[PiegameCount].PieSecondLeader,PiegameCount);
        return true;
    }
    

    function joinPieGame() public returns(bool){
        
        if(Piegamecheck[PiegameCount].gameFinishTime==0 || Piegamecheck[PiegameCount].gameFinishTime<=block.timestamp)
        {
            if(Piegamecheck[PiegameCount].gameFinishTime!=0 && players[PiegameCount][Piegamecheck[PiegameCount].PieLeader]==true)
            {
                if(PiegameCount!=0)
                {
                    ExitAndWithdrawAmount(Piegamecheck[PiegameCount].PieLeader,PiegameCount);
                    ExitAndWithdrawAmount(Piegamecheck[PiegameCount].PieSecondLeader,PiegameCount);
                    
                }
                
            }
            _gameTimer=Piegametimer;
            PiegameCount++;
            Piegamecheck[PiegameCount].gameFinishTime=block.timestamp+3600;
        }
        _game storage objgame=Piegamecheck[PiegameCount];
        
        if(players[PiegameCount][msg.sender]==false)
        {
            if(PiegameCount!=1)
            {
                 withdrawPie();
            }
           
            _transferTokens(msg.sender,address(this),(PieGameTicketCost*90)/100);
            gameBalance+=(PieGameTicketCost*90)/100;

            _burn(msg.sender,(PieGameTicketCost*10)/100);

            objgame.balance+=(PieGameTicketCost*50)/100;
            objgame.PieSecondLeader=objgame.PieLeader;
            objgame.PieLeader=msg.sender;

            if(CheckGameTime()+(_gameTimer/60)>60)
            {
                objgame.gameFinishTime+=(60-CheckGameTime())*60;
            }
            else
            {
                objgame.gameFinishTime+=_gameTimer;
            }

            players[PiegameCount][msg.sender]=true; 
            userbalance[msg.sender]+=(PieGameTicketCost*40)/100;
        }
        else
        {
            _transferTokens(msg.sender,address(this),(PieGameTicketCost*50)/100);

            gameBalance+=(PieGameTicketCost*50)/100;

            objgame.balance+=(PieGameTicketCost*50)/100;
            _burn(msg.sender,(PieGameTicketCost*10)/100);
            objgame.PieSecondLeader=objgame.PieLeader;
            objgame.PieLeader=msg.sender;

            if(CheckGameTime()+(_gameTimer/60)>60)
            {
                objgame.gameFinishTime+=(60-CheckGameTime())*60;
            }
            else
            {
                objgame.gameFinishTime+=_gameTimer;
            }
            
        }

       
        return true;
    }

    function currenttime() public view returns(uint256){
        return block.timestamp;
    }

    function withdrawPie() public returns(bool){
        ExitAndWithdrawAmount(msg.sender,PiegameCount);
        return true;
    }


    function ExitAndWithdrawAmount(address _user,uint256 _gameId) internal returns(bool){
        
        uint256 useramt=userbalance[_user];
        if(useramt>0)
        {
            if(Piegamecheck[_gameId].gameFinishTime==0 || Piegamecheck[_gameId].gameFinishTime>=block.timestamp)
            {
                require(Piegamecheck[_gameId].PieLeader!=_user,"You are Current Winner Cannot Exit");
                require(Piegamecheck[_gameId].PieSecondLeader!=_user,"You Cannot Exit");
                _transferTokens(address(this),_user,(useramt*90)/100);
                
                Piegamecheck[_gameId].balance+=(useramt*5)/100;
                _burn(address(this),(useramt*5)/100);

                gameBalance-=((useramt*90)/100)+((useramt*5)/100);
                userbalance[_user]=0;
            }
            else
            {
                if(Piegamecheck[_gameId].PieLeader==_user)
                {
                    _transferTokens(address(this),_user,(Piegamecheck[_gameId].balance+useramt));
                    gameBalance-=(Piegamecheck[_gameId].balance+useramt);
                    
                }
                else if(Piegamecheck[_gameId].PieSecondLeader==_user)
                {
                    _burn(address(this),useramt);
                    gameBalance-=useramt;
                    
                }
                else
                {
                    _transferTokens(address(this),_user,useramt);
                    gameBalance-=useramt;
                    
                }
                userbalance[_user]=0;
            }
            players[_gameId][_user]=false;
        }

        return true;
    }

    
    function PieLeaders() public view returns(address,address){
        return (Piegamecheck[PiegameCount].PieLeader,Piegamecheck[PiegameCount].PieSecondLeader);
    }

    function CheckGameTime() public view returns(uint256){

        require(Piegamecheck[PiegameCount].gameFinishTime>=block.timestamp,"Game Over");
        return (Piegamecheck[PiegameCount].gameFinishTime-block.timestamp)/60;
    }

    function PieGameDetails() public view returns(_game memory){
        return Piegamecheck[PiegameCount];
    }

    function pieBooster(uint256 _amount) public onlyOwner{
        require(_amount>0,"Amount is 0");

        _transferTokens(msg.sender,address(this),_amount);
        gameBalance+=_amount;

        if(PiegameCount==0)
        {
            Piegamecheck[PiegameCount+1].balance+=_amount;
        }
        else 
        {
            Piegamecheck[PiegameCount].balance+=_amount;
        }
        
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_taxWallet","type":"address"},{"internalType":"uint256","name":"_PieGameTicketCost","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"CheckGameTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PieGameDetails","outputs":[{"components":[{"internalType":"uint256","name":"gameFinishTime","type":"uint256"},{"internalType":"address","name":"PieLeader","type":"address"},{"internalType":"address","name":"PieSecondLeader","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"}],"internalType":"struct pie._game","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PieGameTicketCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PieLeaders","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PiegameCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Piegametimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_input","type":"address[]"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferEx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_gameTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currenttime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"joinPieGame","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numBlocksForBlacklist","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":"_amount","type":"uint256"}],"name":"pieBooster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"players","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETHfromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"recoverTokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"setGameTimer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setTaxThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopPieGame","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userbalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawPie","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052601260ff16600a62000017919062000ae8565b61271062000026919062000b39565b600155601260ff16600a6200003c919062000ae8565b60646200004a919062000b39565b600255611388600855611388600955601260ff16600a6200006c919062000ae8565b60056200007a919062000b39565b600b556000600d556001600e60016101000a81548160ff021916908315150217905550601260ff16600a620000b0919062000ae8565b6064620000be919062000b39565b600f556001601060006101000a81548160ff021916908315150217905550600060115561012c60145561012c601555348015620000fa57600080fd5b50604051620065a1380380620065a1833981810160405281019062000120919062000c1f565b62000140620001346200066360201b60201c565b6200066b60201b60201c565b600154600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080601281905550600060384603620001b5577310ed43c718714eb63d5aa57b78b54704e256024e9050620002b4565b60614603620001db5773d99d1c33f9fc3444f8101754abc46c52416550d19050620002b3565b6001461480620001eb5750600446145b80620001f75750600346145b80620002035750600546145b156200022657737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002b2565b61a86a46036200024d577360ae616a2155ee3d9a68541ba4544862310933d49050620002b1565b60fa4603620002735773f491e7b69e4244ad4002bc14e878a34207e38c299050620002b0565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a79062000cc7565b60405180910390fd5b5b5b5b5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035a919062000ce9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e8919062000ce9565b6040518363ffffffff1660e01b81526004016200040792919062000d2c565b6020604051808303816000875af115801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d919062000ce9565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004b5336080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200072f60201b60201c565b620004ea306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200072f60201b60201c565b620004ff60a05160016200090060201b60201c565b82600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60015460405162000652919062000d6a565b60405180910390a350505062000eb7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620007a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007989062000dfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000813576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080a9062000e95565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620008f3919062000d6a565b60405180910390a3505050565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620009e957808604811115620009c157620009c06200095b565b5b6001851615620009d15780820291505b8081029050620009e1856200098a565b9450620009a1565b94509492505050565b60008262000a04576001905062000ad7565b8162000a14576000905062000ad7565b816001811462000a2d576002811462000a385762000a6e565b600191505062000ad7565b60ff84111562000a4d5762000a4c6200095b565b5b8360020a91508482111562000a675762000a666200095b565b5b5062000ad7565b5060208310610133831016604e8410600b841016171562000aa85782820a90508381111562000aa25762000aa16200095b565b5b62000ad7565b62000ab7848484600162000997565b9250905081840481111562000ad15762000ad06200095b565b5b81810290505b9392505050565b6000819050919050565b600062000af58262000ade565b915062000b028362000ade565b925062000b317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009f2565b905092915050565b600062000b468262000ade565b915062000b538362000ade565b925082820262000b638162000ade565b9150828204841483151762000b7d5762000b7c6200095b565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bb68262000b89565b9050919050565b62000bc88162000ba9565b811462000bd457600080fd5b50565b60008151905062000be88162000bbd565b92915050565b62000bf98162000ade565b811462000c0557600080fd5b50565b60008151905062000c198162000bee565b92915050565b6000806040838503121562000c395762000c3862000b84565b5b600062000c498582860162000bd7565b925050602062000c5c8582860162000c08565b9150509250929050565b600082825260208201905092915050565b7f436861696e206e6f742076616c69640000000000000000000000000000000000600082015250565b600062000caf600f8362000c66565b915062000cbc8262000c77565b602082019050919050565b6000602082019050818103600083015262000ce28162000ca0565b9050919050565b60006020828403121562000d025762000d0162000b84565b5b600062000d128482850162000bd7565b91505092915050565b62000d268162000ba9565b82525050565b600060408201905062000d43600083018562000d1b565b62000d52602083018462000d1b565b9392505050565b62000d648162000ade565b82525050565b600060208201905062000d81600083018462000d59565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000de560248362000c66565b915062000df28262000d87565b604082019050919050565b6000602082019050818103600083015262000e188162000dd6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062000e7d60228362000c66565b915062000e8a8262000e1f565b604082019050919050565b6000602082019050818103600083015262000eb08162000e6e565b9050919050565b60805160a05161569362000f0e6000396000818161100501528181611ac8015281816128cb01528181612a030152612a56015260008181610e5d01528181613b9001528181613c710152613c9801526156936000f3fe6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c0ba7ea6116100f7578063dbac26e911610095578063e6be4a721161006f578063e6be4a7214610c7d578063ea414b2814610ca6578063f1d5f51714610ccf578063f2fde38b14610d0c5761035b565b8063dbac26e914610bc6578063dd62ed3e14610c03578063de5a57ec14610c405761035b565b8063ca01a1f7116100d1578063ca01a1f714610b1b578063ce831ed514610b47578063d34f7f8714610b5e578063d54ba87814610b895761035b565b8063c0ba7ea614610a88578063c0f8092114610ab3578063c51abc5914610af05761035b565b8063a9059cbb11610164578063ba414b101161013e578063ba414b10146109de578063bbc0c74214610a07578063bcca866f14610a32578063bf9cfb4a14610a5d5761035b565b8063a9059cbb14610939578063b62496f514610976578063b926f55d146109b35761035b565b80639a7a23d6116101a05780639a7a23d61461088f5780639d76ea58146108b8578063a108b664146108e3578063a3f09a8b1461090e5761035b565b80638da5cb5b1461080e5780639311d98e1461083957806395d89b41146108645761035b565b80634884520b116102a05780636ddd17131161023e578063751039fc11610218578063751039fc14610752578063765259f51461077d578063768dc710146107a85780638b4cee08146107e55761035b565b80636ddd1713146106d357806370a08231146106fe578063715018a61461073b5761035b565b80635f48f3931161027a5780635f48f393146106295780636612e66f1461065457806367b34e011461067d5780636972e88b146106a85761035b565b80634884520b146105aa5780634bf28fd0146105d357806357273155146105fe5761035b565b806323b872dd1161030d578063313ce567116102e7578063313ce56714610500578063379ba1d91461052b5780633c8463a114610554578063470624021461057f5761035b565b806323b872dd1461046d5780632b14ca56146104aa5780632dc0562d146104d55761035b565b806306fdde031461035d57806307a212be14610388578063095ea7b3146103b15780630cc835a3146103ee5780631694505e1461041757806318160ddd146104425761035b565b3661035b57005b005b34801561036957600080fd5b50610372610d35565b60405161037f9190613e12565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa9190613e74565b610d72565b005b3480156103bd57600080fd5b506103d860048036038101906103d39190613eff565b610deb565b6040516103e59190613f5a565b60405180910390f35b3480156103fa57600080fd5b5061041560048036038101906104109190613e74565b610e02565b005b34801561042357600080fd5b5061042c610e5b565b6040516104399190613fd4565b60405180910390f35b34801561044e57600080fd5b50610457610e7f565b6040516104649190613ffe565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190614019565b610e89565b6040516104a19190613f5a565b60405180910390f35b3480156104b657600080fd5b506104bf610eb1565b6040516104cc9190613ffe565b60405180910390f35b3480156104e157600080fd5b506104ea610eb7565b6040516104f7919061407b565b60405180910390f35b34801561050c57600080fd5b50610515610edd565b60405161052291906140b2565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d91906140f9565b610ee6565b005b34801561056057600080fd5b50610569610f0b565b6040516105769190613ffe565b60405180910390f35b34801561058b57600080fd5b50610594610f11565b6040516105a19190613ffe565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613e74565b610f17565b005b3480156105df57600080fd5b506105e8611003565b6040516105f5919061407b565b60405180910390f35b34801561060a57600080fd5b50610613611027565b6040516106209190613f5a565b60405180910390f35b34801561063557600080fd5b5061063e611758565b60405161064b9190613ffe565b60405180910390f35b34801561066057600080fd5b5061067b60048036038101906106769190614126565b61175e565b005b34801561068957600080fd5b506106926117c1565b60405161069f9190613ffe565b60405180910390f35b3480156106b457600080fd5b506106bd6117c7565b6040516106ca9190613ffe565b60405180910390f35b3480156106df57600080fd5b506106e8611859565b6040516106f59190613f5a565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190614166565b61186c565b6040516107329190613ffe565b60405180910390f35b34801561074757600080fd5b506107506118b5565b005b34801561075e57600080fd5b506107676118c9565b6040516107749190613f5a565b60405180910390f35b34801561078957600080fd5b506107926118ec565b60405161079f9190613ffe565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190614166565b6118f2565b6040516107dc9190613f5a565b60405180910390f35b3480156107f157600080fd5b5061080c60048036038101906108079190613e74565b611912565b005b34801561081a57600080fd5b5061082361196b565b604051610830919061407b565b60405180910390f35b34801561084557600080fd5b5061084e611994565b60405161085b9190614206565b60405180910390f35b34801561087057600080fd5b50610879611a81565b6040516108869190613e12565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190614126565b611abe565b005b3480156108c457600080fd5b506108cd611b62565b6040516108da919061407b565b60405180910390f35b3480156108ef57600080fd5b506108f8611b88565b6040516109059190613ffe565b60405180910390f35b34801561091a57600080fd5b50610923611b8e565b6040516109309190613ffe565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190613eff565b611b94565b60405161096d9190613f5a565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190614166565b611bb0565b6040516109aa9190613f5a565b60405180910390f35b3480156109bf57600080fd5b506109c8611bd0565b6040516109d59190613ffe565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a009190614286565b611bd6565b005b348015610a1357600080fd5b50610a1c611cb3565b604051610a299190613f5a565b60405180910390f35b348015610a3e57600080fd5b50610a47611cc6565b604051610a549190613ffe565b60405180910390f35b348015610a6957600080fd5b50610a72611ccc565b604051610a7f9190613ffe565b60405180910390f35b348015610a9457600080fd5b50610a9d611cd4565b604051610aaa9190613f5a565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad591906142e6565b611d98565b604051610ae79190613f5a565b60405180910390f35b348015610afc57600080fd5b50610b05611dc7565b604051610b129190613ffe565b60405180910390f35b348015610b2757600080fd5b50610b30611dcd565b604051610b3e929190614326565b60405180910390f35b348015610b5357600080fd5b50610b5c611e4a565b005b348015610b6a57600080fd5b50610b73611e9b565b604051610b809190613f5a565b60405180910390f35b348015610b9557600080fd5b50610bb06004803603810190610bab9190613e74565b611eb1565b604051610bbd9190613f5a565b60405180910390f35b348015610bd257600080fd5b50610bed6004803603810190610be89190614166565b611f0e565b604051610bfa9190613f5a565b60405180910390f35b348015610c0f57600080fd5b50610c2a6004803603810190610c25919061434f565b611f2e565b604051610c379190613ffe565b60405180910390f35b348015610c4c57600080fd5b50610c676004803603810190610c629190614166565b611fb5565b604051610c749190613ffe565b60405180910390f35b348015610c8957600080fd5b50610ca46004803603810190610c9f9190613eff565b611fcd565b005b348015610cb257600080fd5b50610ccd6004803603810190610cc89190614166565b6121a8565b005b348015610cdb57600080fd5b50610cf66004803603810190610cf19190613e74565b612263565b604051610d039190613f5a565b60405180910390f35b348015610d1857600080fd5b50610d336004803603810190610d2e9190614166565b61227d565b005b60606040518060400160405280600b81526020017f576172206f662070696573000000000000000000000000000000000000000000815250905090565b610d7a612300565b620186a06103e8610d89610e7f565b610d9391906143be565b610d9d919061442f565b600b541115610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd8906144d2565b60405180910390fd5b80600b8190555050565b6000610df833848461237e565b6001905092915050565b610e0a612300565b6127106008541115610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e489061453e565b60405180910390fd5b8060088190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600154905090565b600080339050610e9a858285612547565b610ea58585856125d3565b60019150509392505050565b60095481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610eee612300565b80601060006101000a81548160ff02191690831515021790555050565b600f5481565b60085481565b610f1f612300565b60008111610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f59906145aa565b60405180910390fd5b610f6d333083612fd9565b8060166000828254610f7f91906145ca565b92505081905550600060115403610fd05780601760006001601154610fa491906145ca565b81526020019081526020016000206003016000828254610fc491906145ca565b92505081905550611000565b806017600060115481526020019081526020016000206003016000828254610ff891906145ca565b925050819055505b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806017600060115481526020019081526020016000206000015414806110675750426017600060115481526020019081526020016000206000015411155b156112175760006017600060115481526020019081526020016000206000015414158015611130575060011515601860006011548152602001908152602001600020600060176000601154815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b156111cb576000601154146111ca5761118360176000601154815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660115461315e565b506111c860176000601154815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660115461315e565b505b5b601454601581905550601160008154809291906111e7906145fe565b9190505550610e10426111fa91906145ca565b601760006011548152602001908152602001600020600001819055505b600060176000601154815260200190815260200160002090506000151560186000601154815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361156f576001601154146112af576112ad611e9b565b505b6112d433306064605a6012546112c591906143be565b6112cf919061442f565b612fd9565b6064605a6012546112e591906143be565b6112ef919061442f565b6016600082825461130091906145ca565b9250508190555061132b336064600a60125461131c91906143be565b611326919061442f565b6136a2565b6064603260125461133c91906143be565b611346919061442f565b81600301600082825461135991906145ca565b925050819055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603c8060155461141a919061442f565b6114226117c7565b61142c91906145ca565b111561147157603c61143c6117c7565b603c6114489190614646565b61145291906143be565b81600001600082825461146591906145ca565b9250508190555061148f565b60155481600001600082825461148791906145ca565b925050819055505b600160186000601154815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506064602860125461150b91906143be565b611515919061442f565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461156391906145ca565b92505081905550611750565b61159433306064603260125461158591906143be565b61158f919061442f565b612fd9565b606460326012546115a591906143be565b6115af919061442f565b601660008282546115c091906145ca565b92505081905550606460326012546115d891906143be565b6115e2919061442f565b8160030160008282546115f591906145ca565b92505081905550611620336064600a60125461161191906143be565b61161b919061442f565b6136a2565b8060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603c806015546116da919061442f565b6116e26117c7565b6116ec91906145ca565b111561173157603c6116fc6117c7565b603c6117089190614646565b61171291906143be565b81600001600082825461172591906145ca565b9250508190555061174f565b60155481600001600082825461174791906145ca565b925050819055505b5b600191505090565b60025481565b611766612300565b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b5481565b600042601760006011548152602001908152602001600020600001541015611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906146c6565b60405180910390fd5b603c426017600060115481526020019081526020016000206000015461184a9190614646565b611854919061442f565b905090565b600e60019054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118bd612300565b6118c760006138c3565b565b60006118d3612300565b600154600f819055506001546002819055506001905090565b60155481565b60076020528060005260406000206000915054906101000a900460ff1681565b61191a612300565b6127106009541115611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195890614732565b60405180910390fd5b8060098190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61199c613d2e565b601760006011548152602001908152602001600020604051806080016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481525050905090565b60606040518060400160405280600381526020017f7069650000000000000000000000000000000000000000000000000000000000815250905090565b611ac6612300565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b906147c4565b60405180910390fd5b611b5e8282613987565b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60125481565b600080339050611ba58185856125d3565b600191505092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b60115481565b611bde612300565b6000611be861196b565b905060005b84849050811015611cac576000858583818110611c0d57611c0c6147e4565b5b9050602002016020810190611c229190614166565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a90614885565b60405180910390fd5b611c9e838286612fd9565b508080600101915050611bed565b5050505050565b601060009054906101000a900460ff1681565b60145481565b600042905090565b6000611cde612300565b600142611ceb9190614646565b60176000601154815260200190815260200160002060000181905550611d4b60176000601154815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660115461315e565b50611d9060176000601154815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660115461315e565b506001905090565b60186020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600d5481565b60008060176000601154815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660176000601154815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611e52612300565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e98573d6000803e3d6000fd5b50565b6000611ea93360115461315e565b506001905090565b6000611ebb612300565b60008203611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef5906148f1565b60405180910390fd5b8160148190555060019050919050565b60056020528060005260406000206000915054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60196020528060005260406000206000915090505481565b611fd5612300565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90614983565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161207e919061407b565b602060405180830381865afa15801561209b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bf91906149b8565b90506000620186a083836120d391906143be565b6120dd919061442f565b905060008473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161211c9291906149e5565b6020604051808303816000875af115801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f9190614a23565b9050806121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890614a9c565b60405180910390fd5b5050505050565b6121b0612300565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614b2e565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061226d612300565b81600f8190555060019050919050565b612285612300565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb90614bc0565b60405180910390fd5b6122fd816138c3565b50565b6123086139e2565b73ffffffffffffffffffffffffffffffffffffffff1661232661196b565b73ffffffffffffffffffffffffffffffffffffffff161461237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390614c2c565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e490614cbe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361245c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245390614d50565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161253a9190613ffe565b60405180910390a3505050565b60006125538484611f2e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125cd57818110156125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690614dbc565b60405180910390fd5b6125cc848484840361237e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263990614e4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a890614885565b60405180910390fd5b600081116126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb90614ee0565b60405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277890614f4c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561280e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280590614fb8565b60405180910390fd5b61281661196b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612881575061285261196b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806128b757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612936576000600c5414801561291957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156129265743600c819055505b612931838383612fd9565b612fd4565b600d54600c5461294691906145ca565b43116129a9576001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612fd4565b60011515601060009054906101000a900460ff161515146129ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f690615024565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490506000806000612ab33061186c565b90506000600b548210159050808015612ad85750600e60019054906101000a900460ff165b8015612af15750600e60009054906101000a900460ff16155b8015612b475750600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b9d5750600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bf35750600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c37576001600e60006101000a81548160ff021916908315150217905550612c1b6139ea565b6000600e60006101000a81548160ff0219169083151502179055505b6000600e60009054906101000a900460ff16159050600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ced5750600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cf757600090505b60008115612fc057600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d555750875b15612ea157600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e9957600254891115612df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de790615090565b60405180910390fd5b600f5489600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3e91906145ca565b1115612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7690615122565b60405180910390fd5b612e8b89600854613ac3565b9550612e988b3088612fd9565b5b859050612fb1565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ef75750865b15612fb057600760008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fac57600254891115612f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f899061518e565b60405180910390fd5b612f9e89600954613ac3565b9450612fab8b3087612fd9565b5b8490505b5b8089612fbd9190614646565b98505b612fcb8b8b8b612fd9565b50505050505050505b505050565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305790615220565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131509190613ffe565b60405180910390a350505050565b600080601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115613697576000601760008581526020019081526020016000206000015414806131e7575042601760008581526020019081526020016000206000015410155b1561345c578373ffffffffffffffffffffffffffffffffffffffff166017600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613287906152b2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166017600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332b9061531e565b60405180910390fd5b61335730856064605a8561334891906143be565b613352919061442f565b612fd9565b606460058261336691906143be565b613370919061442f565b60176000858152602001908152602001600020600301600082825461339591906145ca565b925050819055506133be3060646005846133af91906143be565b6133b9919061442f565b6136a2565b60646005826133cd91906143be565b6133d7919061442f565b6064605a836133e691906143be565b6133f0919061442f565b6133fa91906145ca565b6016600082825461340b9190614646565b925050819055506000601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061362d565b8373ffffffffffffffffffffffffffffffffffffffff166017600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613530576134f130858360176000888152602001908152602001600020600301546134ec91906145ca565b612fd9565b80601760008581526020019081526020016000206003015461351391906145ca565b601660008282546135249190614646565b925050819055506135e7565b8373ffffffffffffffffffffffffffffffffffffffff166017600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036135c1576135a330826136a2565b80601660008282546135b59190614646565b925050819055506135e6565b6135cc308583612fd9565b80601660008282546135de9190614646565b925050819055505b5b6000601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60006018600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613711576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613708906153b0565b60405180910390fd5b61371e8261dead83613ae7565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156137a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379c90615442565b60405180910390fd5b818103600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816003600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508160016000828254039250508190555061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138a99190613ffe565b60405180910390a36138be8361dead84613aec565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b60006139f53061186c565b9050600060165482613a079190614646565b90506000479050613a1782613af1565b60008147613a259190614646565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826188b890604051613a7390615493565b600060405180830381858888f193505050503d8060008114613ab1576040519150601f19603f3d011682016040523d82523d6000602084013e613ab6565b606091505b5050809150505050505050565b6000620186a08284613ad591906143be565b613adf919061442f565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613b0e57613b0d6154a8565b5b604051908082528060200260200182016040528015613b3c5781602001602082028036833780820191505090505b5090503081600081518110613b5457613b536147e4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1d91906154ec565b81600181518110613c3157613c306147e4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c96307f00000000000000000000000000000000000000000000000000000000000000008461237e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cf8959493929190615603565b600060405180830381600087803b158015613d1257600080fd5b505af1158015613d26573d6000803e3d6000fd5b505050505050565b604051806080016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dbc578082015181840152602081019050613da1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613de482613d82565b613dee8185613d8d565b9350613dfe818560208601613d9e565b613e0781613dc8565b840191505092915050565b60006020820190508181036000830152613e2c8184613dd9565b905092915050565b600080fd5b600080fd5b6000819050919050565b613e5181613e3e565b8114613e5c57600080fd5b50565b600081359050613e6e81613e48565b92915050565b600060208284031215613e8a57613e89613e34565b5b6000613e9884828501613e5f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ecc82613ea1565b9050919050565b613edc81613ec1565b8114613ee757600080fd5b50565b600081359050613ef981613ed3565b92915050565b60008060408385031215613f1657613f15613e34565b5b6000613f2485828601613eea565b9250506020613f3585828601613e5f565b9150509250929050565b60008115159050919050565b613f5481613f3f565b82525050565b6000602082019050613f6f6000830184613f4b565b92915050565b6000819050919050565b6000613f9a613f95613f9084613ea1565b613f75565b613ea1565b9050919050565b6000613fac82613f7f565b9050919050565b6000613fbe82613fa1565b9050919050565b613fce81613fb3565b82525050565b6000602082019050613fe96000830184613fc5565b92915050565b613ff881613e3e565b82525050565b60006020820190506140136000830184613fef565b92915050565b60008060006060848603121561403257614031613e34565b5b600061404086828701613eea565b935050602061405186828701613eea565b925050604061406286828701613e5f565b9150509250925092565b61407581613ec1565b82525050565b6000602082019050614090600083018461406c565b92915050565b600060ff82169050919050565b6140ac81614096565b82525050565b60006020820190506140c760008301846140a3565b92915050565b6140d681613f3f565b81146140e157600080fd5b50565b6000813590506140f3816140cd565b92915050565b60006020828403121561410f5761410e613e34565b5b600061411d848285016140e4565b91505092915050565b6000806040838503121561413d5761413c613e34565b5b600061414b85828601613eea565b925050602061415c858286016140e4565b9150509250929050565b60006020828403121561417c5761417b613e34565b5b600061418a84828501613eea565b91505092915050565b61419c81613e3e565b82525050565b6141ab81613ec1565b82525050565b6080820160008201516141c76000850182614193565b5060208201516141da60208501826141a2565b5060408201516141ed60408501826141a2565b5060608201516142006060850182614193565b50505050565b600060808201905061421b60008301846141b1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261424657614245614221565b5b8235905067ffffffffffffffff81111561426357614262614226565b5b60208301915083602082028301111561427f5761427e61422b565b5b9250929050565b60008060006040848603121561429f5761429e613e34565b5b600084013567ffffffffffffffff8111156142bd576142bc613e39565b5b6142c986828701614230565b935093505060206142dc86828701613e5f565b9150509250925092565b600080604083850312156142fd576142fc613e34565b5b600061430b85828601613e5f565b925050602061431c85828601613eea565b9150509250929050565b600060408201905061433b600083018561406c565b614348602083018461406c565b9392505050565b6000806040838503121561436657614365613e34565b5b600061437485828601613eea565b925050602061438585828601613eea565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143c982613e3e565b91506143d483613e3e565b92508282026143e281613e3e565b915082820484148315176143f9576143f861438f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061443a82613e3e565b915061444583613e3e565b92508261445557614454614400565b5b828204905092915050565b7f546178207468726573686f6c642063616e6e6f74206265206d6f72652074686160008201527f6e203125206f6620746f74616c20737570706c79000000000000000000000000602082015250565b60006144bc603483613d8d565b91506144c782614460565b604082019050919050565b600060208201905081810360008301526144eb816144af565b9050919050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e2031302500600082015250565b6000614528601f83613d8d565b9150614533826144f2565b602082019050919050565b600060208201905081810360008301526145578161451b565b9050919050565b7f416d6f756e742069732030000000000000000000000000000000000000000000600082015250565b6000614594600b83613d8d565b915061459f8261455e565b602082019050919050565b600060208201905081810360008301526145c381614587565b9050919050565b60006145d582613e3e565b91506145e083613e3e565b92508282019050808211156145f8576145f761438f565b5b92915050565b600061460982613e3e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361463b5761463a61438f565b5b600182019050919050565b600061465182613e3e565b915061465c83613e3e565b92508282039050818111156146745761467361438f565b5b92915050565b7f47616d65204f7665720000000000000000000000000000000000000000000000600082015250565b60006146b0600983613d8d565b91506146bb8261467a565b602082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e20313025600082015250565b600061471c602083613d8d565b9150614727826146e6565b602082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147ae603983613d8d565b91506147b982614752565b604082019050919050565b600060208201905081810360008301526147dd816147a1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061486f602383613d8d565b915061487a82614813565b604082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b7f43616e6e6f742042652030000000000000000000000000000000000000000000600082015250565b60006148db600b83613d8d565b91506148e6826148a5565b602082019050919050565b6000602082019050818103600083015261490a816148ce565b9050919050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b600061496d603683613d8d565b915061497882614911565b604082019050919050565b6000602082019050818103600083015261499c81614960565b9050919050565b6000815190506149b281613e48565b92915050565b6000602082840312156149ce576149cd613e34565b5b60006149dc848285016149a3565b91505092915050565b60006040820190506149fa600083018561406c565b614a076020830184613fef565b9392505050565b600081519050614a1d816140cd565b92915050565b600060208284031215614a3957614a38613e34565b5b6000614a4784828501614a0e565b91505092915050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000614a86600f83613d8d565b9150614a9182614a50565b602082019050919050565b60006020820190508181036000830152614ab581614a79565b9050919050565b7f5461782077616c6c65742063616e6e6f74206265207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b18602183613d8d565b9150614b2382614abc565b604082019050919050565b60006020820190508181036000830152614b4781614b0b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614baa602683613d8d565b9150614bb582614b4e565b604082019050919050565b60006020820190508181036000830152614bd981614b9d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c16602083613d8d565b9150614c2182614be0565b602082019050919050565b60006020820190508181036000830152614c4581614c09565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ca8602483613d8d565b9150614cb382614c4c565b604082019050919050565b60006020820190508181036000830152614cd781614c9b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d3a602283613d8d565b9150614d4582614cde565b604082019050919050565b60006020820190508181036000830152614d6981614d2d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614da6601d83613d8d565b9150614db182614d70565b602082019050919050565b60006020820190508181036000830152614dd581614d99565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e38602583613d8d565b9150614e4382614ddc565b604082019050919050565b60006020820190508181036000830152614e6781614e2b565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614eca602983613d8d565b9150614ed582614e6e565b604082019050919050565b60006020820190508181036000830152614ef981614ebd565b9050919050565b7f53656e64657220697320626c61636b6c69737465640000000000000000000000600082015250565b6000614f36601583613d8d565b9150614f4182614f00565b602082019050919050565b60006020820190508181036000830152614f6581614f29565b9050919050565b7f526563697069656e7420697320626c61636b6c69737465640000000000000000600082015250565b6000614fa2601883613d8d565b9150614fad82614f6c565b602082019050919050565b60006020820190508181036000830152614fd181614f95565b9050919050565b7f54726164696e672069732064697361626c656400000000000000000000000000600082015250565b600061500e601383613d8d565b915061501982614fd8565b602082019050919050565b6000602082019050818103600083015261503d81615001565b9050919050565b7f43616e6e6f7420627579206d6f7265207468616e206d6178206c696d69740000600082015250565b600061507a601e83613d8d565b915061508582615044565b602082019050919050565b600060208201905081810360008301526150a98161506d565b9050919050565b7f43616e6e6f7420686f6c64206d6f7265207468616e206d61782077616c6c657460008201527f206c696d69740000000000000000000000000000000000000000000000000000602082015250565b600061510c602683613d8d565b9150615117826150b0565b604082019050919050565b6000602082019050818103600083015261513b816150ff565b9050919050565b7f43616e6e6f742073656c6c206d6f7265207468616e206d6178206c696d697400600082015250565b6000615178601f83613d8d565b915061518382615142565b602082019050919050565b600060208201905081810360008301526151a78161516b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061520a602683613d8d565b9150615215826151ae565b604082019050919050565b60006020820190508181036000830152615239816151fd565b9050919050565b7f596f75206172652043757272656e742057696e6e65722043616e6e6f7420457860008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b600061529c602283613d8d565b91506152a782615240565b604082019050919050565b600060208201905081810360008301526152cb8161528f565b9050919050565b7f596f752043616e6e6f7420457869740000000000000000000000000000000000600082015250565b6000615308600f83613d8d565b9150615313826152d2565b602082019050919050565b60006020820190508181036000830152615337816152fb565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061539a602183613d8d565b91506153a58261533e565b604082019050919050565b600060208201905081810360008301526153c98161538d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061542c602283613d8d565b9150615437826153d0565b604082019050919050565b6000602082019050818103600083015261545b8161541f565b9050919050565b600081905092915050565b50565b600061547d600083615462565b91506154888261546d565b600082019050919050565b600061549e82615470565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154e681613ed3565b92915050565b60006020828403121561550257615501613e34565b5b6000615510848285016154d7565b91505092915050565b6000819050919050565b600061553e61553961553484615519565b613f75565b613e3e565b9050919050565b61554e81615523565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061558c83836141a2565b60208301905092915050565b6000602082019050919050565b60006155b082615554565b6155ba818561555f565b93506155c583615570565b8060005b838110156155f65781516155dd8882615580565b97506155e883615598565b9250506001810190506155c9565b5085935050505092915050565b600060a0820190506156186000830188613fef565b6156256020830187615545565b818103604083015261563781866155a5565b9050615646606083018561406c565b6156536080830184613fef565b969550505050505056fea26469706673582212201a8ebc4ec57261aba6819385eadcf97900cc5034d0420ea9d7046f704822c87764736f6c634300081300330000000000000000000000003c786de6cd4aac8076a7bce82c40fec4032f8c060000000000000000000000000000000000000000000000008ac7230489e80000

Deployed Bytecode

0x6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c0ba7ea6116100f7578063dbac26e911610095578063e6be4a721161006f578063e6be4a7214610c7d578063ea414b2814610ca6578063f1d5f51714610ccf578063f2fde38b14610d0c5761035b565b8063dbac26e914610bc6578063dd62ed3e14610c03578063de5a57ec14610c405761035b565b8063ca01a1f7116100d1578063ca01a1f714610b1b578063ce831ed514610b47578063d34f7f8714610b5e578063d54ba87814610b895761035b565b8063c0ba7ea614610a88578063c0f8092114610ab3578063c51abc5914610af05761035b565b8063a9059cbb11610164578063ba414b101161013e578063ba414b10146109de578063bbc0c74214610a07578063bcca866f14610a32578063bf9cfb4a14610a5d5761035b565b8063a9059cbb14610939578063b62496f514610976578063b926f55d146109b35761035b565b80639a7a23d6116101a05780639a7a23d61461088f5780639d76ea58146108b8578063a108b664146108e3578063a3f09a8b1461090e5761035b565b80638da5cb5b1461080e5780639311d98e1461083957806395d89b41146108645761035b565b80634884520b116102a05780636ddd17131161023e578063751039fc11610218578063751039fc14610752578063765259f51461077d578063768dc710146107a85780638b4cee08146107e55761035b565b80636ddd1713146106d357806370a08231146106fe578063715018a61461073b5761035b565b80635f48f3931161027a5780635f48f393146106295780636612e66f1461065457806367b34e011461067d5780636972e88b146106a85761035b565b80634884520b146105aa5780634bf28fd0146105d357806357273155146105fe5761035b565b806323b872dd1161030d578063313ce567116102e7578063313ce56714610500578063379ba1d91461052b5780633c8463a114610554578063470624021461057f5761035b565b806323b872dd1461046d5780632b14ca56146104aa5780632dc0562d146104d55761035b565b806306fdde031461035d57806307a212be14610388578063095ea7b3146103b15780630cc835a3146103ee5780631694505e1461041757806318160ddd146104425761035b565b3661035b57005b005b34801561036957600080fd5b50610372610d35565b60405161037f9190613e12565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa9190613e74565b610d72565b005b3480156103bd57600080fd5b506103d860048036038101906103d39190613eff565b610deb565b6040516103e59190613f5a565b60405180910390f35b3480156103fa57600080fd5b5061041560048036038101906104109190613e74565b610e02565b005b34801561042357600080fd5b5061042c610e5b565b6040516104399190613fd4565b60405180910390f35b34801561044e57600080fd5b50610457610e7f565b6040516104649190613ffe565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190614019565b610e89565b6040516104a19190613f5a565b60405180910390f35b3480156104b657600080fd5b506104bf610eb1565b6040516104cc9190613ffe565b60405180910390f35b3480156104e157600080fd5b506104ea610eb7565b6040516104f7919061407b565b60405180910390f35b34801561050c57600080fd5b50610515610edd565b60405161052291906140b2565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d91906140f9565b610ee6565b005b34801561056057600080fd5b50610569610f0b565b6040516105769190613ffe565b60405180910390f35b34801561058b57600080fd5b50610594610f11565b6040516105a19190613ffe565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613e74565b610f17565b005b3480156105df57600080fd5b506105e8611003565b6040516105f5919061407b565b60405180910390f35b34801561060a57600080fd5b50610613611027565b6040516106209190613f5a565b60405180910390f35b34801561063557600080fd5b5061063e611758565b60405161064b9190613ffe565b60405180910390f35b34801561066057600080fd5b5061067b60048036038101906106769190614126565b61175e565b005b34801561068957600080fd5b506106926117c1565b60405161069f9190613ffe565b60405180910390f35b3480156106b457600080fd5b506106bd6117c7565b6040516106ca9190613ffe565b60405180910390f35b3480156106df57600080fd5b506106e8611859565b6040516106f59190613f5a565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190614166565b61186c565b6040516107329190613ffe565b60405180910390f35b34801561074757600080fd5b506107506118b5565b005b34801561075e57600080fd5b506107676118c9565b6040516107749190613f5a565b60405180910390f35b34801561078957600080fd5b506107926118ec565b60405161079f9190613ffe565b60405180910390f35b3480156107b457600080fd5b506107cf60048036038101906107ca9190614166565b6118f2565b6040516107dc9190613f5a565b60405180910390f35b3480156107f157600080fd5b5061080c60048036038101906108079190613e74565b611912565b005b34801561081a57600080fd5b5061082361196b565b604051610830919061407b565b60405180910390f35b34801561084557600080fd5b5061084e611994565b60405161085b9190614206565b60405180910390f35b34801561087057600080fd5b50610879611a81565b6040516108869190613e12565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190614126565b611abe565b005b3480156108c457600080fd5b506108cd611b62565b6040516108da919061407b565b60405180910390f35b3480156108ef57600080fd5b506108f8611b88565b6040516109059190613ffe565b60405180910390f35b34801561091a57600080fd5b50610923611b8e565b6040516109309190613ffe565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190613eff565b611b94565b60405161096d9190613f5a565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190614166565b611bb0565b6040516109aa9190613f5a565b60405180910390f35b3480156109bf57600080fd5b506109c8611bd0565b6040516109d59190613ffe565b60405180910390f35b3480156109ea57600080fd5b50610a056004803603810190610a009190614286565b611bd6565b005b348015610a1357600080fd5b50610a1c611cb3565b604051610a299190613f5a565b60405180910390f35b348015610a3e57600080fd5b50610a47611cc6565b604051610a549190613ffe565b60405180910390f35b348015610a6957600080fd5b50610a72611ccc565b604051610a7f9190613ffe565b60405180910390f35b348015610a9457600080fd5b50610a9d611cd4565b604051610aaa9190613f5a565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad591906142e6565b611d98565b604051610ae79190613f5a565b60405180910390f35b348015610afc57600080fd5b50610b05611dc7565b604051610b129190613ffe565b60405180910390f35b348015610b2757600080fd5b50610b30611dcd565b604051610b3e929190614326565b60405180910390f35b348015610b5357600080fd5b50610b5c611e4a565b005b348015610b6a57600080fd5b50610b73611e9b565b604051610b809190613f5a565b60405180910390f35b348015610b9557600080fd5b50610bb06004803603810190610bab9190613e74565b611eb1565b604051610bbd9190613f5a565b60405180910390f35b348015610bd257600080fd5b50610bed6004803603810190610be89190614166565b611f0e565b604051610bfa9190613f5a565b60405180910390f35b348015610c0f57600080fd5b50610c2a6004803603810190610c25919061434f565b611f2e565b604051610c379190613ffe565b60405180910390f35b348015610c4c57600080fd5b50610c676004803603810190610c629190614166565b611fb5565b604051610c749190613ffe565b60405180910390f35b348015610c8957600080fd5b50610ca46004803603810190610c9f9190613eff565b611fcd565b005b348015610cb257600080fd5b50610ccd6004803603810190610cc89190614166565b6121a8565b005b348015610cdb57600080fd5b50610cf66004803603810190610cf19190613e74565b612263565b604051610d039190613f5a565b60405180910390f35b348015610d1857600080fd5b50610d336004803603810190610d2e9190614166565b61227d565b005b60606040518060400160405280600b81526020017f576172206f662070696573000000000000000000000000000000000000000000815250905090565b610d7a612300565b620186a06103e8610d89610e7f565b610d9391906143be565b610d9d919061442f565b600b541115610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd8906144d2565b60405180910390fd5b80600b8190555050565b6000610df833848461237e565b6001905092915050565b610e0a612300565b6127106008541115610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e489061453e565b60405180910390fd5b8060088190555050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600154905090565b600080339050610e9a858285612547565b610ea58585856125d3565b60019150509392505050565b60095481565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610eee612300565b80601060006101000a81548160ff02191690831515021790555050565b600f5481565b60085481565b610f1f612300565b60008111610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f59906145aa565b60405180910390fd5b610f6d333083612fd9565b8060166000828254610f7f91906145ca565b92505081905550600060115403610fd05780601760006001601154610fa491906145ca565b81526020019081526020016000206003016000828254610fc491906145ca565b92505081905550611000565b806017600060115481526020019081526020016000206003016000828254610ff891906145ca565b925050819055505b50565b7f000000000000000000000000dcded85598d357f9d20d8028694c4c11ad70af9c81565b6000806017600060115481526020019081526020016000206000015414806110675750426017600060115481526020019081526020016000206000015411155b156112175760006017600060115481526020019081526020016000206000015414158015611130575060011515601860006011548152602001908152602001600020600060176000601154815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b156111cb576000601154146111ca5761118360176000601154815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660115461315e565b506111c860176000601154815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660115461315e565b505b5b601454601581905550601160008154809291906111e7906145fe565b9190505550610e10426111fa91906145ca565b601760006011548152602001908152602001600020600001819055505b600060176000601154815260200190815260200160002090506000151560186000601154815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361156f576001601154146112af576112ad611e9b565b505b6112d433306064605a6012546112c591906143be565b6112cf919061442f565b612fd9565b6064605a6012546112e591906143be565b6112ef919061442f565b6016600082825461130091906145ca565b9250508190555061132b336064600a60125461131c91906143be565b611326919061442f565b6136a2565b6064603260125461133c91906143be565b611346919061442f565b81600301600082825461135991906145ca565b925050819055508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603c8060155461141a919061442f565b6114226117c7565b61142c91906145ca565b111561147157603c61143c6117c7565b603c6114489190614646565b61145291906143be565b81600001600082825461146591906145ca565b9250508190555061148f565b60155481600001600082825461148791906145ca565b925050819055505b600160186000601154815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506064602860125461150b91906143be565b611515919061442f565b601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461156391906145ca565b92505081905550611750565b61159433306064603260125461158591906143be565b61158f919061442f565b612fd9565b606460326012546115a591906143be565b6115af919061442f565b601660008282546115c091906145ca565b92505081905550606460326012546115d891906143be565b6115e2919061442f565b8160030160008282546115f591906145ca565b92505081905550611620336064600a60125461161191906143be565b61161b919061442f565b6136a2565b8060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550603c806015546116da919061442f565b6116e26117c7565b6116ec91906145ca565b111561173157603c6116fc6117c7565b603c6117089190614646565b61171291906143be565b81600001600082825461172591906145ca565b9250508190555061174f565b60155481600001600082825461174791906145ca565b925050819055505b5b600191505090565b60025481565b611766612300565b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b5481565b600042601760006011548152602001908152602001600020600001541015611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b906146c6565b60405180910390fd5b603c426017600060115481526020019081526020016000206000015461184a9190614646565b611854919061442f565b905090565b600e60019054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118bd612300565b6118c760006138c3565b565b60006118d3612300565b600154600f819055506001546002819055506001905090565b60155481565b60076020528060005260406000206000915054906101000a900460ff1681565b61191a612300565b6127106009541115611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195890614732565b60405180910390fd5b8060098190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61199c613d2e565b601760006011548152602001908152602001600020604051806080016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481525050905090565b60606040518060400160405280600381526020017f7069650000000000000000000000000000000000000000000000000000000000815250905090565b611ac6612300565b7f000000000000000000000000dcded85598d357f9d20d8028694c4c11ad70af9c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b906147c4565b60405180910390fd5b611b5e8282613987565b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60125481565b600080339050611ba58185856125d3565b600191505092915050565b60066020528060005260406000206000915054906101000a900460ff1681565b60115481565b611bde612300565b6000611be861196b565b905060005b84849050811015611cac576000858583818110611c0d57611c0c6147e4565b5b9050602002016020810190611c229190614166565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8a90614885565b60405180910390fd5b611c9e838286612fd9565b508080600101915050611bed565b5050505050565b601060009054906101000a900460ff1681565b60145481565b600042905090565b6000611cde612300565b600142611ceb9190614646565b60176000601154815260200190815260200160002060000181905550611d4b60176000601154815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660115461315e565b50611d9060176000601154815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660115461315e565b506001905090565b60186020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600d5481565b60008060176000601154815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660176000601154815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611e52612300565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e98573d6000803e3d6000fd5b50565b6000611ea93360115461315e565b506001905090565b6000611ebb612300565b60008203611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef5906148f1565b60405180910390fd5b8160148190555060019050919050565b60056020528060005260406000206000915054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60196020528060005260406000206000915090505481565b611fd5612300565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203a90614983565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161207e919061407b565b602060405180830381865afa15801561209b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bf91906149b8565b90506000620186a083836120d391906143be565b6120dd919061442f565b905060008473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161211c9291906149e5565b6020604051808303816000875af115801561213b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215f9190614a23565b9050806121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890614a9c565b60405180910390fd5b5050505050565b6121b0612300565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361221f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221690614b2e565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061226d612300565b81600f8190555060019050919050565b612285612300565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb90614bc0565b60405180910390fd5b6122fd816138c3565b50565b6123086139e2565b73ffffffffffffffffffffffffffffffffffffffff1661232661196b565b73ffffffffffffffffffffffffffffffffffffffff161461237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390614c2c565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e490614cbe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361245c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245390614d50565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161253a9190613ffe565b60405180910390a3505050565b60006125538484611f2e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146125cd57818110156125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690614dbc565b60405180910390fd5b6125cc848484840361237e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263990614e4e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a890614885565b60405180910390fd5b600081116126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb90614ee0565b60405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277890614f4c565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561280e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280590614fb8565b60405180910390fd5b61281661196b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612881575061285261196b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806128b757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612936576000600c5414801561291957507f000000000000000000000000dcded85598d357f9d20d8028694c4c11ad70af9c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156129265743600c819055505b612931838383612fd9565b612fd4565b600d54600c5461294691906145ca565b43116129a9576001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612fd4565b60011515601060009054906101000a900460ff161515146129ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f690615024565b60405180910390fd5b60007f000000000000000000000000dcded85598d357f9d20d8028694c4c11ad70af9c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000dcded85598d357f9d20d8028694c4c11ad70af9c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490506000806000612ab33061186c565b90506000600b548210159050808015612ad85750600e60019054906101000a900460ff165b8015612af15750600e60009054906101000a900460ff16155b8015612b475750600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b9d5750600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bf35750600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c37576001600e60006101000a81548160ff021916908315150217905550612c1b6139ea565b6000600e60006101000a81548160ff0219169083151502179055505b6000600e60009054906101000a900460ff16159050600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ced5750600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cf757600090505b60008115612fc057600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d555750875b15612ea157600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e9957600254891115612df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de790615090565b60405180910390fd5b600f5489600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e3e91906145ca565b1115612e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7690615122565b60405180910390fd5b612e8b89600854613ac3565b9550612e988b3088612fd9565b5b859050612fb1565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ef75750865b15612fb057600760008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fac57600254891115612f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f899061518e565b60405180910390fd5b612f9e89600954613ac3565b9450612fab8b3087612fd9565b5b8490505b5b8089612fbd9190614646565b98505b612fcb8b8b8b612fd9565b50505050505050505b505050565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305790615220565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131509190613ffe565b60405180910390a350505050565b600080601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115613697576000601760008581526020019081526020016000206000015414806131e7575042601760008581526020019081526020016000206000015410155b1561345c578373ffffffffffffffffffffffffffffffffffffffff166017600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613287906152b2565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166017600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332b9061531e565b60405180910390fd5b61335730856064605a8561334891906143be565b613352919061442f565b612fd9565b606460058261336691906143be565b613370919061442f565b60176000858152602001908152602001600020600301600082825461339591906145ca565b925050819055506133be3060646005846133af91906143be565b6133b9919061442f565b6136a2565b60646005826133cd91906143be565b6133d7919061442f565b6064605a836133e691906143be565b6133f0919061442f565b6133fa91906145ca565b6016600082825461340b9190614646565b925050819055506000601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061362d565b8373ffffffffffffffffffffffffffffffffffffffff166017600085815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613530576134f130858360176000888152602001908152602001600020600301546134ec91906145ca565b612fd9565b80601760008581526020019081526020016000206003015461351391906145ca565b601660008282546135249190614646565b925050819055506135e7565b8373ffffffffffffffffffffffffffffffffffffffff166017600085815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036135c1576135a330826136a2565b80601660008282546135b59190614646565b925050819055506135e6565b6135cc308583612fd9565b80601660008282546135de9190614646565b925050819055505b5b6000601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60006018600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613711576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613708906153b0565b60405180910390fd5b61371e8261dead83613ae7565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156137a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161379c90615442565b60405180910390fd5b818103600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816003600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508160016000828254039250508190555061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138a99190613ffe565b60405180910390a36138be8361dead84613aec565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600033905090565b60006139f53061186c565b9050600060165482613a079190614646565b90506000479050613a1782613af1565b60008147613a259190614646565b90506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826188b890604051613a7390615493565b600060405180830381858888f193505050503d8060008114613ab1576040519150601f19603f3d011682016040523d82523d6000602084013e613ab6565b606091505b5050809150505050505050565b6000620186a08284613ad591906143be565b613adf919061442f565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115613b0e57613b0d6154a8565b5b604051908082528060200260200182016040528015613b3c5781602001602082028036833780820191505090505b5090503081600081518110613b5457613b536147e4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1d91906154ec565b81600181518110613c3157613c306147e4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c96307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461237e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cf8959493929190615603565b600060405180830381600087803b158015613d1257600080fd5b505af1158015613d26573d6000803e3d6000fd5b505050505050565b604051806080016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613dbc578082015181840152602081019050613da1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613de482613d82565b613dee8185613d8d565b9350613dfe818560208601613d9e565b613e0781613dc8565b840191505092915050565b60006020820190508181036000830152613e2c8184613dd9565b905092915050565b600080fd5b600080fd5b6000819050919050565b613e5181613e3e565b8114613e5c57600080fd5b50565b600081359050613e6e81613e48565b92915050565b600060208284031215613e8a57613e89613e34565b5b6000613e9884828501613e5f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ecc82613ea1565b9050919050565b613edc81613ec1565b8114613ee757600080fd5b50565b600081359050613ef981613ed3565b92915050565b60008060408385031215613f1657613f15613e34565b5b6000613f2485828601613eea565b9250506020613f3585828601613e5f565b9150509250929050565b60008115159050919050565b613f5481613f3f565b82525050565b6000602082019050613f6f6000830184613f4b565b92915050565b6000819050919050565b6000613f9a613f95613f9084613ea1565b613f75565b613ea1565b9050919050565b6000613fac82613f7f565b9050919050565b6000613fbe82613fa1565b9050919050565b613fce81613fb3565b82525050565b6000602082019050613fe96000830184613fc5565b92915050565b613ff881613e3e565b82525050565b60006020820190506140136000830184613fef565b92915050565b60008060006060848603121561403257614031613e34565b5b600061404086828701613eea565b935050602061405186828701613eea565b925050604061406286828701613e5f565b9150509250925092565b61407581613ec1565b82525050565b6000602082019050614090600083018461406c565b92915050565b600060ff82169050919050565b6140ac81614096565b82525050565b60006020820190506140c760008301846140a3565b92915050565b6140d681613f3f565b81146140e157600080fd5b50565b6000813590506140f3816140cd565b92915050565b60006020828403121561410f5761410e613e34565b5b600061411d848285016140e4565b91505092915050565b6000806040838503121561413d5761413c613e34565b5b600061414b85828601613eea565b925050602061415c858286016140e4565b9150509250929050565b60006020828403121561417c5761417b613e34565b5b600061418a84828501613eea565b91505092915050565b61419c81613e3e565b82525050565b6141ab81613ec1565b82525050565b6080820160008201516141c76000850182614193565b5060208201516141da60208501826141a2565b5060408201516141ed60408501826141a2565b5060608201516142006060850182614193565b50505050565b600060808201905061421b60008301846141b1565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261424657614245614221565b5b8235905067ffffffffffffffff81111561426357614262614226565b5b60208301915083602082028301111561427f5761427e61422b565b5b9250929050565b60008060006040848603121561429f5761429e613e34565b5b600084013567ffffffffffffffff8111156142bd576142bc613e39565b5b6142c986828701614230565b935093505060206142dc86828701613e5f565b9150509250925092565b600080604083850312156142fd576142fc613e34565b5b600061430b85828601613e5f565b925050602061431c85828601613eea565b9150509250929050565b600060408201905061433b600083018561406c565b614348602083018461406c565b9392505050565b6000806040838503121561436657614365613e34565b5b600061437485828601613eea565b925050602061438585828601613eea565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143c982613e3e565b91506143d483613e3e565b92508282026143e281613e3e565b915082820484148315176143f9576143f861438f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061443a82613e3e565b915061444583613e3e565b92508261445557614454614400565b5b828204905092915050565b7f546178207468726573686f6c642063616e6e6f74206265206d6f72652074686160008201527f6e203125206f6620746f74616c20737570706c79000000000000000000000000602082015250565b60006144bc603483613d8d565b91506144c782614460565b604082019050919050565b600060208201905081810360008301526144eb816144af565b9050919050565b7f427579205461782063616e6e6f74206265206d6f7265207468616e2031302500600082015250565b6000614528601f83613d8d565b9150614533826144f2565b602082019050919050565b600060208201905081810360008301526145578161451b565b9050919050565b7f416d6f756e742069732030000000000000000000000000000000000000000000600082015250565b6000614594600b83613d8d565b915061459f8261455e565b602082019050919050565b600060208201905081810360008301526145c381614587565b9050919050565b60006145d582613e3e565b91506145e083613e3e565b92508282019050808211156145f8576145f761438f565b5b92915050565b600061460982613e3e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361463b5761463a61438f565b5b600182019050919050565b600061465182613e3e565b915061465c83613e3e565b92508282039050818111156146745761467361438f565b5b92915050565b7f47616d65204f7665720000000000000000000000000000000000000000000000600082015250565b60006146b0600983613d8d565b91506146bb8261467a565b602082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b7f53656c6c205461782063616e6e6f74206265206d6f7265207468616e20313025600082015250565b600061471c602083613d8d565b9150614727826146e6565b602082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006147ae603983613d8d565b91506147b982614752565b604082019050919050565b600060208201905081810360008301526147dd816147a1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061486f602383613d8d565b915061487a82614813565b604082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b7f43616e6e6f742042652030000000000000000000000000000000000000000000600082015250565b60006148db600b83613d8d565b91506148e6826148a5565b602082019050919050565b6000602082019050818103600083015261490a816148ce565b9050919050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b600061496d603683613d8d565b915061497882614911565b604082019050919050565b6000602082019050818103600083015261499c81614960565b9050919050565b6000815190506149b281613e48565b92915050565b6000602082840312156149ce576149cd613e34565b5b60006149dc848285016149a3565b91505092915050565b60006040820190506149fa600083018561406c565b614a076020830184613fef565b9392505050565b600081519050614a1d816140cd565b92915050565b600060208284031215614a3957614a38613e34565b5b6000614a4784828501614a0e565b91505092915050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000614a86600f83613d8d565b9150614a9182614a50565b602082019050919050565b60006020820190508181036000830152614ab581614a79565b9050919050565b7f5461782077616c6c65742063616e6e6f74206265207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b18602183613d8d565b9150614b2382614abc565b604082019050919050565b60006020820190508181036000830152614b4781614b0b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614baa602683613d8d565b9150614bb582614b4e565b604082019050919050565b60006020820190508181036000830152614bd981614b9d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c16602083613d8d565b9150614c2182614be0565b602082019050919050565b60006020820190508181036000830152614c4581614c09565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ca8602483613d8d565b9150614cb382614c4c565b604082019050919050565b60006020820190508181036000830152614cd781614c9b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d3a602283613d8d565b9150614d4582614cde565b604082019050919050565b60006020820190508181036000830152614d6981614d2d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614da6601d83613d8d565b9150614db182614d70565b602082019050919050565b60006020820190508181036000830152614dd581614d99565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614e38602583613d8d565b9150614e4382614ddc565b604082019050919050565b60006020820190508181036000830152614e6781614e2b565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614eca602983613d8d565b9150614ed582614e6e565b604082019050919050565b60006020820190508181036000830152614ef981614ebd565b9050919050565b7f53656e64657220697320626c61636b6c69737465640000000000000000000000600082015250565b6000614f36601583613d8d565b9150614f4182614f00565b602082019050919050565b60006020820190508181036000830152614f6581614f29565b9050919050565b7f526563697069656e7420697320626c61636b6c69737465640000000000000000600082015250565b6000614fa2601883613d8d565b9150614fad82614f6c565b602082019050919050565b60006020820190508181036000830152614fd181614f95565b9050919050565b7f54726164696e672069732064697361626c656400000000000000000000000000600082015250565b600061500e601383613d8d565b915061501982614fd8565b602082019050919050565b6000602082019050818103600083015261503d81615001565b9050919050565b7f43616e6e6f7420627579206d6f7265207468616e206d6178206c696d69740000600082015250565b600061507a601e83613d8d565b915061508582615044565b602082019050919050565b600060208201905081810360008301526150a98161506d565b9050919050565b7f43616e6e6f7420686f6c64206d6f7265207468616e206d61782077616c6c657460008201527f206c696d69740000000000000000000000000000000000000000000000000000602082015250565b600061510c602683613d8d565b9150615117826150b0565b604082019050919050565b6000602082019050818103600083015261513b816150ff565b9050919050565b7f43616e6e6f742073656c6c206d6f7265207468616e206d6178206c696d697400600082015250565b6000615178601f83613d8d565b915061518382615142565b602082019050919050565b600060208201905081810360008301526151a78161516b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061520a602683613d8d565b9150615215826151ae565b604082019050919050565b60006020820190508181036000830152615239816151fd565b9050919050565b7f596f75206172652043757272656e742057696e6e65722043616e6e6f7420457860008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b600061529c602283613d8d565b91506152a782615240565b604082019050919050565b600060208201905081810360008301526152cb8161528f565b9050919050565b7f596f752043616e6e6f7420457869740000000000000000000000000000000000600082015250565b6000615308600f83613d8d565b9150615313826152d2565b602082019050919050565b60006020820190508181036000830152615337816152fb565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061539a602183613d8d565b91506153a58261533e565b604082019050919050565b600060208201905081810360008301526153c98161538d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061542c602283613d8d565b9150615437826153d0565b604082019050919050565b6000602082019050818103600083015261545b8161541f565b9050919050565b600081905092915050565b50565b600061547d600083615462565b91506154888261546d565b600082019050919050565b600061549e82615470565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154e681613ed3565b92915050565b60006020828403121561550257615501613e34565b5b6000615510848285016154d7565b91505092915050565b6000819050919050565b600061553e61553961553484615519565b613f75565b613e3e565b9050919050565b61554e81615523565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061558c83836141a2565b60208301905092915050565b6000602082019050919050565b60006155b082615554565b6155ba818561555f565b93506155c583615570565b8060005b838110156155f65781516155dd8882615580565b97506155e883615598565b9250506001810190506155c9565b5085935050505092915050565b600060a0820190506156186000830188613fef565b6156256020830187615545565b818103604083015261563781866155a5565b9050615646606083018561406c565b6156536080830184613fef565b969550505050505056fea26469706673582212201a8ebc4ec57261aba6819385eadcf97900cc5034d0420ea9d7046f704822c87764736f6c63430008130033

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

0000000000000000000000003c786de6cd4aac8076a7bce82c40fec4032f8c060000000000000000000000000000000000000000000000008ac7230489e80000

-----Decoded View---------------
Arg [0] : _taxWallet (address): 0x3C786dE6cd4aAc8076A7Bce82C40FEc4032f8c06
Arg [1] : _PieGameTicketCost (uint256): 10000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003c786de6cd4aac8076a7bce82c40fec4032f8c06
Arg [1] : 0000000000000000000000000000000000000000000000008ac7230489e80000


Deployed Bytecode Sourcemap

9318:21954:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13418:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17452:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14672:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17869:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10252:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13725:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14198:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10012:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10066:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13624:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18193:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10514:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9962:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30852:415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10310:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25849:2494;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9565:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17308:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10145:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30492:233;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10475:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13834:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3051:103;;;;;;;;;;;;;:::i;:::-;;25166:154;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10789:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9899:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18029:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2401:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30733:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13519:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16860:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10715:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10827:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10676:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13981:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9835:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10640:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16351:499;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10599:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10751:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28351:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25510:325;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11073:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10397:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30319:165;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;18934:123;;;;;;;;;;;;;:::i;:::-;;28451:130;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25330:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9783:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14492:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24970:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18372:550;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17689:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25029:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3310:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13418:92;13464:13;13497:5;;;;;;;;;;;;;;;;;13490:12;;13418:92;:::o;17452:229::-;2286:13;:11;:13::i;:::-;17574:6:::1;17568:4;17552:13;:11;:13::i;:::-;:20;;;;:::i;:::-;17551:29;;;;:::i;:::-;17534:13;;:46;;17526:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17664:9;17648:13;:25;;;;17452:229:::0;:::o;14672:151::-;14739:4;14756:37;14765:10;14777:7;14786:6;14756:8;:37::i;:::-;14811:4;14804:11;;14672:151;;;;:::o;17869:152::-;2286:13;:11;:13::i;:::-;17948:5:::1;17938:6;;:15;;17930:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;18009:4;18000:6;:13;;;;17869:152:::0;:::o;10252:51::-;;;:::o;13725:100::-;13778:7;13805:12;;13798:19;;13725:100;:::o;14198:285::-;14321:4;14338:15;14356:10;14338:28;;14377:38;14393:4;14399:7;14408:6;14377:15;:38::i;:::-;14426:27;14436:4;14442:2;14446:6;14426:9;:27::i;:::-;14471:4;14464:11;;;14198:285;;;;;:::o;10012:29::-;;;;:::o;10066:24::-;;;;;;;;;;;;;:::o;13624:92::-;13674:5;9485:2;13692:16;;13624:92;:::o;18193:102::-;2286:13;:11;:13::i;:::-;18280:7:::1;18264:13;;:23;;;;;;;;;;;;;;;;;;18193:102:::0;:::o;10514:56::-;;;;:::o;9962:28::-;;;;:::o;30852:415::-;2286:13;:11;:13::i;:::-;30932:1:::1;30924:7;:9;30916:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;30961:49;30977:10;30996:4;31002:7;30961:15;:49::i;:::-;31034:7;31021:11;;:20;;;;;;;:::i;:::-;;;;;;;;31071:1;31057:12;;:15:::0;31054:196:::1;;31136:7;31098:12;:28;31124:1;31111:12;;:14;;;;:::i;:::-;31098:28;;;;;;;;;;;:36;;;:45;;;;;;;:::i;:::-;;;;;;;;31054:196;;;31231:7;31195:12;:26;31208:12;;31195:26;;;;;;;;;;;:34;;;:43;;;;;;;:::i;:::-;;;;;;;;31054:196;30852:415:::0;:::o;10310:37::-;;;:::o;25849:2494::-;25887:4;25959:1;25916:12;:26;25929:12;;25916:26;;;;;;;;;;;:41;;;:44;:106;;;;26007:15;25964:12;:26;25977:12;;25964:26;;;;;;;;;;;:41;;;:58;;25916:106;25913:748;;;26094:1;26051:12;:26;26064:12;;26051:26;;;;;;;;;;;:41;;;:44;;:113;;;;;26160:4;26099:65;;:7;:21;26107:12;;26099:21;;;;;;;;;;;:59;26121:12;:26;26134:12;;26121:26;;;;;;;;;;;:36;;;;;;;;;;;;26099:59;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;26051:113;26048:458;;;26215:1;26201:12;;:15;26198:275;;26258:72;26280:12;:26;26293:12;;26280:26;;;;;;;;;;;:36;;;;;;;;;;;;26317:12;;26258:21;:72::i;:::-;;26353:78;26375:12;:26;26388:12;;26375:26;;;;;;;;;;;:42;;;;;;;;;;;;26418:12;;26353:21;:78::i;:::-;;26198:275;26048:458;26531:12;;26520:10;:23;;;;26558:12;;:14;;;;;;;;;:::i;:::-;;;;;;26645:4;26629:15;:20;;;;:::i;:::-;26587:12;:26;26600:12;;26587:26;;;;;;;;;;;:41;;:62;;;;25913:748;26671:21;26693:12;:26;26706:12;;26693:26;;;;;;;;;;;26671:48;;26778:5;26743:40;;:7;:21;26751:12;;26743:21;;;;;;;;;;;:33;26765:10;26743:33;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;26740:1563;;26826:1;26812:12;;:15;26809:82;;26862:13;:11;:13::i;:::-;;26809:82;26918:68;26934:10;26953:4;26982:3;26978:2;26960:17;;:20;;;;:::i;:::-;26959:26;;;;:::i;:::-;26918:15;:68::i;:::-;27037:3;27033:2;27015:17;;:20;;;;:::i;:::-;27014:26;;;;:::i;:::-;27001:11;;:39;;;;;;;:::i;:::-;;;;;;;;27057:44;27063:10;27097:3;27093:2;27075:17;;:20;;;;:::i;:::-;27074:26;;;;:::i;:::-;27057:5;:44::i;:::-;27158:3;27154:2;27136:17;;:20;;;;:::i;:::-;27135:26;;;;:::i;:::-;27118:7;:15;;;:43;;;;;;;:::i;:::-;;;;;;;;27200:7;:17;;;;;;;;;;;;27176:7;:23;;;:41;;;;;;;;;;;;;;;;;;27250:10;27232:7;:17;;;:28;;;;;;;;;;;;;;;;;;27312:2;27308;27297:10;;:13;;;;:::i;:::-;27280:15;:13;:15::i;:::-;:31;;;;:::i;:::-;:34;27277:235;;;27393:2;27376:15;:13;:15::i;:::-;27373:2;:18;;;;:::i;:::-;27372:23;;;;:::i;:::-;27348:7;:22;;;:47;;;;;;;:::i;:::-;;;;;;;;27277:235;;;27486:10;;27462:7;:22;;;:34;;;;;;;:::i;:::-;;;;;;;;27277:235;27562:4;27528:7;:21;27536:12;;27528:21;;;;;;;;;;;:33;27550:10;27528:33;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;27630:3;27626:2;27608:17;;:20;;;;:::i;:::-;27607:26;;;;:::i;:::-;27582:11;:23;27594:10;27582:23;;;;;;;;;;;;;;;;:51;;;;;;;:::i;:::-;;;;;;;;26740:1563;;;27684:68;27700:10;27719:4;27748:3;27744:2;27726:17;;:20;;;;:::i;:::-;27725:26;;;;:::i;:::-;27684:15;:68::i;:::-;27805:3;27801:2;27783:17;;:20;;;;:::i;:::-;27782:26;;;;:::i;:::-;27769:11;;:39;;;;;;;:::i;:::-;;;;;;;;27865:3;27861:2;27843:17;;:20;;;;:::i;:::-;27842:26;;;;:::i;:::-;27825:7;:15;;;:43;;;;;;;:::i;:::-;;;;;;;;27883:44;27889:10;27923:3;27919:2;27901:17;;:20;;;;:::i;:::-;27900:26;;;;:::i;:::-;27883:5;:44::i;:::-;27966:7;:17;;;;;;;;;;;;27942:7;:23;;;:41;;;;;;;;;;;;;;;;;;28016:10;27998:7;:17;;;:28;;;;;;;;;;;;;;;;;;28078:2;28074;28063:10;;:13;;;;:::i;:::-;28046:15;:13;:15::i;:::-;:31;;;;:::i;:::-;:34;28043:235;;;28159:2;28142:15;:13;:15::i;:::-;28139:2;:18;;;;:::i;:::-;28138:23;;;;:::i;:::-;28114:7;:22;;;:47;;;;;;;:::i;:::-;;;;;;;;28043:235;;;28252:10;;28228:7;:22;;;:34;;;;;;;:::i;:::-;;;;;;;;28043:235;26740:1563;28331:4;28324:11;;;25849:2494;:::o;9565:55::-;;;;:::o;17308:136::-;2286:13;:11;:13::i;:::-;17428:8:::1;17398:18;:27;17417:7;17398:27;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;17308:136:::0;;:::o;10145:57::-;;;;:::o;30492:233::-;30537:7;30609:15;30566:12;:26;30579:12;;30566:26;;;;;;;;;;;:41;;;:58;;30558:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;30715:2;30698:15;30656:12;:26;30669:12;;30656:26;;;;;;;;;;;:41;;;:57;;;;:::i;:::-;30655:62;;;;:::i;:::-;30648:69;;30492:233;:::o;10475:30::-;;;;;;;;;;;;;:::o;13834:135::-;13916:7;13943:9;:18;13953:7;13943:18;;;;;;;;;;;;;;;;13936:25;;13834:135;;;:::o;3051:103::-;2286:13;:11;:13::i;:::-;3116:30:::1;3143:1;3116:18;:30::i;:::-;3051:103::o:0;25166:154::-;25215:4;2286:13;:11;:13::i;:::-;25243:12:::1;;25231:11;:24;;;;25278:12;;25266:9;:24;;;;25308:4;25301:11;;25166:154:::0;:::o;10789:29::-;;;;:::o;9899:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;18029:156::-;2286:13;:11;:13::i;:::-;18110:5:::1;18099:7;;:16;;18091:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;18173:4;18163:7;:14;;;;18029:156:::0;:::o;2401:87::-;2447:7;2474:6;;;;;;;;;;;2467:13;;2401:87;:::o;30733:111::-;30779:12;;:::i;:::-;30810;:26;30823:12;;30810:26;;;;;;;;;;;30803:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30733:111;:::o;13519:96::-;13567:13;13600:7;;;;;;;;;;;;;;;;;13593:14;;13519:96;:::o;16860:301::-;2286:13;:11;:13::i;:::-;17004:12:::1;16996:20;;:4;:20;;::::0;16974:127:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17112:41;17141:4;17147:5;17112:28;:41::i;:::-;16860:301:::0;;:::o;10715:27::-;;;;;;;;;;;;;:::o;10827:26::-;;;;:::o;10676:32::-;;;;:::o;13981:208::-;14077:4;14094:13;14110:10;14094:26;;14131:28;14141:5;14148:2;14152:6;14131:9;:28::i;:::-;14177:4;14170:11;;;13981:208;;;;:::o;9835:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;10640:29::-;;;;:::o;16351:499::-;2286:13;:11;:13::i;:::-;16468::::1;16484:7;:5;:7::i;:::-;16468:23;;16532:9;16527:305;16551:6;;:13;;16547:1;:17;16527:305;;;16590:12;16605:6;;16612:1;16605:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;16590:24;;16679:1;16663:18;;:4;:18;;::::0;16633:127:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16779:37;16795:5;16802:4;16808:7;16779:15;:37::i;:::-;16571:261;16566:3;;;;;;;16527:305;;;;16457:393;16351:499:::0;;;:::o;10599:32::-;;;;;;;;;;;;;:::o;10751:31::-;;;;:::o;28351:92::-;28394:7;28420:15;28413:22;;28351:92;:::o;25510:325::-;25558:4;2286:13;:11;:13::i;:::-;25632:1:::1;25616:15;:17;;;;:::i;:::-;25574:12;:26;25587:12;;25574:26;;;;;;;;;;;:41;;:59;;;;25644:72;25666:12;:26;25679:12;;25666:26;;;;;;;;;;;:36;;;;;;;;;;;;25703:12;;25644:21;:72::i;:::-;;25727:78;25749:12;:26;25762:12;;25749:26;;;;;;;;;;;:42;;;;;;;;;;;;25792:12;;25727:21;:78::i;:::-;;25823:4;25816:11;;25510:325:::0;:::o;11073:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10397:40::-;;;;:::o;30319:165::-;30361:7;30369;30396:12;:26;30409:12;;30396:26;;;;;;;;;;;:36;;;;;;;;;;;;30433:12;:26;30446:12;;30433:26;;;;;;;;;;;:42;;;;;;;;;;;;30388:88;;;;30319:165;;:::o;18934:123::-;2286:13;:11;:13::i;:::-;19006:10:::1;18998:28;;:51;19027:21;18998:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;18934:123::o:0;28451:130::-;28489:4;28505:46;28527:10;28538:12;;28505:21;:46::i;:::-;;28569:4;28562:11;;28451:130;:::o;25330:170::-;25392:4;2286:13;:11;:13::i;:::-;25423:1:::1;25416:5;:8:::0;25408:31:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25463:5;25450:12;:18;;;;25488:4;25481:11;;25330:170:::0;;;:::o;9783:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;14492:168::-;14598:7;14625:11;:18;14637:5;14625:18;;;;;;;;;;;;;;;:27;14644:7;14625:27;;;;;;;;;;;;;;;;14618:34;;14492:168;;;;:::o;24970:44::-;;;;;;;;;;;;;;;;;:::o;18372:550::-;2286:13;:11;:13::i;:::-;18549:4:::1;18524:30;;:13;:30;;::::0;18502:134:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18650:21;18681:13;18674:31;;;18714:4;18674:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18650:70;;18734:20;18783:6;18773:7;18757:13;:23;;;;:::i;:::-;:32;;;;:::i;:::-;18734:55;;18803:9;18822:13;18815:30;;;18846:10;18858:12;18815:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18803:68;;18890:4;18882:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;18491:431;;;18372:550:::0;;:::o;17689:172::-;2286:13;:11;:13::i;:::-;17783:1:::1;17764:21;;:7;:21;;::::0;17756:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17846:7;17834:9;;:19;;;;;;;;;;;;;;;;;;17689:172:::0;:::o;25029:129::-;25094:4;2286:13;:11;:13::i;:::-;25122:6:::1;25110:11;:18;;;;25146:4;25139:11;;25029:129:::0;;;:::o;3310:238::-;2286:13;:11;:13::i;:::-;3433:1:::1;3413:22;;:8;:22;;::::0;3391:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3512:28;3531:8;3512:18;:28::i;:::-;3310:238:::0;:::o;2567:132::-;2642:12;:10;:12::i;:::-;2631:23;;:7;:5;:7::i;:::-;:23;;;2623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2567:132::o;14832:343::-;14945:1;14927:20;;:6;:20;;;14919:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;15026:1;15007:21;;:7;:21;;;14999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15112:6;15081:11;:19;15093:6;15081:19;;;;;;;;;;;;;;;:28;15101:7;15081:28;;;;;;;;;;;;;;;:37;;;;15151:7;15134:33;;15143:6;15134:33;;;15160:6;15134:33;;;;;;:::i;:::-;;;;;;;;14832:343;;;:::o;15184:502::-;15319:24;15346:25;15356:5;15363:7;15346:9;:25::i;:::-;15319:52;;15406:17;15386:16;:37;15382:297;;15486:6;15466:16;:26;;15440:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;15601:51;15610:5;15617:7;15645:6;15626:16;:25;15601:8;:51::i;:::-;15382:297;15308:378;15184:502;;;:::o;20675:2924::-;20791:1;20773:20;;:6;:20;;;20765:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20875:1;20854:23;;:9;:23;;;20846:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20945:1;20936:6;:10;20928:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21014:11;:19;21026:6;21014:19;;;;;;;;;;;;;;;;;;;;;;;;;21013:20;21005:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;21079:11;:22;21091:9;21079:22;;;;;;;;;;;;;;;;;;;;;;;;;21078:23;21070:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21209:7;:5;:7::i;:::-;21199:17;;:6;:17;;;:41;;;;21233:7;:5;:7::i;:::-;21220:20;;:9;:20;;;21199:41;:68;;;;21262:4;21244:23;;:6;:23;;;21199:68;21195:302;;;21309:1;21287:18;;:23;:52;;;;;21327:12;21314:25;;:9;:25;;;21287:52;21284:124;;;21380:12;21359:18;:33;;;;21284:124;21422:42;21438:6;21446:9;21457:6;21422:15;:42::i;:::-;21479:7;;21195:302;21549:21;;21528:18;;:42;;;;:::i;:::-;21512:12;:58;21509:139;;21611:4;21586:11;:22;21598:9;21586:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;21630:7;;21509:139;21685:4;21668:21;;:13;;;;;;;;;;;:21;;;21660:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;21727:10;21750:12;21740:22;;:6;:22;;;21727:35;;21773:11;21800:12;21787:25;;:9;:25;;;21773:39;;21826:14;21851:15;21880:28;21911:24;21929:4;21911:9;:24::i;:::-;21880:55;;21946:12;21985:13;;21961:20;:37;;21946:52;;22030:7;:35;;;;;22054:11;;;;;;;;;;;22030:35;:61;;;;;22083:8;;;;;;;;;;;22082:9;22030:61;:112;;;;;22109:25;:33;22135:6;22109:33;;;;;;;;;;;;;;;;;;;;;;;;;22108:34;22030:112;:156;;;;;22160:18;:26;22179:6;22160:26;;;;;;;;;;;;;;;;;;;;;;;;;22159:27;22030:156;:203;;;;;22204:18;:29;22223:9;22204:29;;;;;;;;;;;;;;;;;;;;;;;;;22203:30;22030:203;22012:336;;;22271:4;22260:8;;:15;;;;;;;;;;;;;;;;;;22290:12;:10;:12::i;:::-;22328:5;22317:8;;:16;;;;;;;;;;;;;;;;;;22012:336;22361:12;22377:8;;;;;;;;;;;22376:9;22361:24;;22403:18;:26;22422:6;22403:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;22433:18;:29;22452:9;22433:29;;;;;;;;;;;;;;;;;;;;;;;;;22403:59;22399:107;;;22489:5;22479:15;;22399:107;22519:12;22553:7;22549:987;;;22581:25;:33;22607:6;22581:33;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;22618:5;22581:42;22577:919;;;22649:18;:29;22668:9;22649:29;;;;;;;;;;;;;;;;;;;;;;;;;22644:390;;22721:9;;22711:6;:19;;22702:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22830:11;;22820:6;22797:9;:20;22807:9;22797:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:44;;22788:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;22915:29;22929:6;22937;;22915:13;:29::i;:::-;22906:38;;22967:46;22983:6;22999:4;23006:6;22967:15;:46::i;:::-;22644:390;23059:6;23052:13;;22577:919;;;23108:25;:36;23134:9;23108:36;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;23148:6;23108:46;23104:392;;;23180:18;:26;23199:6;23180:26;;;;;;;;;;;;;;;;;;;;;;;;;23175:273;;23249:9;;23239:6;:19;;23230:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23327:30;23341:6;23349:7;;23327:13;:30::i;:::-;23317:40;;23380:47;23396:6;23412:4;23419:7;23380:15;:47::i;:::-;23175:273;23473:7;23466:14;;23104:392;22577:919;23520:4;23510:14;;;;;:::i;:::-;;;22549:987;23546:42;23562:6;23570:9;23581:6;23546:15;:42::i;:::-;20754:2845;;;;;;;;20675:2924;;;;:::o;15695:647::-;15824:19;15846:9;:15;15856:4;15846:15;;;;;;;;;;;;;;;;15824:37;;15919:6;15904:11;:21;;15882:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;16059:6;16045:11;:20;16027:9;:15;16037:4;16027:15;;;;;;;;;;;;;;;:38;;;;16262:6;16245:9;:13;16255:2;16245:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16323:2;16308:26;;16317:4;16308:26;;;16327:6;16308:26;;;;;;:::i;:::-;;;;;;;;15813:529;15695:647;;;:::o;28591:1714::-;28670:4;28696:15;28712:11;:18;28724:5;28712:18;;;;;;;;;;;;;;;;28696:34;;28752:1;28744:7;:9;28741:1533;;;28820:1;28782:12;:21;28795:7;28782:21;;;;;;;;;;;:36;;;:39;:96;;;;28863:15;28825:12;:21;28838:7;28825:21;;;;;;;;;;;:36;;;:53;;28782:96;28779:1440;;;28953:5;28920:38;;:12;:21;28933:7;28920:21;;;;;;;;;;;:31;;;;;;;;;;;;:38;;;28912:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;29062:5;29023:44;;:12;:21;29036:7;29023:21;;;;;;;;;;;:37;;;;;;;;;;;;:44;;;29015:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29105:53;29129:4;29135:5;29154:3;29150:2;29142:7;:10;;;;:::i;:::-;29141:16;;;;:::i;:::-;29105:15;:53::i;:::-;29238:3;29235:1;29227:7;:9;;;;:::i;:::-;29226:15;;;;:::i;:::-;29195:12;:21;29208:7;29195:21;;;;;;;;;;;:29;;;:46;;;;;;;:::i;:::-;;;;;;;;29260:36;29274:4;29292:3;29289:1;29281:7;:9;;;;:::i;:::-;29280:15;;;;:::i;:::-;29260:5;:36::i;:::-;29362:3;29359:1;29351:7;:9;;;;:::i;:::-;29350:15;;;;:::i;:::-;29344:3;29340:2;29332:7;:10;;;;:::i;:::-;29331:16;;;;:::i;:::-;29330:36;;;;:::i;:::-;29317:11;;:49;;;;;;;:::i;:::-;;;;;;;;29404:1;29385:11;:18;29397:5;29385:18;;;;;;;;;;;;;;;:20;;;;28779:1440;;;29508:5;29475:38;;:12;:21;29488:7;29475:21;;;;;;;;;;;:31;;;;;;;;;;;;:38;;;29472:693;;29555:76;29579:4;29585:5;29622:7;29592:12;:21;29605:7;29592:21;;;;;;;;;;;:29;;;:37;;;;:::i;:::-;29555:15;:76::i;:::-;29698:7;29668:12;:21;29681:7;29668:21;;;;;;;;;;;:29;;;:37;;;;:::i;:::-;29654:11;;:52;;;;;;;:::i;:::-;;;;;;;;29472:693;;;29813:5;29774:44;;:12;:21;29787:7;29774:21;;;;;;;;;;;:37;;;;;;;;;;;;:44;;;29771:394;;29860:28;29874:4;29880:7;29860:5;:28::i;:::-;29924:7;29911:11;;:20;;;;;;;:::i;:::-;;;;;;;;29771:394;;;30036:44;30060:4;30066:5;30072:7;30036:15;:44::i;:::-;30116:7;30103:11;;:20;;;;;;;:::i;:::-;;;;;;;;29771:394;29472:693;30202:1;30183:11;:18;30195:5;30183:18;;;;;;;;;;;;;;;:20;;;;28779:1440;30257:5;30233:7;:16;30241:7;30233:16;;;;;;;;;;;:23;30250:5;30233:23;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28741:1533;30293:4;30286:11;;;28591:1714;;;;:::o;23771:847::-;23874:1;23855:21;;:7;:21;;;23847:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23927:81;23948:7;23957:42;24001:6;23927:20;:81::i;:::-;24021:22;24046:9;:18;24056:7;24046:18;;;;;;;;;;;;;;;;24021:43;;24101:6;24083:14;:24;;24075:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24220:6;24203:14;:23;24182:9;:18;24192:7;24182:18;;;;;;;;;;;;;;;:44;;;;24296:6;24241:9;:53;24251:42;24241:53;;;;;;;;;;;;;;;;:61;;;;;;;;;;;24413:6;24397:12;;:22;;;;;;;;;;;24466:42;24448:69;;24457:7;24448:69;;;24510:6;24448:69;;;;;;:::i;:::-;;;;;;;;24530:80;24550:7;24559:42;24603:6;24530:19;:80::i;:::-;23836:782;23771:847;;:::o;3709:191::-;3783:16;3802:6;;;;;;;;;;;3783:25;;3828:8;3819:6;;:17;;;;;;;;;;;;;;;;;;3883:8;3852:40;;3873:8;3852:40;;;;;;;;;;;;3772:128;3709:191;:::o;17170:130::-;17287:5;17253:25;:31;17279:4;17253:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17170:130;;:::o;1079:98::-;1132:7;1159:10;1152:17;;1079:98;:::o;19666:474::-;19711:28;19742:24;19760:4;19742:9;:24::i;:::-;19711:55;;19779:20;19825:11;;19802:20;:34;;;;:::i;:::-;19779:57;;19849:22;19874:21;19849:46;;19909:30;19926:12;19909:16;:30::i;:::-;19953:18;19999:14;19974:21;:40;;;;:::i;:::-;19953:61;;20027:12;20073:9;;;;;;;;;;;:14;;20095:10;20112:5;20073:49;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20060:62;;;;;19697:443;;;;;19666:474::o;23608:155::-;23693:7;23748:6;23730:13;23720:6;:24;;;;:::i;:::-;:35;;;;:::i;:::-;23713:42;;23608:155;;;;:::o;24626:125::-;;;;:::o;24759:124::-;;;;:::o;19066:591::-;19192:21;19230:1;19216:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19192:40;;19261:4;19243;19248:1;19243:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19287:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19277:4;19282:1;19277:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;19323:62;19340:4;19355:15;19373:11;19323:8;:62::i;:::-;19425:15;:66;;;19506:11;19532:1;19576:4;19603;19623:15;19425:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19121:536;19066:591;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:329::-;2091:6;2140:2;2128:9;2119:7;2115:23;2111:32;2108:119;;;2146:79;;:::i;:::-;2108:119;2266:1;2291:53;2336:7;2327:6;2316:9;2312:22;2291:53;:::i;:::-;2281:63;;2237:117;2032:329;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:152::-;4203:9;4236:37;4267:5;4236:37;:::i;:::-;4223:50;;4127:152;;;:::o;4285:183::-;4398:63;4455:5;4398:63;:::i;:::-;4393:3;4386:76;4285:183;;:::o;4474:274::-;4593:4;4631:2;4620:9;4616:18;4608:26;;4644:97;4738:1;4727:9;4723:17;4714:6;4644:97;:::i;:::-;4474:274;;;;:::o;4754:118::-;4841:24;4859:5;4841:24;:::i;:::-;4836:3;4829:37;4754:118;;:::o;4878:222::-;4971:4;5009:2;4998:9;4994:18;4986:26;;5022:71;5090:1;5079:9;5075:17;5066:6;5022:71;:::i;:::-;4878:222;;;;:::o;5106:619::-;5183:6;5191;5199;5248:2;5236:9;5227:7;5223:23;5219:32;5216:119;;;5254:79;;:::i;:::-;5216:119;5374:1;5399:53;5444:7;5435:6;5424:9;5420:22;5399:53;:::i;:::-;5389:63;;5345:117;5501:2;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5472:118;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5106:619;;;;;:::o;5731:118::-;5818:24;5836:5;5818:24;:::i;:::-;5813:3;5806:37;5731:118;;:::o;5855:222::-;5948:4;5986:2;5975:9;5971:18;5963:26;;5999:71;6067:1;6056:9;6052:17;6043:6;5999:71;:::i;:::-;5855:222;;;;:::o;6083:86::-;6118:7;6158:4;6151:5;6147:16;6136:27;;6083:86;;;:::o;6175:112::-;6258:22;6274:5;6258:22;:::i;:::-;6253:3;6246:35;6175:112;;:::o;6293:214::-;6382:4;6420:2;6409:9;6405:18;6397:26;;6433:67;6497:1;6486:9;6482:17;6473:6;6433:67;:::i;:::-;6293:214;;;;:::o;6513:116::-;6583:21;6598:5;6583:21;:::i;:::-;6576:5;6573:32;6563:60;;6619:1;6616;6609:12;6563:60;6513:116;:::o;6635:133::-;6678:5;6716:6;6703:20;6694:29;;6732:30;6756:5;6732:30;:::i;:::-;6635:133;;;;:::o;6774:323::-;6830:6;6879:2;6867:9;6858:7;6854:23;6850:32;6847:119;;;6885:79;;:::i;:::-;6847:119;7005:1;7030:50;7072:7;7063:6;7052:9;7048:22;7030:50;:::i;:::-;7020:60;;6976:114;6774:323;;;;:::o;7103:468::-;7168:6;7176;7225:2;7213:9;7204:7;7200:23;7196:32;7193:119;;;7231:79;;:::i;:::-;7193:119;7351:1;7376:53;7421:7;7412:6;7401:9;7397:22;7376:53;:::i;:::-;7366:63;;7322:117;7478:2;7504:50;7546:7;7537:6;7526:9;7522:22;7504:50;:::i;:::-;7494:60;;7449:115;7103:468;;;;;:::o;7577:329::-;7636:6;7685:2;7673:9;7664:7;7660:23;7656:32;7653:119;;;7691:79;;:::i;:::-;7653:119;7811:1;7836:53;7881:7;7872:6;7861:9;7857:22;7836:53;:::i;:::-;7826:63;;7782:117;7577:329;;;;:::o;7912:108::-;7989:24;8007:5;7989:24;:::i;:::-;7984:3;7977:37;7912:108;;:::o;8026:::-;8103:24;8121:5;8103:24;:::i;:::-;8098:3;8091:37;8026:108;;:::o;8184:878::-;8325:4;8320:3;8316:14;8422:4;8415:5;8411:16;8405:23;8441:63;8498:4;8493:3;8489:14;8475:12;8441:63;:::i;:::-;8340:174;8601:4;8594:5;8590:16;8584:23;8620:63;8677:4;8672:3;8668:14;8654:12;8620:63;:::i;:::-;8524:169;8786:4;8779:5;8775:16;8769:23;8805:63;8862:4;8857:3;8853:14;8839:12;8805:63;:::i;:::-;8703:175;8963:4;8956:5;8952:16;8946:23;8982:63;9039:4;9034:3;9030:14;9016:12;8982:63;:::i;:::-;8888:167;8294:768;8184:878;;:::o;9068:311::-;9205:4;9243:3;9232:9;9228:19;9220:27;;9257:115;9369:1;9358:9;9354:17;9345:6;9257:115;:::i;:::-;9068:311;;;;:::o;9385:117::-;9494:1;9491;9484:12;9508:117;9617:1;9614;9607:12;9631:117;9740:1;9737;9730:12;9771:568;9844:8;9854:6;9904:3;9897:4;9889:6;9885:17;9881:27;9871:122;;9912:79;;:::i;:::-;9871:122;10025:6;10012:20;10002:30;;10055:18;10047:6;10044:30;10041:117;;;10077:79;;:::i;:::-;10041:117;10191:4;10183:6;10179:17;10167:29;;10245:3;10237:4;10229:6;10225:17;10215:8;10211:32;10208:41;10205:128;;;10252:79;;:::i;:::-;10205:128;9771:568;;;;;:::o;10345:704::-;10440:6;10448;10456;10505:2;10493:9;10484:7;10480:23;10476:32;10473:119;;;10511:79;;:::i;:::-;10473:119;10659:1;10648:9;10644:17;10631:31;10689:18;10681:6;10678:30;10675:117;;;10711:79;;:::i;:::-;10675:117;10824:80;10896:7;10887:6;10876:9;10872:22;10824:80;:::i;:::-;10806:98;;;;10602:312;10953:2;10979:53;11024:7;11015:6;11004:9;11000:22;10979:53;:::i;:::-;10969:63;;10924:118;10345:704;;;;;:::o;11055:474::-;11123:6;11131;11180:2;11168:9;11159:7;11155:23;11151:32;11148:119;;;11186:79;;:::i;:::-;11148:119;11306:1;11331:53;11376:7;11367:6;11356:9;11352:22;11331:53;:::i;:::-;11321:63;;11277:117;11433:2;11459:53;11504:7;11495:6;11484:9;11480:22;11459:53;:::i;:::-;11449:63;;11404:118;11055:474;;;;;:::o;11535:332::-;11656:4;11694:2;11683:9;11679:18;11671:26;;11707:71;11775:1;11764:9;11760:17;11751:6;11707:71;:::i;:::-;11788:72;11856:2;11845:9;11841:18;11832:6;11788:72;:::i;:::-;11535:332;;;;;:::o;11873:474::-;11941:6;11949;11998:2;11986:9;11977:7;11973:23;11969:32;11966:119;;;12004:79;;:::i;:::-;11966:119;12124:1;12149:53;12194:7;12185:6;12174:9;12170:22;12149:53;:::i;:::-;12139:63;;12095:117;12251:2;12277:53;12322:7;12313:6;12302:9;12298:22;12277:53;:::i;:::-;12267:63;;12222:118;11873:474;;;;;:::o;12353:180::-;12401:77;12398:1;12391:88;12498:4;12495:1;12488:15;12522:4;12519:1;12512:15;12539:410;12579:7;12602:20;12620:1;12602:20;:::i;:::-;12597:25;;12636:20;12654:1;12636:20;:::i;:::-;12631:25;;12691:1;12688;12684:9;12713:30;12731:11;12713:30;:::i;:::-;12702:41;;12892:1;12883:7;12879:15;12876:1;12873:22;12853:1;12846:9;12826:83;12803:139;;12922:18;;:::i;:::-;12803:139;12587:362;12539:410;;;;:::o;12955:180::-;13003:77;13000:1;12993:88;13100:4;13097:1;13090:15;13124:4;13121:1;13114:15;13141:185;13181:1;13198:20;13216:1;13198:20;:::i;:::-;13193:25;;13232:20;13250:1;13232:20;:::i;:::-;13227:25;;13271:1;13261:35;;13276:18;;:::i;:::-;13261:35;13318:1;13315;13311:9;13306:14;;13141:185;;;;:::o;13332:239::-;13472:34;13468:1;13460:6;13456:14;13449:58;13541:22;13536:2;13528:6;13524:15;13517:47;13332:239;:::o;13577:366::-;13719:3;13740:67;13804:2;13799:3;13740:67;:::i;:::-;13733:74;;13816:93;13905:3;13816:93;:::i;:::-;13934:2;13929:3;13925:12;13918:19;;13577:366;;;:::o;13949:419::-;14115:4;14153:2;14142:9;14138:18;14130:26;;14202:9;14196:4;14192:20;14188:1;14177:9;14173:17;14166:47;14230:131;14356:4;14230:131;:::i;:::-;14222:139;;13949:419;;;:::o;14374:181::-;14514:33;14510:1;14502:6;14498:14;14491:57;14374:181;:::o;14561:366::-;14703:3;14724:67;14788:2;14783:3;14724:67;:::i;:::-;14717:74;;14800:93;14889:3;14800:93;:::i;:::-;14918:2;14913:3;14909:12;14902:19;;14561:366;;;:::o;14933:419::-;15099:4;15137:2;15126:9;15122:18;15114:26;;15186:9;15180:4;15176:20;15172:1;15161:9;15157:17;15150:47;15214:131;15340:4;15214:131;:::i;:::-;15206:139;;14933:419;;;:::o;15358:161::-;15498:13;15494:1;15486:6;15482:14;15475:37;15358:161;:::o;15525:366::-;15667:3;15688:67;15752:2;15747:3;15688:67;:::i;:::-;15681:74;;15764:93;15853:3;15764:93;:::i;:::-;15882:2;15877:3;15873:12;15866:19;;15525:366;;;:::o;15897:419::-;16063:4;16101:2;16090:9;16086:18;16078:26;;16150:9;16144:4;16140:20;16136:1;16125:9;16121:17;16114:47;16178:131;16304:4;16178:131;:::i;:::-;16170:139;;15897:419;;;:::o;16322:191::-;16362:3;16381:20;16399:1;16381:20;:::i;:::-;16376:25;;16415:20;16433:1;16415:20;:::i;:::-;16410:25;;16458:1;16455;16451:9;16444:16;;16479:3;16476:1;16473:10;16470:36;;;16486:18;;:::i;:::-;16470:36;16322:191;;;;:::o;16519:233::-;16558:3;16581:24;16599:5;16581:24;:::i;:::-;16572:33;;16627:66;16620:5;16617:77;16614:103;;16697:18;;:::i;:::-;16614:103;16744:1;16737:5;16733:13;16726:20;;16519:233;;;:::o;16758:194::-;16798:4;16818:20;16836:1;16818:20;:::i;:::-;16813:25;;16852:20;16870:1;16852:20;:::i;:::-;16847:25;;16896:1;16893;16889:9;16881:17;;16920:1;16914:4;16911:11;16908:37;;;16925:18;;:::i;:::-;16908:37;16758:194;;;;:::o;16958:159::-;17098:11;17094:1;17086:6;17082:14;17075:35;16958:159;:::o;17123:365::-;17265:3;17286:66;17350:1;17345:3;17286:66;:::i;:::-;17279:73;;17361:93;17450:3;17361:93;:::i;:::-;17479:2;17474:3;17470:12;17463:19;;17123:365;;;:::o;17494:419::-;17660:4;17698:2;17687:9;17683:18;17675:26;;17747:9;17741:4;17737:20;17733:1;17722:9;17718:17;17711:47;17775:131;17901:4;17775:131;:::i;:::-;17767:139;;17494:419;;;:::o;17919:182::-;18059:34;18055:1;18047:6;18043:14;18036:58;17919:182;:::o;18107:366::-;18249:3;18270:67;18334:2;18329:3;18270:67;:::i;:::-;18263:74;;18346:93;18435:3;18346:93;:::i;:::-;18464:2;18459:3;18455:12;18448:19;;18107:366;;;:::o;18479:419::-;18645:4;18683:2;18672:9;18668:18;18660:26;;18732:9;18726:4;18722:20;18718:1;18707:9;18703:17;18696:47;18760:131;18886:4;18760:131;:::i;:::-;18752:139;;18479:419;;;:::o;18904:244::-;19044:34;19040:1;19032:6;19028:14;19021:58;19113:27;19108:2;19100:6;19096:15;19089:52;18904:244;:::o;19154:366::-;19296:3;19317:67;19381:2;19376:3;19317:67;:::i;:::-;19310:74;;19393:93;19482:3;19393:93;:::i;:::-;19511:2;19506:3;19502:12;19495:19;;19154:366;;;:::o;19526:419::-;19692:4;19730:2;19719:9;19715:18;19707:26;;19779:9;19773:4;19769:20;19765:1;19754:9;19750:17;19743:47;19807:131;19933:4;19807:131;:::i;:::-;19799:139;;19526:419;;;:::o;19951:180::-;19999:77;19996:1;19989:88;20096:4;20093:1;20086:15;20120:4;20117:1;20110:15;20137:222;20277:34;20273:1;20265:6;20261:14;20254:58;20346:5;20341:2;20333:6;20329:15;20322:30;20137:222;:::o;20365:366::-;20507:3;20528:67;20592:2;20587:3;20528:67;:::i;:::-;20521:74;;20604:93;20693:3;20604:93;:::i;:::-;20722:2;20717:3;20713:12;20706:19;;20365:366;;;:::o;20737:419::-;20903:4;20941:2;20930:9;20926:18;20918:26;;20990:9;20984:4;20980:20;20976:1;20965:9;20961:17;20954:47;21018:131;21144:4;21018:131;:::i;:::-;21010:139;;20737:419;;;:::o;21162:161::-;21302:13;21298:1;21290:6;21286:14;21279:37;21162:161;:::o;21329:366::-;21471:3;21492:67;21556:2;21551:3;21492:67;:::i;:::-;21485:74;;21568:93;21657:3;21568:93;:::i;:::-;21686:2;21681:3;21677:12;21670:19;;21329:366;;;:::o;21701:419::-;21867:4;21905:2;21894:9;21890:18;21882:26;;21954:9;21948:4;21944:20;21940:1;21929:9;21925:17;21918:47;21982:131;22108:4;21982:131;:::i;:::-;21974:139;;21701:419;;;:::o;22126:241::-;22266:34;22262:1;22254:6;22250:14;22243:58;22335:24;22330:2;22322:6;22318:15;22311:49;22126:241;:::o;22373:366::-;22515:3;22536:67;22600:2;22595:3;22536:67;:::i;:::-;22529:74;;22612:93;22701:3;22612:93;:::i;:::-;22730:2;22725:3;22721:12;22714:19;;22373:366;;;:::o;22745:419::-;22911:4;22949:2;22938:9;22934:18;22926:26;;22998:9;22992:4;22988:20;22984:1;22973:9;22969:17;22962:47;23026:131;23152:4;23026:131;:::i;:::-;23018:139;;22745:419;;;:::o;23170:143::-;23227:5;23258:6;23252:13;23243:22;;23274:33;23301:5;23274:33;:::i;:::-;23170:143;;;;:::o;23319:351::-;23389:6;23438:2;23426:9;23417:7;23413:23;23409:32;23406:119;;;23444:79;;:::i;:::-;23406:119;23564:1;23589:64;23645:7;23636:6;23625:9;23621:22;23589:64;:::i;:::-;23579:74;;23535:128;23319:351;;;;:::o;23676:332::-;23797:4;23835:2;23824:9;23820:18;23812:26;;23848:71;23916:1;23905:9;23901:17;23892:6;23848:71;:::i;:::-;23929:72;23997:2;23986:9;23982:18;23973:6;23929:72;:::i;:::-;23676:332;;;;;:::o;24014:137::-;24068:5;24099:6;24093:13;24084:22;;24115:30;24139:5;24115:30;:::i;:::-;24014:137;;;;:::o;24157:345::-;24224:6;24273:2;24261:9;24252:7;24248:23;24244:32;24241:119;;;24279:79;;:::i;:::-;24241:119;24399:1;24424:61;24477:7;24468:6;24457:9;24453:22;24424:61;:::i;:::-;24414:71;;24370:125;24157:345;;;;:::o;24508:165::-;24648:17;24644:1;24636:6;24632:14;24625:41;24508:165;:::o;24679:366::-;24821:3;24842:67;24906:2;24901:3;24842:67;:::i;:::-;24835:74;;24918:93;25007:3;24918:93;:::i;:::-;25036:2;25031:3;25027:12;25020:19;;24679:366;;;:::o;25051:419::-;25217:4;25255:2;25244:9;25240:18;25232:26;;25304:9;25298:4;25294:20;25290:1;25279:9;25275:17;25268:47;25332:131;25458:4;25332:131;:::i;:::-;25324:139;;25051:419;;;:::o;25476:220::-;25616:34;25612:1;25604:6;25600:14;25593:58;25685:3;25680:2;25672:6;25668:15;25661:28;25476:220;:::o;25702:366::-;25844:3;25865:67;25929:2;25924:3;25865:67;:::i;:::-;25858:74;;25941:93;26030:3;25941:93;:::i;:::-;26059:2;26054:3;26050:12;26043:19;;25702:366;;;:::o;26074:419::-;26240:4;26278:2;26267:9;26263:18;26255:26;;26327:9;26321:4;26317:20;26313:1;26302:9;26298:17;26291:47;26355:131;26481:4;26355:131;:::i;:::-;26347:139;;26074:419;;;:::o;26499:225::-;26639:34;26635:1;26627:6;26623:14;26616:58;26708:8;26703:2;26695:6;26691:15;26684:33;26499:225;:::o;26730:366::-;26872:3;26893:67;26957:2;26952:3;26893:67;:::i;:::-;26886:74;;26969:93;27058:3;26969:93;:::i;:::-;27087:2;27082:3;27078:12;27071:19;;26730:366;;;:::o;27102:419::-;27268:4;27306:2;27295:9;27291:18;27283:26;;27355:9;27349:4;27345:20;27341:1;27330:9;27326:17;27319:47;27383:131;27509:4;27383:131;:::i;:::-;27375:139;;27102:419;;;:::o;27527:182::-;27667:34;27663:1;27655:6;27651:14;27644:58;27527:182;:::o;27715:366::-;27857:3;27878:67;27942:2;27937:3;27878:67;:::i;:::-;27871:74;;27954:93;28043:3;27954:93;:::i;:::-;28072:2;28067:3;28063:12;28056:19;;27715:366;;;:::o;28087:419::-;28253:4;28291:2;28280:9;28276:18;28268:26;;28340:9;28334:4;28330:20;28326:1;28315:9;28311:17;28304:47;28368:131;28494:4;28368:131;:::i;:::-;28360:139;;28087:419;;;:::o;28512:223::-;28652:34;28648:1;28640:6;28636:14;28629:58;28721:6;28716:2;28708:6;28704:15;28697:31;28512:223;:::o;28741:366::-;28883:3;28904:67;28968:2;28963:3;28904:67;:::i;:::-;28897:74;;28980:93;29069:3;28980:93;:::i;:::-;29098:2;29093:3;29089:12;29082:19;;28741:366;;;:::o;29113:419::-;29279:4;29317:2;29306:9;29302:18;29294:26;;29366:9;29360:4;29356:20;29352:1;29341:9;29337:17;29330:47;29394:131;29520:4;29394:131;:::i;:::-;29386:139;;29113:419;;;:::o;29538:221::-;29678:34;29674:1;29666:6;29662:14;29655:58;29747:4;29742:2;29734:6;29730:15;29723:29;29538:221;:::o;29765:366::-;29907:3;29928:67;29992:2;29987:3;29928:67;:::i;:::-;29921:74;;30004:93;30093:3;30004:93;:::i;:::-;30122:2;30117:3;30113:12;30106:19;;29765:366;;;:::o;30137:419::-;30303:4;30341:2;30330:9;30326:18;30318:26;;30390:9;30384:4;30380:20;30376:1;30365:9;30361:17;30354:47;30418:131;30544:4;30418:131;:::i;:::-;30410:139;;30137:419;;;:::o;30562:179::-;30702:31;30698:1;30690:6;30686:14;30679:55;30562:179;:::o;30747:366::-;30889:3;30910:67;30974:2;30969:3;30910:67;:::i;:::-;30903:74;;30986:93;31075:3;30986:93;:::i;:::-;31104:2;31099:3;31095:12;31088:19;;30747:366;;;:::o;31119:419::-;31285:4;31323:2;31312:9;31308:18;31300:26;;31372:9;31366:4;31362:20;31358:1;31347:9;31343:17;31336:47;31400:131;31526:4;31400:131;:::i;:::-;31392:139;;31119:419;;;:::o;31544:224::-;31684:34;31680:1;31672:6;31668:14;31661:58;31753:7;31748:2;31740:6;31736:15;31729:32;31544:224;:::o;31774:366::-;31916:3;31937:67;32001:2;31996:3;31937:67;:::i;:::-;31930:74;;32013:93;32102:3;32013:93;:::i;:::-;32131:2;32126:3;32122:12;32115:19;;31774:366;;;:::o;32146:419::-;32312:4;32350:2;32339:9;32335:18;32327:26;;32399:9;32393:4;32389:20;32385:1;32374:9;32370:17;32363:47;32427:131;32553:4;32427:131;:::i;:::-;32419:139;;32146:419;;;:::o;32571:228::-;32711:34;32707:1;32699:6;32695:14;32688:58;32780:11;32775:2;32767:6;32763:15;32756:36;32571:228;:::o;32805:366::-;32947:3;32968:67;33032:2;33027:3;32968:67;:::i;:::-;32961:74;;33044:93;33133:3;33044:93;:::i;:::-;33162:2;33157:3;33153:12;33146:19;;32805:366;;;:::o;33177:419::-;33343:4;33381:2;33370:9;33366:18;33358:26;;33430:9;33424:4;33420:20;33416:1;33405:9;33401:17;33394:47;33458:131;33584:4;33458:131;:::i;:::-;33450:139;;33177:419;;;:::o;33602:171::-;33742:23;33738:1;33730:6;33726:14;33719:47;33602:171;:::o;33779:366::-;33921:3;33942:67;34006:2;34001:3;33942:67;:::i;:::-;33935:74;;34018:93;34107:3;34018:93;:::i;:::-;34136:2;34131:3;34127:12;34120:19;;33779:366;;;:::o;34151:419::-;34317:4;34355:2;34344:9;34340:18;34332:26;;34404:9;34398:4;34394:20;34390:1;34379:9;34375:17;34368:47;34432:131;34558:4;34432:131;:::i;:::-;34424:139;;34151:419;;;:::o;34576:174::-;34716:26;34712:1;34704:6;34700:14;34693:50;34576:174;:::o;34756:366::-;34898:3;34919:67;34983:2;34978:3;34919:67;:::i;:::-;34912:74;;34995:93;35084:3;34995:93;:::i;:::-;35113:2;35108:3;35104:12;35097:19;;34756:366;;;:::o;35128:419::-;35294:4;35332:2;35321:9;35317:18;35309:26;;35381:9;35375:4;35371:20;35367:1;35356:9;35352:17;35345:47;35409:131;35535:4;35409:131;:::i;:::-;35401:139;;35128:419;;;:::o;35553:169::-;35693:21;35689:1;35681:6;35677:14;35670:45;35553:169;:::o;35728:366::-;35870:3;35891:67;35955:2;35950:3;35891:67;:::i;:::-;35884:74;;35967:93;36056:3;35967:93;:::i;:::-;36085:2;36080:3;36076:12;36069:19;;35728:366;;;:::o;36100:419::-;36266:4;36304:2;36293:9;36289:18;36281:26;;36353:9;36347:4;36343:20;36339:1;36328:9;36324:17;36317:47;36381:131;36507:4;36381:131;:::i;:::-;36373:139;;36100:419;;;:::o;36525:180::-;36665:32;36661:1;36653:6;36649:14;36642:56;36525:180;:::o;36711:366::-;36853:3;36874:67;36938:2;36933:3;36874:67;:::i;:::-;36867:74;;36950:93;37039:3;36950:93;:::i;:::-;37068:2;37063:3;37059:12;37052:19;;36711:366;;;:::o;37083:419::-;37249:4;37287:2;37276:9;37272:18;37264:26;;37336:9;37330:4;37326:20;37322:1;37311:9;37307:17;37300:47;37364:131;37490:4;37364:131;:::i;:::-;37356:139;;37083:419;;;:::o;37508:225::-;37648:34;37644:1;37636:6;37632:14;37625:58;37717:8;37712:2;37704:6;37700:15;37693:33;37508:225;:::o;37739:366::-;37881:3;37902:67;37966:2;37961:3;37902:67;:::i;:::-;37895:74;;37978:93;38067:3;37978:93;:::i;:::-;38096:2;38091:3;38087:12;38080:19;;37739:366;;;:::o;38111:419::-;38277:4;38315:2;38304:9;38300:18;38292:26;;38364:9;38358:4;38354:20;38350:1;38339:9;38335:17;38328:47;38392:131;38518:4;38392:131;:::i;:::-;38384:139;;38111:419;;;:::o;38536:181::-;38676:33;38672:1;38664:6;38660:14;38653:57;38536:181;:::o;38723:366::-;38865:3;38886:67;38950:2;38945:3;38886:67;:::i;:::-;38879:74;;38962:93;39051:3;38962:93;:::i;:::-;39080:2;39075:3;39071:12;39064:19;;38723:366;;;:::o;39095:419::-;39261:4;39299:2;39288:9;39284:18;39276:26;;39348:9;39342:4;39338:20;39334:1;39323:9;39319:17;39312:47;39376:131;39502:4;39376:131;:::i;:::-;39368:139;;39095:419;;;:::o;39520:225::-;39660:34;39656:1;39648:6;39644:14;39637:58;39729:8;39724:2;39716:6;39712:15;39705:33;39520:225;:::o;39751:366::-;39893:3;39914:67;39978:2;39973:3;39914:67;:::i;:::-;39907:74;;39990:93;40079:3;39990:93;:::i;:::-;40108:2;40103:3;40099:12;40092:19;;39751:366;;;:::o;40123:419::-;40289:4;40327:2;40316:9;40312:18;40304:26;;40376:9;40370:4;40366:20;40362:1;40351:9;40347:17;40340:47;40404:131;40530:4;40404:131;:::i;:::-;40396:139;;40123:419;;;:::o;40548:221::-;40688:34;40684:1;40676:6;40672:14;40665:58;40757:4;40752:2;40744:6;40740:15;40733:29;40548:221;:::o;40775:366::-;40917:3;40938:67;41002:2;40997:3;40938:67;:::i;:::-;40931:74;;41014:93;41103:3;41014:93;:::i;:::-;41132:2;41127:3;41123:12;41116:19;;40775:366;;;:::o;41147:419::-;41313:4;41351:2;41340:9;41336:18;41328:26;;41400:9;41394:4;41390:20;41386:1;41375:9;41371:17;41364:47;41428:131;41554:4;41428:131;:::i;:::-;41420:139;;41147:419;;;:::o;41572:165::-;41712:17;41708:1;41700:6;41696:14;41689:41;41572:165;:::o;41743:366::-;41885:3;41906:67;41970:2;41965:3;41906:67;:::i;:::-;41899:74;;41982:93;42071:3;41982:93;:::i;:::-;42100:2;42095:3;42091:12;42084:19;;41743:366;;;:::o;42115:419::-;42281:4;42319:2;42308:9;42304:18;42296:26;;42368:9;42362:4;42358:20;42354:1;42343:9;42339:17;42332:47;42396:131;42522:4;42396:131;:::i;:::-;42388:139;;42115:419;;;:::o;42540:220::-;42680:34;42676:1;42668:6;42664:14;42657:58;42749:3;42744:2;42736:6;42732:15;42725:28;42540:220;:::o;42766:366::-;42908:3;42929:67;42993:2;42988:3;42929:67;:::i;:::-;42922:74;;43005:93;43094:3;43005:93;:::i;:::-;43123:2;43118:3;43114:12;43107:19;;42766:366;;;:::o;43138:419::-;43304:4;43342:2;43331:9;43327:18;43319:26;;43391:9;43385:4;43381:20;43377:1;43366:9;43362:17;43355:47;43419:131;43545:4;43419:131;:::i;:::-;43411:139;;43138:419;;;:::o;43563:221::-;43703:34;43699:1;43691:6;43687:14;43680:58;43772:4;43767:2;43759:6;43755:15;43748:29;43563:221;:::o;43790:366::-;43932:3;43953:67;44017:2;44012:3;43953:67;:::i;:::-;43946:74;;44029:93;44118:3;44029:93;:::i;:::-;44147:2;44142:3;44138:12;44131:19;;43790:366;;;:::o;44162:419::-;44328:4;44366:2;44355:9;44351:18;44343:26;;44415:9;44409:4;44405:20;44401:1;44390:9;44386:17;44379:47;44443:131;44569:4;44443:131;:::i;:::-;44435:139;;44162:419;;;:::o;44587:147::-;44688:11;44725:3;44710:18;;44587:147;;;;:::o;44740:114::-;;:::o;44860:398::-;45019:3;45040:83;45121:1;45116:3;45040:83;:::i;:::-;45033:90;;45132:93;45221:3;45132:93;:::i;:::-;45250:1;45245:3;45241:11;45234:18;;44860:398;;;:::o;45264:379::-;45448:3;45470:147;45613:3;45470:147;:::i;:::-;45463:154;;45634:3;45627:10;;45264:379;;;:::o;45649:180::-;45697:77;45694:1;45687:88;45794:4;45791:1;45784:15;45818:4;45815:1;45808:15;45835:143;45892:5;45923:6;45917:13;45908:22;;45939:33;45966:5;45939:33;:::i;:::-;45835:143;;;;:::o;45984:351::-;46054:6;46103:2;46091:9;46082:7;46078:23;46074:32;46071:119;;;46109:79;;:::i;:::-;46071:119;46229:1;46254:64;46310:7;46301:6;46290:9;46286:22;46254:64;:::i;:::-;46244:74;;46200:128;45984:351;;;;:::o;46341:85::-;46386:7;46415:5;46404:16;;46341:85;;;:::o;46432:158::-;46490:9;46523:61;46541:42;46550:32;46576:5;46550:32;:::i;:::-;46541:42;:::i;:::-;46523:61;:::i;:::-;46510:74;;46432:158;;;:::o;46596:147::-;46691:45;46730:5;46691:45;:::i;:::-;46686:3;46679:58;46596:147;;:::o;46749:114::-;46816:6;46850:5;46844:12;46834:22;;46749:114;;;:::o;46869:184::-;46968:11;47002:6;46997:3;46990:19;47042:4;47037:3;47033:14;47018:29;;46869:184;;;;:::o;47059:132::-;47126:4;47149:3;47141:11;;47179:4;47174:3;47170:14;47162:22;;47059:132;;;:::o;47197:179::-;47266:10;47287:46;47329:3;47321:6;47287:46;:::i;:::-;47365:4;47360:3;47356:14;47342:28;;47197:179;;;;:::o;47382:113::-;47452:4;47484;47479:3;47475:14;47467:22;;47382:113;;;:::o;47531:732::-;47650:3;47679:54;47727:5;47679:54;:::i;:::-;47749:86;47828:6;47823:3;47749:86;:::i;:::-;47742:93;;47859:56;47909:5;47859:56;:::i;:::-;47938:7;47969:1;47954:284;47979:6;47976:1;47973:13;47954:284;;;48055:6;48049:13;48082:63;48141:3;48126:13;48082:63;:::i;:::-;48075:70;;48168:60;48221:6;48168:60;:::i;:::-;48158:70;;48014:224;48001:1;47998;47994:9;47989:14;;47954:284;;;47958:14;48254:3;48247:10;;47655:608;;;47531:732;;;;:::o;48269:831::-;48532:4;48570:3;48559:9;48555:19;48547:27;;48584:71;48652:1;48641:9;48637:17;48628:6;48584:71;:::i;:::-;48665:80;48741:2;48730:9;48726:18;48717:6;48665:80;:::i;:::-;48792:9;48786:4;48782:20;48777:2;48766:9;48762:18;48755:48;48820:108;48923:4;48914:6;48820:108;:::i;:::-;48812:116;;48938:72;49006:2;48995:9;48991:18;48982:6;48938:72;:::i;:::-;49020:73;49088:3;49077:9;49073:19;49064:6;49020:73;:::i;:::-;48269:831;;;;;;;;:::o

Swarm Source

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