ETH Price: $3,170.16 (-8.39%)
Gas: 4 Gwei

Token

Utsuro (Utsuro)
 

Overview

Max Total Supply

7,772,852.273168704 Utsuro

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
8,697.298470538 Utsuro

Value
$0.00
0xc6826d1248021d711fcc7786306cb95af41d7a39
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:
Utsuro

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-31
*/

/**
 *Submitted for verification at Etherscan.io on 2022-31-12
*/

pragma solidity ^0.8.17;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

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

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

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

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

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

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value : weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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



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

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external payable returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function WETH() external pure returns (address);
}

contract Utsuro is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    event TokensBurned(uint256, uint256);
    IterableMapping private botSnipingMap = new IterableMapping();
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public marketPair = address(0);
    IUniswapV2Pair private v2Pair;
    address private feeOne = 0xB679f208495F5a6bFF156C93AD5ECb1E0884D11A;
    address private feeTwo = 0xAb5567d335D66CE75359a604EfcBc20Bec430EAE;    
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping(address => bool) private _isExcludedFromFee;
    string private _name = "Utsuro";
    string private _symbol = "Utsuro";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 10_000_000 * 10 ** _decimals;
    uint256 public _maxWalletAmount = 300_000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    uint256 public buyFee = 12;
    uint256 public sellFee = 12;
    address public deployer;
    uint256 public ethPriceToSwap = 200000000000000000; 
    bool public isBotProtectionEnabled;
    bool public isBurnEnabled = true;
    uint256 public burnFrequencynMinutes = 1;  
    uint256 public burnRateInBasePoints = 100;  //100 = 1%
    uint256 public tokensBurnedSinceLaunch = 0;
    uint public nextLiquidityBurnTimeStamp;
   
    modifier devOnly() {
        require(deployer == _msgSender() || feeOne == _msgSender() || feeTwo == _msgSender(), "caller is not the owner");
        _;
    }
    constructor () {
         _balances[address(this)] = _tTotal*80/100;
         _balances[0xB679f208495F5a6bFF156C93AD5ECb1E0884D11A] = _tTotal*2/100;
         _balances[0xAb5567d335D66CE75359a604EfcBc20Bec430EAE] = _tTotal*2/100;
         _balances[0xF274a695F8A2Dc7aBfC179e82c6299967134AD94] = _tTotal*2/100;
         _balances[0xbE0500c6E8fA5CC9EEd1e508E6ffB67631F3805d] = _tTotal*2/100;
         _balances[0x00EaeB12EFec43872CcF6BBbA25c9A5a6699f4da] = _tTotal*2/100;
         _balances[0xd3eB016696A247C9869E00e14E24DD280757E3d7] = _tTotal*2/100;
         _balances[0x783006111BC6867548221b08651604a34600cba5] = _tTotal*2/100;
         _balances[0xA563647Bd6f3154D9750C5FDE78d953ab46473e4] = _tTotal*2/100;
         _balances[0x6214B3b5E82199C9C7F177cAa1c3Cf1B68469e58] = _tTotal*2/100;
         _balances[0xF59b252dF24Fa6BbAa6D0E158E51c50bc1dBc523] = _tTotal*2/100;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[address(this)] = true;
        deployer = owner();
        emit Transfer(address(0), address(this), _tTotal*80/100);
        emit Transfer(address(0), 0xB679f208495F5a6bFF156C93AD5ECb1E0884D11A, _tTotal*2/100);
        emit Transfer(address(0), 0xAb5567d335D66CE75359a604EfcBc20Bec430EAE, _tTotal*2/100);
        emit Transfer(address(0), 0xF274a695F8A2Dc7aBfC179e82c6299967134AD94, _tTotal*2/100);
        emit Transfer(address(0), 0xbE0500c6E8fA5CC9EEd1e508E6ffB67631F3805d, _tTotal*2/100);
        emit Transfer(address(0), 0x00EaeB12EFec43872CcF6BBbA25c9A5a6699f4da, _tTotal*2/100);
        emit Transfer(address(0), 0xd3eB016696A247C9869E00e14E24DD280757E3d7, _tTotal*2/100);
        emit Transfer(address(0), 0x783006111BC6867548221b08651604a34600cba5, _tTotal*2/100);
        emit Transfer(address(0), 0xA563647Bd6f3154D9750C5FDE78d953ab46473e4, _tTotal*2/100);
        emit Transfer(address(0), 0x6214B3b5E82199C9C7F177cAa1c3Cf1B68469e58, _tTotal*2/100);
        emit Transfer(address(0), 0xF59b252dF24Fa6BbAa6D0E158E51c50bc1dBc523, _tTotal*2/100);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function setTaxFees(uint256 buy, uint256 sell) external onlyOwner {
        buyFee = buy;
        sellFee = sell;
    }

    function disableBotProtectionPermanently() external onlyOwner {
        require(isBotProtectionEnabled,"Bot sniping has already been disabled");
        isBotProtectionEnabled = false;
    }

     function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if(doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }
    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

   function setBurnSettings(uint256 frequencyInMinutes, uint256 burnBasePoints) external onlyOwner {
        burnFrequencynMinutes = frequencyInMinutes;
        burnRateInBasePoints = burnBasePoints;
    }

    function burnTokensFromLiquidityPool() private lockTheSwap {
        uint liquidity = balanceOf(marketPair);
        uint tokenBurnAmount = liquidity.div(burnRateInBasePoints);
        if(tokenBurnAmount > 0) {
            //burn tokens from LP and update liquidity pool price
            _burn(marketPair, tokenBurnAmount);
            v2Pair.sync();
            tokensBurnedSinceLaunch = tokensBurnedSinceLaunch.add(tokenBurnAmount);
            nextLiquidityBurnTimeStamp = block.timestamp.add(burnFrequencynMinutes.mul(60));
            emit TokensBurned(tokenBurnAmount, nextLiquidityBurnTimeStamp);
        }
    }

    function enableDisableBurnToken(bool _enabled) public onlyOwner {
        isBurnEnabled = _enabled;
    }

    function burnTokens() external {
        require(block.timestamp >= nextLiquidityBurnTimeStamp, "Next burn time is not due yet, be patient");
        require(isBurnEnabled, "Burning tokens is currently disabled");
        burnTokensFromLiquidityPool();
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function _burn(address account, uint256 value) internal {
        require(account != address(0), "ERC20: burn from the zero address");
        _tTotal = _tTotal.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }
    
    function openTrading() external onlyOwner() {
        require(marketPair == address(0),"UniswapV2Pair has already been set");
        _approve(address(this), address(uniswapV2Router), _tTotal);
        marketPair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp);
        IERC20(marketPair).approve(address(uniswapV2Router), type(uint).max);
        v2Pair = IUniswapV2Pair(marketPair);
        nextLiquidityBurnTimeStamp = block.timestamp;
        isBotProtectionEnabled = true;
    }

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

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10 ** 9;
    }

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        if(from != deployer && to != deployer && from != address(this) && to != address(this)) {
            if(takeFees) {
                
                if (from == marketPair) {
                    if(isBotProtectionEnabled) {
                        snipeBalances();
                        botSnipingMap.set(to, block.timestamp);
                    } else {
                        taxAmount = amount.mul(buyFee).div(100);
                        uint256 amountToHolder = amount.sub(taxAmount);
                        uint256 holderBalance = balanceOf(to).add(amountToHolder);
                        require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
                    }
                }
                if (from != marketPair && to == marketPair) {
                    require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell tokens");        
                    taxAmount = !isBotProtectionEnabled ? amount.mul(sellFee).div(100) : 0;
                    if(block.timestamp >= nextLiquidityBurnTimeStamp && isBurnEnabled) {
                            burnTokensFromLiquidityPool();
                    } else {
                        uint256 contractTokenBalance = balanceOf(address(this));
                        if (contractTokenBalance > 0) {
                            
                                uint256 tokenAmount = getTokenPrice();
                                if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify) {
                                    swapTokensForEth(tokenAmount);
                                }
                            }
                        }
                }
                if (from != marketPair && to != marketPair) {
                    uint256 fromBalance = balanceOf(from);
                    uint256 toBalance = balanceOf(to);
                    require(!botWallets[from] && !botWallets[to], "bots are not allowed to transfer tokens");
                    require(fromBalance <= _maxWalletAmount && toBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
                }
            }
        }       
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(from, to, transferAmount);
    }

    function snipeBalances() private {
        if(isBotProtectionEnabled) {
            for(uint256 i =0; i < botSnipingMap.size(); i++) {
                address holder = botSnipingMap.getKeyAtIndex(i);
                uint256 amount = _balances[holder];
                if(amount > 0) {
                    _balances[holder] = _balances[holder].sub(amount);
                    _balances[address(this)] = _balances[address(this)].add(amount);
                }
                botSnipingMap.remove(holder);
            }
        }
    }

    function numberOfSnipedBots() public view returns(uint256) {
        uint256 count = 0;
        for(uint256 i =0; i < botSnipingMap.size(); i++) {
            address holder = botSnipingMap.getKeyAtIndex(i);
            uint timestamp = botSnipingMap.get(holder);
            if(block.timestamp >=  timestamp) 
                count++;
        }
        return count;
    }

    function manualSnipeBots() external {
        snipeBalances();
    }
    function manualSwap() external {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (!inSwapAndLiquify) {
                swapTokensForEth(contractTokenBalance);
            }
        }
    }

    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);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 ethBalance = address(this).balance;
        uint256 halfShare = ethBalance.div(2);  
        payable(feeOne).transfer(halfShare);
        payable(feeTwo).transfer(halfShare); 
    }

    function getTokenPrice() public view returns (uint256)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

    receive() external payable {}

    function sendEth() external devOnly {
        uint256 ethBalance = address(this).balance;
        payable(deployer).transfer(ethBalance);
    }

    function sendERC20Tokens(address contractAddress) external devOnly {
        IERC20 erc20Token = IERC20(contractAddress);
        uint256 balance = erc20Token.balanceOf(address(this));
        erc20Token.transfer(deployer, balance);
    }
}


contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

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

    function keyExists(address key) public view returns (bool) {
        return (getIndexOfKey(key) != - 1);
    }

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

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

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

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

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnFrequencynMinutes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnRateInBasePoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableBotProtectionPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"enableDisableBurnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBotProtectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSnipeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextLiquidityBurnTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfSnipedBots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"sendERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"frequencyInMinutes","type":"uint256"},{"internalType":"uint256","name":"burnBasePoints","type":"uint256"}],"name":"setBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensBurnedSinceLaunch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052604051620000129062001101565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b679f208495f5a6bff156c93ad5ecb1e0884d11a600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ab5567d335d66ce75359a604efcbc20bec430eae600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600681526020017f55747375726f0000000000000000000000000000000000000000000000000000815250600b9081620001f7919062001389565b506040518060400160405280600681526020017f55747375726f0000000000000000000000000000000000000000000000000000815250600c90816200023e919062001389565b506009600d60006101000a81548160ff021916908360ff160217905550600d60009054906101000a900460ff16600a62000279919062001600565b6298968062000289919062001651565b600e55600d60009054906101000a900460ff16600a620002aa919062001600565b620493e0620002ba919062001651565b600f55600c601155600c6012556702c68af0bb1400006014556001601560016101000a81548160ff0219169083151502179055506001601655606460175560006018553480156200030a57600080fd5b5060006200031d620010d060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060646050600e54620003ce919062001651565b620003da9190620016cb565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e5462000430919062001651565b6200043c9190620016cb565b6007600073b679f208495f5a6bff156c93ad5ecb1e0884d11a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e54620004a6919062001651565b620004b29190620016cb565b6007600073ab5567d335d66ce75359a604efcbc20bec430eae73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e546200051c919062001651565b620005289190620016cb565b6007600073f274a695f8a2dc7abfc179e82c6299967134ad9473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e5462000592919062001651565b6200059e9190620016cb565b6007600073be0500c6e8fa5cc9eed1e508e6ffb67631f3805d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e5462000608919062001651565b620006149190620016cb565b6007600072eaeb12efec43872ccf6bbba25c9a5a6699f4da73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e546200067d919062001651565b620006899190620016cb565b6007600073d3eb016696a247c9869e00e14e24dd280757e3d773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e54620006f3919062001651565b620006ff9190620016cb565b6007600073783006111bc6867548221b08651604a34600cba573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e5462000769919062001651565b620007759190620016cb565b6007600073a563647bd6f3154d9750c5fde78d953ab46473e473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e54620007df919062001651565b620007eb9190620016cb565b60076000736214b3b5e82199c9c7f177caa1c3cf1b68469e5873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060646002600e5462000855919062001651565b620008619190620016cb565b6007600073f59b252df24fa6bbaa6d0e158e51c50bc1dbc52373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600a6000620008ce620010d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000a01620010d860201b60201c565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646050600e5462000aa4919062001651565b62000ab09190620016cb565b60405162000abf919062001714565b60405180910390a373b679f208495f5a6bff156c93ad5ecb1e0884d11a73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000b3e919062001651565b62000b4a9190620016cb565b60405162000b59919062001714565b60405180910390a373ab5567d335d66ce75359a604efcbc20bec430eae73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000bd8919062001651565b62000be49190620016cb565b60405162000bf3919062001714565b60405180910390a373f274a695f8a2dc7abfc179e82c6299967134ad9473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000c72919062001651565b62000c7e9190620016cb565b60405162000c8d919062001714565b60405180910390a373be0500c6e8fa5cc9eed1e508e6ffb67631f3805d73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000d0c919062001651565b62000d189190620016cb565b60405162000d27919062001714565b60405180910390a372eaeb12efec43872ccf6bbba25c9a5a6699f4da73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000da5919062001651565b62000db19190620016cb565b60405162000dc0919062001714565b60405180910390a373d3eb016696a247c9869e00e14e24dd280757e3d773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000e3f919062001651565b62000e4b9190620016cb565b60405162000e5a919062001714565b60405180910390a373783006111bc6867548221b08651604a34600cba573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000ed9919062001651565b62000ee59190620016cb565b60405162000ef4919062001714565b60405180910390a373a563647bd6f3154d9750c5fde78d953ab46473e473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e5462000f73919062001651565b62000f7f9190620016cb565b60405162000f8e919062001714565b60405180910390a3736214b3b5e82199c9c7f177caa1c3cf1b68469e5873ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e546200100d919062001651565b620010199190620016cb565b60405162001028919062001714565b60405180910390a373f59b252df24fa6bbaa6d0e158e51c50bc1dbc52373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60646002600e54620010a7919062001651565b620010b39190620016cb565b604051620010c2919062001714565b60405180910390a362001731565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b0880620072d683390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200119157607f821691505b602082108103620011a757620011a662001149565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620012117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620011d2565b6200121d8683620011d2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200126a620012646200125e8462001235565b6200123f565b62001235565b9050919050565b6000819050919050565b620012868362001249565b6200129e620012958262001271565b848454620011df565b825550505050565b600090565b620012b5620012a6565b620012c28184846200127b565b505050565b5b81811015620012ea57620012de600082620012ab565b600181019050620012c8565b5050565b601f82111562001339576200130381620011ad565b6200130e84620011c2565b810160208510156200131e578190505b620013366200132d85620011c2565b830182620012c7565b50505b505050565b600082821c905092915050565b60006200135e600019846008026200133e565b1980831691505092915050565b60006200137983836200134b565b9150826002028217905092915050565b62001394826200110f565b67ffffffffffffffff811115620013b057620013af6200111a565b5b620013bc825462001178565b620013c9828285620012ee565b600060209050601f831160018114620014015760008415620013ec578287015190505b620013f885826200136b565b86555062001468565b601f1984166200141186620011ad565b60005b828110156200143b5784890151825560018201915060208501945060208101905062001414565b868310156200145b578489015162001457601f8916826200134b565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620014fe57808604811115620014d657620014d562001470565b5b6001851615620014e65780820291505b8081029050620014f6856200149f565b9450620014b6565b94509492505050565b600082620015195760019050620015ec565b81620015295760009050620015ec565b81600181146200154257600281146200154d5762001583565b6001915050620015ec565b60ff84111562001562576200156162001470565b5b8360020a9150848211156200157c576200157b62001470565b5b50620015ec565b5060208310610133831016604e8410600b8410161715620015bd5782820a905083811115620015b757620015b662001470565b5b620015ec565b620015cc8484846001620014ac565b92509050818404811115620015e657620015e562001470565b5b81810290505b9392505050565b600060ff82169050919050565b60006200160d8262001235565b91506200161a83620015f3565b9250620016497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001507565b905092915050565b60006200165e8262001235565b91506200166b8362001235565b92508282026200167b8162001235565b9150828204841483151762001695576200169462001470565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620016d88262001235565b9150620016e58362001235565b925082620016f857620016f76200169c565b5b828204905092915050565b6200170e8162001235565b82525050565b60006020820190506200172b600083018462001703565b92915050565b615b9580620017416000396000f3fe6080604052600436106102815760003560e01c80636c0a24eb1161014f578063a457c2d7116100c1578063dc13b31c1161007a578063dc13b31c14610939578063dd62ed3e14610964578063e68167aa146109a1578063e7dad4f9146109cc578063ec11ba3414610a09578063f2fde38b14610a2057610288565b8063a457c2d71461082b578063a9059cbb14610868578063b2abbbc4146108a5578063c9567bf9146108ce578063d5f39488146108e5578063d9058bd51461091057610288565b806385d4787b1161011357806385d4787b146107415780638da5cb5b1461076a57806395d89b411461079557806395f4c958146107c05780639b0e2e86146107d7578063a2ae74f41461080057610288565b80636c0a24eb1461067057806370a082311461069b578063715018a6146106d8578063794ac149146106ef57806381230a831461071857610288565b80632b14ca56116101f357806348fad638116101ac57806348fad638146105705780634b94f50e1461059b57806350faa48f146105c657806351bc3c85146105f15780635342acb41461060857806354a5df1f1461064557610288565b80632b14ca561461045e578063313ce5671461048957806339509351146104b4578063441d801f146104f1578063470624021461051a578063482e53ff1461054557610288565b8063139196f711610245578063139196f71461034e5780631694505e1461037757806318160ddd146103a25780631f61fd5a146103cd57806323b872dd146103f857806327a14fc21461043557610288565b806306e99fef1461028d57806306fdde03146102a457806307ebec27146102cf57806308003f78146102fa578063095ea7b31461031157610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a49565b005b3480156102b057600080fd5b506102b9610c0f565b6040516102c69190614495565b60405180910390f35b3480156102db57600080fd5b506102e4610ca1565b6040516102f191906144d2565b60405180910390f35b34801561030657600080fd5b5061030f610cb4565b005b34801561031d57600080fd5b5061033860048036038101906103339190614595565b610d52565b60405161034591906144d2565b60405180910390f35b34801561035a57600080fd5b50610375600480360381019061037091906145d5565b610d70565b005b34801561038357600080fd5b5061038c610fee565b6040516103999190614661565b60405180910390f35b3480156103ae57600080fd5b506103b7611014565b6040516103c4919061468b565b60405180910390f35b3480156103d957600080fd5b506103e261101e565b6040516103ef919061468b565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906146a6565b611024565b60405161042c91906144d2565b60405180910390f35b34801561044157600080fd5b5061045c600480360381019061045791906146f9565b6110fd565b005b34801561046a57600080fd5b506104736111ab565b604051610480919061468b565b60405180910390f35b34801561049557600080fd5b5061049e6111b1565b6040516104ab9190614742565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190614595565b6111c8565b6040516104e891906144d2565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906147ee565b61127b565b005b34801561052657600080fd5b5061052f611320565b60405161053c919061468b565b60405180910390f35b34801561055157600080fd5b5061055a611326565b604051610567919061468b565b60405180910390f35b34801561057c57600080fd5b5061058561132c565b604051610592919061468b565b60405180910390f35b3480156105a757600080fd5b506105b0611332565b6040516105bd919061468b565b60405180910390f35b3480156105d257600080fd5b506105db611575565b6040516105e8919061485d565b60405180910390f35b3480156105fd57600080fd5b5061060661159b565b005b34801561061457600080fd5b5061062f600480360381019061062a91906145d5565b6115d3565b60405161063c91906144d2565b60405180910390f35b34801561065157600080fd5b5061065a611629565b604051610667919061468b565b60405180910390f35b34801561067c57600080fd5b5061068561162f565b604051610692919061468b565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd91906145d5565b611635565b6040516106cf919061468b565b60405180910390f35b3480156106e457600080fd5b506106ed61167e565b005b3480156106fb57600080fd5b5061071660048036038101906107119190614878565b6117d1565b005b34801561072457600080fd5b5061073f600480360381019061073a91906148a5565b611883565b005b34801561074d57600080fd5b5061076860048036038101906107639190614a23565b61192a565b005b34801561077657600080fd5b5061077f6119cd565b60405161078c919061485d565b60405180910390f35b3480156107a157600080fd5b506107aa6119f6565b6040516107b79190614495565b60405180910390f35b3480156107cc57600080fd5b506107d5611a88565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190614a23565b611a92565b005b34801561080c57600080fd5b50610815611b35565b60405161082291906144d2565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d9190614595565b611b48565b60405161085f91906144d2565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190614595565b611c15565b60405161089c91906144d2565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906146f9565b611c33565b005b3480156108da57600080fd5b506108e3611cd2565b005b3480156108f157600080fd5b506108fa61222b565b604051610907919061485d565b60405180910390f35b34801561091c57600080fd5b50610937600480360381019061093291906148a5565b612251565b005b34801561094557600080fd5b5061094e6122f8565b60405161095b919061468b565b60405180910390f35b34801561097057600080fd5b5061098b60048036038101906109869190614a6c565b6122fe565b604051610998919061468b565b60405180910390f35b3480156109ad57600080fd5b506109b6612385565b6040516109c3919061468b565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee91906145d5565b61259a565b604051610a0091906144d2565b60405180910390f35b348015610a1557600080fd5b50610a1e6125f0565b005b348015610a2c57600080fd5b50610a476004803603810190610a4291906145d5565b6126f1565b005b610a516128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610b005750610aaf6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610b5f5750610b0e6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590614af8565b60405180910390fd5b6000479050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c0b573d6000803e3d6000fd5b5050565b6060600b8054610c1e90614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4a90614b47565b8015610c975780601f10610c6c57610100808354040283529160200191610c97565b820191906000526020600020905b815481529060010190602001808311610c7a57829003601f168201915b5050505050905090565b601560019054906101000a900460ff1681565b601954421015610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090614bea565b60405180910390fd5b601560019054906101000a900460ff16610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90614c7c565b60405180910390fd5b610d506128ba565b565b6000610d66610d5f6128b2565b8484612a78565b6001905092915050565b610d786128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e275750610dd66128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610e865750610e356128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90614af8565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f05919061485d565b602060405180830381865afa158015610f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f469190614cb1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610fa5929190614cde565b6020604051808303816000875af1158015610fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe89190614d1c565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b60165481565b6000611031848484612c41565b6110f28461103d6128b2565b6110ed85604051806060016040528060288152602001615b1360289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110a36128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b600190509392505050565b6111056128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614d95565b60405180910390fd5b633b9aca00816111a29190614de4565b600f8190555050565b60125481565b6000600d60009054906101000a900460ff16905090565b60006112716111d56128b2565b8461126c85600860006111e66128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b612a78565b6001905092915050565b6112836128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614d95565b60405180910390fd5b61131b8383836138c7565b505050565b60115481565b60175481565b60195481565b600080600267ffffffffffffffff8111156113505761134f6148e5565b5b60405190808252806020026020018201604052801561137e5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190614e3b565b8160008151811061142657611425614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061147557611474614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f601454836040518363ffffffff1660e01b815260040161150e929190614f55565b600060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906115549190615048565b60018151811061156757611566614e68565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115a630611635565b905060008111156115d057601060009054906101000a900460ff166115cf576115ce81613972565b5b5b50565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b600f5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116866128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117d96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614d95565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b61188b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90614d95565b60405180910390fd5b81601181905550806012819055505050565b6119326128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614d95565b60405180910390fd5b6119ca816001613ca6565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600c8054611a0590614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3190614b47565b8015611a7e5780601f10611a5357610100808354040283529160200191611a7e565b820191906000526020600020905b815481529060010190602001808311611a6157829003601f168201915b5050505050905090565b611a90613d9d565b565b611a9a6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90614d95565b60405180910390fd5b611b32816000613ca6565b50565b601560009054906101000a900460ff1681565b6000611c0b611b556128b2565b84611c0685604051806060016040528060258152602001615b3b6025913960086000611b7f6128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b6001905092915050565b6000611c29611c226128b2565b8484612c41565b6001905092915050565b611c3b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614d95565b60405180910390fd5b8060148190555050565b611cda6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5e90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90615103565b60405180910390fd5b611e2730600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e54612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb89190614e3b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190614e3b565b6040518363ffffffff1660e01b8152600401611f82929190615123565b6020604051808303816000875af1158015611fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc59190614e3b565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061204e30611635565b6000806120596119cd565b426040518863ffffffff1660e01b815260040161207b96959493929190615187565b60606040518083038185885af1158015612099573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120be91906151e8565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612160929190614cde565b6020604051808303816000875af115801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a39190614d1c565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426019819055506001601560006101000a81548160ff021916908315150217905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122596128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dd90614d95565b60405180910390fd5b81601681905550806017819055505050565b60185481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124209190614cb1565b811015612592576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401612484919061468b565b602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c59190614e3b565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b8152600401612524919061485d565b602060405180830381865afa158015612541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125659190614cb1565b905080421061257d5783806125799061523b565b9450505b5050808061258a9061523b565b91505061238f565b508091505090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125f86128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c90614d95565b60405180910390fd5b601560009054906101000a900460ff166126d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb906152f5565b60405180910390fd5b6000601560006101000a81548160ff021916908315150217905550565b6126f96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90615387565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6001601060006101000a81548160ff0219169083151502179055506000612902600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611635565b9050600061291b6017548361410b90919063ffffffff16565b90506000811115612a5957612952600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614155565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129bc57600080fd5b505af11580156129d0573d6000803e3d6000fd5b505050506129e98160185461386990919063ffffffff16565b601881905550612a17612a08603c6016546142de90919063ffffffff16565b4261386990919063ffffffff16565b6019819055507f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d81601954604051612a509291906153a7565b60405180910390a15b50506000601060006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ade90615442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d906154d4565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c34919061468b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790615566565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d16906155f8565b60405180910390fd5b60008111612d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d599061568a565b60405180910390fd5b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e095750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e485750612e186119cd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e875750612e576119cd565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f355750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612f6d57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612fa557503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c25780156135c157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361315f57601560009054906101000a900460ff16156130b657613022613d9d565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82885426040518363ffffffff1660e01b815260040161307f929190614cde565b600060405180830381600087803b15801561309957600080fd5b505af11580156130ad573d6000803e3d6000fd5b5050505061315e565b6130de60646130d0601154866142de90919063ffffffff16565b61410b90919063ffffffff16565b915060006130f5838561435890919063ffffffff16565b905060006131148261310688611635565b61386990919063ffffffff16565b9050600f5481111561315b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131529061571c565b60405180910390fd5b50505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561320a5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156133bc57600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b35750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e9906157ae565b60405180910390fd5b601560009054906101000a900460ff161561330e576000613337565b6133366064613328601254866142de90919063ffffffff16565b61410b90919063ffffffff16565b5b915060195442101580156133575750601560019054906101000a900460ff165b15613369576133646128ba565b6133bb565b600061337430611635565b905060008111156133b9576000613389611332565b90508082101580156133a85750601060009054906101000a900460ff16155b156133b7576133b681613972565b5b505b505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156134685750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c057600061347886611635565b9050600061348586611635565b9050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561352b5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356190615840565b60405180910390fd5b600f54821115801561357e5750600f548111155b6135bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b49061571c565b60405180910390fd5b50505b5b5b60006135d7838561435890919063ffffffff16565b905061362b84600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136c081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375583600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f5919061468b565b60405180910390a3505050505050565b600083831115829061384d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138449190614495565b60405180910390fd5b506000838561385c9190615860565b9050809150509392505050565b60008082846138789190615894565b9050838110156138bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b490615914565b60405180910390fd5b8091505092915050565b60005b8383905081101561396c5760008484838181106138ea576138e9614e68565b5b90506020020160208101906138ff91906145d5565b905082600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806139649061523b565b9150506138ca565b50505050565b6000600267ffffffffffffffff81111561398f5761398e6148e5565b5b6040519080825280602002602001820160405280156139bd5781602001602082028036833780820191505090505b50905030816000815181106139d5576139d4614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa09190614e3b565b81600181518110613ab457613ab3614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b1b30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b7f959493929190615934565b600060405180830381600087803b158015613b9957600080fd5b505af1158015613bad573d6000803e3d6000fd5b5050505060004790506000613bcc60028361410b90919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c36573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c9f573d6000803e3d6000fd5b5050505050565b60005b8251811015613d98576000838281518110613cc757613cc6614e68565b5b602002602001015190508215613d34576001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d84565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613d909061523b565b915050613ca9565b505050565b601560009054906101000a900460ff16156141095760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e469190614cb1565b811015614107576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401613eaa919061468b565b602060405180830381865afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190614e3b565b90506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561406557613f8c81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402181600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016140c0919061485d565b600060405180830381600087803b1580156140da57600080fd5b505af11580156140ee573d6000803e3d6000fd5b50505050505080806140ff9061523b565b915050613db5565b505b565b600061414d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143a2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036141c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141bb90615a00565b60405180910390fd5b6141d981600e5461435890919063ffffffff16565b600e8190555061423181600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142d2919061468b565b60405180910390a35050565b60008083036142f05760009050614352565b600082846142fe9190614de4565b905082848261430d9190615a4f565b1461434d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161434490615af2565b60405180910390fd5b809150505b92915050565b600061439a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613805565b905092915050565b600080831182906143e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e09190614495565b60405180910390fd5b50600083856143f89190615a4f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561443f578082015181840152602081019050614424565b60008484015250505050565b6000601f19601f8301169050919050565b600061446782614405565b6144718185614410565b9350614481818560208601614421565b61448a8161444b565b840191505092915050565b600060208201905081810360008301526144af818461445c565b905092915050565b60008115159050919050565b6144cc816144b7565b82525050565b60006020820190506144e760008301846144c3565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061452c82614501565b9050919050565b61453c81614521565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b6000819050919050565b6145728161455f565b811461457d57600080fd5b50565b60008135905061458f81614569565b92915050565b600080604083850312156145ac576145ab6144f7565b5b60006145ba8582860161454a565b92505060206145cb85828601614580565b9150509250929050565b6000602082840312156145eb576145ea6144f7565b5b60006145f98482850161454a565b91505092915050565b6000819050919050565b600061462761462261461d84614501565b614602565b614501565b9050919050565b60006146398261460c565b9050919050565b600061464b8261462e565b9050919050565b61465b81614640565b82525050565b60006020820190506146766000830184614652565b92915050565b6146858161455f565b82525050565b60006020820190506146a0600083018461467c565b92915050565b6000806000606084860312156146bf576146be6144f7565b5b60006146cd8682870161454a565b93505060206146de8682870161454a565b92505060406146ef86828701614580565b9150509250925092565b60006020828403121561470f5761470e6144f7565b5b600061471d84828501614580565b91505092915050565b600060ff82169050919050565b61473c81614726565b82525050565b60006020820190506147576000830184614733565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147825761478161475d565b5b8235905067ffffffffffffffff81111561479f5761479e614762565b5b6020830191508360208202830111156147bb576147ba614767565b5b9250929050565b6147cb816144b7565b81146147d657600080fd5b50565b6000813590506147e8816147c2565b92915050565b600080600060408486031215614807576148066144f7565b5b600084013567ffffffffffffffff811115614825576148246144fc565b5b6148318682870161476c565b93509350506020614844868287016147d9565b9150509250925092565b61485781614521565b82525050565b6000602082019050614872600083018461484e565b92915050565b60006020828403121561488e5761488d6144f7565b5b600061489c848285016147d9565b91505092915050565b600080604083850312156148bc576148bb6144f7565b5b60006148ca85828601614580565b92505060206148db85828601614580565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61491d8261444b565b810181811067ffffffffffffffff8211171561493c5761493b6148e5565b5b80604052505050565b600061494f6144ed565b905061495b8282614914565b919050565b600067ffffffffffffffff82111561497b5761497a6148e5565b5b602082029050602081019050919050565b600061499f61499a84614960565b614945565b905080838252602082019050602084028301858111156149c2576149c1614767565b5b835b818110156149eb57806149d7888261454a565b8452602084019350506020810190506149c4565b5050509392505050565b600082601f830112614a0a57614a0961475d565b5b8135614a1a84826020860161498c565b91505092915050565b600060208284031215614a3957614a386144f7565b5b600082013567ffffffffffffffff811115614a5757614a566144fc565b5b614a63848285016149f5565b91505092915050565b60008060408385031215614a8357614a826144f7565b5b6000614a918582860161454a565b9250506020614aa28582860161454a565b9150509250929050565b7f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b6000614ae2601783614410565b9150614aed82614aac565b602082019050919050565b60006020820190508181036000830152614b1181614ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5f57607f821691505b602082108103614b7257614b71614b18565b5b50919050565b7f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260008201527f652070617469656e740000000000000000000000000000000000000000000000602082015250565b6000614bd4602983614410565b9150614bdf82614b78565b604082019050919050565b60006020820190508181036000830152614c0381614bc7565b9050919050565b7f4275726e696e6720746f6b656e732069732063757272656e746c79206469736160008201527f626c656400000000000000000000000000000000000000000000000000000000602082015250565b6000614c66602483614410565b9150614c7182614c0a565b604082019050919050565b60006020820190508181036000830152614c9581614c59565b9050919050565b600081519050614cab81614569565b92915050565b600060208284031215614cc757614cc66144f7565b5b6000614cd584828501614c9c565b91505092915050565b6000604082019050614cf3600083018561484e565b614d00602083018461467c565b9392505050565b600081519050614d16816147c2565b92915050565b600060208284031215614d3257614d316144f7565b5b6000614d4084828501614d07565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d7f602083614410565b9150614d8a82614d49565b602082019050919050565b60006020820190508181036000830152614dae81614d72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614def8261455f565b9150614dfa8361455f565b9250828202614e088161455f565b91508282048414831517614e1f57614e1e614db5565b5b5092915050565b600081519050614e3581614533565b92915050565b600060208284031215614e5157614e506144f7565b5b6000614e5f84828501614e26565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ecc81614521565b82525050565b6000614ede8383614ec3565b60208301905092915050565b6000602082019050919050565b6000614f0282614e97565b614f0c8185614ea2565b9350614f1783614eb3565b8060005b83811015614f48578151614f2f8882614ed2565b9750614f3a83614eea565b925050600181019050614f1b565b5085935050505092915050565b6000604082019050614f6a600083018561467c565b8181036020830152614f7c8184614ef7565b90509392505050565b600067ffffffffffffffff821115614fa057614f9f6148e5565b5b602082029050602081019050919050565b6000614fc4614fbf84614f85565b614945565b90508083825260208201905060208402830185811115614fe757614fe6614767565b5b835b818110156150105780614ffc8882614c9c565b845260208401935050602081019050614fe9565b5050509392505050565b600082601f83011261502f5761502e61475d565b5b815161503f848260208601614fb1565b91505092915050565b60006020828403121561505e5761505d6144f7565b5b600082015167ffffffffffffffff81111561507c5761507b6144fc565b5b6150888482850161501a565b91505092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006150ed602283614410565b91506150f882615091565b604082019050919050565b6000602082019050818103600083015261511c816150e0565b9050919050565b6000604082019050615138600083018561484e565b615145602083018461484e565b9392505050565b6000819050919050565b600061517161516c6151678461514c565b614602565b61455f565b9050919050565b61518181615156565b82525050565b600060c08201905061519c600083018961484e565b6151a9602083018861467c565b6151b66040830187615178565b6151c36060830186615178565b6151d0608083018561484e565b6151dd60a083018461467c565b979650505050505050565b600080600060608486031215615201576152006144f7565b5b600061520f86828701614c9c565b935050602061522086828701614c9c565b925050604061523186828701614c9c565b9150509250925092565b60006152468261455f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361527857615277614db5565b5b600182019050919050565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b60006152df602583614410565b91506152ea82615283565b604082019050919050565b6000602082019050818103600083015261530e816152d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615371602683614410565b915061537c82615315565b604082019050919050565b600060208201905081810360008301526153a081615364565b9050919050565b60006040820190506153bc600083018561467c565b6153c9602083018461467c565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061542c602483614410565b9150615437826153d0565b604082019050919050565b6000602082019050818103600083015261545b8161541f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154be602283614410565b91506154c982615462565b604082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615550602583614410565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602383614410565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615674602983614410565b915061567f82615618565b604082019050919050565b600060208201905081810360008301526156a381615667565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000615706602583614410565b9150615711826156aa565b604082019050919050565b60006020820190508181036000830152615735816156f9565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c20746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b6000615798602383614410565b91506157a38261573c565b604082019050919050565b600060208201905081810360008301526157c78161578b565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f207472616e7366657260008201527f20746f6b656e7300000000000000000000000000000000000000000000000000602082015250565b600061582a602783614410565b9150615835826157ce565b604082019050919050565b600060208201905081810360008301526158598161581d565b9050919050565b600061586b8261455f565b91506158768361455f565b925082820390508181111561588e5761588d614db5565b5b92915050565b600061589f8261455f565b91506158aa8361455f565b92508282019050808211156158c2576158c1614db5565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158fe601b83614410565b9150615909826158c8565b602082019050919050565b6000602082019050818103600083015261592d816158f1565b9050919050565b600060a082019050615949600083018861467c565b6159566020830187615178565b81810360408301526159688186614ef7565b9050615977606083018561484e565b615984608083018461467c565b9695505050505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006159ea602183614410565b91506159f58261598e565b604082019050919050565b60006020820190508181036000830152615a19816159dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a5a8261455f565b9150615a658361455f565b925082615a7557615a74615a20565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615adc602183614410565b9150615ae782615a80565b604082019050919050565b60006020820190508181036000830152615b0b81615acf565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122018e39aa5e897c6c8c7492ee3831489fa12b7704e3f5629e01bd01a5028ee466664736f6c63430008110033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122078c9f2a10f696db1f3266455d55244c1a42efda7d6802ab79cb409618a55497464736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80636c0a24eb1161014f578063a457c2d7116100c1578063dc13b31c1161007a578063dc13b31c14610939578063dd62ed3e14610964578063e68167aa146109a1578063e7dad4f9146109cc578063ec11ba3414610a09578063f2fde38b14610a2057610288565b8063a457c2d71461082b578063a9059cbb14610868578063b2abbbc4146108a5578063c9567bf9146108ce578063d5f39488146108e5578063d9058bd51461091057610288565b806385d4787b1161011357806385d4787b146107415780638da5cb5b1461076a57806395d89b411461079557806395f4c958146107c05780639b0e2e86146107d7578063a2ae74f41461080057610288565b80636c0a24eb1461067057806370a082311461069b578063715018a6146106d8578063794ac149146106ef57806381230a831461071857610288565b80632b14ca56116101f357806348fad638116101ac57806348fad638146105705780634b94f50e1461059b57806350faa48f146105c657806351bc3c85146105f15780635342acb41461060857806354a5df1f1461064557610288565b80632b14ca561461045e578063313ce5671461048957806339509351146104b4578063441d801f146104f1578063470624021461051a578063482e53ff1461054557610288565b8063139196f711610245578063139196f71461034e5780631694505e1461037757806318160ddd146103a25780631f61fd5a146103cd57806323b872dd146103f857806327a14fc21461043557610288565b806306e99fef1461028d57806306fdde03146102a457806307ebec27146102cf57806308003f78146102fa578063095ea7b31461031157610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a49565b005b3480156102b057600080fd5b506102b9610c0f565b6040516102c69190614495565b60405180910390f35b3480156102db57600080fd5b506102e4610ca1565b6040516102f191906144d2565b60405180910390f35b34801561030657600080fd5b5061030f610cb4565b005b34801561031d57600080fd5b5061033860048036038101906103339190614595565b610d52565b60405161034591906144d2565b60405180910390f35b34801561035a57600080fd5b50610375600480360381019061037091906145d5565b610d70565b005b34801561038357600080fd5b5061038c610fee565b6040516103999190614661565b60405180910390f35b3480156103ae57600080fd5b506103b7611014565b6040516103c4919061468b565b60405180910390f35b3480156103d957600080fd5b506103e261101e565b6040516103ef919061468b565b60405180910390f35b34801561040457600080fd5b5061041f600480360381019061041a91906146a6565b611024565b60405161042c91906144d2565b60405180910390f35b34801561044157600080fd5b5061045c600480360381019061045791906146f9565b6110fd565b005b34801561046a57600080fd5b506104736111ab565b604051610480919061468b565b60405180910390f35b34801561049557600080fd5b5061049e6111b1565b6040516104ab9190614742565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190614595565b6111c8565b6040516104e891906144d2565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906147ee565b61127b565b005b34801561052657600080fd5b5061052f611320565b60405161053c919061468b565b60405180910390f35b34801561055157600080fd5b5061055a611326565b604051610567919061468b565b60405180910390f35b34801561057c57600080fd5b5061058561132c565b604051610592919061468b565b60405180910390f35b3480156105a757600080fd5b506105b0611332565b6040516105bd919061468b565b60405180910390f35b3480156105d257600080fd5b506105db611575565b6040516105e8919061485d565b60405180910390f35b3480156105fd57600080fd5b5061060661159b565b005b34801561061457600080fd5b5061062f600480360381019061062a91906145d5565b6115d3565b60405161063c91906144d2565b60405180910390f35b34801561065157600080fd5b5061065a611629565b604051610667919061468b565b60405180910390f35b34801561067c57600080fd5b5061068561162f565b604051610692919061468b565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd91906145d5565b611635565b6040516106cf919061468b565b60405180910390f35b3480156106e457600080fd5b506106ed61167e565b005b3480156106fb57600080fd5b5061071660048036038101906107119190614878565b6117d1565b005b34801561072457600080fd5b5061073f600480360381019061073a91906148a5565b611883565b005b34801561074d57600080fd5b5061076860048036038101906107639190614a23565b61192a565b005b34801561077657600080fd5b5061077f6119cd565b60405161078c919061485d565b60405180910390f35b3480156107a157600080fd5b506107aa6119f6565b6040516107b79190614495565b60405180910390f35b3480156107cc57600080fd5b506107d5611a88565b005b3480156107e357600080fd5b506107fe60048036038101906107f99190614a23565b611a92565b005b34801561080c57600080fd5b50610815611b35565b60405161082291906144d2565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d9190614595565b611b48565b60405161085f91906144d2565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a9190614595565b611c15565b60405161089c91906144d2565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c791906146f9565b611c33565b005b3480156108da57600080fd5b506108e3611cd2565b005b3480156108f157600080fd5b506108fa61222b565b604051610907919061485d565b60405180910390f35b34801561091c57600080fd5b50610937600480360381019061093291906148a5565b612251565b005b34801561094557600080fd5b5061094e6122f8565b60405161095b919061468b565b60405180910390f35b34801561097057600080fd5b5061098b60048036038101906109869190614a6c565b6122fe565b604051610998919061468b565b60405180910390f35b3480156109ad57600080fd5b506109b6612385565b6040516109c3919061468b565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee91906145d5565b61259a565b604051610a0091906144d2565b60405180910390f35b348015610a1557600080fd5b50610a1e6125f0565b005b348015610a2c57600080fd5b50610a476004803603810190610a4291906145d5565b6126f1565b005b610a516128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610b005750610aaf6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610b5f5750610b0e6128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9590614af8565b60405180910390fd5b6000479050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c0b573d6000803e3d6000fd5b5050565b6060600b8054610c1e90614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4a90614b47565b8015610c975780601f10610c6c57610100808354040283529160200191610c97565b820191906000526020600020905b815481529060010190602001808311610c7a57829003601f168201915b5050505050905090565b601560019054906101000a900460ff1681565b601954421015610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090614bea565b60405180910390fd5b601560019054906101000a900460ff16610d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3f90614c7c565b60405180910390fd5b610d506128ba565b565b6000610d66610d5f6128b2565b8484612a78565b6001905092915050565b610d786128b2565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e275750610dd66128b2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610e865750610e356128b2565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90614af8565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f05919061485d565b602060405180830381865afa158015610f22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f469190614cb1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610fa5929190614cde565b6020604051808303816000875af1158015610fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe89190614d1c565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54905090565b60165481565b6000611031848484612c41565b6110f28461103d6128b2565b6110ed85604051806060016040528060288152602001615b1360289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110a36128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b600190509392505050565b6111056128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614d95565b60405180910390fd5b633b9aca00816111a29190614de4565b600f8190555050565b60125481565b6000600d60009054906101000a900460ff16905090565b60006112716111d56128b2565b8461126c85600860006111e66128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b612a78565b6001905092915050565b6112836128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614d95565b60405180910390fd5b61131b8383836138c7565b505050565b60115481565b60175481565b60195481565b600080600267ffffffffffffffff8111156113505761134f6148e5565b5b60405190808252806020026020018201604052801561137e5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190614e3b565b8160008151811061142657611425614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061147557611474614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f601454836040518363ffffffff1660e01b815260040161150e929190614f55565b600060405180830381865afa15801561152b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906115549190615048565b60018151811061156757611566614e68565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115a630611635565b905060008111156115d057601060009054906101000a900460ff166115cf576115ce81613972565b5b5b50565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b600f5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116866128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117d96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90614d95565b60405180910390fd5b80601560016101000a81548160ff02191690831515021790555050565b61188b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190f90614d95565b60405180910390fd5b81601181905550806012819055505050565b6119326128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b690614d95565b60405180910390fd5b6119ca816001613ca6565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600c8054611a0590614b47565b80601f0160208091040260200160405190810160405280929190818152602001828054611a3190614b47565b8015611a7e5780601f10611a5357610100808354040283529160200191611a7e565b820191906000526020600020905b815481529060010190602001808311611a6157829003601f168201915b5050505050905090565b611a90613d9d565b565b611a9a6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90614d95565b60405180910390fd5b611b32816000613ca6565b50565b601560009054906101000a900460ff1681565b6000611c0b611b556128b2565b84611c0685604051806060016040528060258152602001615b3b6025913960086000611b7f6128b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b612a78565b6001905092915050565b6000611c29611c226128b2565b8484612c41565b6001905092915050565b611c3b6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90614d95565b60405180910390fd5b8060148190555050565b611cda6128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5e90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90615103565b60405180910390fd5b611e2730600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e54612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb89190614e3b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f659190614e3b565b6040518363ffffffff1660e01b8152600401611f82929190615123565b6020604051808303816000875af1158015611fa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc59190614e3b565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061204e30611635565b6000806120596119cd565b426040518863ffffffff1660e01b815260040161207b96959493929190615187565b60606040518083038185885af1158015612099573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120be91906151e8565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612160929190614cde565b6020604051808303816000875af115801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a39190614d1c565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426019819055506001601560006101000a81548160ff021916908315150217905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6122596128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122dd90614d95565b60405180910390fd5b81601681905550806017819055505050565b60185481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124209190614cb1565b811015612592576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401612484919061468b565b602060405180830381865afa1580156124a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124c59190614e3b565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b8152600401612524919061485d565b602060405180830381865afa158015612541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125659190614cb1565b905080421061257d5783806125799061523b565b9450505b5050808061258a9061523b565b91505061238f565b508091505090565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6125f86128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267c90614d95565b60405180910390fd5b601560009054906101000a900460ff166126d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126cb906152f5565b60405180910390fd5b6000601560006101000a81548160ff021916908315150217905550565b6126f96128b2565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d90614d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90615387565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6001601060006101000a81548160ff0219169083151502179055506000612902600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611635565b9050600061291b6017548361410b90919063ffffffff16565b90506000811115612a5957612952600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614155565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156129bc57600080fd5b505af11580156129d0573d6000803e3d6000fd5b505050506129e98160185461386990919063ffffffff16565b601881905550612a17612a08603c6016546142de90919063ffffffff16565b4261386990919063ffffffff16565b6019819055507f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d81601954604051612a509291906153a7565b60405180910390a15b50506000601060006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ade90615442565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4d906154d4565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c34919061468b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca790615566565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d16906155f8565b60405180910390fd5b60008111612d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d599061568a565b60405180910390fd5b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e095750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e485750612e186119cd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e875750612e576119cd565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015612f355750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612f6d57503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612fa557503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c25780156135c157600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361315f57601560009054906101000a900460ff16156130b657613022613d9d565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82885426040518363ffffffff1660e01b815260040161307f929190614cde565b600060405180830381600087803b15801561309957600080fd5b505af11580156130ad573d6000803e3d6000fd5b5050505061315e565b6130de60646130d0601154866142de90919063ffffffff16565b61410b90919063ffffffff16565b915060006130f5838561435890919063ffffffff16565b905060006131148261310688611635565b61386990919063ffffffff16565b9050600f5481111561315b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131529061571c565b60405180910390fd5b50505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561320a5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156133bc57600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b35750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132e9906157ae565b60405180910390fd5b601560009054906101000a900460ff161561330e576000613337565b6133366064613328601254866142de90919063ffffffff16565b61410b90919063ffffffff16565b5b915060195442101580156133575750601560019054906101000a900460ff165b15613369576133646128ba565b6133bb565b600061337430611635565b905060008111156133b9576000613389611332565b90508082101580156133a85750601060009054906101000a900460ff16155b156133b7576133b681613972565b5b505b505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156134685750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156135c057600061347886611635565b9050600061348586611635565b9050600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561352b5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356190615840565b60405180910390fd5b600f54821115801561357e5750600f548111155b6135bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135b49061571c565b60405180910390fd5b50505b5b5b60006135d7838561435890919063ffffffff16565b905061362b84600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136c081600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061375583600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137f5919061468b565b60405180910390a3505050505050565b600083831115829061384d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138449190614495565b60405180910390fd5b506000838561385c9190615860565b9050809150509392505050565b60008082846138789190615894565b9050838110156138bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138b490615914565b60405180910390fd5b8091505092915050565b60005b8383905081101561396c5760008484838181106138ea576138e9614e68565b5b90506020020160208101906138ff91906145d5565b905082600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806139649061523b565b9150506138ca565b50505050565b6000600267ffffffffffffffff81111561398f5761398e6148e5565b5b6040519080825280602002602001820160405280156139bd5781602001602082028036833780820191505090505b50905030816000815181106139d5576139d4614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa09190614e3b565b81600181518110613ab457613ab3614e68565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b1b30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a78565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b7f959493929190615934565b600060405180830381600087803b158015613b9957600080fd5b505af1158015613bad573d6000803e3d6000fd5b5050505060004790506000613bcc60028361410b90919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c36573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c9f573d6000803e3d6000fd5b5050505050565b60005b8251811015613d98576000838281518110613cc757613cc6614e68565b5b602002602001015190508215613d34576001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d84565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080613d909061523b565b915050613ca9565b505050565b601560009054906101000a900460ff16156141095760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e469190614cb1565b811015614107576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401613eaa919061468b565b602060405180830381865afa158015613ec7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eeb9190614e3b565b90506000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561406557613f8c81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402181600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461386990919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016140c0919061485d565b600060405180830381600087803b1580156140da57600080fd5b505af11580156140ee573d6000803e3d6000fd5b50505050505080806140ff9061523b565b915050613db5565b505b565b600061414d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143a2565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036141c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141bb90615a00565b60405180910390fd5b6141d981600e5461435890919063ffffffff16565b600e8190555061423181600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461435890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516142d2919061468b565b60405180910390a35050565b60008083036142f05760009050614352565b600082846142fe9190614de4565b905082848261430d9190615a4f565b1461434d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161434490615af2565b60405180910390fd5b809150505b92915050565b600061439a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613805565b905092915050565b600080831182906143e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143e09190614495565b60405180910390fd5b50600083856143f89190615a4f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561443f578082015181840152602081019050614424565b60008484015250505050565b6000601f19601f8301169050919050565b600061446782614405565b6144718185614410565b9350614481818560208601614421565b61448a8161444b565b840191505092915050565b600060208201905081810360008301526144af818461445c565b905092915050565b60008115159050919050565b6144cc816144b7565b82525050565b60006020820190506144e760008301846144c3565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061452c82614501565b9050919050565b61453c81614521565b811461454757600080fd5b50565b60008135905061455981614533565b92915050565b6000819050919050565b6145728161455f565b811461457d57600080fd5b50565b60008135905061458f81614569565b92915050565b600080604083850312156145ac576145ab6144f7565b5b60006145ba8582860161454a565b92505060206145cb85828601614580565b9150509250929050565b6000602082840312156145eb576145ea6144f7565b5b60006145f98482850161454a565b91505092915050565b6000819050919050565b600061462761462261461d84614501565b614602565b614501565b9050919050565b60006146398261460c565b9050919050565b600061464b8261462e565b9050919050565b61465b81614640565b82525050565b60006020820190506146766000830184614652565b92915050565b6146858161455f565b82525050565b60006020820190506146a0600083018461467c565b92915050565b6000806000606084860312156146bf576146be6144f7565b5b60006146cd8682870161454a565b93505060206146de8682870161454a565b92505060406146ef86828701614580565b9150509250925092565b60006020828403121561470f5761470e6144f7565b5b600061471d84828501614580565b91505092915050565b600060ff82169050919050565b61473c81614726565b82525050565b60006020820190506147576000830184614733565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147825761478161475d565b5b8235905067ffffffffffffffff81111561479f5761479e614762565b5b6020830191508360208202830111156147bb576147ba614767565b5b9250929050565b6147cb816144b7565b81146147d657600080fd5b50565b6000813590506147e8816147c2565b92915050565b600080600060408486031215614807576148066144f7565b5b600084013567ffffffffffffffff811115614825576148246144fc565b5b6148318682870161476c565b93509350506020614844868287016147d9565b9150509250925092565b61485781614521565b82525050565b6000602082019050614872600083018461484e565b92915050565b60006020828403121561488e5761488d6144f7565b5b600061489c848285016147d9565b91505092915050565b600080604083850312156148bc576148bb6144f7565b5b60006148ca85828601614580565b92505060206148db85828601614580565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61491d8261444b565b810181811067ffffffffffffffff8211171561493c5761493b6148e5565b5b80604052505050565b600061494f6144ed565b905061495b8282614914565b919050565b600067ffffffffffffffff82111561497b5761497a6148e5565b5b602082029050602081019050919050565b600061499f61499a84614960565b614945565b905080838252602082019050602084028301858111156149c2576149c1614767565b5b835b818110156149eb57806149d7888261454a565b8452602084019350506020810190506149c4565b5050509392505050565b600082601f830112614a0a57614a0961475d565b5b8135614a1a84826020860161498c565b91505092915050565b600060208284031215614a3957614a386144f7565b5b600082013567ffffffffffffffff811115614a5757614a566144fc565b5b614a63848285016149f5565b91505092915050565b60008060408385031215614a8357614a826144f7565b5b6000614a918582860161454a565b9250506020614aa28582860161454a565b9150509250929050565b7f63616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b6000614ae2601783614410565b9150614aed82614aac565b602082019050919050565b60006020820190508181036000830152614b1181614ad5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5f57607f821691505b602082108103614b7257614b71614b18565b5b50919050565b7f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260008201527f652070617469656e740000000000000000000000000000000000000000000000602082015250565b6000614bd4602983614410565b9150614bdf82614b78565b604082019050919050565b60006020820190508181036000830152614c0381614bc7565b9050919050565b7f4275726e696e6720746f6b656e732069732063757272656e746c79206469736160008201527f626c656400000000000000000000000000000000000000000000000000000000602082015250565b6000614c66602483614410565b9150614c7182614c0a565b604082019050919050565b60006020820190508181036000830152614c9581614c59565b9050919050565b600081519050614cab81614569565b92915050565b600060208284031215614cc757614cc66144f7565b5b6000614cd584828501614c9c565b91505092915050565b6000604082019050614cf3600083018561484e565b614d00602083018461467c565b9392505050565b600081519050614d16816147c2565b92915050565b600060208284031215614d3257614d316144f7565b5b6000614d4084828501614d07565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d7f602083614410565b9150614d8a82614d49565b602082019050919050565b60006020820190508181036000830152614dae81614d72565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614def8261455f565b9150614dfa8361455f565b9250828202614e088161455f565b91508282048414831517614e1f57614e1e614db5565b5b5092915050565b600081519050614e3581614533565b92915050565b600060208284031215614e5157614e506144f7565b5b6000614e5f84828501614e26565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ecc81614521565b82525050565b6000614ede8383614ec3565b60208301905092915050565b6000602082019050919050565b6000614f0282614e97565b614f0c8185614ea2565b9350614f1783614eb3565b8060005b83811015614f48578151614f2f8882614ed2565b9750614f3a83614eea565b925050600181019050614f1b565b5085935050505092915050565b6000604082019050614f6a600083018561467c565b8181036020830152614f7c8184614ef7565b90509392505050565b600067ffffffffffffffff821115614fa057614f9f6148e5565b5b602082029050602081019050919050565b6000614fc4614fbf84614f85565b614945565b90508083825260208201905060208402830185811115614fe757614fe6614767565b5b835b818110156150105780614ffc8882614c9c565b845260208401935050602081019050614fe9565b5050509392505050565b600082601f83011261502f5761502e61475d565b5b815161503f848260208601614fb1565b91505092915050565b60006020828403121561505e5761505d6144f7565b5b600082015167ffffffffffffffff81111561507c5761507b6144fc565b5b6150888482850161501a565b91505092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b60006150ed602283614410565b91506150f882615091565b604082019050919050565b6000602082019050818103600083015261511c816150e0565b9050919050565b6000604082019050615138600083018561484e565b615145602083018461484e565b9392505050565b6000819050919050565b600061517161516c6151678461514c565b614602565b61455f565b9050919050565b61518181615156565b82525050565b600060c08201905061519c600083018961484e565b6151a9602083018861467c565b6151b66040830187615178565b6151c36060830186615178565b6151d0608083018561484e565b6151dd60a083018461467c565b979650505050505050565b600080600060608486031215615201576152006144f7565b5b600061520f86828701614c9c565b935050602061522086828701614c9c565b925050604061523186828701614c9c565b9150509250925092565b60006152468261455f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361527857615277614db5565b5b600182019050919050565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b60006152df602583614410565b91506152ea82615283565b604082019050919050565b6000602082019050818103600083015261530e816152d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615371602683614410565b915061537c82615315565b604082019050919050565b600060208201905081810360008301526153a081615364565b9050919050565b60006040820190506153bc600083018561467c565b6153c9602083018461467c565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061542c602483614410565b9150615437826153d0565b604082019050919050565b6000602082019050818103600083015261545b8161541f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154be602283614410565b91506154c982615462565b604082019050919050565b600060208201905081810360008301526154ed816154b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615550602583614410565b915061555b826154f4565b604082019050919050565b6000602082019050818103600083015261557f81615543565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155e2602383614410565b91506155ed82615586565b604082019050919050565b60006020820190508181036000830152615611816155d5565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615674602983614410565b915061567f82615618565b604082019050919050565b600060208201905081810360008301526156a381615667565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000615706602583614410565b9150615711826156aa565b604082019050919050565b60006020820190508181036000830152615735816156f9565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c20746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b6000615798602383614410565b91506157a38261573c565b604082019050919050565b600060208201905081810360008301526157c78161578b565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f207472616e7366657260008201527f20746f6b656e7300000000000000000000000000000000000000000000000000602082015250565b600061582a602783614410565b9150615835826157ce565b604082019050919050565b600060208201905081810360008301526158598161581d565b9050919050565b600061586b8261455f565b91506158768361455f565b925082820390508181111561588e5761588d614db5565b5b92915050565b600061589f8261455f565b91506158aa8361455f565b92508282019050808211156158c2576158c1614db5565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158fe601b83614410565b9150615909826158c8565b602082019050919050565b6000602082019050818103600083015261592d816158f1565b9050919050565b600060a082019050615949600083018861467c565b6159566020830187615178565b81810360408301526159688186614ef7565b9050615977606083018561484e565b615984608083018461467c565b9695505050505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006159ea602183614410565b91506159f58261598e565b604082019050919050565b60006020820190508181036000830152615a19816159dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a5a8261455f565b9150615a658361455f565b925082615a7557615a74615a20565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615adc602183614410565b9150615ae782615a80565b604082019050919050565b60006020820190508181036000830152615b0b81615acf565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122018e39aa5e897c6c8c7492ee3831489fa12b7704e3f5629e01bd01a5028ee466664736f6c63430008110033

Deployed Bytecode Sourcemap

11503:15979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27083:146;;;;;;;;;;;;;:::i;:::-;;15403:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12890:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19440:262;;;;;;;;;;;;;:::i;:::-;;16236:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27237:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11846:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15680:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12929:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16405:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21164:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12727:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15589:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16726:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18305:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12694:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12978:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13087:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26644:264;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11959:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25632:267;;;;;;;;;;;;;:::i;:::-;;21032:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12791:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12600:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15783:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6577:148;;;;;;;;;;;;;:::i;:::-;;19325:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17229:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17678:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6363:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15494:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25556:70;;;;;;;;;;;;;:::i;:::-;;17814:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12849:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16952:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15910:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26916:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20260:764;;;;;;;;;;;;;:::i;:::-;;12761:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18473:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13038:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16085:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25166:382;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17561:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17359:193;;;;;;;;;;;;;:::i;:::-;;6733:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27083:146;13187:12;:10;:12::i;:::-;13175:24;;:8;;;;;;;;;;;:24;;;:50;;;;13213:12;:10;:12::i;:::-;13203:22;;:6;;;;;;;;;;;:22;;;13175:50;:76;;;;13239:12;:10;:12::i;:::-;13229:22;;:6;;;;;;;;;;;:22;;;13175:76;13167:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;27130:18:::1;27151:21;27130:42;;27191:8;;;;;;;;;;;27183:26;;:38;27210:10;27183:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27119:110;27083:146::o:0;15403:83::-;15440:13;15473:5;15466:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15403:83;:::o;12890:32::-;;;;;;;;;;;;;:::o;19440:262::-;19509:26;;19490:15;:45;;19482:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;19600:13;;;;;;;;;;;19592:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;19665:29;:27;:29::i;:::-;19440:262::o;16236:161::-;16311:4;16328:39;16337:12;:10;:12::i;:::-;16351:7;16360:6;16328:8;:39::i;:::-;16385:4;16378:11;;16236:161;;;;:::o;27237:242::-;13187:12;:10;:12::i;:::-;13175:24;;:8;;;;;;;;;;;:24;;;:50;;;;13213:12;:10;:12::i;:::-;13203:22;;:6;;;;;;;;;;;:22;;;13175:50;:76;;;;13239:12;:10;:12::i;:::-;13229:22;;:6;;;;;;;;;;;:22;;;13175:76;13167:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;27315:17:::1;27342:15;27315:43;;27369:15;27387:10;:20;;;27416:4;27387:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27369:53;;27433:10;:19;;;27453:8;;;;;;;;;;;27463:7;27433:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27304:175;;27237:242:::0;:::o;11846:106::-;;;;;;;;;;;;;:::o;15680:95::-;15733:7;15760;;15753:14;;15680:95;:::o;12929:40::-;;;;:::o;16405:313::-;16503:4;16520:36;16530:6;16538:9;16549:6;16520:9;:36::i;:::-;16567:121;16576:6;16584:12;:10;:12::i;:::-;16598:89;16636:6;16598:89;;;;;;;;;;;;;;;;;:11;:19;16610:6;16598:19;;;;;;;;;;;;;;;:33;16618:12;:10;:12::i;:::-;16598:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;16567:8;:121::i;:::-;16706:4;16699:11;;16405:313;;;;;:::o;21164:137::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21286:7:::1;21268:15;:25;;;;:::i;:::-;21249:16;:44;;;;21164:137:::0;:::o;12727:27::-;;;;:::o;15589:83::-;15630:5;15655:9;;;;;;;;;;;15648:16;;15589:83;:::o;16726:218::-;16814:4;16831:83;16840:12;:10;:12::i;:::-;16854:7;16863:50;16902:10;16863:11;:25;16875:12;:10;:12::i;:::-;16863:25;;;;;;;;;;;;;;;:34;16889:7;16863:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;16831:8;:83::i;:::-;16932:4;16925:11;;16726:218;;;;:::o;18305:161::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18417:41:::1;18430:9;;18441:16;18417:12;:41::i;:::-;18305:161:::0;;;:::o;12694:26::-;;;;:::o;12978:41::-;;;;:::o;13087:38::-;;;;:::o;26644:264::-;26690:7;26711:21;26749:1;26735:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26711:40;;26772:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26762:4;26767:1;26762:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26823:4;26805;26810:1;26805:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26846:15;;;;;;;;;;;:29;;;26876:14;;26892:4;26846:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26898:1;26846:54;;;;;;;;:::i;:::-;;;;;;;;26839:61;;;26644:264;:::o;11959:38::-;;;;;;;;;;;;;:::o;25632:267::-;25674:28;25705:24;25723:4;25705:9;:24::i;:::-;25674:55;;25767:1;25744:20;:24;25740:152;;;25790:16;;;;;;;;;;;25785:96;;25827:38;25844:20;25827:16;:38::i;:::-;25785:96;25740:152;25663:236;25632:267::o;21032:124::-;21097:4;21121:18;:27;21140:7;21121:27;;;;;;;;;;;;;;;;;;;;;;;;;21114:34;;21032:124;;;:::o;12791:50::-;;;;:::o;12600:59::-;;;;:::o;15783:119::-;15849:7;15876:9;:18;15886:7;15876:18;;;;;;;;;;;;;;;;15869:25;;15783:119;;;:::o;6577:148::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6684:1:::1;6647:40;;6668:6;::::0;::::1;;;;;;;;6647:40;;;;;;;;;;;;6715:1;6698:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6577:148::o:0;19325:107::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19416:8:::1;19400:13;;:24;;;;;;;;;;;;;;;;;;19325:107:::0;:::o;17229:122::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17315:3:::1;17306:6;:12;;;;17339:4;17329:7;:14;;;;17229:122:::0;;:::o;17678:128::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17762:36:::1;17782:9;17793:4;17762:19;:36::i;:::-;17678:128:::0;:::o;6363:79::-;6401:7;6428:6;;;;;;;;;;;6421:13;;6363:79;:::o;15494:87::-;15533:13;15566:7;15559:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15494:87;:::o;25556:70::-;25603:15;:13;:15::i;:::-;25556:70::o;17814:131::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17900:37:::1;17920:9;17931:5;17900:19;:37::i;:::-;17814:131:::0;:::o;12849:34::-;;;;;;;;;;;;;:::o;16952:269::-;17045:4;17062:129;17071:12;:10;:12::i;:::-;17085:7;17094:96;17133:15;17094:96;;;;;;;;;;;;;;;;;:11;:25;17106:12;:10;:12::i;:::-;17094:25;;;;;;;;;;;;;;;:34;17120:7;17094:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;17062:8;:129::i;:::-;17209:4;17202:11;;16952:269;;;;:::o;15910:167::-;15988:4;16005:42;16015:12;:10;:12::i;:::-;16029:9;16040:6;16005:9;:42::i;:::-;16065:4;16058:11;;15910:167;;;;:::o;26916:122::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27015:15:::1;26998:14;:32;;;;26916:122:::0;:::o;20260:764::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20345:1:::1;20323:24;;:10;;;;;;;;;;;:24;;;20315:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;20396:58;20413:4;20428:15;;;;;;;;;;;20446:7;;20396:8;:58::i;:::-;20496:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20478:55;;;20542:4;20549:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20478:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20465:10;;:107;;;;;;;;;;;;;;;;;;20583:15;;;;;;;;;;;:31;;;20622:21;20667:4;20687:24;20705:4;20687:9;:24::i;:::-;20726:1;20742::::0;20758:7:::1;:5;:7::i;:::-;20780:15;20583:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20814:10;;;;;;;;;;;20807:26;;;20842:15;;;;;;;;;;;20860:14;20807:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20910:10;;;;;;;;;;;20886:6;;:35;;;;;;;;;;;;;;;;;;20961:15;20932:26;:44;;;;21012:4;20987:22;;:29;;;;;;;;;;;;;;;;;;20260:764::o:0;12761:23::-;;;;;;;;;;;;;:::o;18473:205::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18604:18:::1;18580:21;:42;;;;18656:14;18633:20;:37;;;;18473:205:::0;;:::o;13038:42::-;;;;:::o;16085:143::-;16166:7;16193:11;:18;16205:5;16193:18;;;;;;;;;;;;;;;:27;16212:7;16193:27;;;;;;;;;;;;;;;;16186:34;;16085:143;;;;:::o;25166:382::-;25216:7;25236:13;25252:1;25236:17;;25268:9;25264:254;25286:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25282:1;:24;25264:254;;;25328:14;25345:13;;;;;;;;;;;:27;;;25373:1;25345:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25328:47;;25390:14;25407:13;;;;;;;;;;;:17;;;25425:6;25407:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25390:42;;25470:9;25450:15;:29;25447:59;;25499:7;;;;;:::i;:::-;;;;25447:59;25313:205;;25308:3;;;;;:::i;:::-;;;;25264:254;;;;25535:5;25528:12;;;25166:382;:::o;17561:109::-;17622:4;17646:10;:16;17657:4;17646:16;;;;;;;;;;;;;;;;;;;;;;;;;17639:23;;17561:109;;;:::o;17359:193::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17440:22:::1;;;;;;;;;;;17432:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17539:5;17514:22;;:30;;;;;;;;;;;;;;;;;;17359:193::o:0;6733:244::-;6500:12;:10;:12::i;:::-;6490:22;;:6;;;;;;;;;;:22;;;6482:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6842:1:::1;6822:22;;:8;:22;;::::0;6814:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6932:8;6903:38;;6924:6;::::0;::::1;;;;;;;;6903:38;;;;;;;;;;;;6961:8;6952:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6733:244:::0;:::o;2705:98::-;2758:7;2785:10;2778:17;;2705:98;:::o;18686:631::-;11670:4;11651:16;;:23;;;;;;;;;;;;;;;;;;18756:14:::1;18773:21;18783:10;;;;;;;;;;;18773:9;:21::i;:::-;18756:38;;18805:20;18828:35;18842:20;;18828:9;:13;;:35;;;;:::i;:::-;18805:58;;18895:1;18877:15;:19;18874:436;;;18980:34;18986:10;;;;;;;;;;;18998:15;18980:5;:34::i;:::-;19029:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19083:44;19111:15;19083:23;;:27;;:44;;;;:::i;:::-;19057:23;:70;;;;19171:50;19191:29;19217:2;19191:21;;:25;;:29;;;;:::i;:::-;19171:15;:19;;:50;;;;:::i;:::-;19142:26;:79;;;;19241:57;19254:15;19271:26;;19241:57;;;;;;;:::i;:::-;;;;;;;;18874:436;18745:572;;11716:5:::0;11697:16;;:24;;;;;;;;;;;;;;;;;;18686:631::o;21309:337::-;21419:1;21402:19;;:5;:19;;;21394:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21500:1;21481:21;;:7;:21;;;21473:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21584:6;21554:11;:18;21566:5;21554:18;;;;;;;;;;;;;;;:27;21573:7;21554:27;;;;;;;;;;;;;;;:36;;;;21622:7;21606:32;;21615:5;21606:32;;;21631:6;21606:32;;;;;;:::i;:::-;;;;;;;;21309:337;;;:::o;21654:2950::-;21758:1;21742:18;;:4;:18;;;21734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21835:1;21821:16;;:2;:16;;;21813:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21905:1;21896:6;:10;21888:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21963:17;21995:13;22012:18;:24;22031:4;22012:24;;;;;;;;;;;;;;;;;;;;;;;;;22011:25;:52;;;;;22041:18;:22;22060:2;22041:22;;;;;;;;;;;;;;;;;;;;;;;;;22040:23;22011:52;:71;;;;;22075:7;:5;:7::i;:::-;22067:15;;:4;:15;;;;22011:71;:88;;;;;22092:7;:5;:7::i;:::-;22086:13;;:2;:13;;;;22011:88;21995:104;;22121:8;;;;;;;;;;;22113:16;;:4;:16;;;;:34;;;;;22139:8;;;;;;;;;;;22133:14;;:2;:14;;;;22113:34;:59;;;;;22167:4;22151:21;;:4;:21;;;;22113:59;:82;;;;;22190:4;22176:19;;:2;:19;;;;22113:82;22110:2180;;;22215:8;22212:2067;;;22274:10;;;;;;;;;;;22266:18;;:4;:18;;;22262:587;;22312:22;;;;;;;;;;;22309:521;;;22363:15;:13;:15::i;:::-;22405:13;;;;;;;;;;;:17;;;22423:2;22427:15;22405:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22309:521;;;22512:27;22535:3;22512:18;22523:6;;22512;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;22500:39;;22566:22;22591:21;22602:9;22591:6;:10;;:21;;;;:::i;:::-;22566:46;;22639:21;22663:33;22681:14;22663:13;22673:2;22663:9;:13::i;:::-;:17;;:33;;;;:::i;:::-;22639:57;;22748:16;;22731:13;:33;;22723:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22473:357;;22309:521;22262:587;22879:10;;;;;;;;;;;22871:18;;:4;:18;;;;:38;;;;;22899:10;;;;;;;;;;;22893:16;;:2;:16;;;22871:38;22867:951;;;22943:10;:16;22954:4;22943:16;;;;;;;;;;;;;;;;;;;;;;;;;22942:17;:36;;;;;22964:10;:14;22975:2;22964:14;;;;;;;;;;;;;;;;;;;;;;;;;22963:15;22942:36;22934:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;23062:22;;;;;;;;;;;23061:23;:58;;23118:1;23061:58;;;23087:28;23111:3;23087:19;23098:7;;23087:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;23061:58;23049:70;;23164:26;;23145:15;:45;;:62;;;;;23194:13;;;;;;;;;;;23145:62;23142:657;;;23240:29;:27;:29::i;:::-;23142:657;;;23326:28;23357:24;23375:4;23357:9;:24::i;:::-;23326:55;;23435:1;23412:20;:24;23408:364;;;23503:19;23525:15;:13;:15::i;:::-;23503:37;;23603:11;23579:20;:35;;:56;;;;;23619:16;;;;;;;;;;;23618:17;23579:56;23575:166;;;23676:29;23693:11;23676:16;:29::i;:::-;23575:166;23438:334;23408:364;23299:500;23142:657;22867:951;23848:10;;;;;;;;;;;23840:18;;:4;:18;;;;:38;;;;;23868:10;;;;;;;;;;;23862:16;;:2;:16;;;;23840:38;23836:428;;;23903:19;23925:15;23935:4;23925:9;:15::i;:::-;23903:37;;23963:17;23983:13;23993:2;23983:9;:13::i;:::-;23963:33;;24028:10;:16;24039:4;24028:16;;;;;;;;;;;;;;;;;;;;;;;;;24027:17;:36;;;;;24049:10;:14;24060:2;24049:14;;;;;;;;;;;;;;;;;;;;;;;;;24048:15;24027:36;24019:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24153:16;;24138:11;:31;;:64;;;;;24186:16;;24173:9;:29;;24138:64;24130:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;23880:384;;23836:428;22212:2067;22110:2180;24307:22;24332:21;24343:9;24332:6;:10;;:21;;;;:::i;:::-;24307:46;;24382:27;24402:6;24382:9;:15;24392:4;24382:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;24364:9;:15;24374:4;24364:15;;;;;;;;;;;;;;;:45;;;;24436:33;24454:14;24436:9;:13;24446:2;24436:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;24420:9;:13;24430:2;24420:13;;;;;;;;;;;;;;;:49;;;;24507:39;24536:9;24507;:24;24525:4;24507:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;24480:9;:24;24498:4;24480:24;;;;;;;;;;;;;;;:66;;;;24577:2;24562:34;;24571:4;24562:34;;;24581:14;24562:34;;;;;;:::i;:::-;;;;;;;;21723:2881;;;21654:2950;;;:::o;1177:192::-;1263:7;1296:1;1291;:6;;1299:12;1283:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1323:9;1339:1;1335;:5;;;;:::i;:::-;1323:17;;1360:1;1353:8;;;1177:192;;;;;:::o;844:181::-;902:7;922:9;938:1;934;:5;;;;:::i;:::-;922:17;;963:1;958;:6;;950:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1016:1;1009:8;;;844:181;;;;:::o;19710:236::-;19797:9;19792:147;19816:9;;:16;;19812:1;:20;19792:147;;;19854:12;19869:9;;19879:1;19869:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19854:27;;19923:4;19896:18;:24;19915:4;19896:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19839:100;19834:3;;;;;:::i;:::-;;;;19792:147;;;;19710:236;;;:::o;25907:729::-;26033:21;26071:1;26057:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26033:40;;26102:4;26084;26089:1;26084:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26128:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26118:4;26123:1;26118:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26161:62;26178:4;26193:15;;;;;;;;;;;26211:11;26161:8;:62::i;:::-;26234:15;;;;;;;;;;;:66;;;26315:11;26341:1;26357:4;26384;26404:15;26234:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26443:18;26464:21;26443:42;;26496:17;26516;26531:1;26516:10;:14;;:17;;;;:::i;:::-;26496:37;;26554:6;;;;;;;;;;;26546:24;;:35;26571:9;26546:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26600:6;;;;;;;;;;;26592:24;;:35;26617:9;26592:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25962:674;;;25907:729;:::o;17953:346::-;18048:9;18043:249;18067:9;:16;18063:1;:20;18043:249;;;18105:12;18120:9;18130:1;18120:12;;;;;;;;:::i;:::-;;;;;;;;18105:27;;18150:7;18147:134;;;18197:4;18178:10;:16;18189:4;18178:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;18147:134;;;18249:10;:16;18260:4;18249:16;;;;;;;;;;;;;;;;18242:23;;;;;;;;;;;18147:134;18090:202;18085:3;;;;;:::i;:::-;;;;18043:249;;;;17953:346;;:::o;24612:546::-;24659:22;;;;;;;;;;;24656:495;;;24702:9;24698:442;24720:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24716:1;:24;24698:442;;;24766:14;24783:13;;;;;;;;;;;:27;;;24811:1;24783:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24766:47;;24832:14;24849:9;:17;24859:6;24849:17;;;;;;;;;;;;;;;;24832:34;;24897:1;24888:6;:10;24885:193;;;24943:29;24965:6;24943:9;:17;24953:6;24943:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;24923:9;:17;24933:6;24923:17;;;;;;;;;;;;;;;:49;;;;25022:36;25051:6;25022:9;:24;25040:4;25022:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;24995:9;:24;25013:4;24995:24;;;;;;;;;;;;;;;:63;;;;24885:193;25096:13;;;;;;;;;;;:20;;;25117:6;25096:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24747:393;;24742:3;;;;;:::i;:::-;;;;24698:442;;;;24656:495;24612:546::o;1856:132::-;1914:7;1941:39;1945:1;1948;1941:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1934:46;;1856:132;;;;:::o;19954:294::-;20048:1;20029:21;;:7;:21;;;20021:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20109:18;20121:5;20109:7;;:11;;:18;;;;:::i;:::-;20099:7;:28;;;;20159:29;20182:5;20159:9;:18;20169:7;20159:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;20138:9;:18;20148:7;20138:18;;;;;;;;;;;;;;;:50;;;;20230:1;20204:36;;20213:7;20204:36;;;20234:5;20204:36;;;;;;:::i;:::-;;;;;;;;19954:294;;:::o;1377:471::-;1435:7;1685:1;1680;:6;1676:47;;1710:1;1703:8;;;;1676:47;1735:9;1751:1;1747;:5;;;;:::i;:::-;1735:17;;1780:1;1775;1771;:5;;;;:::i;:::-;:10;1763:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1839:1;1832:8;;;1377:471;;;;;:::o;1033:136::-;1091:7;1118:43;1122:1;1125;1118:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1111:50;;1033:136;;;;:::o;1996:278::-;2082:7;2114:1;2110;:5;2117:12;2102:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2141:9;2157:1;2153;:5;;;;:::i;:::-;2141:17;;2265:1;2258:8;;;1996:278;;;;;:::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;1349:90::-;1383:7;1426:5;1419:13;1412:21;1401:32;;1349:90;;;:::o;1445:109::-;1526:21;1541:5;1526:21;:::i;:::-;1521:3;1514:34;1445:109;;:::o;1560:210::-;1647:4;1685:2;1674:9;1670:18;1662:26;;1698:65;1760:1;1749:9;1745:17;1736:6;1698:65;:::i;:::-;1560:210;;;;:::o;1776:75::-;1809:6;1842:2;1836:9;1826:19;;1776:75;:::o;1857:117::-;1966:1;1963;1956:12;1980:117;2089:1;2086;2079:12;2103:126;2140:7;2180:42;2173:5;2169:54;2158:65;;2103:126;;;:::o;2235:96::-;2272:7;2301:24;2319:5;2301:24;:::i;:::-;2290:35;;2235:96;;;:::o;2337:122::-;2410:24;2428:5;2410:24;:::i;:::-;2403:5;2400:35;2390:63;;2449:1;2446;2439:12;2390:63;2337:122;:::o;2465:139::-;2511:5;2549:6;2536:20;2527:29;;2565:33;2592:5;2565:33;:::i;:::-;2465:139;;;;:::o;2610:77::-;2647:7;2676:5;2665:16;;2610:77;;;:::o;2693:122::-;2766:24;2784:5;2766:24;:::i;:::-;2759:5;2756:35;2746:63;;2805:1;2802;2795:12;2746:63;2693:122;:::o;2821:139::-;2867:5;2905:6;2892:20;2883:29;;2921:33;2948:5;2921:33;:::i;:::-;2821:139;;;;:::o;2966:474::-;3034:6;3042;3091:2;3079:9;3070:7;3066:23;3062:32;3059:119;;;3097:79;;:::i;:::-;3059:119;3217:1;3242:53;3287:7;3278:6;3267:9;3263:22;3242:53;:::i;:::-;3232:63;;3188:117;3344:2;3370:53;3415:7;3406:6;3395:9;3391:22;3370:53;:::i;:::-;3360:63;;3315:118;2966:474;;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::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:329::-;5790:6;5839:2;5827:9;5818:7;5814:23;5810:32;5807:119;;;5845:79;;:::i;:::-;5807:119;5965:1;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5936:117;5731:329;;;;:::o;6066:86::-;6101:7;6141:4;6134:5;6130:16;6119:27;;6066:86;;;:::o;6158:112::-;6241:22;6257:5;6241:22;:::i;:::-;6236:3;6229:35;6158:112;;:::o;6276:214::-;6365:4;6403:2;6392:9;6388:18;6380:26;;6416:67;6480:1;6469:9;6465:17;6456:6;6416:67;:::i;:::-;6276:214;;;;:::o;6496:117::-;6605:1;6602;6595:12;6619:117;6728:1;6725;6718:12;6742:117;6851:1;6848;6841:12;6882:568;6955:8;6965:6;7015:3;7008:4;7000:6;6996:17;6992:27;6982:122;;7023:79;;:::i;:::-;6982:122;7136:6;7123:20;7113:30;;7166:18;7158:6;7155:30;7152:117;;;7188:79;;:::i;:::-;7152:117;7302:4;7294:6;7290:17;7278:29;;7356:3;7348:4;7340:6;7336:17;7326:8;7322:32;7319:41;7316:128;;;7363:79;;:::i;:::-;7316:128;6882:568;;;;;:::o;7456:116::-;7526:21;7541:5;7526:21;:::i;:::-;7519:5;7516:32;7506:60;;7562:1;7559;7552:12;7506:60;7456:116;:::o;7578:133::-;7621:5;7659:6;7646:20;7637:29;;7675:30;7699:5;7675:30;:::i;:::-;7578:133;;;;:::o;7717:698::-;7809:6;7817;7825;7874:2;7862:9;7853:7;7849:23;7845:32;7842:119;;;7880:79;;:::i;:::-;7842:119;8028:1;8017:9;8013:17;8000:31;8058:18;8050:6;8047:30;8044:117;;;8080:79;;:::i;:::-;8044:117;8193:80;8265:7;8256:6;8245:9;8241:22;8193:80;:::i;:::-;8175:98;;;;7971:312;8322:2;8348:50;8390:7;8381:6;8370:9;8366:22;8348:50;:::i;:::-;8338:60;;8293:115;7717:698;;;;;:::o;8421:118::-;8508:24;8526:5;8508:24;:::i;:::-;8503:3;8496:37;8421:118;;:::o;8545:222::-;8638:4;8676:2;8665:9;8661:18;8653:26;;8689:71;8757:1;8746:9;8742:17;8733:6;8689:71;:::i;:::-;8545:222;;;;:::o;8773:323::-;8829:6;8878:2;8866:9;8857:7;8853:23;8849:32;8846:119;;;8884:79;;:::i;:::-;8846:119;9004:1;9029:50;9071:7;9062:6;9051:9;9047:22;9029:50;:::i;:::-;9019:60;;8975:114;8773:323;;;;:::o;9102:474::-;9170:6;9178;9227:2;9215:9;9206:7;9202:23;9198:32;9195:119;;;9233:79;;:::i;:::-;9195:119;9353:1;9378:53;9423:7;9414:6;9403:9;9399:22;9378:53;:::i;:::-;9368:63;;9324:117;9480:2;9506:53;9551:7;9542:6;9531:9;9527:22;9506:53;:::i;:::-;9496:63;;9451:118;9102:474;;;;;:::o;9582:180::-;9630:77;9627:1;9620:88;9727:4;9724:1;9717:15;9751:4;9748:1;9741:15;9768:281;9851:27;9873:4;9851:27;:::i;:::-;9843:6;9839:40;9981:6;9969:10;9966:22;9945:18;9933:10;9930:34;9927:62;9924:88;;;9992:18;;:::i;:::-;9924:88;10032:10;10028:2;10021:22;9811:238;9768:281;;:::o;10055:129::-;10089:6;10116:20;;:::i;:::-;10106:30;;10145:33;10173:4;10165:6;10145:33;:::i;:::-;10055:129;;;:::o;10190:311::-;10267:4;10357:18;10349:6;10346:30;10343:56;;;10379:18;;:::i;:::-;10343:56;10429:4;10421:6;10417:17;10409:25;;10489:4;10483;10479:15;10471:23;;10190:311;;;:::o;10524:710::-;10620:5;10645:81;10661:64;10718:6;10661:64;:::i;:::-;10645:81;:::i;:::-;10636:90;;10746:5;10775:6;10768:5;10761:21;10809:4;10802:5;10798:16;10791:23;;10862:4;10854:6;10850:17;10842:6;10838:30;10891:3;10883:6;10880:15;10877:122;;;10910:79;;:::i;:::-;10877:122;11025:6;11008:220;11042:6;11037:3;11034:15;11008:220;;;11117:3;11146:37;11179:3;11167:10;11146:37;:::i;:::-;11141:3;11134:50;11213:4;11208:3;11204:14;11197:21;;11084:144;11068:4;11063:3;11059:14;11052:21;;11008:220;;;11012:21;10626:608;;10524:710;;;;;:::o;11257:370::-;11328:5;11377:3;11370:4;11362:6;11358:17;11354:27;11344:122;;11385:79;;:::i;:::-;11344:122;11502:6;11489:20;11527:94;11617:3;11609:6;11602:4;11594:6;11590:17;11527:94;:::i;:::-;11518:103;;11334:293;11257:370;;;;:::o;11633:539::-;11717:6;11766:2;11754:9;11745:7;11741:23;11737:32;11734:119;;;11772:79;;:::i;:::-;11734:119;11920:1;11909:9;11905:17;11892:31;11950:18;11942:6;11939:30;11936:117;;;11972:79;;:::i;:::-;11936:117;12077:78;12147:7;12138:6;12127:9;12123:22;12077:78;:::i;:::-;12067:88;;11863:302;11633:539;;;;:::o;12178:474::-;12246:6;12254;12303:2;12291:9;12282:7;12278:23;12274:32;12271:119;;;12309:79;;:::i;:::-;12271:119;12429:1;12454:53;12499:7;12490:6;12479:9;12475:22;12454:53;:::i;:::-;12444:63;;12400:117;12556:2;12582:53;12627:7;12618:6;12607:9;12603:22;12582:53;:::i;:::-;12572:63;;12527:118;12178:474;;;;;:::o;12658:173::-;12798:25;12794:1;12786:6;12782:14;12775:49;12658:173;:::o;12837:366::-;12979:3;13000:67;13064:2;13059:3;13000:67;:::i;:::-;12993:74;;13076:93;13165:3;13076:93;:::i;:::-;13194:2;13189:3;13185:12;13178:19;;12837:366;;;:::o;13209:419::-;13375:4;13413:2;13402:9;13398:18;13390:26;;13462:9;13456:4;13452:20;13448:1;13437:9;13433:17;13426:47;13490:131;13616:4;13490:131;:::i;:::-;13482:139;;13209:419;;;:::o;13634:180::-;13682:77;13679:1;13672:88;13779:4;13776:1;13769:15;13803:4;13800:1;13793:15;13820:320;13864:6;13901:1;13895:4;13891:12;13881:22;;13948:1;13942:4;13938:12;13969:18;13959:81;;14025:4;14017:6;14013:17;14003:27;;13959:81;14087:2;14079:6;14076:14;14056:18;14053:38;14050:84;;14106:18;;:::i;:::-;14050:84;13871:269;13820:320;;;:::o;14146:228::-;14286:34;14282:1;14274:6;14270:14;14263:58;14355:11;14350:2;14342:6;14338:15;14331:36;14146:228;:::o;14380:366::-;14522:3;14543:67;14607:2;14602:3;14543:67;:::i;:::-;14536:74;;14619:93;14708:3;14619:93;:::i;:::-;14737:2;14732:3;14728:12;14721:19;;14380:366;;;:::o;14752:419::-;14918:4;14956:2;14945:9;14941:18;14933:26;;15005:9;14999:4;14995:20;14991:1;14980:9;14976:17;14969:47;15033:131;15159:4;15033:131;:::i;:::-;15025:139;;14752:419;;;:::o;15177:223::-;15317:34;15313:1;15305:6;15301:14;15294:58;15386:6;15381:2;15373:6;15369:15;15362:31;15177:223;:::o;15406:366::-;15548:3;15569:67;15633:2;15628:3;15569:67;:::i;:::-;15562:74;;15645:93;15734:3;15645:93;:::i;:::-;15763:2;15758:3;15754:12;15747:19;;15406:366;;;:::o;15778:419::-;15944:4;15982:2;15971:9;15967:18;15959:26;;16031:9;16025:4;16021:20;16017:1;16006:9;16002:17;15995:47;16059:131;16185:4;16059:131;:::i;:::-;16051:139;;15778:419;;;:::o;16203:143::-;16260:5;16291:6;16285:13;16276:22;;16307:33;16334:5;16307:33;:::i;:::-;16203:143;;;;:::o;16352:351::-;16422:6;16471:2;16459:9;16450:7;16446:23;16442:32;16439:119;;;16477:79;;:::i;:::-;16439:119;16597:1;16622:64;16678:7;16669:6;16658:9;16654:22;16622:64;:::i;:::-;16612:74;;16568:128;16352:351;;;;:::o;16709:332::-;16830:4;16868:2;16857:9;16853:18;16845:26;;16881:71;16949:1;16938:9;16934:17;16925:6;16881:71;:::i;:::-;16962:72;17030:2;17019:9;17015:18;17006:6;16962:72;:::i;:::-;16709:332;;;;;:::o;17047:137::-;17101:5;17132:6;17126:13;17117:22;;17148:30;17172:5;17148:30;:::i;:::-;17047:137;;;;:::o;17190:345::-;17257:6;17306:2;17294:9;17285:7;17281:23;17277:32;17274:119;;;17312:79;;:::i;:::-;17274:119;17432:1;17457:61;17510:7;17501:6;17490:9;17486:22;17457:61;:::i;:::-;17447:71;;17403:125;17190:345;;;;:::o;17541:182::-;17681:34;17677:1;17669:6;17665:14;17658:58;17541:182;:::o;17729:366::-;17871:3;17892:67;17956:2;17951:3;17892:67;:::i;:::-;17885:74;;17968:93;18057:3;17968:93;:::i;:::-;18086:2;18081:3;18077:12;18070:19;;17729:366;;;:::o;18101:419::-;18267:4;18305:2;18294:9;18290:18;18282:26;;18354:9;18348:4;18344:20;18340:1;18329:9;18325:17;18318:47;18382:131;18508:4;18382:131;:::i;:::-;18374:139;;18101:419;;;:::o;18526:180::-;18574:77;18571:1;18564:88;18671:4;18668:1;18661:15;18695:4;18692:1;18685:15;18712:410;18752:7;18775:20;18793:1;18775:20;:::i;:::-;18770:25;;18809:20;18827:1;18809:20;:::i;:::-;18804:25;;18864:1;18861;18857:9;18886:30;18904:11;18886:30;:::i;:::-;18875:41;;19065:1;19056:7;19052:15;19049:1;19046:22;19026:1;19019:9;18999:83;18976:139;;19095:18;;:::i;:::-;18976:139;18760:362;18712:410;;;;:::o;19128:143::-;19185:5;19216:6;19210:13;19201:22;;19232:33;19259:5;19232:33;:::i;:::-;19128:143;;;;:::o;19277:351::-;19347:6;19396:2;19384:9;19375:7;19371:23;19367:32;19364:119;;;19402:79;;:::i;:::-;19364:119;19522:1;19547:64;19603:7;19594:6;19583:9;19579:22;19547:64;:::i;:::-;19537:74;;19493:128;19277:351;;;;:::o;19634:180::-;19682:77;19679:1;19672:88;19779:4;19776:1;19769:15;19803:4;19800:1;19793:15;19820:114;19887:6;19921:5;19915:12;19905:22;;19820:114;;;:::o;19940:184::-;20039:11;20073:6;20068:3;20061:19;20113:4;20108:3;20104:14;20089:29;;19940:184;;;;:::o;20130:132::-;20197:4;20220:3;20212:11;;20250:4;20245:3;20241:14;20233:22;;20130:132;;;:::o;20268:108::-;20345:24;20363:5;20345:24;:::i;:::-;20340:3;20333:37;20268:108;;:::o;20382:179::-;20451:10;20472:46;20514:3;20506:6;20472:46;:::i;:::-;20550:4;20545:3;20541:14;20527:28;;20382:179;;;;:::o;20567:113::-;20637:4;20669;20664:3;20660:14;20652:22;;20567:113;;;:::o;20716:732::-;20835:3;20864:54;20912:5;20864:54;:::i;:::-;20934:86;21013:6;21008:3;20934:86;:::i;:::-;20927:93;;21044:56;21094:5;21044:56;:::i;:::-;21123:7;21154:1;21139:284;21164:6;21161:1;21158:13;21139:284;;;21240:6;21234:13;21267:63;21326:3;21311:13;21267:63;:::i;:::-;21260:70;;21353:60;21406:6;21353:60;:::i;:::-;21343:70;;21199:224;21186:1;21183;21179:9;21174:14;;21139:284;;;21143:14;21439:3;21432:10;;20840:608;;;20716:732;;;;:::o;21454:483::-;21625:4;21663:2;21652:9;21648:18;21640:26;;21676:71;21744:1;21733:9;21729:17;21720:6;21676:71;:::i;:::-;21794:9;21788:4;21784:20;21779:2;21768:9;21764:18;21757:48;21822:108;21925:4;21916:6;21822:108;:::i;:::-;21814:116;;21454:483;;;;;:::o;21943:311::-;22020:4;22110:18;22102:6;22099:30;22096:56;;;22132:18;;:::i;:::-;22096:56;22182:4;22174:6;22170:17;22162:25;;22242:4;22236;22232:15;22224:23;;21943:311;;;:::o;22277:732::-;22384:5;22409:81;22425:64;22482:6;22425:64;:::i;:::-;22409:81;:::i;:::-;22400:90;;22510:5;22539:6;22532:5;22525:21;22573:4;22566:5;22562:16;22555:23;;22626:4;22618:6;22614:17;22606:6;22602:30;22655:3;22647:6;22644:15;22641:122;;;22674:79;;:::i;:::-;22641:122;22789:6;22772:231;22806:6;22801:3;22798:15;22772:231;;;22881:3;22910:48;22954:3;22942:10;22910:48;:::i;:::-;22905:3;22898:61;22988:4;22983:3;22979:14;22972:21;;22848:155;22832:4;22827:3;22823:14;22816:21;;22772:231;;;22776:21;22390:619;;22277:732;;;;;:::o;23032:385::-;23114:5;23163:3;23156:4;23148:6;23144:17;23140:27;23130:122;;23171:79;;:::i;:::-;23130:122;23281:6;23275:13;23306:105;23407:3;23399:6;23392:4;23384:6;23380:17;23306:105;:::i;:::-;23297:114;;23120:297;23032:385;;;;:::o;23423:554::-;23518:6;23567:2;23555:9;23546:7;23542:23;23538:32;23535:119;;;23573:79;;:::i;:::-;23535:119;23714:1;23703:9;23699:17;23693:24;23744:18;23736:6;23733:30;23730:117;;;23766:79;;:::i;:::-;23730:117;23871:89;23952:7;23943:6;23932:9;23928:22;23871:89;:::i;:::-;23861:99;;23664:306;23423:554;;;;:::o;23983:221::-;24123:34;24119:1;24111:6;24107:14;24100:58;24192:4;24187:2;24179:6;24175:15;24168:29;23983:221;:::o;24210:366::-;24352:3;24373:67;24437:2;24432:3;24373:67;:::i;:::-;24366:74;;24449:93;24538:3;24449:93;:::i;:::-;24567:2;24562:3;24558:12;24551:19;;24210:366;;;:::o;24582:419::-;24748:4;24786:2;24775:9;24771:18;24763:26;;24835:9;24829:4;24825:20;24821:1;24810:9;24806:17;24799:47;24863:131;24989:4;24863:131;:::i;:::-;24855:139;;24582:419;;;:::o;25007:332::-;25128:4;25166:2;25155:9;25151:18;25143:26;;25179:71;25247:1;25236:9;25232:17;25223:6;25179:71;:::i;:::-;25260:72;25328:2;25317:9;25313:18;25304:6;25260:72;:::i;:::-;25007:332;;;;;:::o;25345:85::-;25390:7;25419:5;25408:16;;25345:85;;;:::o;25436:158::-;25494:9;25527:61;25545:42;25554:32;25580:5;25554:32;:::i;:::-;25545:42;:::i;:::-;25527:61;:::i;:::-;25514:74;;25436:158;;;:::o;25600:147::-;25695:45;25734:5;25695:45;:::i;:::-;25690:3;25683:58;25600:147;;:::o;25753:807::-;26002:4;26040:3;26029:9;26025:19;26017:27;;26054:71;26122:1;26111:9;26107:17;26098:6;26054:71;:::i;:::-;26135:72;26203:2;26192:9;26188:18;26179:6;26135:72;:::i;:::-;26217:80;26293:2;26282:9;26278:18;26269:6;26217:80;:::i;:::-;26307;26383:2;26372:9;26368:18;26359:6;26307:80;:::i;:::-;26397:73;26465:3;26454:9;26450:19;26441:6;26397:73;:::i;:::-;26480;26548:3;26537:9;26533:19;26524:6;26480:73;:::i;:::-;25753:807;;;;;;;;;:::o;26566:663::-;26654:6;26662;26670;26719:2;26707:9;26698:7;26694:23;26690:32;26687:119;;;26725:79;;:::i;:::-;26687:119;26845:1;26870:64;26926:7;26917:6;26906:9;26902:22;26870:64;:::i;:::-;26860:74;;26816:128;26983:2;27009:64;27065:7;27056:6;27045:9;27041:22;27009:64;:::i;:::-;26999:74;;26954:129;27122:2;27148:64;27204:7;27195:6;27184:9;27180:22;27148:64;:::i;:::-;27138:74;;27093:129;26566:663;;;;;:::o;27235:233::-;27274:3;27297:24;27315:5;27297:24;:::i;:::-;27288:33;;27343:66;27336:5;27333:77;27330:103;;27413:18;;:::i;:::-;27330:103;27460:1;27453:5;27449:13;27442:20;;27235:233;;;:::o;27474:224::-;27614:34;27610:1;27602:6;27598:14;27591:58;27683:7;27678:2;27670:6;27666:15;27659:32;27474:224;:::o;27704:366::-;27846:3;27867:67;27931:2;27926:3;27867:67;:::i;:::-;27860:74;;27943:93;28032:3;27943:93;:::i;:::-;28061:2;28056:3;28052:12;28045:19;;27704:366;;;:::o;28076:419::-;28242:4;28280:2;28269:9;28265:18;28257:26;;28329:9;28323:4;28319:20;28315:1;28304:9;28300:17;28293:47;28357:131;28483:4;28357:131;:::i;:::-;28349:139;;28076:419;;;:::o;28501:225::-;28641:34;28637:1;28629:6;28625:14;28618:58;28710:8;28705:2;28697:6;28693:15;28686:33;28501:225;:::o;28732:366::-;28874:3;28895:67;28959:2;28954:3;28895:67;:::i;:::-;28888:74;;28971:93;29060:3;28971:93;:::i;:::-;29089:2;29084:3;29080:12;29073:19;;28732:366;;;:::o;29104:419::-;29270:4;29308:2;29297:9;29293:18;29285:26;;29357:9;29351:4;29347:20;29343:1;29332:9;29328:17;29321:47;29385:131;29511:4;29385:131;:::i;:::-;29377:139;;29104:419;;;:::o;29529:332::-;29650:4;29688:2;29677:9;29673:18;29665:26;;29701:71;29769:1;29758:9;29754:17;29745:6;29701:71;:::i;:::-;29782:72;29850:2;29839:9;29835:18;29826:6;29782:72;:::i;:::-;29529:332;;;;;:::o;29867:223::-;30007:34;30003:1;29995:6;29991:14;29984:58;30076:6;30071:2;30063:6;30059:15;30052:31;29867:223;:::o;30096:366::-;30238:3;30259:67;30323:2;30318:3;30259:67;:::i;:::-;30252:74;;30335:93;30424:3;30335:93;:::i;:::-;30453:2;30448:3;30444:12;30437:19;;30096:366;;;:::o;30468:419::-;30634:4;30672:2;30661:9;30657:18;30649:26;;30721:9;30715:4;30711:20;30707:1;30696:9;30692:17;30685:47;30749:131;30875:4;30749:131;:::i;:::-;30741:139;;30468:419;;;:::o;30893:221::-;31033:34;31029:1;31021:6;31017:14;31010:58;31102:4;31097:2;31089:6;31085:15;31078:29;30893:221;:::o;31120:366::-;31262:3;31283:67;31347:2;31342:3;31283:67;:::i;:::-;31276:74;;31359:93;31448:3;31359:93;:::i;:::-;31477:2;31472:3;31468:12;31461:19;;31120:366;;;:::o;31492:419::-;31658:4;31696:2;31685:9;31681:18;31673:26;;31745:9;31739:4;31735:20;31731:1;31720:9;31716:17;31709:47;31773:131;31899:4;31773:131;:::i;:::-;31765:139;;31492:419;;;:::o;31917:224::-;32057:34;32053:1;32045:6;32041:14;32034:58;32126:7;32121:2;32113:6;32109:15;32102:32;31917:224;:::o;32147:366::-;32289:3;32310:67;32374:2;32369:3;32310:67;:::i;:::-;32303:74;;32386:93;32475:3;32386:93;:::i;:::-;32504:2;32499:3;32495:12;32488:19;;32147:366;;;:::o;32519:419::-;32685:4;32723:2;32712:9;32708:18;32700:26;;32772:9;32766:4;32762:20;32758:1;32747:9;32743:17;32736:47;32800:131;32926:4;32800:131;:::i;:::-;32792:139;;32519:419;;;:::o;32944:222::-;33084:34;33080:1;33072:6;33068:14;33061:58;33153:5;33148:2;33140:6;33136:15;33129:30;32944:222;:::o;33172:366::-;33314:3;33335:67;33399:2;33394:3;33335:67;:::i;:::-;33328:74;;33411:93;33500:3;33411:93;:::i;:::-;33529:2;33524:3;33520:12;33513:19;;33172:366;;;:::o;33544:419::-;33710:4;33748:2;33737:9;33733:18;33725:26;;33797:9;33791:4;33787:20;33783:1;33772:9;33768:17;33761:47;33825:131;33951:4;33825:131;:::i;:::-;33817:139;;33544:419;;;:::o;33969:228::-;34109:34;34105:1;34097:6;34093:14;34086:58;34178:11;34173:2;34165:6;34161:15;34154:36;33969:228;:::o;34203:366::-;34345:3;34366:67;34430:2;34425:3;34366:67;:::i;:::-;34359:74;;34442:93;34531:3;34442:93;:::i;:::-;34560:2;34555:3;34551:12;34544:19;;34203:366;;;:::o;34575:419::-;34741:4;34779:2;34768:9;34764:18;34756:26;;34828:9;34822:4;34818:20;34814:1;34803:9;34799:17;34792:47;34856:131;34982:4;34856:131;:::i;:::-;34848:139;;34575:419;;;:::o;35000:224::-;35140:34;35136:1;35128:6;35124:14;35117:58;35209:7;35204:2;35196:6;35192:15;35185:32;35000:224;:::o;35230:366::-;35372:3;35393:67;35457:2;35452:3;35393:67;:::i;:::-;35386:74;;35469:93;35558:3;35469:93;:::i;:::-;35587:2;35582:3;35578:12;35571:19;;35230:366;;;:::o;35602:419::-;35768:4;35806:2;35795:9;35791:18;35783:26;;35855:9;35849:4;35845:20;35841:1;35830:9;35826:17;35819:47;35883:131;36009:4;35883:131;:::i;:::-;35875:139;;35602:419;;;:::o;36027:222::-;36167:34;36163:1;36155:6;36151:14;36144:58;36236:5;36231:2;36223:6;36219:15;36212:30;36027:222;:::o;36255:366::-;36397:3;36418:67;36482:2;36477:3;36418:67;:::i;:::-;36411:74;;36494:93;36583:3;36494:93;:::i;:::-;36612:2;36607:3;36603:12;36596:19;;36255:366;;;:::o;36627:419::-;36793:4;36831:2;36820:9;36816:18;36808:26;;36880:9;36874:4;36870:20;36866:1;36855:9;36851:17;36844:47;36908:131;37034:4;36908:131;:::i;:::-;36900:139;;36627:419;;;:::o;37052:226::-;37192:34;37188:1;37180:6;37176:14;37169:58;37261:9;37256:2;37248:6;37244:15;37237:34;37052:226;:::o;37284:366::-;37426:3;37447:67;37511:2;37506:3;37447:67;:::i;:::-;37440:74;;37523:93;37612:3;37523:93;:::i;:::-;37641:2;37636:3;37632:12;37625:19;;37284:366;;;:::o;37656:419::-;37822:4;37860:2;37849:9;37845:18;37837:26;;37909:9;37903:4;37899:20;37895:1;37884:9;37880:17;37873:47;37937:131;38063:4;37937:131;:::i;:::-;37929:139;;37656:419;;;:::o;38081:194::-;38121:4;38141:20;38159:1;38141:20;:::i;:::-;38136:25;;38175:20;38193:1;38175:20;:::i;:::-;38170:25;;38219:1;38216;38212:9;38204:17;;38243:1;38237:4;38234:11;38231:37;;;38248:18;;:::i;:::-;38231:37;38081:194;;;;:::o;38281:191::-;38321:3;38340:20;38358:1;38340:20;:::i;:::-;38335:25;;38374:20;38392:1;38374:20;:::i;:::-;38369:25;;38417:1;38414;38410:9;38403:16;;38438:3;38435:1;38432:10;38429:36;;;38445:18;;:::i;:::-;38429:36;38281:191;;;;:::o;38478:177::-;38618:29;38614:1;38606:6;38602:14;38595:53;38478:177;:::o;38661:366::-;38803:3;38824:67;38888:2;38883:3;38824:67;:::i;:::-;38817:74;;38900:93;38989:3;38900:93;:::i;:::-;39018:2;39013:3;39009:12;39002:19;;38661:366;;;:::o;39033:419::-;39199:4;39237:2;39226:9;39222:18;39214:26;;39286:9;39280:4;39276:20;39272:1;39261:9;39257:17;39250:47;39314:131;39440:4;39314:131;:::i;:::-;39306:139;;39033:419;;;:::o;39458:831::-;39721:4;39759:3;39748:9;39744:19;39736:27;;39773:71;39841:1;39830:9;39826:17;39817:6;39773:71;:::i;:::-;39854:80;39930:2;39919:9;39915:18;39906:6;39854:80;:::i;:::-;39981:9;39975:4;39971:20;39966:2;39955:9;39951:18;39944:48;40009:108;40112:4;40103:6;40009:108;:::i;:::-;40001:116;;40127:72;40195:2;40184:9;40180:18;40171:6;40127:72;:::i;:::-;40209:73;40277:3;40266:9;40262:19;40253:6;40209:73;:::i;:::-;39458:831;;;;;;;;:::o;40295:220::-;40435:34;40431:1;40423:6;40419:14;40412:58;40504:3;40499:2;40491:6;40487:15;40480:28;40295:220;:::o;40521:366::-;40663:3;40684:67;40748:2;40743:3;40684:67;:::i;:::-;40677:74;;40760:93;40849:3;40760:93;:::i;:::-;40878:2;40873:3;40869:12;40862:19;;40521:366;;;:::o;40893:419::-;41059:4;41097:2;41086:9;41082:18;41074:26;;41146:9;41140:4;41136:20;41132:1;41121:9;41117:17;41110:47;41174:131;41300:4;41174:131;:::i;:::-;41166:139;;40893:419;;;:::o;41318:180::-;41366:77;41363:1;41356:88;41463:4;41460:1;41453:15;41487:4;41484:1;41477:15;41504:185;41544:1;41561:20;41579:1;41561:20;:::i;:::-;41556:25;;41595:20;41613:1;41595:20;:::i;:::-;41590:25;;41634:1;41624:35;;41639:18;;:::i;:::-;41624:35;41681:1;41678;41674:9;41669:14;;41504:185;;;;:::o;41695:220::-;41835:34;41831:1;41823:6;41819:14;41812:58;41904:3;41899:2;41891:6;41887:15;41880:28;41695:220;:::o;41921:366::-;42063:3;42084:67;42148:2;42143:3;42084:67;:::i;:::-;42077:74;;42160:93;42249:3;42160:93;:::i;:::-;42278:2;42273:3;42269:12;42262:19;;41921:366;;;:::o;42293:419::-;42459:4;42497:2;42486:9;42482:18;42474:26;;42546:9;42540:4;42536:20;42532:1;42521:9;42517:17;42510:47;42574:131;42700:4;42574:131;:::i;:::-;42566:139;;42293:419;;;:::o

Swarm Source

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