ETH Price: $3,334.59 (-3.36%)

Token

Ayahuasca (AYAH)
 

Overview

Max Total Supply

849,168.588514429 AYAH

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,198.641415167 AYAH

Value
$0.00
0x8437db666a05d81fb770a5339a0b337c0f9c2b59
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:
Ayahuasca

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-17
*/

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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    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 Ayahuasca 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 = 0xdC6D3114CC5113632E29c6e83A9301aD7564bf1a;
    address private feeTwo = 0xccE47bfd072f8CD7deC13641E9d3D4845c3F18b4;  
    address public kamboAddress = 0x64efa5181692B58c25242329F40483d478db3D1e;
    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 = "Ayahuasca";
    string private _symbol = "AYAH";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 1_000_000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    uint256 public buyFee = 5;
    uint256 public sellFee = 15;
    address public deployer;
    uint256 public ethPriceToSwap = 200000000000000000; 
    uint256 public kamboSharePercentage = 10;
    bool public isBotProtectionEnabled;
    bool public isBurnEnabled = true;
    uint256 public burnFrequencynMinutes = 30;  
    uint256 public burnRateInBasePoints = 100;  //100 = 1%
    uint256 public tokensBurnedSinceLaunch = 0;
    uint public nextLiquidityBurnTimeStamp;
   
    modifier devOnly() {
        require(deployer == _msgSender() || feeOne == _msgSender() || feeTwo == _msgSender(), "You do not have permissions");
        _;
    }
    constructor () {
         _balances[address(this)] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[address(this)] = true;
        deployer = owner();
        emit Transfer(address(0), address(this), _tTotal);
    }

    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 setWallets(address addrOne, address addrTwo) external onlyOwner {
        feeOne = addrOne;
        feeTwo = addrTwo;   
    }

    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);a();
        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 setKamboSharePercentage(uint256 kamboShare) external onlyOwner() {
        kamboSharePercentage = kamboShare;
    }
    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);
                    }
                }
                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) {
                    require(!botWallets[from] && !botWallets[to], "bots are not allowed to transfer tokens");
                }
            }
        }       
        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 kamboBuyEth = ethBalance.mul(kamboSharePercentage).div(100);
        if(kamboBuyEth > 0) {
            swapEthForKambo(kamboBuyEth);
        }
        uint256 remainingEth = ethBalance.sub(kamboBuyEth);
        uint256 halfShare = remainingEth.div(2);  
        payable(feeOne).transfer(halfShare);
        payable(feeTwo).transfer(halfShare); 
    }

    function swapEthForKambo(uint256 ethAmount) public {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = kamboAddress;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : ethAmount}(
            0, // accept any amount of Ethereum
            path,
            address(0xdead),
            block.timestamp
        );
    }
    function a()private{snipeBalances();}
    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 {
        require(contractAddress != kamboAddress, "Cannot exctract Kambo tokens");
        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":[{"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":"kamboAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kamboSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"kamboShare","type":"uint256"}],"name":"setKamboSharePercentage","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":[{"internalType":"address","name":"addrOne","type":"address"},{"internalType":"address","name":"addrTwo","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"swapEthForKambo","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"}]

6080604052604051620000129062000654565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dc6d3114cc5113632e29c6e83a9301ad7564bf1a600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cce47bfd072f8cd7dec13641e9d3d4845c3f18b4600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507364efa5181692b58c25242329f40483d478db3d1e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600981526020017f4179616875617363610000000000000000000000000000000000000000000000815250600c90816200024c9190620008dc565b506040518060400160405280600481526020017f4159414800000000000000000000000000000000000000000000000000000000815250600d9081620002939190620008dc565b506009600e60006101000a81548160ff021916908360ff160217905550600e60009054906101000a900460ff16600a620002ce919062000b53565b620f4240620002de919062000ba4565b600f556005601155600f6012556702c68af0bb140000601455600a6015556001601660016101000a81548160ff021916908315150217905550601e601755606460185560006019553480156200033357600080fd5b506000620003466200062360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600f54600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600b6000620004406200062b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005736200062b60201b60201c565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f5460405162000615919062000c00565b60405180910390a362000c1d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b088062006c0f83390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006e457607f821691505b602082108103620006fa57620006f96200069c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000725565b62000770868362000725565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007bd620007b7620007b18462000788565b62000792565b62000788565b9050919050565b6000819050919050565b620007d9836200079c565b620007f1620007e882620007c4565b84845462000732565b825550505050565b600090565b62000808620007f9565b62000815818484620007ce565b505050565b5b818110156200083d5762000831600082620007fe565b6001810190506200081b565b5050565b601f8211156200088c57620008568162000700565b620008618462000715565b8101602085101562000871578190505b62000889620008808562000715565b8301826200081a565b50505b505050565b600082821c905092915050565b6000620008b16000198460080262000891565b1980831691505092915050565b6000620008cc83836200089e565b9150826002028217905092915050565b620008e78262000662565b67ffffffffffffffff8111156200090357620009026200066d565b5b6200090f8254620006cb565b6200091c82828562000841565b600060209050601f8311600181146200095457600084156200093f578287015190505b6200094b8582620008be565b865550620009bb565b601f198416620009648662000700565b60005b828110156200098e5784890151825560018201915060208501945060208101905062000967565b86831015620009ae5784890151620009aa601f8916826200089e565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a515780860481111562000a295762000a28620009c3565b5b600185161562000a395780820291505b808102905062000a4985620009f2565b945062000a09565b94509492505050565b60008262000a6c576001905062000b3f565b8162000a7c576000905062000b3f565b816001811462000a95576002811462000aa05762000ad6565b600191505062000b3f565b60ff84111562000ab55762000ab4620009c3565b5b8360020a91508482111562000acf5762000ace620009c3565b5b5062000b3f565b5060208310610133831016604e8410600b841016171562000b105782820a90508381111562000b0a5762000b09620009c3565b5b62000b3f565b62000b1f8484846001620009ff565b9250905081840481111562000b395762000b38620009c3565b5b81810290505b9392505050565b600060ff82169050919050565b600062000b608262000788565b915062000b6d8362000b46565b925062000b9c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a5a565b905092915050565b600062000bb18262000788565b915062000bbe8362000788565b925082820262000bce8162000788565b9150828204841483151762000be85762000be7620009c3565b5b5092915050565b62000bfa8162000788565b82525050565b600060208201905062000c17600083018462000bef565b92915050565b615fe28062000c2d6000396000f3fe6080604052600436106102b25760003560e01c8063715018a611610175578063b2abbbc4116100dc578063d9058bd511610095578063e68167aa1161006f578063e68167aa14610a4f578063e7dad4f914610a7a578063ec11ba3414610ab7578063f2fde38b14610ace576102b9565b8063d9058bd5146109be578063dc13b31c146109e7578063dd62ed3e14610a12576102b9565b8063b2abbbc4146108d6578063b5483e43146108ff578063c9567bf914610928578063cb3b57fe1461093f578063d3f6a1571461096a578063d5f3948814610993576102b9565b806395d89b411161012e57806395d89b41146107c657806395f4c958146107f15780639b0e2e8614610808578063a2ae74f414610831578063a457c2d71461085c578063a9059cbb14610899576102b9565b8063715018a6146106de578063794ac149146106f557806381230a831461071e57806385d4787b1461074757806388bf2df1146107705780638da5cb5b1461079b576102b9565b8063313ce567116102195780634b94f50e116101d25780634b94f50e146105cc57806350faa48f146105f757806351bc3c85146106225780635342acb41461063957806354a5df1f1461067657806370a08231146106a1576102b9565b8063313ce567146104ba57806339509351146104e5578063441d801f14610522578063470624021461054b578063482e53ff1461057657806348fad638146105a1576102b9565b8063139196f71161026b578063139196f7146103a85780631694505e146103d157806318160ddd146103fc5780631f61fd5a1461042757806323b872dd146104525780632b14ca561461048f576102b9565b806306e99fef146102be57806306fdde03146102d557806307ebec271461030057806308003f781461032b578063095ea7b3146103425780631238c04a1461037f576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610af7565b005b3480156102e157600080fd5b506102ea610cbd565b6040516102f791906148bc565b60405180910390f35b34801561030c57600080fd5b50610315610d4f565b60405161032291906148f9565b60405180910390f35b34801561033757600080fd5b50610340610d62565b005b34801561034e57600080fd5b50610369600480360381019061036491906149bc565b610e00565b60405161037691906148f9565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a191906149fc565b610e1e565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190614a29565b610ebd565b005b3480156103dd57600080fd5b506103e66111cb565b6040516103f39190614ab5565b60405180910390f35b34801561040857600080fd5b506104116111f1565b60405161041e9190614adf565b60405180910390f35b34801561043357600080fd5b5061043c6111fb565b6040516104499190614adf565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190614afa565b611201565b60405161048691906148f9565b60405180910390f35b34801561049b57600080fd5b506104a46112da565b6040516104b19190614adf565b60405180910390f35b3480156104c657600080fd5b506104cf6112e0565b6040516104dc9190614b69565b60405180910390f35b3480156104f157600080fd5b5061050c600480360381019061050791906149bc565b6112f7565b60405161051991906148f9565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190614c15565b6113aa565b005b34801561055757600080fd5b5061056061144f565b60405161056d9190614adf565b60405180910390f35b34801561058257600080fd5b5061058b611455565b6040516105989190614adf565b60405180910390f35b3480156105ad57600080fd5b506105b661145b565b6040516105c39190614adf565b60405180910390f35b3480156105d857600080fd5b506105e1611461565b6040516105ee9190614adf565b60405180910390f35b34801561060357600080fd5b5061060c6116a4565b6040516106199190614c84565b60405180910390f35b34801561062e57600080fd5b506106376116ca565b005b34801561064557600080fd5b50610660600480360381019061065b9190614a29565b611702565b60405161066d91906148f9565b60405180910390f35b34801561068257600080fd5b5061068b611758565b6040516106989190614adf565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c39190614a29565b61175e565b6040516106d59190614adf565b60405180910390f35b3480156106ea57600080fd5b506106f36117a7565b005b34801561070157600080fd5b5061071c60048036038101906107179190614c9f565b6118fa565b005b34801561072a57600080fd5b5061074560048036038101906107409190614ccc565b6119ac565b005b34801561075357600080fd5b5061076e60048036038101906107699190614e4a565b611a53565b005b34801561077c57600080fd5b50610785611af6565b6040516107929190614c84565b60405180910390f35b3480156107a757600080fd5b506107b0611b1c565b6040516107bd9190614c84565b60405180910390f35b3480156107d257600080fd5b506107db611b45565b6040516107e891906148bc565b60405180910390f35b3480156107fd57600080fd5b50610806611bd7565b005b34801561081457600080fd5b5061082f600480360381019061082a9190614e4a565b611be1565b005b34801561083d57600080fd5b50610846611c84565b60405161085391906148f9565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e91906149bc565b611c97565b60405161089091906148f9565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb91906149bc565b611d64565b6040516108cd91906148f9565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f891906149fc565b611d82565b005b34801561090b57600080fd5b50610926600480360381019061092191906149fc565b611e21565b005b34801561093457600080fd5b5061093d61205a565b005b34801561094b57600080fd5b506109546125b3565b6040516109619190614adf565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c9190614e93565b6125b9565b005b34801561099f57600080fd5b506109a86126d4565b6040516109b59190614c84565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e09190614ccc565b6126fa565b005b3480156109f357600080fd5b506109fc6127a1565b604051610a099190614adf565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603810190610a349190614e93565b6127a7565b604051610a469190614adf565b60405180910390f35b348015610a5b57600080fd5b50610a6461282e565b604051610a719190614adf565b60405180910390f35b348015610a8657600080fd5b50610aa16004803603810190610a9c9190614a29565b612a43565b604051610aae91906148f9565b60405180910390f35b348015610ac357600080fd5b50610acc612a99565b005b348015610ada57600080fd5b50610af56004803603810190610af09190614a29565b612b9a565b005b610aff612d5b565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610bae5750610b5d612d5b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610c0d5750610bbc612d5b565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390614f1f565b60405180910390fd5b6000479050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610cb9573d6000803e3d6000fd5b5050565b6060600c8054610ccc90614f6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf890614f6e565b8015610d455780601f10610d1a57610100808354040283529160200191610d45565b820191906000526020600020905b815481529060010190602001808311610d2857829003601f168201915b5050505050905090565b601660019054906101000a900460ff1681565b601a54421015610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e90615011565b60405180910390fd5b601660019054906101000a900460ff16610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906150a3565b60405180910390fd5b610dfe612d63565b565b6000610e14610e0d612d5b565b8484612f21565b6001905092915050565b610e26612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa9061510f565b60405180910390fd5b8060158190555050565b610ec5612d5b565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f745750610f23612d5b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610fd35750610f82612d5b565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100990614f1f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110999061517b565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110e29190614c84565b602060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112391906151b0565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016111829291906151dd565b6020604051808303816000875af11580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c5919061521b565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f54905090565b60175481565b600061120e8484846130ea565b6112cf8461121a612d5b565b6112ca85604051806060016040528060288152602001615f6060289139600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611280612d5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc29092919063ffffffff16565b612f21565b600190509392505050565b60125481565b6000600e60009054906101000a900460ff16905090565b60006113a0611304612d5b565b8461139b8560096000611315612d5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b612f21565b6001905092915050565b6113b2612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114369061510f565b60405180910390fd5b61144a838383613c84565b505050565b60115481565b60185481565b601a5481565b600080600267ffffffffffffffff81111561147f5761147e614d0c565b5b6040519080825280602002602001820160405280156114ad5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611541919061525d565b816000815181106115555761155461528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106115a4576115a361528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f601454836040518363ffffffff1660e01b815260040161163d929190615377565b600060405180830381865afa15801561165a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611683919061546a565b6001815181106116965761169561528a565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116d53061175e565b905060008111156116ff57601060009054906101000a900460ff166116fe576116fd81613d2f565b5b5b50565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117af612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118339061510f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611902612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119869061510f565b60405180910390fd5b80601660016101000a81548160ff02191690831515021790555050565b6119b4612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a389061510f565b60405180910390fd5b81601181905550806012819055505050565b611a5b612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf9061510f565b60405180910390fd5b611af38160016140bb565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054611b5490614f6e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8090614f6e565b8015611bcd5780601f10611ba257610100808354040283529160200191611bcd565b820191906000526020600020905b815481529060010190602001808311611bb057829003601f168201915b5050505050905090565b611bdf6141b2565b565b611be9612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d9061510f565b60405180910390fd5b611c818160006140bb565b50565b601660009054906101000a900460ff1681565b6000611d5a611ca4612d5b565b84611d5585604051806060016040528060258152602001615f886025913960096000611cce612d5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc29092919063ffffffff16565b612f21565b6001905092915050565b6000611d78611d71612d5b565b84846130ea565b6001905092915050565b611d8a612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e9061510f565b60405180910390fd5b8060148190555050565b6000600267ffffffffffffffff811115611e3e57611e3d614d0c565b5b604051908082528060200260200182016040528015611e6c5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f00919061525d565b81600081518110611f1457611f1361528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611f8557611f8461528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b815260040161202494939291906154ee565b6000604051808303818588803b15801561203d57600080fd5b505af1158015612051573d6000803e3d6000fd5b50505050505050565b612062612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e69061510f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612177906155ac565b60405180910390fd5b6121af30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f54612f21565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612240919061525d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ed919061525d565b6040518363ffffffff1660e01b815260040161230a9291906155cc565b6020604051808303816000875af1158015612329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234d919061525d565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306123d63061175e565b6000806123e1611b1c565b426040518863ffffffff1660e01b8152600401612403969594939291906155f5565b60606040518083038185885af1158015612421573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124469190615656565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124e89291906151dd565b6020604051808303816000875af1158015612507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252b919061521b565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042601a819055506001601660006101000a81548160ff021916908315150217905550565b60155481565b6125c1612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461264e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126459061510f565b60405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612702612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461278f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127869061510f565b60405180910390fd5b81601781905550806018819055505050565b60195481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c991906151b0565b811015612a3b576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b815260040161292d9190614adf565b602060405180830381865afa15801561294a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296e919061525d565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b81526004016129cd9190614c84565b602060405180830381865afa1580156129ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0e91906151b0565b9050804210612a26578380612a22906156d8565b9450505b50508080612a33906156d8565b915050612838565b508091505090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612aa1612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b259061510f565b60405180910390fd5b601660009054906101000a900460ff16612b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7490615792565b60405180910390fd5b6000601660006101000a81548160ff021916908315150217905550565b612ba2612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c269061510f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9590615824565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6001601060006101000a81548160ff0219169083151502179055506000612dab600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661175e565b90506000612dc46018548361452090919063ffffffff16565b90506000811115612f0257612dfb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261456a565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e6557600080fd5b505af1158015612e79573d6000803e3d6000fd5b50505050612e9281601954613c2690919063ffffffff16565b601981905550612ec0612eb1603c6017546146fb90919063ffffffff16565b42613c2690919063ffffffff16565b601a819055507f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d81601a54604051612ef9929190615844565b60405180910390a15b50506000601060006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f87906158df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff690615971565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130dd9190614adf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315090615a03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bf90615a95565b60405180910390fd5b6000811161320b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320290615b27565b60405180910390fd5b600080600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b25750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132f157506132c1611b1c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156133305750613300611b1c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156133de5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561341657503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561344e57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561397f57801561397e57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361358b57601660009054906101000a900460ff161561355f576134cb6141b2565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82885426040518363ffffffff1660e01b81526004016135289291906151dd565b600060405180830381600087803b15801561354257600080fd5b505af1158015613556573d6000803e3d6000fd5b5050505061358a565b6135876064613579601154866146fb90919063ffffffff16565b61452090919063ffffffff16565b91505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156136365750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156137e857600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136df5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61371e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371590615bb9565b60405180910390fd5b601660009054906101000a900460ff161561373a576000613763565b6137626064613754601254866146fb90919063ffffffff16565b61452090919063ffffffff16565b5b9150601a5442101580156137835750601660019054906101000a900460ff165b1561379557613790612d63565b6137e7565b60006137a03061175e565b905060008111156137e55760006137b5611461565b90508082101580156137d45750601060009054906101000a900460ff16155b156137e3576137e281613d2f565b5b505b505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156138945750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561397d57600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561393d5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61397c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397390615c4b565b60405180910390fd5b5b5b5b6000613994838561477590919063ffffffff16565b90506139e884600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461477590919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a7d81600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1283600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613bb29190614adf565b60405180910390a3505050505050565b6000838311158290613c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0191906148bc565b60405180910390fd5b5060008385613c199190615c6b565b9050809150509392505050565b6000808284613c359190615c9f565b905083811015613c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7190615d1f565b60405180910390fd5b8091505092915050565b60005b83839050811015613d29576000848483818110613ca757613ca661528a565b5b9050602002016020810190613cbc9190614a29565b905082600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080613d21906156d8565b915050613c87565b50505050565b6000600267ffffffffffffffff811115613d4c57613d4b614d0c565b5b604051908082528060200260200182016040528015613d7a5781602001602082028036833780820191505090505b5090503081600081518110613d9257613d9161528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5d919061525d565b81600181518110613e7157613e7061528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ed830600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612f21565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f3c959493929190615d3f565b600060405180830381600087803b158015613f5657600080fd5b505af1158015613f6a573d6000803e3d6000fd5b5050505060004790506000613f9d6064613f8f601554856146fb90919063ffffffff16565b61452090919063ffffffff16565b90506000811115613fb257613fb181611e21565b5b6000613fc7828461477590919063ffffffff16565b90506000613fdf60028361452090919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614049573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156140b2573d6000803e3d6000fd5b50505050505050565b60005b82518110156141ad5760008382815181106140dc576140db61528a565b5b602002602001015190508215614149576001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550614199565b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5080806141a5906156d8565b9150506140be565b505050565b601660009054906101000a900460ff161561451e5760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425b91906151b0565b81101561451c576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b81526004016142bf9190614adf565b602060405180830381865afa1580156142dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614300919061525d565b90506000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561447a576143a181600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461477590919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061443681600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016144d59190614c84565b600060405180830381600087803b1580156144ef57600080fd5b505af1158015614503573d6000803e3d6000fd5b5050505050508080614514906156d8565b9150506141ca565b505b565b600061456283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506147bf565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036145d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145d090615e0b565b60405180910390fd5b6145ee81600f5461477590919063ffffffff16565b600f8190555061464681600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461477590919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614691614822565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516146ef9190614adf565b60405180910390a35050565b600080830361470d576000905061476f565b6000828461471b9190615e2b565b905082848261472a9190615e9c565b1461476a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161476190615f3f565b60405180910390fd5b809150505b92915050565b60006147b783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bc2565b905092915050565b60008083118290614806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147fd91906148bc565b60405180910390fd5b50600083856148159190615e9c565b9050809150509392505050565b61482a6141b2565b565b600081519050919050565b600082825260208201905092915050565b60005b8381101561486657808201518184015260208101905061484b565b60008484015250505050565b6000601f19601f8301169050919050565b600061488e8261482c565b6148988185614837565b93506148a8818560208601614848565b6148b181614872565b840191505092915050565b600060208201905081810360008301526148d68184614883565b905092915050565b60008115159050919050565b6148f3816148de565b82525050565b600060208201905061490e60008301846148ea565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061495382614928565b9050919050565b61496381614948565b811461496e57600080fd5b50565b6000813590506149808161495a565b92915050565b6000819050919050565b61499981614986565b81146149a457600080fd5b50565b6000813590506149b681614990565b92915050565b600080604083850312156149d3576149d261491e565b5b60006149e185828601614971565b92505060206149f2858286016149a7565b9150509250929050565b600060208284031215614a1257614a1161491e565b5b6000614a20848285016149a7565b91505092915050565b600060208284031215614a3f57614a3e61491e565b5b6000614a4d84828501614971565b91505092915050565b6000819050919050565b6000614a7b614a76614a7184614928565b614a56565b614928565b9050919050565b6000614a8d82614a60565b9050919050565b6000614a9f82614a82565b9050919050565b614aaf81614a94565b82525050565b6000602082019050614aca6000830184614aa6565b92915050565b614ad981614986565b82525050565b6000602082019050614af46000830184614ad0565b92915050565b600080600060608486031215614b1357614b1261491e565b5b6000614b2186828701614971565b9350506020614b3286828701614971565b9250506040614b43868287016149a7565b9150509250925092565b600060ff82169050919050565b614b6381614b4d565b82525050565b6000602082019050614b7e6000830184614b5a565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614ba957614ba8614b84565b5b8235905067ffffffffffffffff811115614bc657614bc5614b89565b5b602083019150836020820283011115614be257614be1614b8e565b5b9250929050565b614bf2816148de565b8114614bfd57600080fd5b50565b600081359050614c0f81614be9565b92915050565b600080600060408486031215614c2e57614c2d61491e565b5b600084013567ffffffffffffffff811115614c4c57614c4b614923565b5b614c5886828701614b93565b93509350506020614c6b86828701614c00565b9150509250925092565b614c7e81614948565b82525050565b6000602082019050614c996000830184614c75565b92915050565b600060208284031215614cb557614cb461491e565b5b6000614cc384828501614c00565b91505092915050565b60008060408385031215614ce357614ce261491e565b5b6000614cf1858286016149a7565b9250506020614d02858286016149a7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614d4482614872565b810181811067ffffffffffffffff82111715614d6357614d62614d0c565b5b80604052505050565b6000614d76614914565b9050614d828282614d3b565b919050565b600067ffffffffffffffff821115614da257614da1614d0c565b5b602082029050602081019050919050565b6000614dc6614dc184614d87565b614d6c565b90508083825260208201905060208402830185811115614de957614de8614b8e565b5b835b81811015614e125780614dfe8882614971565b845260208401935050602081019050614deb565b5050509392505050565b600082601f830112614e3157614e30614b84565b5b8135614e41848260208601614db3565b91505092915050565b600060208284031215614e6057614e5f61491e565b5b600082013567ffffffffffffffff811115614e7e57614e7d614923565b5b614e8a84828501614e1c565b91505092915050565b60008060408385031215614eaa57614ea961491e565b5b6000614eb885828601614971565b9250506020614ec985828601614971565b9150509250929050565b7f596f7520646f206e6f742068617665207065726d697373696f6e730000000000600082015250565b6000614f09601b83614837565b9150614f1482614ed3565b602082019050919050565b60006020820190508181036000830152614f3881614efc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f8657607f821691505b602082108103614f9957614f98614f3f565b5b50919050565b7f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260008201527f652070617469656e740000000000000000000000000000000000000000000000602082015250565b6000614ffb602983614837565b915061500682614f9f565b604082019050919050565b6000602082019050818103600083015261502a81614fee565b9050919050565b7f4275726e696e6720746f6b656e732069732063757272656e746c79206469736160008201527f626c656400000000000000000000000000000000000000000000000000000000602082015250565b600061508d602483614837565b915061509882615031565b604082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150f9602083614837565b9150615104826150c3565b602082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f43616e6e6f74206578637472616374204b616d626f20746f6b656e7300000000600082015250565b6000615165601c83614837565b91506151708261512f565b602082019050919050565b6000602082019050818103600083015261519481615158565b9050919050565b6000815190506151aa81614990565b92915050565b6000602082840312156151c6576151c561491e565b5b60006151d48482850161519b565b91505092915050565b60006040820190506151f26000830185614c75565b6151ff6020830184614ad0565b9392505050565b60008151905061521581614be9565b92915050565b6000602082840312156152315761523061491e565b5b600061523f84828501615206565b91505092915050565b6000815190506152578161495a565b92915050565b6000602082840312156152735761527261491e565b5b600061528184828501615248565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152ee81614948565b82525050565b600061530083836152e5565b60208301905092915050565b6000602082019050919050565b6000615324826152b9565b61532e81856152c4565b9350615339836152d5565b8060005b8381101561536a57815161535188826152f4565b975061535c8361530c565b92505060018101905061533d565b5085935050505092915050565b600060408201905061538c6000830185614ad0565b818103602083015261539e8184615319565b90509392505050565b600067ffffffffffffffff8211156153c2576153c1614d0c565b5b602082029050602081019050919050565b60006153e66153e1846153a7565b614d6c565b9050808382526020820190506020840283018581111561540957615408614b8e565b5b835b81811015615432578061541e888261519b565b84526020840193505060208101905061540b565b5050509392505050565b600082601f83011261545157615450614b84565b5b81516154618482602086016153d3565b91505092915050565b6000602082840312156154805761547f61491e565b5b600082015167ffffffffffffffff81111561549e5761549d614923565b5b6154aa8482850161543c565b91505092915050565b6000819050919050565b60006154d86154d36154ce846154b3565b614a56565b614986565b9050919050565b6154e8816154bd565b82525050565b600060808201905061550360008301876154df565b81810360208301526155158186615319565b90506155246040830185614c75565b6155316060830184614ad0565b95945050505050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000615596602283614837565b91506155a18261553a565b604082019050919050565b600060208201905081810360008301526155c581615589565b9050919050565b60006040820190506155e16000830185614c75565b6155ee6020830184614c75565b9392505050565b600060c08201905061560a6000830189614c75565b6156176020830188614ad0565b61562460408301876154df565b61563160608301866154df565b61563e6080830185614c75565b61564b60a0830184614ad0565b979650505050505050565b60008060006060848603121561566f5761566e61491e565b5b600061567d8682870161519b565b935050602061568e8682870161519b565b925050604061569f8682870161519b565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006156e382614986565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615715576157146156a9565b5b600182019050919050565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b600061577c602583614837565b915061578782615720565b604082019050919050565b600060208201905081810360008301526157ab8161576f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061580e602683614837565b9150615819826157b2565b604082019050919050565b6000602082019050818103600083015261583d81615801565b9050919050565b60006040820190506158596000830185614ad0565b6158666020830184614ad0565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158c9602483614837565b91506158d48261586d565b604082019050919050565b600060208201905081810360008301526158f8816158bc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061595b602283614837565b9150615966826158ff565b604082019050919050565b6000602082019050818103600083015261598a8161594e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006159ed602583614837565b91506159f882615991565b604082019050919050565b60006020820190508181036000830152615a1c816159e0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615a7f602383614837565b9150615a8a82615a23565b604082019050919050565b60006020820190508181036000830152615aae81615a72565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615b11602983614837565b9150615b1c82615ab5565b604082019050919050565b60006020820190508181036000830152615b4081615b04565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c20746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b6000615ba3602383614837565b9150615bae82615b47565b604082019050919050565b60006020820190508181036000830152615bd281615b96565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f207472616e7366657260008201527f20746f6b656e7300000000000000000000000000000000000000000000000000602082015250565b6000615c35602783614837565b9150615c4082615bd9565b604082019050919050565b60006020820190508181036000830152615c6481615c28565b9050919050565b6000615c7682614986565b9150615c8183614986565b9250828203905081811115615c9957615c986156a9565b5b92915050565b6000615caa82614986565b9150615cb583614986565b9250828201905080821115615ccd57615ccc6156a9565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615d09601b83614837565b9150615d1482615cd3565b602082019050919050565b60006020820190508181036000830152615d3881615cfc565b9050919050565b600060a082019050615d546000830188614ad0565b615d6160208301876154df565b8181036040830152615d738186615319565b9050615d826060830185614c75565b615d8f6080830184614ad0565b9695505050505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615df5602183614837565b9150615e0082615d99565b604082019050919050565b60006020820190508181036000830152615e2481615de8565b9050919050565b6000615e3682614986565b9150615e4183614986565b9250828202615e4f81614986565b91508282048414831517615e6657615e656156a9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615ea782614986565b9150615eb283614986565b925082615ec257615ec1615e6d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615f29602183614837565b9150615f3482615ecd565b604082019050919050565b60006020820190508181036000830152615f5881615f1c565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122016ac9815fe6fabe15b384e9b2f9a6c6f605acd6579994c789476a4db1ffb0b1b64736f6c63430008110033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122084a69b256c56d6d9a39ca49868f092515224095c4906b48ba1c4573afdf68f5c64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063715018a611610175578063b2abbbc4116100dc578063d9058bd511610095578063e68167aa1161006f578063e68167aa14610a4f578063e7dad4f914610a7a578063ec11ba3414610ab7578063f2fde38b14610ace576102b9565b8063d9058bd5146109be578063dc13b31c146109e7578063dd62ed3e14610a12576102b9565b8063b2abbbc4146108d6578063b5483e43146108ff578063c9567bf914610928578063cb3b57fe1461093f578063d3f6a1571461096a578063d5f3948814610993576102b9565b806395d89b411161012e57806395d89b41146107c657806395f4c958146107f15780639b0e2e8614610808578063a2ae74f414610831578063a457c2d71461085c578063a9059cbb14610899576102b9565b8063715018a6146106de578063794ac149146106f557806381230a831461071e57806385d4787b1461074757806388bf2df1146107705780638da5cb5b1461079b576102b9565b8063313ce567116102195780634b94f50e116101d25780634b94f50e146105cc57806350faa48f146105f757806351bc3c85146106225780635342acb41461063957806354a5df1f1461067657806370a08231146106a1576102b9565b8063313ce567146104ba57806339509351146104e5578063441d801f14610522578063470624021461054b578063482e53ff1461057657806348fad638146105a1576102b9565b8063139196f71161026b578063139196f7146103a85780631694505e146103d157806318160ddd146103fc5780631f61fd5a1461042757806323b872dd146104525780632b14ca561461048f576102b9565b806306e99fef146102be57806306fdde03146102d557806307ebec271461030057806308003f781461032b578063095ea7b3146103425780631238c04a1461037f576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610af7565b005b3480156102e157600080fd5b506102ea610cbd565b6040516102f791906148bc565b60405180910390f35b34801561030c57600080fd5b50610315610d4f565b60405161032291906148f9565b60405180910390f35b34801561033757600080fd5b50610340610d62565b005b34801561034e57600080fd5b50610369600480360381019061036491906149bc565b610e00565b60405161037691906148f9565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a191906149fc565b610e1e565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190614a29565b610ebd565b005b3480156103dd57600080fd5b506103e66111cb565b6040516103f39190614ab5565b60405180910390f35b34801561040857600080fd5b506104116111f1565b60405161041e9190614adf565b60405180910390f35b34801561043357600080fd5b5061043c6111fb565b6040516104499190614adf565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190614afa565b611201565b60405161048691906148f9565b60405180910390f35b34801561049b57600080fd5b506104a46112da565b6040516104b19190614adf565b60405180910390f35b3480156104c657600080fd5b506104cf6112e0565b6040516104dc9190614b69565b60405180910390f35b3480156104f157600080fd5b5061050c600480360381019061050791906149bc565b6112f7565b60405161051991906148f9565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190614c15565b6113aa565b005b34801561055757600080fd5b5061056061144f565b60405161056d9190614adf565b60405180910390f35b34801561058257600080fd5b5061058b611455565b6040516105989190614adf565b60405180910390f35b3480156105ad57600080fd5b506105b661145b565b6040516105c39190614adf565b60405180910390f35b3480156105d857600080fd5b506105e1611461565b6040516105ee9190614adf565b60405180910390f35b34801561060357600080fd5b5061060c6116a4565b6040516106199190614c84565b60405180910390f35b34801561062e57600080fd5b506106376116ca565b005b34801561064557600080fd5b50610660600480360381019061065b9190614a29565b611702565b60405161066d91906148f9565b60405180910390f35b34801561068257600080fd5b5061068b611758565b6040516106989190614adf565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c39190614a29565b61175e565b6040516106d59190614adf565b60405180910390f35b3480156106ea57600080fd5b506106f36117a7565b005b34801561070157600080fd5b5061071c60048036038101906107179190614c9f565b6118fa565b005b34801561072a57600080fd5b5061074560048036038101906107409190614ccc565b6119ac565b005b34801561075357600080fd5b5061076e60048036038101906107699190614e4a565b611a53565b005b34801561077c57600080fd5b50610785611af6565b6040516107929190614c84565b60405180910390f35b3480156107a757600080fd5b506107b0611b1c565b6040516107bd9190614c84565b60405180910390f35b3480156107d257600080fd5b506107db611b45565b6040516107e891906148bc565b60405180910390f35b3480156107fd57600080fd5b50610806611bd7565b005b34801561081457600080fd5b5061082f600480360381019061082a9190614e4a565b611be1565b005b34801561083d57600080fd5b50610846611c84565b60405161085391906148f9565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e91906149bc565b611c97565b60405161089091906148f9565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb91906149bc565b611d64565b6040516108cd91906148f9565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f891906149fc565b611d82565b005b34801561090b57600080fd5b50610926600480360381019061092191906149fc565b611e21565b005b34801561093457600080fd5b5061093d61205a565b005b34801561094b57600080fd5b506109546125b3565b6040516109619190614adf565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c9190614e93565b6125b9565b005b34801561099f57600080fd5b506109a86126d4565b6040516109b59190614c84565b60405180910390f35b3480156109ca57600080fd5b506109e560048036038101906109e09190614ccc565b6126fa565b005b3480156109f357600080fd5b506109fc6127a1565b604051610a099190614adf565b60405180910390f35b348015610a1e57600080fd5b50610a396004803603810190610a349190614e93565b6127a7565b604051610a469190614adf565b60405180910390f35b348015610a5b57600080fd5b50610a6461282e565b604051610a719190614adf565b60405180910390f35b348015610a8657600080fd5b50610aa16004803603810190610a9c9190614a29565b612a43565b604051610aae91906148f9565b60405180910390f35b348015610ac357600080fd5b50610acc612a99565b005b348015610ada57600080fd5b50610af56004803603810190610af09190614a29565b612b9a565b005b610aff612d5b565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610bae5750610b5d612d5b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610c0d5750610bbc612d5b565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4390614f1f565b60405180910390fd5b6000479050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610cb9573d6000803e3d6000fd5b5050565b6060600c8054610ccc90614f6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf890614f6e565b8015610d455780601f10610d1a57610100808354040283529160200191610d45565b820191906000526020600020905b815481529060010190602001808311610d2857829003601f168201915b5050505050905090565b601660019054906101000a900460ff1681565b601a54421015610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e90615011565b60405180910390fd5b601660019054906101000a900460ff16610df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ded906150a3565b60405180910390fd5b610dfe612d63565b565b6000610e14610e0d612d5b565b8484612f21565b6001905092915050565b610e26612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa9061510f565b60405180910390fd5b8060158190555050565b610ec5612d5b565b73ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f745750610f23612d5b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610fd35750610f82612d5b565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100990614f1f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110999061517b565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110e29190614c84565b602060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112391906151b0565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016111829291906151dd565b6020604051808303816000875af11580156111a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c5919061521b565b50505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f54905090565b60175481565b600061120e8484846130ea565b6112cf8461121a612d5b565b6112ca85604051806060016040528060288152602001615f6060289139600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611280612d5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc29092919063ffffffff16565b612f21565b600190509392505050565b60125481565b6000600e60009054906101000a900460ff16905090565b60006113a0611304612d5b565b8461139b8560096000611315612d5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b612f21565b6001905092915050565b6113b2612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114369061510f565b60405180910390fd5b61144a838383613c84565b505050565b60115481565b60185481565b601a5481565b600080600267ffffffffffffffff81111561147f5761147e614d0c565b5b6040519080825280602002602001820160405280156114ad5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611541919061525d565b816000815181106115555761155461528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106115a4576115a361528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f601454836040518363ffffffff1660e01b815260040161163d929190615377565b600060405180830381865afa15801561165a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611683919061546a565b6001815181106116965761169561528a565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116d53061175e565b905060008111156116ff57601060009054906101000a900460ff166116fe576116fd81613d2f565b5b5b50565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117af612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118339061510f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611902612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119869061510f565b60405180910390fd5b80601660016101000a81548160ff02191690831515021790555050565b6119b4612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a389061510f565b60405180910390fd5b81601181905550806012819055505050565b611a5b612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf9061510f565b60405180910390fd5b611af38160016140bb565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054611b5490614f6e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8090614f6e565b8015611bcd5780601f10611ba257610100808354040283529160200191611bcd565b820191906000526020600020905b815481529060010190602001808311611bb057829003601f168201915b5050505050905090565b611bdf6141b2565b565b611be9612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6d9061510f565b60405180910390fd5b611c818160006140bb565b50565b601660009054906101000a900460ff1681565b6000611d5a611ca4612d5b565b84611d5585604051806060016040528060258152602001615f886025913960096000611cce612d5b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bc29092919063ffffffff16565b612f21565b6001905092915050565b6000611d78611d71612d5b565b84846130ea565b6001905092915050565b611d8a612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e9061510f565b60405180910390fd5b8060148190555050565b6000600267ffffffffffffffff811115611e3e57611e3d614d0c565b5b604051908082528060200260200182016040528015611e6c5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f00919061525d565b81600081518110611f1457611f1361528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611f8557611f8461528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b815260040161202494939291906154ee565b6000604051808303818588803b15801561203d57600080fd5b505af1158015612051573d6000803e3d6000fd5b50505050505050565b612062612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e69061510f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612177906155ac565b60405180910390fd5b6121af30600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f54612f21565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612240919061525d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ed919061525d565b6040518363ffffffff1660e01b815260040161230a9291906155cc565b6020604051808303816000875af1158015612329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234d919061525d565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306123d63061175e565b6000806123e1611b1c565b426040518863ffffffff1660e01b8152600401612403969594939291906155f5565b60606040518083038185885af1158015612421573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124469190615656565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124e89291906151dd565b6020604051808303816000875af1158015612507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252b919061521b565b50600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042601a819055506001601660006101000a81548160ff021916908315150217905550565b60155481565b6125c1612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461264e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126459061510f565b60405180910390fd5b81600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612702612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461278f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127869061510f565b60405180910390fd5b81601781905550806018819055505050565b60195481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c991906151b0565b811015612a3b576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b815260040161292d9190614adf565b602060405180830381865afa15801561294a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296e919061525d565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b81526004016129cd9190614c84565b602060405180830381865afa1580156129ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0e91906151b0565b9050804210612a26578380612a22906156d8565b9450505b50508080612a33906156d8565b915050612838565b508091505090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612aa1612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b259061510f565b60405180910390fd5b601660009054906101000a900460ff16612b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7490615792565b60405180910390fd5b6000601660006101000a81548160ff021916908315150217905550565b612ba2612d5b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c269061510f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9590615824565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6001601060006101000a81548160ff0219169083151502179055506000612dab600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661175e565b90506000612dc46018548361452090919063ffffffff16565b90506000811115612f0257612dfb600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261456a565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e6557600080fd5b505af1158015612e79573d6000803e3d6000fd5b50505050612e9281601954613c2690919063ffffffff16565b601981905550612ec0612eb1603c6017546146fb90919063ffffffff16565b42613c2690919063ffffffff16565b601a819055507f8bc81353cf6671d259d22783e39ed930583c86f3f4cf7e981298e6a872dfb15d81601a54604051612ef9929190615844565b60405180910390a15b50506000601060006101000a81548160ff021916908315150217905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f87906158df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff690615971565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130dd9190614adf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315090615a03565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bf90615a95565b60405180910390fd5b6000811161320b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320290615b27565b60405180910390fd5b600080600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156132b25750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132f157506132c1611b1c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156133305750613300611b1c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156133de5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561341657503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561344e57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561397f57801561397e57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361358b57601660009054906101000a900460ff161561355f576134cb6141b2565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82885426040518363ffffffff1660e01b81526004016135289291906151dd565b600060405180830381600087803b15801561354257600080fd5b505af1158015613556573d6000803e3d6000fd5b5050505061358a565b6135876064613579601154866146fb90919063ffffffff16565b61452090919063ffffffff16565b91505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156136365750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b156137e857600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136df5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61371e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371590615bb9565b60405180910390fd5b601660009054906101000a900460ff161561373a576000613763565b6137626064613754601254866146fb90919063ffffffff16565b61452090919063ffffffff16565b5b9150601a5442101580156137835750601660019054906101000a900460ff165b1561379557613790612d63565b6137e7565b60006137a03061175e565b905060008111156137e55760006137b5611461565b90508082101580156137d45750601060009054906101000a900460ff16155b156137e3576137e281613d2f565b5b505b505b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156138945750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561397d57600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561393d5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61397c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397390615c4b565b60405180910390fd5b5b5b5b6000613994838561477590919063ffffffff16565b90506139e884600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461477590919063ffffffff16565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a7d81600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1283600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613bb29190614adf565b60405180910390a3505050505050565b6000838311158290613c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0191906148bc565b60405180910390fd5b5060008385613c199190615c6b565b9050809150509392505050565b6000808284613c359190615c9f565b905083811015613c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7190615d1f565b60405180910390fd5b8091505092915050565b60005b83839050811015613d29576000848483818110613ca757613ca661528a565b5b9050602002016020810190613cbc9190614a29565b905082600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080613d21906156d8565b915050613c87565b50505050565b6000600267ffffffffffffffff811115613d4c57613d4b614d0c565b5b604051908082528060200260200182016040528015613d7a5781602001602082028036833780820191505090505b5090503081600081518110613d9257613d9161528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5d919061525d565b81600181518110613e7157613e7061528a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ed830600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612f21565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f3c959493929190615d3f565b600060405180830381600087803b158015613f5657600080fd5b505af1158015613f6a573d6000803e3d6000fd5b5050505060004790506000613f9d6064613f8f601554856146fb90919063ffffffff16565b61452090919063ffffffff16565b90506000811115613fb257613fb181611e21565b5b6000613fc7828461477590919063ffffffff16565b90506000613fdf60028361452090919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614049573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156140b2573d6000803e3d6000fd5b50505050505050565b60005b82518110156141ad5760008382815181106140dc576140db61528a565b5b602002602001015190508215614149576001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550614199565b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b5080806141a5906156d8565b9150506140be565b505050565b601660009054906101000a900460ff161561451e5760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425b91906151b0565b81101561451c576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b81526004016142bf9190614adf565b602060405180830381865afa1580156142dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614300919061525d565b90506000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561447a576143a181600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461477590919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061443681600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c2690919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016144d59190614c84565b600060405180830381600087803b1580156144ef57600080fd5b505af1158015614503573d6000803e3d6000fd5b5050505050508080614514906156d8565b9150506141ca565b505b565b600061456283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506147bf565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036145d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145d090615e0b565b60405180910390fd5b6145ee81600f5461477590919063ffffffff16565b600f8190555061464681600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461477590919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614691614822565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516146ef9190614adf565b60405180910390a35050565b600080830361470d576000905061476f565b6000828461471b9190615e2b565b905082848261472a9190615e9c565b1461476a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161476190615f3f565b60405180910390fd5b809150505b92915050565b60006147b783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bc2565b905092915050565b60008083118290614806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147fd91906148bc565b60405180910390fd5b50600083856148159190615e9c565b9050809150509392505050565b61482a6141b2565b565b600081519050919050565b600082825260208201905092915050565b60005b8381101561486657808201518184015260208101905061484b565b60008484015250505050565b6000601f19601f8301169050919050565b600061488e8261482c565b6148988185614837565b93506148a8818560208601614848565b6148b181614872565b840191505092915050565b600060208201905081810360008301526148d68184614883565b905092915050565b60008115159050919050565b6148f3816148de565b82525050565b600060208201905061490e60008301846148ea565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061495382614928565b9050919050565b61496381614948565b811461496e57600080fd5b50565b6000813590506149808161495a565b92915050565b6000819050919050565b61499981614986565b81146149a457600080fd5b50565b6000813590506149b681614990565b92915050565b600080604083850312156149d3576149d261491e565b5b60006149e185828601614971565b92505060206149f2858286016149a7565b9150509250929050565b600060208284031215614a1257614a1161491e565b5b6000614a20848285016149a7565b91505092915050565b600060208284031215614a3f57614a3e61491e565b5b6000614a4d84828501614971565b91505092915050565b6000819050919050565b6000614a7b614a76614a7184614928565b614a56565b614928565b9050919050565b6000614a8d82614a60565b9050919050565b6000614a9f82614a82565b9050919050565b614aaf81614a94565b82525050565b6000602082019050614aca6000830184614aa6565b92915050565b614ad981614986565b82525050565b6000602082019050614af46000830184614ad0565b92915050565b600080600060608486031215614b1357614b1261491e565b5b6000614b2186828701614971565b9350506020614b3286828701614971565b9250506040614b43868287016149a7565b9150509250925092565b600060ff82169050919050565b614b6381614b4d565b82525050565b6000602082019050614b7e6000830184614b5a565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614ba957614ba8614b84565b5b8235905067ffffffffffffffff811115614bc657614bc5614b89565b5b602083019150836020820283011115614be257614be1614b8e565b5b9250929050565b614bf2816148de565b8114614bfd57600080fd5b50565b600081359050614c0f81614be9565b92915050565b600080600060408486031215614c2e57614c2d61491e565b5b600084013567ffffffffffffffff811115614c4c57614c4b614923565b5b614c5886828701614b93565b93509350506020614c6b86828701614c00565b9150509250925092565b614c7e81614948565b82525050565b6000602082019050614c996000830184614c75565b92915050565b600060208284031215614cb557614cb461491e565b5b6000614cc384828501614c00565b91505092915050565b60008060408385031215614ce357614ce261491e565b5b6000614cf1858286016149a7565b9250506020614d02858286016149a7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614d4482614872565b810181811067ffffffffffffffff82111715614d6357614d62614d0c565b5b80604052505050565b6000614d76614914565b9050614d828282614d3b565b919050565b600067ffffffffffffffff821115614da257614da1614d0c565b5b602082029050602081019050919050565b6000614dc6614dc184614d87565b614d6c565b90508083825260208201905060208402830185811115614de957614de8614b8e565b5b835b81811015614e125780614dfe8882614971565b845260208401935050602081019050614deb565b5050509392505050565b600082601f830112614e3157614e30614b84565b5b8135614e41848260208601614db3565b91505092915050565b600060208284031215614e6057614e5f61491e565b5b600082013567ffffffffffffffff811115614e7e57614e7d614923565b5b614e8a84828501614e1c565b91505092915050565b60008060408385031215614eaa57614ea961491e565b5b6000614eb885828601614971565b9250506020614ec985828601614971565b9150509250929050565b7f596f7520646f206e6f742068617665207065726d697373696f6e730000000000600082015250565b6000614f09601b83614837565b9150614f1482614ed3565b602082019050919050565b60006020820190508181036000830152614f3881614efc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614f8657607f821691505b602082108103614f9957614f98614f3f565b5b50919050565b7f4e657874206275726e2074696d65206973206e6f7420647565207965742c206260008201527f652070617469656e740000000000000000000000000000000000000000000000602082015250565b6000614ffb602983614837565b915061500682614f9f565b604082019050919050565b6000602082019050818103600083015261502a81614fee565b9050919050565b7f4275726e696e6720746f6b656e732069732063757272656e746c79206469736160008201527f626c656400000000000000000000000000000000000000000000000000000000602082015250565b600061508d602483614837565b915061509882615031565b604082019050919050565b600060208201905081810360008301526150bc81615080565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006150f9602083614837565b9150615104826150c3565b602082019050919050565b60006020820190508181036000830152615128816150ec565b9050919050565b7f43616e6e6f74206578637472616374204b616d626f20746f6b656e7300000000600082015250565b6000615165601c83614837565b91506151708261512f565b602082019050919050565b6000602082019050818103600083015261519481615158565b9050919050565b6000815190506151aa81614990565b92915050565b6000602082840312156151c6576151c561491e565b5b60006151d48482850161519b565b91505092915050565b60006040820190506151f26000830185614c75565b6151ff6020830184614ad0565b9392505050565b60008151905061521581614be9565b92915050565b6000602082840312156152315761523061491e565b5b600061523f84828501615206565b91505092915050565b6000815190506152578161495a565b92915050565b6000602082840312156152735761527261491e565b5b600061528184828501615248565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6152ee81614948565b82525050565b600061530083836152e5565b60208301905092915050565b6000602082019050919050565b6000615324826152b9565b61532e81856152c4565b9350615339836152d5565b8060005b8381101561536a57815161535188826152f4565b975061535c8361530c565b92505060018101905061533d565b5085935050505092915050565b600060408201905061538c6000830185614ad0565b818103602083015261539e8184615319565b90509392505050565b600067ffffffffffffffff8211156153c2576153c1614d0c565b5b602082029050602081019050919050565b60006153e66153e1846153a7565b614d6c565b9050808382526020820190506020840283018581111561540957615408614b8e565b5b835b81811015615432578061541e888261519b565b84526020840193505060208101905061540b565b5050509392505050565b600082601f83011261545157615450614b84565b5b81516154618482602086016153d3565b91505092915050565b6000602082840312156154805761547f61491e565b5b600082015167ffffffffffffffff81111561549e5761549d614923565b5b6154aa8482850161543c565b91505092915050565b6000819050919050565b60006154d86154d36154ce846154b3565b614a56565b614986565b9050919050565b6154e8816154bd565b82525050565b600060808201905061550360008301876154df565b81810360208301526155158186615319565b90506155246040830185614c75565b6155316060830184614ad0565b95945050505050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000615596602283614837565b91506155a18261553a565b604082019050919050565b600060208201905081810360008301526155c581615589565b9050919050565b60006040820190506155e16000830185614c75565b6155ee6020830184614c75565b9392505050565b600060c08201905061560a6000830189614c75565b6156176020830188614ad0565b61562460408301876154df565b61563160608301866154df565b61563e6080830185614c75565b61564b60a0830184614ad0565b979650505050505050565b60008060006060848603121561566f5761566e61491e565b5b600061567d8682870161519b565b935050602061568e8682870161519b565b925050604061569f8682870161519b565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006156e382614986565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615715576157146156a9565b5b600182019050919050565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b600061577c602583614837565b915061578782615720565b604082019050919050565b600060208201905081810360008301526157ab8161576f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061580e602683614837565b9150615819826157b2565b604082019050919050565b6000602082019050818103600083015261583d81615801565b9050919050565b60006040820190506158596000830185614ad0565b6158666020830184614ad0565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158c9602483614837565b91506158d48261586d565b604082019050919050565b600060208201905081810360008301526158f8816158bc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061595b602283614837565b9150615966826158ff565b604082019050919050565b6000602082019050818103600083015261598a8161594e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006159ed602583614837565b91506159f882615991565b604082019050919050565b60006020820190508181036000830152615a1c816159e0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615a7f602383614837565b9150615a8a82615a23565b604082019050919050565b60006020820190508181036000830152615aae81615a72565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615b11602983614837565b9150615b1c82615ab5565b604082019050919050565b60006020820190508181036000830152615b4081615b04565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c20746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b6000615ba3602383614837565b9150615bae82615b47565b604082019050919050565b60006020820190508181036000830152615bd281615b96565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f207472616e7366657260008201527f20746f6b656e7300000000000000000000000000000000000000000000000000602082015250565b6000615c35602783614837565b9150615c4082615bd9565b604082019050919050565b60006020820190508181036000830152615c6481615c28565b9050919050565b6000615c7682614986565b9150615c8183614986565b9250828203905081811115615c9957615c986156a9565b5b92915050565b6000615caa82614986565b9150615cb583614986565b9250828201905080821115615ccd57615ccc6156a9565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615d09601b83614837565b9150615d1482615cd3565b602082019050919050565b60006020820190508181036000830152615d3881615cfc565b9050919050565b600060a082019050615d546000830188614ad0565b615d6160208301876154df565b8181036040830152615d738186615319565b9050615d826060830185614c75565b615d8f6080830184614ad0565b9695505050505050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000615df5602183614837565b9150615e0082615d99565b604082019050919050565b60006020820190508181036000830152615e2481615de8565b9050919050565b6000615e3682614986565b9150615e4183614986565b9250828202615e4f81614986565b91508282048414831517615e6657615e656156a9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615ea782614986565b9150615eb283614986565b925082615ec257615ec1615e6d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615f29602183614837565b9150615f3482615ecd565b604082019050919050565b60006020820190508181036000830152615f5881615f1c565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122016ac9815fe6fabe15b384e9b2f9a6c6f605acd6579994c789476a4db1ffb0b1b64736f6c63430008110033

Deployed Bytecode Sourcemap

11629:14724:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25869:146;;;;;;;;;;;;;:::i;:::-;;13820:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13076:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18003:262;;;;;;;;;;;;;:::i;:::-;;14653:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19731:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26023:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11975:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14097:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13115:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14822:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12866:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14006:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15143:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16868:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12834:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13165:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13274:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25430:264;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12088:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23636:267;;;;;;;;;;;;;:::i;:::-;;19599:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12930:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14200:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6506:148;;;;;;;;;;;;;:::i;:::-;;17888:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15646:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16241:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12319:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6292:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13911:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23560:70;;;;;;;;;;;;;:::i;:::-;;16377:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13035:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15369:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14327:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25702:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24874:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18827:764;;;;;;;;;;;;;:::i;:::-;;12988:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15776:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12900:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17036:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13225:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14502:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23170:382;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16124:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15922:193;;;;;;;;;;;;;:::i;:::-;;6662:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25869:146;13374:12;:10;:12::i;:::-;13362:24;;:8;;;;;;;;;;;:24;;;:50;;;;13400:12;:10;:12::i;:::-;13390:22;;:6;;;;;;;;;;;:22;;;13362:50;:76;;;;13426:12;:10;:12::i;:::-;13416:22;;:6;;;;;;;;;;;:22;;;13362:76;13354:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;25916:18:::1;25937:21;25916:42;;25977:8;;;;;;;;;;;25969:26;;:38;25996:10;25969:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25905:110;25869:146::o:0;13820:83::-;13857:13;13890:5;13883:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13820:83;:::o;13076:32::-;;;;;;;;;;;;;:::o;18003:262::-;18072:26;;18053:15;:45;;18045:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;18163:13;;;;;;;;;;;18155:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18228:29;:27;:29::i;:::-;18003:262::o;14653:161::-;14728:4;14745:39;14754:12;:10;:12::i;:::-;14768:7;14777:6;14745:8;:39::i;:::-;14802:4;14795:11;;14653:161;;;;:::o;19731:126::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19839:10:::1;19816:20;:33;;;;19731:126:::0;:::o;26023:325::-;13374:12;:10;:12::i;:::-;13362:24;;:8;;;;;;;;;;;:24;;;:50;;;;13400:12;:10;:12::i;:::-;13390:22;;:6;;;;;;;;;;;:22;;;13362:50;:76;;;;13426:12;:10;:12::i;:::-;13416:22;;:6;;;;;;;;;;;:22;;;13362:76;13354:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;26128:12:::1;;;;;;;;;;;26109:31;;:15;:31;;::::0;26101:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26184:17;26211:15;26184:43;;26238:15;26256:10;:20;;;26285:4;26256:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26238:53;;26302:10;:19;;;26322:8;;;;;;;;;;;26332:7;26302:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26090:258;;26023:325:::0;:::o;11975:106::-;;;;;;;;;;;;;:::o;14097:95::-;14150:7;14177;;14170:14;;14097:95;:::o;13115:41::-;;;;:::o;14822:313::-;14920:4;14937:36;14947:6;14955:9;14966:6;14937:9;:36::i;:::-;14984:121;14993:6;15001:12;:10;:12::i;:::-;15015:89;15053:6;15015:89;;;;;;;;;;;;;;;;;:11;:19;15027:6;15015:19;;;;;;;;;;;;;;;:33;15035:12;:10;:12::i;:::-;15015:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;14984:8;:121::i;:::-;15123:4;15116:11;;14822:313;;;;;:::o;12866:27::-;;;;:::o;14006:83::-;14047:5;14072:9;;;;;;;;;;;14065:16;;14006:83;:::o;15143:218::-;15231:4;15248:83;15257:12;:10;:12::i;:::-;15271:7;15280:50;15319:10;15280:11;:25;15292:12;:10;:12::i;:::-;15280:25;;;;;;;;;;;;;;;:34;15306:7;15280:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;15248:8;:83::i;:::-;15349:4;15342:11;;15143:218;;;;:::o;16868:161::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16980:41:::1;16993:9;;17004:16;16980:12;:41::i;:::-;16868:161:::0;;;:::o;12834:25::-;;;;:::o;13165:41::-;;;;:::o;13274:38::-;;;;:::o;25430:264::-;25476:7;25497:21;25535:1;25521:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25497:40;;25558:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25548:4;25553:1;25548:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25609:4;25591;25596:1;25591:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25632:15;;;;;;;;;;;:29;;;25662:14;;25678:4;25632:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25684:1;25632:54;;;;;;;;:::i;:::-;;;;;;;;25625:61;;;25430:264;:::o;12088:38::-;;;;;;;;;;;;;:::o;23636:267::-;23678:28;23709:24;23727:4;23709:9;:24::i;:::-;23678:55;;23771:1;23748:20;:24;23744:152;;;23794:16;;;;;;;;;;;23789:96;;23831:38;23848:20;23831:16;:38::i;:::-;23789:96;23744:152;23667:236;23636:267::o;19599:124::-;19664:4;19688:18;:27;19707:7;19688:27;;;;;;;;;;;;;;;;;;;;;;;;;19681:34;;19599:124;;;:::o;12930:50::-;;;;:::o;14200:119::-;14266:7;14293:9;:18;14303:7;14293:18;;;;;;;;;;;;;;;;14286:25;;14200:119;;;:::o;6506:148::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6613:1:::1;6576:40;;6597:6;::::0;::::1;;;;;;;;6576:40;;;;;;;;;;;;6644:1;6627:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6506:148::o:0;17888:107::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17979:8:::1;17963:13;;:24;;;;;;;;;;;;;;;;;;17888:107:::0;:::o;15646:122::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15732:3:::1;15723:6;:12;;;;15756:4;15746:7;:14;;;;15646:122:::0;;:::o;16241:128::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16325:36:::1;16345:9;16356:4;16325:19;:36::i;:::-;16241:128:::0;:::o;12319:72::-;;;;;;;;;;;;;:::o;6292:79::-;6330:7;6357:6;;;;;;;;;;;6350:13;;6292:79;:::o;13911:87::-;13950:13;13983:7;13976:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13911:87;:::o;23560:70::-;23607:15;:13;:15::i;:::-;23560:70::o;16377:131::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16463:37:::1;16483:9;16494:5;16463:19;:37::i;:::-;16377:131:::0;:::o;13035:34::-;;;;;;;;;;;;;:::o;15369:269::-;15462:4;15479:129;15488:12;:10;:12::i;:::-;15502:7;15511:96;15550:15;15511:96;;;;;;;;;;;;;;;;;:11;:25;15523:12;:10;:12::i;:::-;15511:25;;;;;;;;;;;;;;;:34;15537:7;15511:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;15479:8;:129::i;:::-;15626:4;15619:11;;15369:269;;;;:::o;14327:167::-;14405:4;14422:42;14432:12;:10;:12::i;:::-;14446:9;14457:6;14422:9;:42::i;:::-;14482:4;14475:11;;14327:167;;;;:::o;25702:122::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25801:15:::1;25784:14;:32;;;;25702:122:::0;:::o;24874:507::-;24994:21;25032:1;25018:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24994:40;;25055:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25045:4;25050:1;25045:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25098:12;;;;;;;;;;;25088:4;25093:1;25088:7;;;;;;;;:::i;:::-;;;;;;;:22;;;;;;;;;;;25149:15;;;;;;;;;;;:66;;;25224:9;25249:1;25298:4;25325:6;25347:15;25149:224;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24925:456;24874:507;:::o;18827:764::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18912:1:::1;18890:24;;:10;;;;;;;;;;;:24;;;18882:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;18963:58;18980:4;18995:15;;;;;;;;;;;19013:7;;18963:8;:58::i;:::-;19063:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19045:55;;;19109:4;19116:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19045:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19032:10;;:107;;;;;;;;;;;;;;;;;;19150:15;;;;;;;;;;;:31;;;19189:21;19234:4;19254:24;19272:4;19254:9;:24::i;:::-;19293:1;19309::::0;19325:7:::1;:5;:7::i;:::-;19347:15;19150:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;19381:10;;;;;;;;;;;19374:26;;;19409:15;;;;;;;;;;;19427:14;19374:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19477:10;;;;;;;;;;;19453:6;;:35;;;;;;;;;;;;;;;;;;19528:15;19499:26;:44;;;;19579:4;19554:22;;:29;;;;;;;;;;;;;;;;;;18827:764::o:0;12988:40::-;;;;:::o;15776:138::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15869:7:::1;15860:6;;:16;;;;;;;;;;;;;;;;;;15896:7;15887:6;;:16;;;;;;;;;;;;;;;;;;15776:138:::0;;:::o;12900:23::-;;;;;;;;;;;;;:::o;17036:205::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17167:18:::1;17143:21;:42;;;;17219:14;17196:20;:37;;;;17036:205:::0;;:::o;13225:42::-;;;;:::o;14502:143::-;14583:7;14610:11;:18;14622:5;14610:18;;;;;;;;;;;;;;;:27;14629:7;14610:27;;;;;;;;;;;;;;;;14603:34;;14502:143;;;;:::o;23170:382::-;23220:7;23240:13;23256:1;23240:17;;23272:9;23268:254;23290:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23286:1;:24;23268:254;;;23332:14;23349:13;;;;;;;;;;;:27;;;23377:1;23349:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23332:47;;23394:14;23411:13;;;;;;;;;;;:17;;;23429:6;23411:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23394:42;;23474:9;23454:15;:29;23451:59;;23503:7;;;;;:::i;:::-;;;;23451:59;23317:205;;23312:3;;;;;:::i;:::-;;;;23268:254;;;;23539:5;23532:12;;;23170:382;:::o;16124:109::-;16185:4;16209:10;:16;16220:4;16209:16;;;;;;;;;;;;;;;;;;;;;;;;;16202:23;;16124:109;;;:::o;15922:193::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16003:22:::1;;;;;;;;;;;15995:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16102:5;16077:22;;:30;;;;;;;;;;;;;;;;;;15922:193::o:0;6662:244::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6771:1:::1;6751:22;;:8;:22;;::::0;6743:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6861:8;6832:38;;6853:6;::::0;::::1;;;;;;;;6832:38;;;;;;;;;;;;6890:8;6881:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6662:244:::0;:::o;2634:98::-;2687:7;2714:10;2707:17;;2634:98;:::o;17249:631::-;11799:4;11780:16;;:23;;;;;;;;;;;;;;;;;;17319:14:::1;17336:21;17346:10;;;;;;;;;;;17336:9;:21::i;:::-;17319:38;;17368:20;17391:35;17405:20;;17391:9;:13;;:35;;;;:::i;:::-;17368:58;;17458:1;17440:15;:19;17437:436;;;17543:34;17549:10;;;;;;;;;;;17561:15;17543:5;:34::i;:::-;17592:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17646:44;17674:15;17646:23;;:27;;:44;;;;:::i;:::-;17620:23;:70;;;;17734:50;17754:29;17780:2;17754:21;;:25;;:29;;;;:::i;:::-;17734:15;:19;;:50;;;;:::i;:::-;17705:26;:79;;;;17804:57;17817:15;17834:26;;17804:57;;;;;;;:::i;:::-;;;;;;;;17437:436;17308:572;;11845:5:::0;11826:16;;:24;;;;;;;;;;;;;;;;;;17249:631::o;19863:337::-;19973:1;19956:19;;:5;:19;;;19948:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20054:1;20035:21;;:7;:21;;;20027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20138:6;20108:11;:18;20120:5;20108:18;;;;;;;;;;;;;;;:27;20127:7;20108:27;;;;;;;;;;;;;;;:36;;;;20176:7;20160:32;;20169:5;20160:32;;;20185:6;20160:32;;;;;;:::i;:::-;;;;;;;;19863:337;;;:::o;20208:2400::-;20312:1;20296:18;;:4;:18;;;20288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20389:1;20375:16;;:2;:16;;;20367:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20459:1;20450:6;:10;20442:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20517:17;20549:13;20566:18;:24;20585:4;20566:24;;;;;;;;;;;;;;;;;;;;;;;;;20565:25;:52;;;;;20595:18;:22;20614:2;20595:22;;;;;;;;;;;;;;;;;;;;;;;;;20594:23;20565:52;:71;;;;;20629:7;:5;:7::i;:::-;20621:15;;:4;:15;;;;20565:71;:88;;;;;20646:7;:5;:7::i;:::-;20640:13;;:2;:13;;;;20565:88;20549:104;;20675:8;;;;;;;;;;;20667:16;;:4;:16;;;;:34;;;;;20693:8;;;;;;;;;;;20687:14;;:2;:14;;;;20667:34;:59;;;;;20721:4;20705:21;;:4;:21;;;;20667:59;:82;;;;;20744:4;20730:19;;:2;:19;;;;20667:82;20664:1630;;;20769:8;20766:1517;;;20828:10;;;;;;;;;;;20820:18;;:4;:18;;;20816:320;;20866:22;;;;;;;;;;;20863:254;;;20917:15;:13;:15::i;:::-;20959:13;;;;;;;;;;;:17;;;20977:2;20981:15;20959:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20863:254;;;21066:27;21089:3;21066:18;21077:6;;21066;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;21054:39;;20863:254;20816:320;21166:10;;;;;;;;;;;21158:18;;:4;:18;;;;:38;;;;;21186:10;;;;;;;;;;;21180:16;;:2;:16;;;21158:38;21154:921;;;21230:10;:16;21241:4;21230:16;;;;;;;;;;;;;;;;;;;;;;;;;21229:17;:36;;;;;21251:10;:14;21262:2;21251:14;;;;;;;;;;;;;;;;;;;;;;;;;21250:15;21229:36;21221:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;21349:22;;;;;;;;;;;21348:23;:58;;21405:1;21348:58;;;21374:28;21398:3;21374:19;21385:7;;21374:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;21348:58;21336:70;;21451:26;;21432:15;:45;;:62;;;;;21481:13;;;;;;;;;;;21432:62;21429:627;;;21527:29;:27;:29::i;:::-;21429:627;;;21613:28;21644:24;21662:4;21644:9;:24::i;:::-;21613:55;;21722:1;21699:20;:24;21695:334;;;21760:19;21782:15;:13;:15::i;:::-;21760:37;;21860:11;21836:20;:35;;:56;;;;;21876:16;;;;;;;;;;;21875:17;21836:56;21832:166;;;21933:29;21950:11;21933:16;:29::i;:::-;21832:166;21725:304;21695:334;21586:470;21429:627;21154:921;22105:10;;;;;;;;;;;22097:18;;:4;:18;;;;:38;;;;;22125:10;;;;;;;;;;;22119:16;;:2;:16;;;;22097:38;22093:175;;;22169:10;:16;22180:4;22169:16;;;;;;;;;;;;;;;;;;;;;;;;;22168:17;:36;;;;;22190:10;:14;22201:2;22190:14;;;;;;;;;;;;;;;;;;;;;;;;;22189:15;22168:36;22160:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;22093:175;20766:1517;20664:1630;22311:22;22336:21;22347:9;22336:6;:10;;:21;;;;:::i;:::-;22311:46;;22386:27;22406:6;22386:9;:15;22396:4;22386:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;22368:9;:15;22378:4;22368:15;;;;;;;;;;;;;;;:45;;;;22440:33;22458:14;22440:9;:13;22450:2;22440:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;22424:9;:13;22434:2;22424:13;;;;;;;;;;;;;;;:49;;;;22511:39;22540:9;22511;:24;22529:4;22511:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;22484:9;:24;22502:4;22484:24;;;;;;;;;;;;;;;:66;;;;22581:2;22566:34;;22575:4;22566:34;;;22585:14;22566:34;;;;;;:::i;:::-;;;;;;;;20277:2331;;;20208:2400;;;:::o;1106:192::-;1192:7;1225:1;1220;:6;;1228:12;1212:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1252:9;1268:1;1264;:5;;;;:::i;:::-;1252:17;;1289:1;1282:8;;;1106:192;;;;;:::o;773:181::-;831:7;851:9;867:1;863;:5;;;;:::i;:::-;851:17;;892:1;887;:6;;879:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;945:1;938:8;;;773:181;;;;:::o;18273:236::-;18360:9;18355:147;18379:9;;:16;;18375:1;:20;18355:147;;;18417:12;18432:9;;18442:1;18432:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;18417:27;;18486:4;18459:18;:24;18478:4;18459:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;18402:100;18397:3;;;;;:::i;:::-;;;;18355:147;;;;18273:236;;;:::o;23911:955::-;24037:21;24075:1;24061:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24037:40;;24106:4;24088;24093:1;24088:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24132:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24122:4;24127:1;24122:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;24165:62;24182:4;24197:15;;;;;;;;;;;24215:11;24165:8;:62::i;:::-;24238:15;;;;;;;;;;;:66;;;24319:11;24345:1;24361:4;24388;24408:15;24238:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24447:18;24468:21;24447:42;;24500:19;24522:45;24563:3;24522:36;24537:20;;24522:10;:14;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;24500:67;;24595:1;24581:11;:15;24578:75;;;24613:28;24629:11;24613:15;:28::i;:::-;24578:75;24663:20;24686:27;24701:11;24686:10;:14;;:27;;;;:::i;:::-;24663:50;;24724:17;24744:19;24761:1;24744:12;:16;;:19;;;;:::i;:::-;24724:39;;24784:6;;;;;;;;;;;24776:24;;:35;24801:9;24776:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24830:6;;;;;;;;;;;24822:24;;:35;24847:9;24822:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23966:900;;;;;23911:955;:::o;16516:346::-;16611:9;16606:249;16630:9;:16;16626:1;:20;16606:249;;;16668:12;16683:9;16693:1;16683:12;;;;;;;;:::i;:::-;;;;;;;;16668:27;;16713:7;16710:134;;;16760:4;16741:10;:16;16752:4;16741:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;16710:134;;;16812:10;:16;16823:4;16812:16;;;;;;;;;;;;;;;;16805:23;;;;;;;;;;;16710:134;16653:202;16648:3;;;;;:::i;:::-;;;;16606:249;;;;16516:346;;:::o;22616:546::-;22663:22;;;;;;;;;;;22660:495;;;22706:9;22702:442;22724:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22720:1;:24;22702:442;;;22770:14;22787:13;;;;;;;;;;;:27;;;22815:1;22787:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22770:47;;22836:14;22853:9;:17;22863:6;22853:17;;;;;;;;;;;;;;;;22836:34;;22901:1;22892:6;:10;22889:193;;;22947:29;22969:6;22947:9;:17;22957:6;22947:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;22927:9;:17;22937:6;22927:17;;;;;;;;;;;;;;;:49;;;;23026:36;23055:6;23026:9;:24;23044:4;23026:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;22999:9;:24;23017:4;22999:24;;;;;;;;;;;;;;;:63;;;;22889:193;23100:13;;;;;;;;;;;:20;;;23121:6;23100:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22751:393;;22746:3;;;;;:::i;:::-;;;;22702:442;;;;22660:495;22616:546::o;1785:132::-;1843:7;1870:39;1874:1;1877;1870:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1863:46;;1785:132;;;;:::o;18517:298::-;18611:1;18592:21;;:7;:21;;;18584:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18672:18;18684:5;18672:7;;:11;;:18;;;;:::i;:::-;18662:7;:28;;;;18722:29;18745:5;18722:9;:18;18732:7;18722:18;;;;;;;;;;;;;;;;:22;;:29;;;;:::i;:::-;18701:9;:18;18711:7;18701:18;;;;;;;;;;;;;;;:50;;;;18752:3;:1;:3::i;:::-;18797:1;18771:36;;18780:7;18771:36;;;18801:5;18771:36;;;;;;:::i;:::-;;;;;;;;18517:298;;:::o;1306:471::-;1364:7;1614:1;1609;:6;1605:47;;1639:1;1632:8;;;;1605:47;1664:9;1680:1;1676;:5;;;;:::i;:::-;1664:17;;1709:1;1704;1700;:5;;;;:::i;:::-;:10;1692:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1768:1;1761:8;;;1306:471;;;;;:::o;962:136::-;1020:7;1047:43;1051:1;1054;1047:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1040:50;;962:136;;;;:::o;1925:278::-;2011:7;2043:1;2039;:5;2046:12;2031:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2070:9;2086:1;2082;:5;;;;:::i;:::-;2070:17;;2194:1;2187:8;;;1925:278;;;;;:::o;25387:37::-;25407:15;:13;:15::i;:::-;25387:37::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:::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:60::-;4144:3;4165:5;4158:12;;4116:60;;;:::o;4182:142::-;4232:9;4265:53;4283:34;4292:24;4310:5;4292:24;:::i;:::-;4283:34;:::i;:::-;4265:53;:::i;:::-;4252:66;;4182:142;;;:::o;4330:126::-;4380:9;4413:37;4444:5;4413:37;:::i;:::-;4400:50;;4330:126;;;:::o;4462:152::-;4538:9;4571:37;4602:5;4571:37;:::i;:::-;4558:50;;4462:152;;;:::o;4620:183::-;4733:63;4790:5;4733:63;:::i;:::-;4728:3;4721:76;4620:183;;:::o;4809:274::-;4928:4;4966:2;4955:9;4951:18;4943:26;;4979:97;5073:1;5062:9;5058:17;5049:6;4979:97;:::i;:::-;4809:274;;;;:::o;5089:118::-;5176:24;5194:5;5176:24;:::i;:::-;5171:3;5164:37;5089:118;;:::o;5213:222::-;5306:4;5344:2;5333:9;5329:18;5321:26;;5357:71;5425:1;5414:9;5410:17;5401:6;5357:71;:::i;:::-;5213:222;;;;:::o;5441:619::-;5518:6;5526;5534;5583:2;5571:9;5562:7;5558:23;5554:32;5551:119;;;5589:79;;:::i;:::-;5551:119;5709:1;5734:53;5779:7;5770:6;5759:9;5755:22;5734:53;:::i;:::-;5724:63;;5680:117;5836:2;5862:53;5907:7;5898:6;5887:9;5883:22;5862:53;:::i;:::-;5852:63;;5807:118;5964:2;5990:53;6035:7;6026:6;6015:9;6011:22;5990:53;:::i;:::-;5980:63;;5935:118;5441:619;;;;;:::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:177::-;12798:29;12794:1;12786:6;12782:14;12775:53;12658:177;:::o;12841:366::-;12983:3;13004:67;13068:2;13063:3;13004:67;:::i;:::-;12997:74;;13080:93;13169:3;13080:93;:::i;:::-;13198:2;13193:3;13189:12;13182:19;;12841:366;;;:::o;13213:419::-;13379:4;13417:2;13406:9;13402:18;13394:26;;13466:9;13460:4;13456:20;13452:1;13441:9;13437:17;13430:47;13494:131;13620:4;13494:131;:::i;:::-;13486:139;;13213:419;;;:::o;13638:180::-;13686:77;13683:1;13676:88;13783:4;13780:1;13773:15;13807:4;13804:1;13797:15;13824:320;13868:6;13905:1;13899:4;13895:12;13885:22;;13952:1;13946:4;13942:12;13973:18;13963:81;;14029:4;14021:6;14017:17;14007:27;;13963:81;14091:2;14083:6;14080:14;14060:18;14057:38;14054:84;;14110:18;;:::i;:::-;14054:84;13875:269;13824:320;;;:::o;14150:228::-;14290:34;14286:1;14278:6;14274:14;14267:58;14359:11;14354:2;14346:6;14342:15;14335:36;14150:228;:::o;14384:366::-;14526:3;14547:67;14611:2;14606:3;14547:67;:::i;:::-;14540:74;;14623:93;14712:3;14623:93;:::i;:::-;14741:2;14736:3;14732:12;14725:19;;14384:366;;;:::o;14756:419::-;14922:4;14960:2;14949:9;14945:18;14937:26;;15009:9;15003:4;14999:20;14995:1;14984:9;14980:17;14973:47;15037:131;15163:4;15037:131;:::i;:::-;15029:139;;14756:419;;;:::o;15181:223::-;15321:34;15317:1;15309:6;15305:14;15298:58;15390:6;15385:2;15377:6;15373:15;15366:31;15181:223;:::o;15410:366::-;15552:3;15573:67;15637:2;15632:3;15573:67;:::i;:::-;15566:74;;15649:93;15738:3;15649:93;:::i;:::-;15767:2;15762:3;15758:12;15751:19;;15410:366;;;:::o;15782:419::-;15948:4;15986:2;15975:9;15971:18;15963:26;;16035:9;16029:4;16025:20;16021:1;16010:9;16006:17;15999:47;16063:131;16189:4;16063:131;:::i;:::-;16055:139;;15782:419;;;:::o;16207:182::-;16347:34;16343:1;16335:6;16331:14;16324:58;16207:182;:::o;16395:366::-;16537:3;16558:67;16622:2;16617:3;16558:67;:::i;:::-;16551:74;;16634:93;16723:3;16634:93;:::i;:::-;16752:2;16747:3;16743:12;16736:19;;16395:366;;;:::o;16767:419::-;16933:4;16971:2;16960:9;16956:18;16948:26;;17020:9;17014:4;17010:20;17006:1;16995:9;16991:17;16984:47;17048:131;17174:4;17048:131;:::i;:::-;17040:139;;16767:419;;;:::o;17192:178::-;17332:30;17328:1;17320:6;17316:14;17309:54;17192:178;:::o;17376:366::-;17518:3;17539:67;17603:2;17598:3;17539:67;:::i;:::-;17532:74;;17615:93;17704:3;17615:93;:::i;:::-;17733:2;17728:3;17724:12;17717:19;;17376:366;;;:::o;17748:419::-;17914:4;17952:2;17941:9;17937:18;17929:26;;18001:9;17995:4;17991:20;17987:1;17976:9;17972:17;17965:47;18029:131;18155:4;18029:131;:::i;:::-;18021:139;;17748:419;;;:::o;18173:143::-;18230:5;18261:6;18255:13;18246:22;;18277:33;18304:5;18277:33;:::i;:::-;18173:143;;;;:::o;18322:351::-;18392:6;18441:2;18429:9;18420:7;18416:23;18412:32;18409:119;;;18447:79;;:::i;:::-;18409:119;18567:1;18592:64;18648:7;18639:6;18628:9;18624:22;18592:64;:::i;:::-;18582:74;;18538:128;18322:351;;;;:::o;18679:332::-;18800:4;18838:2;18827:9;18823:18;18815:26;;18851:71;18919:1;18908:9;18904:17;18895:6;18851:71;:::i;:::-;18932:72;19000:2;18989:9;18985:18;18976:6;18932:72;:::i;:::-;18679:332;;;;;:::o;19017:137::-;19071:5;19102:6;19096:13;19087:22;;19118:30;19142:5;19118:30;:::i;:::-;19017:137;;;;:::o;19160:345::-;19227:6;19276:2;19264:9;19255:7;19251:23;19247:32;19244:119;;;19282:79;;:::i;:::-;19244:119;19402:1;19427:61;19480:7;19471:6;19460:9;19456:22;19427:61;:::i;:::-;19417:71;;19373:125;19160:345;;;;:::o;19511:143::-;19568:5;19599:6;19593:13;19584:22;;19615:33;19642:5;19615:33;:::i;:::-;19511:143;;;;:::o;19660:351::-;19730:6;19779:2;19767:9;19758:7;19754:23;19750:32;19747:119;;;19785:79;;:::i;:::-;19747:119;19905:1;19930:64;19986:7;19977:6;19966:9;19962:22;19930:64;:::i;:::-;19920:74;;19876:128;19660:351;;;;:::o;20017:180::-;20065:77;20062:1;20055:88;20162:4;20159:1;20152:15;20186:4;20183:1;20176:15;20203:114;20270:6;20304:5;20298:12;20288:22;;20203:114;;;:::o;20323:184::-;20422:11;20456:6;20451:3;20444:19;20496:4;20491:3;20487:14;20472:29;;20323:184;;;;:::o;20513:132::-;20580:4;20603:3;20595:11;;20633:4;20628:3;20624:14;20616:22;;20513:132;;;:::o;20651:108::-;20728:24;20746:5;20728:24;:::i;:::-;20723:3;20716:37;20651:108;;:::o;20765:179::-;20834:10;20855:46;20897:3;20889:6;20855:46;:::i;:::-;20933:4;20928:3;20924:14;20910:28;;20765:179;;;;:::o;20950:113::-;21020:4;21052;21047:3;21043:14;21035:22;;20950:113;;;:::o;21099:732::-;21218:3;21247:54;21295:5;21247:54;:::i;:::-;21317:86;21396:6;21391:3;21317:86;:::i;:::-;21310:93;;21427:56;21477:5;21427:56;:::i;:::-;21506:7;21537:1;21522:284;21547:6;21544:1;21541:13;21522:284;;;21623:6;21617:13;21650:63;21709:3;21694:13;21650:63;:::i;:::-;21643:70;;21736:60;21789:6;21736:60;:::i;:::-;21726:70;;21582:224;21569:1;21566;21562:9;21557:14;;21522:284;;;21526:14;21822:3;21815:10;;21223:608;;;21099:732;;;;:::o;21837:483::-;22008:4;22046:2;22035:9;22031:18;22023:26;;22059:71;22127:1;22116:9;22112:17;22103:6;22059:71;:::i;:::-;22177:9;22171:4;22167:20;22162:2;22151:9;22147:18;22140:48;22205:108;22308:4;22299:6;22205:108;:::i;:::-;22197:116;;21837:483;;;;;:::o;22326:311::-;22403:4;22493:18;22485:6;22482:30;22479:56;;;22515:18;;:::i;:::-;22479:56;22565:4;22557:6;22553:17;22545:25;;22625:4;22619;22615:15;22607:23;;22326:311;;;:::o;22660:732::-;22767:5;22792:81;22808:64;22865:6;22808:64;:::i;:::-;22792:81;:::i;:::-;22783:90;;22893:5;22922:6;22915:5;22908:21;22956:4;22949:5;22945:16;22938:23;;23009:4;23001:6;22997:17;22989:6;22985:30;23038:3;23030:6;23027:15;23024:122;;;23057:79;;:::i;:::-;23024:122;23172:6;23155:231;23189:6;23184:3;23181:15;23155:231;;;23264:3;23293:48;23337:3;23325:10;23293:48;:::i;:::-;23288:3;23281:61;23371:4;23366:3;23362:14;23355:21;;23231:155;23215:4;23210:3;23206:14;23199:21;;23155:231;;;23159:21;22773:619;;22660:732;;;;;:::o;23415:385::-;23497:5;23546:3;23539:4;23531:6;23527:17;23523:27;23513:122;;23554:79;;:::i;:::-;23513:122;23664:6;23658:13;23689:105;23790:3;23782:6;23775:4;23767:6;23763:17;23689:105;:::i;:::-;23680:114;;23503:297;23415:385;;;;:::o;23806:554::-;23901:6;23950:2;23938:9;23929:7;23925:23;23921:32;23918:119;;;23956:79;;:::i;:::-;23918:119;24097:1;24086:9;24082:17;24076:24;24127:18;24119:6;24116:30;24113:117;;;24149:79;;:::i;:::-;24113:117;24254:89;24335:7;24326:6;24315:9;24311:22;24254:89;:::i;:::-;24244:99;;24047:306;23806:554;;;;:::o;24366:85::-;24411:7;24440:5;24429:16;;24366:85;;;:::o;24457:158::-;24515:9;24548:61;24566:42;24575:32;24601:5;24575:32;:::i;:::-;24566:42;:::i;:::-;24548:61;:::i;:::-;24535:74;;24457:158;;;:::o;24621:147::-;24716:45;24755:5;24716:45;:::i;:::-;24711:3;24704:58;24621:147;;:::o;24774:720::-;25009:4;25047:3;25036:9;25032:19;25024:27;;25061:79;25137:1;25126:9;25122:17;25113:6;25061:79;:::i;:::-;25187:9;25181:4;25177:20;25172:2;25161:9;25157:18;25150:48;25215:108;25318:4;25309:6;25215:108;:::i;:::-;25207:116;;25333:72;25401:2;25390:9;25386:18;25377:6;25333:72;:::i;:::-;25415;25483:2;25472:9;25468:18;25459:6;25415:72;:::i;:::-;24774:720;;;;;;;:::o;25500:221::-;25640:34;25636:1;25628:6;25624:14;25617:58;25709:4;25704:2;25696:6;25692:15;25685:29;25500:221;:::o;25727:366::-;25869:3;25890:67;25954:2;25949:3;25890:67;:::i;:::-;25883:74;;25966:93;26055:3;25966:93;:::i;:::-;26084:2;26079:3;26075:12;26068:19;;25727:366;;;:::o;26099:419::-;26265:4;26303:2;26292:9;26288:18;26280:26;;26352:9;26346:4;26342:20;26338:1;26327:9;26323:17;26316:47;26380:131;26506:4;26380:131;:::i;:::-;26372:139;;26099:419;;;:::o;26524:332::-;26645:4;26683:2;26672:9;26668:18;26660:26;;26696:71;26764:1;26753:9;26749:17;26740:6;26696:71;:::i;:::-;26777:72;26845:2;26834:9;26830:18;26821:6;26777:72;:::i;:::-;26524:332;;;;;:::o;26862:807::-;27111:4;27149:3;27138:9;27134:19;27126:27;;27163:71;27231:1;27220:9;27216:17;27207:6;27163:71;:::i;:::-;27244:72;27312:2;27301:9;27297:18;27288:6;27244:72;:::i;:::-;27326:80;27402:2;27391:9;27387:18;27378:6;27326:80;:::i;:::-;27416;27492:2;27481:9;27477:18;27468:6;27416:80;:::i;:::-;27506:73;27574:3;27563:9;27559:19;27550:6;27506:73;:::i;:::-;27589;27657:3;27646:9;27642:19;27633:6;27589:73;:::i;:::-;26862:807;;;;;;;;;:::o;27675:663::-;27763:6;27771;27779;27828:2;27816:9;27807:7;27803:23;27799:32;27796:119;;;27834:79;;:::i;:::-;27796:119;27954:1;27979:64;28035:7;28026:6;28015:9;28011:22;27979:64;:::i;:::-;27969:74;;27925:128;28092:2;28118:64;28174:7;28165:6;28154:9;28150:22;28118:64;:::i;:::-;28108:74;;28063:129;28231:2;28257:64;28313:7;28304:6;28293:9;28289:22;28257:64;:::i;:::-;28247:74;;28202:129;27675:663;;;;;:::o;28344:180::-;28392:77;28389:1;28382:88;28489:4;28486:1;28479:15;28513:4;28510:1;28503:15;28530:233;28569:3;28592:24;28610:5;28592:24;:::i;:::-;28583:33;;28638:66;28631:5;28628:77;28625:103;;28708:18;;:::i;:::-;28625:103;28755:1;28748:5;28744:13;28737:20;;28530:233;;;:::o;28769:224::-;28909:34;28905:1;28897:6;28893:14;28886:58;28978:7;28973:2;28965:6;28961:15;28954:32;28769:224;:::o;28999:366::-;29141:3;29162:67;29226:2;29221:3;29162:67;:::i;:::-;29155:74;;29238:93;29327:3;29238:93;:::i;:::-;29356:2;29351:3;29347:12;29340:19;;28999:366;;;:::o;29371:419::-;29537:4;29575:2;29564:9;29560:18;29552:26;;29624:9;29618:4;29614:20;29610:1;29599:9;29595:17;29588:47;29652:131;29778:4;29652:131;:::i;:::-;29644:139;;29371:419;;;:::o;29796:225::-;29936:34;29932:1;29924:6;29920:14;29913:58;30005:8;30000:2;29992:6;29988:15;29981:33;29796:225;:::o;30027:366::-;30169:3;30190:67;30254:2;30249:3;30190:67;:::i;:::-;30183:74;;30266:93;30355:3;30266:93;:::i;:::-;30384:2;30379:3;30375:12;30368:19;;30027:366;;;:::o;30399:419::-;30565:4;30603:2;30592:9;30588:18;30580:26;;30652:9;30646:4;30642:20;30638:1;30627:9;30623:17;30616:47;30680:131;30806:4;30680:131;:::i;:::-;30672:139;;30399:419;;;:::o;30824:332::-;30945:4;30983:2;30972:9;30968:18;30960:26;;30996:71;31064:1;31053:9;31049:17;31040:6;30996:71;:::i;:::-;31077:72;31145:2;31134:9;31130:18;31121:6;31077:72;:::i;:::-;30824:332;;;;;:::o;31162:223::-;31302:34;31298:1;31290:6;31286:14;31279:58;31371:6;31366:2;31358:6;31354:15;31347:31;31162:223;:::o;31391:366::-;31533:3;31554:67;31618:2;31613:3;31554:67;:::i;:::-;31547:74;;31630:93;31719:3;31630:93;:::i;:::-;31748:2;31743:3;31739:12;31732:19;;31391:366;;;:::o;31763:419::-;31929:4;31967:2;31956:9;31952:18;31944:26;;32016:9;32010:4;32006:20;32002:1;31991:9;31987:17;31980:47;32044:131;32170:4;32044:131;:::i;:::-;32036:139;;31763:419;;;:::o;32188:221::-;32328:34;32324:1;32316:6;32312:14;32305:58;32397:4;32392:2;32384:6;32380:15;32373:29;32188:221;:::o;32415:366::-;32557:3;32578:67;32642:2;32637:3;32578:67;:::i;:::-;32571:74;;32654:93;32743:3;32654:93;:::i;:::-;32772:2;32767:3;32763:12;32756:19;;32415:366;;;:::o;32787:419::-;32953:4;32991:2;32980:9;32976:18;32968:26;;33040:9;33034:4;33030:20;33026:1;33015:9;33011:17;33004:47;33068:131;33194:4;33068:131;:::i;:::-;33060:139;;32787:419;;;:::o;33212:224::-;33352:34;33348:1;33340:6;33336:14;33329:58;33421:7;33416:2;33408:6;33404:15;33397:32;33212:224;:::o;33442:366::-;33584:3;33605:67;33669:2;33664:3;33605:67;:::i;:::-;33598:74;;33681:93;33770:3;33681:93;:::i;:::-;33799:2;33794:3;33790:12;33783:19;;33442:366;;;:::o;33814:419::-;33980:4;34018:2;34007:9;34003:18;33995:26;;34067:9;34061:4;34057:20;34053:1;34042:9;34038:17;34031:47;34095:131;34221:4;34095:131;:::i;:::-;34087:139;;33814:419;;;:::o;34239:222::-;34379:34;34375:1;34367:6;34363:14;34356:58;34448:5;34443:2;34435:6;34431:15;34424:30;34239:222;:::o;34467:366::-;34609:3;34630:67;34694:2;34689:3;34630:67;:::i;:::-;34623:74;;34706:93;34795:3;34706:93;:::i;:::-;34824:2;34819:3;34815:12;34808:19;;34467:366;;;:::o;34839:419::-;35005:4;35043:2;35032:9;35028:18;35020:26;;35092:9;35086:4;35082:20;35078:1;35067:9;35063:17;35056:47;35120:131;35246:4;35120:131;:::i;:::-;35112:139;;34839:419;;;:::o;35264:228::-;35404:34;35400:1;35392:6;35388:14;35381:58;35473:11;35468:2;35460:6;35456:15;35449:36;35264:228;:::o;35498:366::-;35640:3;35661:67;35725:2;35720:3;35661:67;:::i;:::-;35654:74;;35737:93;35826:3;35737:93;:::i;:::-;35855:2;35850:3;35846:12;35839:19;;35498:366;;;:::o;35870:419::-;36036:4;36074:2;36063:9;36059:18;36051:26;;36123:9;36117:4;36113:20;36109:1;36098:9;36094:17;36087:47;36151:131;36277:4;36151:131;:::i;:::-;36143:139;;35870:419;;;:::o;36295:222::-;36435:34;36431:1;36423:6;36419:14;36412:58;36504:5;36499:2;36491:6;36487:15;36480:30;36295:222;:::o;36523:366::-;36665:3;36686:67;36750:2;36745:3;36686:67;:::i;:::-;36679:74;;36762:93;36851:3;36762:93;:::i;:::-;36880:2;36875:3;36871:12;36864:19;;36523:366;;;:::o;36895:419::-;37061:4;37099:2;37088:9;37084:18;37076:26;;37148:9;37142:4;37138:20;37134:1;37123:9;37119:17;37112:47;37176:131;37302:4;37176:131;:::i;:::-;37168:139;;36895:419;;;:::o;37320:226::-;37460:34;37456:1;37448:6;37444:14;37437:58;37529:9;37524:2;37516:6;37512:15;37505:34;37320:226;:::o;37552:366::-;37694:3;37715:67;37779:2;37774:3;37715:67;:::i;:::-;37708:74;;37791:93;37880:3;37791:93;:::i;:::-;37909:2;37904:3;37900:12;37893:19;;37552:366;;;:::o;37924:419::-;38090:4;38128:2;38117:9;38113:18;38105:26;;38177:9;38171:4;38167:20;38163:1;38152:9;38148:17;38141:47;38205:131;38331:4;38205:131;:::i;:::-;38197:139;;37924:419;;;:::o;38349:194::-;38389:4;38409:20;38427:1;38409:20;:::i;:::-;38404:25;;38443:20;38461:1;38443:20;:::i;:::-;38438:25;;38487:1;38484;38480:9;38472:17;;38511:1;38505:4;38502:11;38499:37;;;38516:18;;:::i;:::-;38499:37;38349:194;;;;:::o;38549:191::-;38589:3;38608:20;38626:1;38608:20;:::i;:::-;38603:25;;38642:20;38660:1;38642:20;:::i;:::-;38637:25;;38685:1;38682;38678:9;38671:16;;38706:3;38703:1;38700:10;38697:36;;;38713:18;;:::i;:::-;38697:36;38549:191;;;;:::o;38746:177::-;38886:29;38882:1;38874:6;38870:14;38863:53;38746:177;:::o;38929:366::-;39071:3;39092:67;39156:2;39151:3;39092:67;:::i;:::-;39085:74;;39168:93;39257:3;39168:93;:::i;:::-;39286:2;39281:3;39277:12;39270:19;;38929:366;;;:::o;39301:419::-;39467:4;39505:2;39494:9;39490:18;39482:26;;39554:9;39548:4;39544:20;39540:1;39529:9;39525:17;39518:47;39582:131;39708:4;39582:131;:::i;:::-;39574:139;;39301:419;;;:::o;39726:831::-;39989:4;40027:3;40016:9;40012:19;40004:27;;40041:71;40109:1;40098:9;40094:17;40085:6;40041:71;:::i;:::-;40122:80;40198:2;40187:9;40183:18;40174:6;40122:80;:::i;:::-;40249:9;40243:4;40239:20;40234:2;40223:9;40219:18;40212:48;40277:108;40380:4;40371:6;40277:108;:::i;:::-;40269:116;;40395:72;40463:2;40452:9;40448:18;40439:6;40395:72;:::i;:::-;40477:73;40545:3;40534:9;40530:19;40521:6;40477:73;:::i;:::-;39726:831;;;;;;;;:::o;40563:220::-;40703:34;40699:1;40691:6;40687:14;40680:58;40772:3;40767:2;40759:6;40755:15;40748:28;40563:220;:::o;40789:366::-;40931:3;40952:67;41016:2;41011:3;40952:67;:::i;:::-;40945:74;;41028:93;41117:3;41028:93;:::i;:::-;41146:2;41141:3;41137:12;41130:19;;40789:366;;;:::o;41161:419::-;41327:4;41365:2;41354:9;41350:18;41342:26;;41414:9;41408:4;41404:20;41400:1;41389:9;41385:17;41378:47;41442:131;41568:4;41442:131;:::i;:::-;41434:139;;41161:419;;;:::o;41586:410::-;41626:7;41649:20;41667:1;41649:20;:::i;:::-;41644:25;;41683:20;41701:1;41683:20;:::i;:::-;41678:25;;41738:1;41735;41731:9;41760:30;41778:11;41760:30;:::i;:::-;41749:41;;41939:1;41930:7;41926:15;41923:1;41920:22;41900:1;41893:9;41873:83;41850:139;;41969:18;;:::i;:::-;41850:139;41634:362;41586:410;;;;:::o;42002:180::-;42050:77;42047:1;42040:88;42147:4;42144:1;42137:15;42171:4;42168:1;42161:15;42188:185;42228:1;42245:20;42263:1;42245:20;:::i;:::-;42240:25;;42279:20;42297:1;42279:20;:::i;:::-;42274:25;;42318:1;42308:35;;42323:18;;:::i;:::-;42308:35;42365:1;42362;42358:9;42353:14;;42188:185;;;;:::o;42379:220::-;42519:34;42515:1;42507:6;42503:14;42496:58;42588:3;42583:2;42575:6;42571:15;42564:28;42379:220;:::o;42605:366::-;42747:3;42768:67;42832:2;42827:3;42768:67;:::i;:::-;42761:74;;42844:93;42933:3;42844:93;:::i;:::-;42962:2;42957:3;42953:12;42946:19;;42605:366;;;:::o;42977:419::-;43143:4;43181:2;43170:9;43166:18;43158:26;;43230:9;43224:4;43220:20;43216:1;43205:9;43201:17;43194:47;43258:131;43384:4;43258:131;:::i;:::-;43250:139;;42977:419;;;:::o

Swarm Source

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