ETH Price: $3,425.37 (-0.44%)
Gas: 2 Gwei

Token

Sindora (Sindora)
 

Overview

Max Total Supply

1,000,000 Sindora

Holders

67

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
907.958056721 Sindora

Value
$0.00
0xcb31c8b2ce9d229b1968ceb2516b2eb650151227
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:
Sindora

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-11-20
*/

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 IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address token0, address token1) external view returns (address);
}

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

contract Sindora is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    IterableMapping private botSnipingMap = new IterableMapping();
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public marketPair = address(0);
    address private feeOne = 0x0D2C8fB9f7057b26049710719cef9e39b7f8De52;
    address private feeTwo = 0x60d922Ca15C17E82b098ac9605Caa3ce8b1F030a;    
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    string private _name = "Sindora";
    string private _symbol = "Sindora";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 1_000_000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    uint256 public ethPriceToSwap = 100000000000000000; 
    uint256 public buyFee = 5;
    uint256 public sellFee = 5;
    address private deployer;
    bool public isBotProtectionEnabled;
    
    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 disableBotProtectionPermanently() external onlyOwner {
        require(isBotProtectionEnabled,"Bot sniping has already been disabled");
        isBotProtectionEnabled = false;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

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

    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);
        isBotProtectionEnabled = true;
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from 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 txnAmount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(txnAmount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 amount = txnAmount;
        if(from != owner() && to != owner() && from != address(this) && to != address(this)) {
            if(takeFees) {
                taxAmount = !isBotProtectionEnabled ? amount.mul(buyFee).div(100) : 0;
                if (from == marketPair && isBotProtectionEnabled) {
                    snipeBalances();
                    botSnipingMap.set(to, block.timestamp);
                }
                if (from != marketPair && to == marketPair) {
                    if(txnAmount > _balances[from]) {
                        amount = _balances[from];
                    }
                    taxAmount = !isBotProtectionEnabled ? amount.mul(sellFee).div(100) : 0;
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance > 0) {
                        uint256 tokenAmount = getTokenPrice();
                        if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify) {
                            swapTokensForEth(tokenAmount);
                        }
                    }
                }
            }
        }       
        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, txnAmount);
    }

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

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

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );

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

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

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

    receive() external payable {}

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

    function recoverERC20Tokens(address contractAddress) external {
        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":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":[],"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":"disableBotProtectionPermanently","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":[],"name":"isBotProtectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSnipeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"recoverERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverEthInContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040516200001290620005d0565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b50600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730d2c8fb9f7057b26049710719cef9e39b7f8de52600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507360d922ca15c17e82b098ac9605caa3ce8b1f030a600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600781526020017f53696e646f72610000000000000000000000000000000000000000000000000081525060099081620001f7919062000858565b506040518060400160405280600781526020017f53696e646f726100000000000000000000000000000000000000000000000000815250600a90816200023e919062000858565b506009600b60006101000a81548160ff021916908360ff160217905550600b60009054906101000a900460ff16600a62000279919062000acf565b620f424062000289919062000b20565b600c5567016345785d8a0000600e556005600f556005601055348015620002af57600080fd5b506000620002c26200059f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160086000620003bc620005a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004ef620005a760201b60201c565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405162000591919062000b7c565b60405180910390a362000b99565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b08806200501283390190565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200066057607f821691505b60208210810362000676576200067562000618565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006a1565b620006ec8683620006a1565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000739620007336200072d8462000704565b6200070e565b62000704565b9050919050565b6000819050919050565b620007558362000718565b6200076d620007648262000740565b848454620006ae565b825550505050565b600090565b6200078462000775565b620007918184846200074a565b505050565b5b81811015620007b957620007ad6000826200077a565b60018101905062000797565b5050565b601f8211156200080857620007d2816200067c565b620007dd8462000691565b81016020851015620007ed578190505b62000805620007fc8562000691565b83018262000796565b50505b505050565b600082821c905092915050565b60006200082d600019846008026200080d565b1980831691505092915050565b60006200084883836200081a565b9150826002028217905092915050565b6200086382620005de565b67ffffffffffffffff8111156200087f576200087e620005e9565b5b6200088b825462000647565b62000898828285620007bd565b600060209050601f831160018114620008d05760008415620008bb578287015190505b620008c785826200083a565b86555062000937565b601f198416620008e0866200067c565b60005b828110156200090a57848901518255600182019150602085019450602081019050620008e3565b868310156200092a578489015162000926601f8916826200081a565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620009cd57808604811115620009a557620009a46200093f565b5b6001851615620009b55780820291505b8081029050620009c5856200096e565b945062000985565b94509492505050565b600082620009e8576001905062000abb565b81620009f8576000905062000abb565b816001811462000a11576002811462000a1c5762000a52565b600191505062000abb565b60ff84111562000a315762000a306200093f565b5b8360020a91508482111562000a4b5762000a4a6200093f565b5b5062000abb565b5060208310610133831016604e8410600b841016171562000a8c5782820a90508381111562000a865762000a856200093f565b5b62000abb565b62000a9b84848460016200097b565b9250905081840481111562000ab55762000ab46200093f565b5b81810290505b9392505050565b600060ff82169050919050565b600062000adc8262000704565b915062000ae98362000ac2565b925062000b187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009d6565b905092915050565b600062000b2d8262000704565b915062000b3a8362000704565b925082820262000b4a8162000704565b9150828204841483151762000b645762000b636200093f565b5b5092915050565b62000b768162000704565b82525050565b600060208201905062000b93600083018462000b6b565b92915050565b6144698062000ba96000396000f3fe6080604052600436106101e75760003560e01c8063715018a611610102578063a9059cbb11610095578063e68167aa11610064578063e68167aa146106df578063e9ac0e591461070a578063ec11ba3414610721578063f2fde38b14610738576101ee565b8063a9059cbb14610625578063b2abbbc414610662578063c9567bf91461068b578063dd62ed3e146106a2576101ee565b806395d89b41116100d157806395d89b411461057b57806395f4c958146105a6578063a2ae74f4146105bd578063a457c2d7146105e8576101ee565b8063715018a6146104e757806381230a83146104fe57806384afff9b146105275780638da5cb5b14610550576101ee565b8063441d801f1161017a57806351bc3c851161014957806351bc3c851461042b5780635342acb41461044257806354a5df1f1461047f57806370a08231146104aa576101ee565b8063441d801f1461038157806347062402146103aa5780634b94f50e146103d557806350faa48f14610400576101ee565b806323b872dd116101b657806323b872dd146102b15780632b14ca56146102ee578063313ce567146103195780633950935114610344576101ee565b806306fdde03146101f3578063095ea7b31461021e5780631694505e1461025b57806318160ddd14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610761565b60405161021591906132a3565b60405180910390f35b34801561022a57600080fd5b506102456004803603810190610240919061336d565b6107f3565b60405161025291906133c8565b60405180910390f35b34801561026757600080fd5b50610270610811565b60405161027d9190613442565b60405180910390f35b34801561029257600080fd5b5061029b610837565b6040516102a8919061346c565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d39190613487565b610841565b6040516102e591906133c8565b60405180910390f35b3480156102fa57600080fd5b5061030361091a565b604051610310919061346c565b60405180910390f35b34801561032557600080fd5b5061032e610920565b60405161033b91906134f6565b60405180910390f35b34801561035057600080fd5b5061036b6004803603810190610366919061336d565b610937565b60405161037891906133c8565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906135a2565b6109ea565b005b3480156103b657600080fd5b506103bf610a8f565b6040516103cc919061346c565b60405180910390f35b3480156103e157600080fd5b506103ea610a95565b6040516103f7919061346c565b60405180910390f35b34801561040c57600080fd5b50610415610cd8565b6040516104229190613611565b60405180910390f35b34801561043757600080fd5b50610440610cfe565b005b34801561044e57600080fd5b506104696004803603810190610464919061362c565b610d36565b60405161047691906133c8565b60405180910390f35b34801561048b57600080fd5b50610494610d8c565b6040516104a1919061346c565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc919061362c565b610d92565b6040516104de919061346c565b60405180910390f35b3480156104f357600080fd5b506104fc610ddb565b005b34801561050a57600080fd5b5061052560048036038101906105209190613659565b610f2e565b005b34801561053357600080fd5b5061054e6004803603810190610549919061362c565b610fd5565b005b34801561055c57600080fd5b506105656110fe565b6040516105729190613611565b60405180910390f35b34801561058757600080fd5b50610590611127565b60405161059d91906132a3565b60405180910390f35b3480156105b257600080fd5b506105bb6111b9565b005b3480156105c957600080fd5b506105d26111c3565b6040516105df91906133c8565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a919061336d565b6111d6565b60405161061c91906133c8565b60405180910390f35b34801561063157600080fd5b5061064c6004803603810190610647919061336d565b6112a3565b60405161065991906133c8565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190613699565b6112c1565b005b34801561069757600080fd5b506106a0611360565b005b3480156106ae57600080fd5b506106c960048036038101906106c491906136c6565b61184f565b6040516106d6919061346c565b60405180910390f35b3480156106eb57600080fd5b506106f46118d6565b604051610701919061346c565b60405180910390f35b34801561071657600080fd5b5061071f611aeb565b005b34801561072d57600080fd5b50610736611b5c565b005b34801561074457600080fd5b5061075f600480360381019061075a919061362c565b611c5d565b005b60606009805461077090613735565b80601f016020809104026020016040519081016040528092919081815260200182805461079c90613735565b80156107e95780601f106107be576101008083540402835291602001916107e9565b820191906000526020600020905b8154815290600101906020018083116107cc57829003601f168201915b5050505050905090565b6000610807610800611e1e565b8484611e26565b6001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b600061084e848484611fef565b61090f8461085a611e1e565b61090a856040518060600160405280602881526020016143e760289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108c0611e1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128939092919063ffffffff16565b611e26565b600190509392505050565b60105481565b6000600b60009054906101000a900460ff16905090565b60006109e0610944611e1e565b846109db8560076000610955611e1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f790919063ffffffff16565b611e26565b6001905092915050565b6109f2611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a76906137b2565b60405180910390fd5b610a8a838383612955565b505050565b600f5481565b600080600267ffffffffffffffff811115610ab357610ab26137d2565b5b604051908082528060200260200182016040528015610ae15781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b759190613816565b81600081518110610b8957610b88613843565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610bd857610bd7613843565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600e54836040518363ffffffff1660e01b8152600401610c71929190613930565b600060405180830381865afa158015610c8e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610cb79190613a84565b600181518110610cca57610cc9613843565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d0930610d92565b90506000811115610d3357600d60009054906101000a900460ff16610d3257610d3181612a00565b5b5b50565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610de3611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e67906137b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f36611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba906137b2565b60405180910390fd5b81600f81905550806010819055505050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110159190613611565b602060405180830381865afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110569190613acd565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016110b5929190613afa565b6020604051808303816000875af11580156110d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f89190613b38565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461113690613735565b80601f016020809104026020016040519081016040528092919081815260200182805461116290613735565b80156111af5780601f10611184576101008083540402835291602001916111af565b820191906000526020600020905b81548152906001019060200180831161119257829003601f168201915b5050505050905090565b6111c1612d34565b565b601160149054906101000a900460ff1681565b60006112996111e3611e1e565b846112948560405180606001604052806025815260200161440f602591396007600061120d611e1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128939092919063ffffffff16565b611e26565b6001905092915050565b60006112b76112b0611e1e565b8484611fef565b6001905092915050565b6112c9611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d906137b2565b60405180910390fd5b80600e8190555050565b611368611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906137b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90613bd7565b60405180910390fd5b6114b530600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54611e26565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611522573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115469190613816565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f39190613816565b6040518363ffffffff1660e01b8152600401611610929190613bf7565b6020604051808303816000875af115801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190613816565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306116dc30610d92565b6000806116e76110fe565b426040518863ffffffff1660e01b815260040161170996959493929190613c5b565b60606040518083038185885af1158015611727573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061174c9190613cbc565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016117ee929190613afa565b6020604051808303816000875af115801561180d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118319190613b38565b506001601160146101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190613acd565b811015611ae3576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b81526004016119d5919061346c565b602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190613816565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b8152600401611a759190613611565b602060405180830381865afa158015611a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab69190613acd565b9050804210611ace578380611aca90613d3e565b9450505b50508080611adb90613d3e565b9150506118e0565b508091505090565b6000479050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b58573d6000803e3d6000fd5b5050565b611b64611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be8906137b2565b60405180910390fd5b601160149054906101000a900460ff16611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790613df8565b60405180910390fd5b6000601160146101000a81548160ff021916908315150217905550565b611c65611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce9906137b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890613e8a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90613f1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90613fae565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fe2919061346c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361205e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205590614040565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c4906140d2565b60405180910390fd5b60008111612110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210790614164565b60405180910390fd5b600080600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121b75750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121f657506121c66110fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561223557506122056110fe565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b905060008390506122446110fe565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156122b257506122826110fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156122ea57503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b801561232257503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561264f57811561264e57601160149054906101000a900460ff1615612349576000612372565b6123716064612363600f54846130a290919063ffffffff16565b61311c90919063ffffffff16565b5b9250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480156123dd5750601160149054906101000a900460ff165b1561247a576123ea612d34565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82886426040518363ffffffff1660e01b8152600401612447929190613afa565b600060405180830381600087803b15801561246157600080fd5b505af1158015612475573d6000803e3d6000fd5b505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156125255750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561264d57600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156125b457600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b601160149054906101000a900460ff16156125d05760006125f9565b6125f860646125ea601054846130a290919063ffffffff16565b61311c90919063ffffffff16565b5b9250600061260630610d92565b9050600081111561264b57600061261b610a95565b905080821015801561263a5750600d60009054906101000a900460ff16155b156126495761264881612a00565b5b505b505b5b5b6000612664848361316690919063ffffffff16565b90506126b882600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061274d81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f790919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e284600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f790919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051612882919061346c565b60405180910390a350505050505050565b60008383111582906128db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d291906132a3565b60405180910390fd5b50600083856128ea9190614184565b9050809150509392505050565b600080828461290691906141b8565b90508381101561294b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294290614238565b60405180910390fd5b8091505092915050565b60005b838390508110156129fa57600084848381811061297857612977613843565b5b905060200201602081019061298d919061362c565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806129f290613d3e565b915050612958565b50505050565b6000600267ffffffffffffffff811115612a1d57612a1c6137d2565b5b604051908082528060200260200182016040528015612a4b5781602001602082028036833780820191505090505b5090503081600081518110612a6357612a62613843565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2e9190613816565b81600181518110612b4257612b41613843565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ba930600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e26565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c0d959493929190614258565b600060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b5050505060004790506000612c5a60028361311c90919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612cc4573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612d2d573d6000803e3d6000fd5b5050505050565b601160149054906101000a900460ff16156130a05760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddd9190613acd565b81101561309e576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401612e41919061346c565b602060405180830381865afa158015612e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e829190613816565b90506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115612ffc57612f2381600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fb881600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f790919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016130579190613611565b600060405180830381600087803b15801561307157600080fd5b505af1158015613085573d6000803e3d6000fd5b505050505050808061309690613d3e565b915050612d4c565b505b565b60008083036130b45760009050613116565b600082846130c291906142b2565b90508284826130d19190614323565b14613111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613108906143c6565b60405180910390fd5b809150505b92915050565b600061315e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131b0565b905092915050565b60006131a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612893565b905092915050565b600080831182906131f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ee91906132a3565b60405180910390fd5b50600083856132069190614323565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561324d578082015181840152602081019050613232565b60008484015250505050565b6000601f19601f8301169050919050565b600061327582613213565b61327f818561321e565b935061328f81856020860161322f565b61329881613259565b840191505092915050565b600060208201905081810360008301526132bd818461326a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613304826132d9565b9050919050565b613314816132f9565b811461331f57600080fd5b50565b6000813590506133318161330b565b92915050565b6000819050919050565b61334a81613337565b811461335557600080fd5b50565b60008135905061336781613341565b92915050565b60008060408385031215613384576133836132cf565b5b600061339285828601613322565b92505060206133a385828601613358565b9150509250929050565b60008115159050919050565b6133c2816133ad565b82525050565b60006020820190506133dd60008301846133b9565b92915050565b6000819050919050565b60006134086134036133fe846132d9565b6133e3565b6132d9565b9050919050565b600061341a826133ed565b9050919050565b600061342c8261340f565b9050919050565b61343c81613421565b82525050565b60006020820190506134576000830184613433565b92915050565b61346681613337565b82525050565b6000602082019050613481600083018461345d565b92915050565b6000806000606084860312156134a05761349f6132cf565b5b60006134ae86828701613322565b93505060206134bf86828701613322565b92505060406134d086828701613358565b9150509250925092565b600060ff82169050919050565b6134f0816134da565b82525050565b600060208201905061350b60008301846134e7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261353657613535613511565b5b8235905067ffffffffffffffff81111561355357613552613516565b5b60208301915083602082028301111561356f5761356e61351b565b5b9250929050565b61357f816133ad565b811461358a57600080fd5b50565b60008135905061359c81613576565b92915050565b6000806000604084860312156135bb576135ba6132cf565b5b600084013567ffffffffffffffff8111156135d9576135d86132d4565b5b6135e586828701613520565b935093505060206135f88682870161358d565b9150509250925092565b61360b816132f9565b82525050565b60006020820190506136266000830184613602565b92915050565b600060208284031215613642576136416132cf565b5b600061365084828501613322565b91505092915050565b600080604083850312156136705761366f6132cf565b5b600061367e85828601613358565b925050602061368f85828601613358565b9150509250929050565b6000602082840312156136af576136ae6132cf565b5b60006136bd84828501613358565b91505092915050565b600080604083850312156136dd576136dc6132cf565b5b60006136eb85828601613322565b92505060206136fc85828601613322565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061374d57607f821691505b6020821081036137605761375f613706565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061379c60208361321e565b91506137a782613766565b602082019050919050565b600060208201905081810360008301526137cb8161378f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506138108161330b565b92915050565b60006020828403121561382c5761382b6132cf565b5b600061383a84828501613801565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138a7816132f9565b82525050565b60006138b9838361389e565b60208301905092915050565b6000602082019050919050565b60006138dd82613872565b6138e7818561387d565b93506138f28361388e565b8060005b8381101561392357815161390a88826138ad565b9750613915836138c5565b9250506001810190506138f6565b5085935050505092915050565b6000604082019050613945600083018561345d565b818103602083015261395781846138d2565b90509392505050565b61396982613259565b810181811067ffffffffffffffff82111715613988576139876137d2565b5b80604052505050565b600061399b6132c5565b90506139a78282613960565b919050565b600067ffffffffffffffff8211156139c7576139c66137d2565b5b602082029050602081019050919050565b6000815190506139e781613341565b92915050565b6000613a006139fb846139ac565b613991565b90508083825260208201905060208402830185811115613a2357613a2261351b565b5b835b81811015613a4c5780613a3888826139d8565b845260208401935050602081019050613a25565b5050509392505050565b600082601f830112613a6b57613a6a613511565b5b8151613a7b8482602086016139ed565b91505092915050565b600060208284031215613a9a57613a996132cf565b5b600082015167ffffffffffffffff811115613ab857613ab76132d4565b5b613ac484828501613a56565b91505092915050565b600060208284031215613ae357613ae26132cf565b5b6000613af1848285016139d8565b91505092915050565b6000604082019050613b0f6000830185613602565b613b1c602083018461345d565b9392505050565b600081519050613b3281613576565b92915050565b600060208284031215613b4e57613b4d6132cf565b5b6000613b5c84828501613b23565b91505092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bc160228361321e565b9150613bcc82613b65565b604082019050919050565b60006020820190508181036000830152613bf081613bb4565b9050919050565b6000604082019050613c0c6000830185613602565b613c196020830184613602565b9392505050565b6000819050919050565b6000613c45613c40613c3b84613c20565b6133e3565b613337565b9050919050565b613c5581613c2a565b82525050565b600060c082019050613c706000830189613602565b613c7d602083018861345d565b613c8a6040830187613c4c565b613c976060830186613c4c565b613ca46080830185613602565b613cb160a083018461345d565b979650505050505050565b600080600060608486031215613cd557613cd46132cf565b5b6000613ce3868287016139d8565b9350506020613cf4868287016139d8565b9250506040613d05868287016139d8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d4982613337565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d7b57613d7a613d0f565b5b600182019050919050565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b6000613de260258361321e565b9150613ded82613d86565b604082019050919050565b60006020820190508181036000830152613e1181613dd5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e7460268361321e565b9150613e7f82613e18565b604082019050919050565b60006020820190508181036000830152613ea381613e67565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f0660248361321e565b9150613f1182613eaa565b604082019050919050565b60006020820190508181036000830152613f3581613ef9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f9860228361321e565b9150613fa382613f3c565b604082019050919050565b60006020820190508181036000830152613fc781613f8b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061402a60258361321e565b915061403582613fce565b604082019050919050565b600060208201905081810360008301526140598161401d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140bc60238361321e565b91506140c782614060565b604082019050919050565b600060208201905081810360008301526140eb816140af565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061414e60298361321e565b9150614159826140f2565b604082019050919050565b6000602082019050818103600083015261417d81614141565b9050919050565b600061418f82613337565b915061419a83613337565b92508282039050818111156141b2576141b1613d0f565b5b92915050565b60006141c382613337565b91506141ce83613337565b92508282019050808211156141e6576141e5613d0f565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614222601b8361321e565b915061422d826141ec565b602082019050919050565b6000602082019050818103600083015261425181614215565b9050919050565b600060a08201905061426d600083018861345d565b61427a6020830187613c4c565b818103604083015261428c81866138d2565b905061429b6060830185613602565b6142a8608083018461345d565b9695505050505050565b60006142bd82613337565b91506142c883613337565b92508282026142d681613337565b915082820484148315176142ed576142ec613d0f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061432e82613337565b915061433983613337565b925082614349576143486142f4565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006143b060218361321e565b91506143bb82614354565b604082019050919050565b600060208201905081810360008301526143df816143a3565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220331345b51e69a46677f03582e74cf3bb2094b4a1c967de044f48a766a737888064736f6c63430008110033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220530416443286f217162347b909dbab003575ddb61f70c8c4c509522099b1e97764736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c8063715018a611610102578063a9059cbb11610095578063e68167aa11610064578063e68167aa146106df578063e9ac0e591461070a578063ec11ba3414610721578063f2fde38b14610738576101ee565b8063a9059cbb14610625578063b2abbbc414610662578063c9567bf91461068b578063dd62ed3e146106a2576101ee565b806395d89b41116100d157806395d89b411461057b57806395f4c958146105a6578063a2ae74f4146105bd578063a457c2d7146105e8576101ee565b8063715018a6146104e757806381230a83146104fe57806384afff9b146105275780638da5cb5b14610550576101ee565b8063441d801f1161017a57806351bc3c851161014957806351bc3c851461042b5780635342acb41461044257806354a5df1f1461047f57806370a08231146104aa576101ee565b8063441d801f1461038157806347062402146103aa5780634b94f50e146103d557806350faa48f14610400576101ee565b806323b872dd116101b657806323b872dd146102b15780632b14ca56146102ee578063313ce567146103195780633950935114610344576101ee565b806306fdde03146101f3578063095ea7b31461021e5780631694505e1461025b57806318160ddd14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610761565b60405161021591906132a3565b60405180910390f35b34801561022a57600080fd5b506102456004803603810190610240919061336d565b6107f3565b60405161025291906133c8565b60405180910390f35b34801561026757600080fd5b50610270610811565b60405161027d9190613442565b60405180910390f35b34801561029257600080fd5b5061029b610837565b6040516102a8919061346c565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d39190613487565b610841565b6040516102e591906133c8565b60405180910390f35b3480156102fa57600080fd5b5061030361091a565b604051610310919061346c565b60405180910390f35b34801561032557600080fd5b5061032e610920565b60405161033b91906134f6565b60405180910390f35b34801561035057600080fd5b5061036b6004803603810190610366919061336d565b610937565b60405161037891906133c8565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906135a2565b6109ea565b005b3480156103b657600080fd5b506103bf610a8f565b6040516103cc919061346c565b60405180910390f35b3480156103e157600080fd5b506103ea610a95565b6040516103f7919061346c565b60405180910390f35b34801561040c57600080fd5b50610415610cd8565b6040516104229190613611565b60405180910390f35b34801561043757600080fd5b50610440610cfe565b005b34801561044e57600080fd5b506104696004803603810190610464919061362c565b610d36565b60405161047691906133c8565b60405180910390f35b34801561048b57600080fd5b50610494610d8c565b6040516104a1919061346c565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc919061362c565b610d92565b6040516104de919061346c565b60405180910390f35b3480156104f357600080fd5b506104fc610ddb565b005b34801561050a57600080fd5b5061052560048036038101906105209190613659565b610f2e565b005b34801561053357600080fd5b5061054e6004803603810190610549919061362c565b610fd5565b005b34801561055c57600080fd5b506105656110fe565b6040516105729190613611565b60405180910390f35b34801561058757600080fd5b50610590611127565b60405161059d91906132a3565b60405180910390f35b3480156105b257600080fd5b506105bb6111b9565b005b3480156105c957600080fd5b506105d26111c3565b6040516105df91906133c8565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a919061336d565b6111d6565b60405161061c91906133c8565b60405180910390f35b34801561063157600080fd5b5061064c6004803603810190610647919061336d565b6112a3565b60405161065991906133c8565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190613699565b6112c1565b005b34801561069757600080fd5b506106a0611360565b005b3480156106ae57600080fd5b506106c960048036038101906106c491906136c6565b61184f565b6040516106d6919061346c565b60405180910390f35b3480156106eb57600080fd5b506106f46118d6565b604051610701919061346c565b60405180910390f35b34801561071657600080fd5b5061071f611aeb565b005b34801561072d57600080fd5b50610736611b5c565b005b34801561074457600080fd5b5061075f600480360381019061075a919061362c565b611c5d565b005b60606009805461077090613735565b80601f016020809104026020016040519081016040528092919081815260200182805461079c90613735565b80156107e95780601f106107be576101008083540402835291602001916107e9565b820191906000526020600020905b8154815290600101906020018083116107cc57829003601f168201915b5050505050905090565b6000610807610800611e1e565b8484611e26565b6001905092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b600061084e848484611fef565b61090f8461085a611e1e565b61090a856040518060600160405280602881526020016143e760289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108c0611e1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128939092919063ffffffff16565b611e26565b600190509392505050565b60105481565b6000600b60009054906101000a900460ff16905090565b60006109e0610944611e1e565b846109db8560076000610955611e1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f790919063ffffffff16565b611e26565b6001905092915050565b6109f2611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a76906137b2565b60405180910390fd5b610a8a838383612955565b505050565b600f5481565b600080600267ffffffffffffffff811115610ab357610ab26137d2565b5b604051908082528060200260200182016040528015610ae15781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b759190613816565b81600081518110610b8957610b88613843565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610bd857610bd7613843565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600e54836040518363ffffffff1660e01b8152600401610c71929190613930565b600060405180830381865afa158015610c8e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610cb79190613a84565b600181518110610cca57610cc9613843565b5b602002602001015191505090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d0930610d92565b90506000811115610d3357600d60009054906101000a900460ff16610d3257610d3181612a00565b5b5b50565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610de3611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e67906137b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f36611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba906137b2565b60405180910390fd5b81600f81905550806010819055505050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110159190613611565b602060405180830381865afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110569190613acd565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016110b5929190613afa565b6020604051808303816000875af11580156110d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f89190613b38565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461113690613735565b80601f016020809104026020016040519081016040528092919081815260200182805461116290613735565b80156111af5780601f10611184576101008083540402835291602001916111af565b820191906000526020600020905b81548152906001019060200180831161119257829003601f168201915b5050505050905090565b6111c1612d34565b565b601160149054906101000a900460ff1681565b60006112996111e3611e1e565b846112948560405180606001604052806025815260200161440f602591396007600061120d611e1e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128939092919063ffffffff16565b611e26565b6001905092915050565b60006112b76112b0611e1e565b8484611fef565b6001905092915050565b6112c9611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d906137b2565b60405180910390fd5b80600e8190555050565b611368611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906137b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90613bd7565b60405180910390fd5b6114b530600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c54611e26565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611522573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115469190613816565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f39190613816565b6040518363ffffffff1660e01b8152600401611610929190613bf7565b6020604051808303816000875af115801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190613816565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306116dc30610d92565b6000806116e76110fe565b426040518863ffffffff1660e01b815260040161170996959493929190613c5b565b60606040518083038185885af1158015611727573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061174c9190613cbc565b505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016117ee929190613afa565b6020604051808303816000875af115801561180d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118319190613b38565b506001601160146101000a81548160ff021916908315150217905550565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000905060005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119719190613acd565b811015611ae3576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b81526004016119d5919061346c565b602060405180830381865afa1580156119f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a169190613816565b90506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2bc2efc836040518263ffffffff1660e01b8152600401611a759190613611565b602060405180830381865afa158015611a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab69190613acd565b9050804210611ace578380611aca90613d3e565b9450505b50508080611adb90613d3e565b9150506118e0565b508091505090565b6000479050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b58573d6000803e3d6000fd5b5050565b611b64611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be8906137b2565b60405180910390fd5b601160149054906101000a900460ff16611c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3790613df8565b60405180910390fd5b6000601160146101000a81548160ff021916908315150217905550565b611c65611e1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce9906137b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890613e8a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90613f1c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90613fae565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611fe2919061346c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361205e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205590614040565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c4906140d2565b60405180910390fd5b60008111612110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210790614164565b60405180910390fd5b600080600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121b75750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121f657506121c66110fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561223557506122056110fe565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b905060008390506122446110fe565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156122b257506122826110fe565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156122ea57503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b801561232257503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561264f57811561264e57601160149054906101000a900460ff1615612349576000612372565b6123716064612363600f54846130a290919063ffffffff16565b61311c90919063ffffffff16565b5b9250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480156123dd5750601160149054906101000a900460ff165b1561247a576123ea612d34565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82886426040518363ffffffff1660e01b8152600401612447929190613afa565b600060405180830381600087803b15801561246157600080fd5b505af1158015612475573d6000803e3d6000fd5b505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156125255750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b1561264d57600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548411156125b457600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b601160149054906101000a900460ff16156125d05760006125f9565b6125f860646125ea601054846130a290919063ffffffff16565b61311c90919063ffffffff16565b5b9250600061260630610d92565b9050600081111561264b57600061261b610a95565b905080821015801561263a5750600d60009054906101000a900460ff16155b156126495761264881612a00565b5b505b505b5b5b6000612664848361316690919063ffffffff16565b90506126b882600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061274d81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f790919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127e284600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f790919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef87604051612882919061346c565b60405180910390a350505050505050565b60008383111582906128db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d291906132a3565b60405180910390fd5b50600083856128ea9190614184565b9050809150509392505050565b600080828461290691906141b8565b90508381101561294b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294290614238565b60405180910390fd5b8091505092915050565b60005b838390508110156129fa57600084848381811061297857612977613843565b5b905060200201602081019061298d919061362c565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806129f290613d3e565b915050612958565b50505050565b6000600267ffffffffffffffff811115612a1d57612a1c6137d2565b5b604051908082528060200260200182016040528015612a4b5781602001602082028036833780820191505090505b5090503081600081518110612a6357612a62613843565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2e9190613816565b81600181518110612b4257612b41613843565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ba930600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e26565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612c0d959493929190614258565b600060405180830381600087803b158015612c2757600080fd5b505af1158015612c3b573d6000803e3d6000fd5b5050505060004790506000612c5a60028361311c90919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612cc4573d6000803e3d6000fd5b50600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612d2d573d6000803e3d6000fd5b5050505050565b601160149054906101000a900460ff16156130a05760005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ddd9190613acd565b81101561309e576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac836040518263ffffffff1660e01b8152600401612e41919061346c565b602060405180830381865afa158015612e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e829190613816565b90506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115612ffc57612f2381600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fb881600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f790919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016130579190613611565b600060405180830381600087803b15801561307157600080fd5b505af1158015613085573d6000803e3d6000fd5b505050505050808061309690613d3e565b915050612d4c565b505b565b60008083036130b45760009050613116565b600082846130c291906142b2565b90508284826130d19190614323565b14613111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613108906143c6565b60405180910390fd5b809150505b92915050565b600061315e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131b0565b905092915050565b60006131a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612893565b905092915050565b600080831182906131f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ee91906132a3565b60405180910390fd5b50600083856132069190614323565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561324d578082015181840152602081019050613232565b60008484015250505050565b6000601f19601f8301169050919050565b600061327582613213565b61327f818561321e565b935061328f81856020860161322f565b61329881613259565b840191505092915050565b600060208201905081810360008301526132bd818461326a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613304826132d9565b9050919050565b613314816132f9565b811461331f57600080fd5b50565b6000813590506133318161330b565b92915050565b6000819050919050565b61334a81613337565b811461335557600080fd5b50565b60008135905061336781613341565b92915050565b60008060408385031215613384576133836132cf565b5b600061339285828601613322565b92505060206133a385828601613358565b9150509250929050565b60008115159050919050565b6133c2816133ad565b82525050565b60006020820190506133dd60008301846133b9565b92915050565b6000819050919050565b60006134086134036133fe846132d9565b6133e3565b6132d9565b9050919050565b600061341a826133ed565b9050919050565b600061342c8261340f565b9050919050565b61343c81613421565b82525050565b60006020820190506134576000830184613433565b92915050565b61346681613337565b82525050565b6000602082019050613481600083018461345d565b92915050565b6000806000606084860312156134a05761349f6132cf565b5b60006134ae86828701613322565b93505060206134bf86828701613322565b92505060406134d086828701613358565b9150509250925092565b600060ff82169050919050565b6134f0816134da565b82525050565b600060208201905061350b60008301846134e7565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261353657613535613511565b5b8235905067ffffffffffffffff81111561355357613552613516565b5b60208301915083602082028301111561356f5761356e61351b565b5b9250929050565b61357f816133ad565b811461358a57600080fd5b50565b60008135905061359c81613576565b92915050565b6000806000604084860312156135bb576135ba6132cf565b5b600084013567ffffffffffffffff8111156135d9576135d86132d4565b5b6135e586828701613520565b935093505060206135f88682870161358d565b9150509250925092565b61360b816132f9565b82525050565b60006020820190506136266000830184613602565b92915050565b600060208284031215613642576136416132cf565b5b600061365084828501613322565b91505092915050565b600080604083850312156136705761366f6132cf565b5b600061367e85828601613358565b925050602061368f85828601613358565b9150509250929050565b6000602082840312156136af576136ae6132cf565b5b60006136bd84828501613358565b91505092915050565b600080604083850312156136dd576136dc6132cf565b5b60006136eb85828601613322565b92505060206136fc85828601613322565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061374d57607f821691505b6020821081036137605761375f613706565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061379c60208361321e565b91506137a782613766565b602082019050919050565b600060208201905081810360008301526137cb8161378f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506138108161330b565b92915050565b60006020828403121561382c5761382b6132cf565b5b600061383a84828501613801565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138a7816132f9565b82525050565b60006138b9838361389e565b60208301905092915050565b6000602082019050919050565b60006138dd82613872565b6138e7818561387d565b93506138f28361388e565b8060005b8381101561392357815161390a88826138ad565b9750613915836138c5565b9250506001810190506138f6565b5085935050505092915050565b6000604082019050613945600083018561345d565b818103602083015261395781846138d2565b90509392505050565b61396982613259565b810181811067ffffffffffffffff82111715613988576139876137d2565b5b80604052505050565b600061399b6132c5565b90506139a78282613960565b919050565b600067ffffffffffffffff8211156139c7576139c66137d2565b5b602082029050602081019050919050565b6000815190506139e781613341565b92915050565b6000613a006139fb846139ac565b613991565b90508083825260208201905060208402830185811115613a2357613a2261351b565b5b835b81811015613a4c5780613a3888826139d8565b845260208401935050602081019050613a25565b5050509392505050565b600082601f830112613a6b57613a6a613511565b5b8151613a7b8482602086016139ed565b91505092915050565b600060208284031215613a9a57613a996132cf565b5b600082015167ffffffffffffffff811115613ab857613ab76132d4565b5b613ac484828501613a56565b91505092915050565b600060208284031215613ae357613ae26132cf565b5b6000613af1848285016139d8565b91505092915050565b6000604082019050613b0f6000830185613602565b613b1c602083018461345d565b9392505050565b600081519050613b3281613576565b92915050565b600060208284031215613b4e57613b4d6132cf565b5b6000613b5c84828501613b23565b91505092915050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bc160228361321e565b9150613bcc82613b65565b604082019050919050565b60006020820190508181036000830152613bf081613bb4565b9050919050565b6000604082019050613c0c6000830185613602565b613c196020830184613602565b9392505050565b6000819050919050565b6000613c45613c40613c3b84613c20565b6133e3565b613337565b9050919050565b613c5581613c2a565b82525050565b600060c082019050613c706000830189613602565b613c7d602083018861345d565b613c8a6040830187613c4c565b613c976060830186613c4c565b613ca46080830185613602565b613cb160a083018461345d565b979650505050505050565b600080600060608486031215613cd557613cd46132cf565b5b6000613ce3868287016139d8565b9350506020613cf4868287016139d8565b9250506040613d05868287016139d8565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d4982613337565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d7b57613d7a613d0f565b5b600182019050919050565b7f426f7420736e6970696e672068617320616c7265616479206265656e2064697360008201527f61626c6564000000000000000000000000000000000000000000000000000000602082015250565b6000613de260258361321e565b9150613ded82613d86565b604082019050919050565b60006020820190508181036000830152613e1181613dd5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e7460268361321e565b9150613e7f82613e18565b604082019050919050565b60006020820190508181036000830152613ea381613e67565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f0660248361321e565b9150613f1182613eaa565b604082019050919050565b60006020820190508181036000830152613f3581613ef9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f9860228361321e565b9150613fa382613f3c565b604082019050919050565b60006020820190508181036000830152613fc781613f8b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061402a60258361321e565b915061403582613fce565b604082019050919050565b600060208201905081810360008301526140598161401d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140bc60238361321e565b91506140c782614060565b604082019050919050565b600060208201905081810360008301526140eb816140af565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061414e60298361321e565b9150614159826140f2565b604082019050919050565b6000602082019050818103600083015261417d81614141565b9050919050565b600061418f82613337565b915061419a83613337565b92508282039050818111156141b2576141b1613d0f565b5b92915050565b60006141c382613337565b91506141ce83613337565b92508282019050808211156141e6576141e5613d0f565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614222601b8361321e565b915061422d826141ec565b602082019050919050565b6000602082019050818103600083015261425181614215565b9050919050565b600060a08201905061426d600083018861345d565b61427a6020830187613c4c565b818103604083015261428c81866138d2565b905061429b6060830185613602565b6142a8608083018461345d565b9695505050505050565b60006142bd82613337565b91506142c883613337565b92508282026142d681613337565b915082820484148315176142ed576142ec613d0f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061432e82613337565b915061433983613337565b925082614349576143486142f4565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006143b060218361321e565b91506143bb82614354565b604082019050919050565b600060208201905081810360008301526143df816143a3565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220331345b51e69a46677f03582e74cf3bb2094b4a1c967de044f48a766a737888064736f6c63430008110033

Deployed Bytecode Sourcemap

8508:10041:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10032:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10865:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8811:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10309:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11034:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9597:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10218:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11355:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12189:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9565:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17711:264;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8924:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16699:267;;;;;;;;;;;;;:::i;:::-;;13273:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9507:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10412:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6506:148;;;;;;;;;;;;;:::i;:::-;;11858:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18309:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6292:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10123:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16623:70;;;;;;;;;;;;;:::i;:::-;;9661:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11581:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10539:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17983:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12602:663;;;;;;;;;;;;;:::i;:::-;;10714:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16233:382;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18150:151;;;;;;;;;;;;;:::i;:::-;;11988:193;;;;;;;;;;;;;:::i;:::-;;6662:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10032:83;10069:13;10102:5;10095:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10032:83;:::o;10865:161::-;10940:4;10957:39;10966:12;:10;:12::i;:::-;10980:7;10989:6;10957:8;:39::i;:::-;11014:4;11007:11;;10865:161;;;;:::o;8811:106::-;;;;;;;;;;;;;:::o;10309:95::-;10362:7;10389;;10382:14;;10309:95;:::o;11034:313::-;11132:4;11149:36;11159:6;11167:9;11178:6;11149:9;:36::i;:::-;11196:121;11205:6;11213:12;:10;:12::i;:::-;11227:89;11265:6;11227:89;;;;;;;;;;;;;;;;;:11;:19;11239:6;11227:19;;;;;;;;;;;;;;;:33;11247:12;:10;:12::i;:::-;11227:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11196:8;:121::i;:::-;11335:4;11328:11;;11034:313;;;;;:::o;9597:26::-;;;;:::o;10218:83::-;10259:5;10284:9;;;;;;;;;;;10277:16;;10218:83;:::o;11355:218::-;11443:4;11460:83;11469:12;:10;:12::i;:::-;11483:7;11492:50;11531:10;11492:11;:25;11504:12;:10;:12::i;:::-;11492:25;;;;;;;;;;;;;;;:34;11518:7;11492:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11460:8;:83::i;:::-;11561:4;11554:11;;11355:218;;;;:::o;12189:161::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12301:41:::1;12314:9;;12325:16;12301:12;:41::i;:::-;12189:161:::0;;;:::o;9565:25::-;;;;:::o;17711:264::-;17757:7;17778:21;17816:1;17802:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17778:40;;17839:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17829:4;17834:1;17829:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;17890:4;17872;17877:1;17872:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;17913:15;;;;;;;;;;;:29;;;17943:14;;17959:4;17913:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17965:1;17913:54;;;;;;;;:::i;:::-;;;;;;;;17906:61;;;17711:264;:::o;8924:38::-;;;;;;;;;;;;;:::o;16699:267::-;16741:28;16772:24;16790:4;16772:9;:24::i;:::-;16741:55;;16834:1;16811:20;:24;16807:152;;;16857:16;;;;;;;;;;;16852:96;;16894:38;16911:20;16894:16;:38::i;:::-;16852:96;16807:152;16730:236;16699:267::o;13273:124::-;13338:4;13362:18;:27;13381:7;13362:27;;;;;;;;;;;;;;;;;;;;;;;;;13355:34;;13273:124;;;:::o;9507:50::-;;;;:::o;10412:119::-;10478:7;10505:9;:18;10515:7;10505:18;;;;;;;;;;;;;;;;10498:25;;10412: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;11858:122::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11944:3:::1;11935:6;:12;;;;11968:4;11958:7;:14;;;;11858:122:::0;;:::o;18309:237::-;18382:17;18409:15;18382:43;;18436:15;18454:10;:20;;;18483:4;18454:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18436:53;;18500:10;:19;;;18520:8;;;;;;;;;;;18530:7;18500:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18371:175;;18309:237;:::o;6292:79::-;6330:7;6357:6;;;;;;;;;;;6350:13;;6292:79;:::o;10123:87::-;10162:13;10195:7;10188:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10123:87;:::o;16623:70::-;16670:15;:13;:15::i;:::-;16623:70::o;9661:34::-;;;;;;;;;;;;;:::o;11581:269::-;11674:4;11691:129;11700:12;:10;:12::i;:::-;11714:7;11723:96;11762:15;11723:96;;;;;;;;;;;;;;;;;:11;:25;11735:12;:10;:12::i;:::-;11723:25;;;;;;;;;;;;;;;:34;11749:7;11723:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11691:8;:129::i;:::-;11838:4;11831:11;;11581:269;;;;:::o;10539:167::-;10617:4;10634:42;10644:12;:10;:12::i;:::-;10658:9;10669:6;10634:9;:42::i;:::-;10694:4;10687:11;;10539:167;;;;:::o;17983:122::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18082:15:::1;18065:14;:32;;;;17983:122:::0;:::o;12602:663::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12687:1:::1;12665:24;;:10;;;;;;;;;;;:24;;;12657:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12738:58;12755:4;12770:15;;;;;;;;;;;12788:7;;12738:8;:58::i;:::-;12838:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12820:55;;;12884:4;12891:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12820:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12807:10;;:107;;;;;;;;;;;;;;;;;;12925:15;;;;;;;;;;;:31;;;12964:21;13009:4;13029:24;13047:4;13029:9;:24::i;:::-;13068:1;13084::::0;13100:7:::1;:5;:7::i;:::-;13122:15;12925:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13156:10;;;;;;;;;;;13149:26;;;13184:15;;;;;;;;;;;13202:14;13149:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13253:4;13228:22;;:29;;;;;;;;;;;;;;;;;;12602:663::o:0;10714:143::-;10795:7;10822:11;:18;10834:5;10822:18;;;;;;;;;;;;;;;:27;10841:7;10822:27;;;;;;;;;;;;;;;;10815:34;;10714:143;;;;:::o;16233:382::-;16283:7;16303:13;16319:1;16303:17;;16335:9;16331:254;16353:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16349:1;:24;16331:254;;;16395:14;16412:13;;;;;;;;;;;:27;;;16440:1;16412:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16395:47;;16457:14;16474:13;;;;;;;;;;;:17;;;16492:6;16474:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16457:42;;16537:9;16517:15;:29;16514:59;;16566:7;;;;;:::i;:::-;;;;16514:59;16380:205;;16375:3;;;;;:::i;:::-;;;;16331:254;;;;16602:5;16595:12;;;16233:382;:::o;18150:151::-;18202:18;18223:21;18202:42;;18263:8;;;;;;;;;;;18255:26;;:38;18282:10;18255:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18191:110;18150:151::o;11988:193::-;6429:12;:10;:12::i;:::-;6419:22;;:6;;;;;;;;;;:22;;;6411:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12069:22:::1;;;;;;;;;;;12061:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12168:5;12143:22;;:30;;;;;;;;;;;;;;;;;;11988: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;13405:337::-;13515:1;13498:19;;:5;:19;;;13490:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13596:1;13577:21;;:7;:21;;;13569:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13680:6;13650:11;:18;13662:5;13650:18;;;;;;;;;;;;;;;:27;13669:7;13650:27;;;;;;;;;;;;;;;:36;;;;13718:7;13702:32;;13711:5;13702:32;;;13727:6;13702:32;;;;;;:::i;:::-;;;;;;;;13405:337;;;:::o;13750:1921::-;13857:1;13841:18;;:4;:18;;;13833:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13934:1;13920:16;;:2;:16;;;13912:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14007:1;13995:9;:13;13987:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14065:17;14097:13;14114:18;:24;14133:4;14114:24;;;;;;;;;;;;;;;;;;;;;;;;;14113:25;:52;;;;;14143:18;:22;14162:2;14143:22;;;;;;;;;;;;;;;;;;;;;;;;;14142:23;14113:52;:71;;;;;14177:7;:5;:7::i;:::-;14169:15;;:4;:15;;;;14113:71;:88;;;;;14194:7;:5;:7::i;:::-;14188:13;;:2;:13;;;;14113:88;14097:104;;14212:14;14229:9;14212:26;;14260:7;:5;:7::i;:::-;14252:15;;:4;:15;;;;:32;;;;;14277:7;:5;:7::i;:::-;14271:13;;:2;:13;;;;14252:32;:57;;;;;14304:4;14288:21;;:4;:21;;;;14252:57;:80;;;;;14327:4;14313:19;;:2;:19;;;;14252:80;14249:1113;;;14352:8;14349:1002;;;14394:22;;;;;;;;;;;14393:23;:57;;14449:1;14393:57;;;14419:27;14442:3;14419:18;14430:6;;14419;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;14393:57;14381:69;;14481:10;;;;;;;;;;;14473:18;;:4;:18;;;:44;;;;;14495:22;;;;;;;;;;;14473:44;14469:169;;;14542:15;:13;:15::i;:::-;14580:13;;;;;;;;;;;:17;;;14598:2;14602:15;14580:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14469:169;14668:10;;;;;;;;;;;14660:18;;:4;:18;;;;:38;;;;;14688:10;;;;;;;;;;;14682:16;;:2;:16;;;14660:38;14656:680;;;14738:9;:15;14748:4;14738:15;;;;;;;;;;;;;;;;14726:9;:27;14723:107;;;14791:9;:15;14801:4;14791:15;;;;;;;;;;;;;;;;14782:24;;14723:107;14865:22;;;;;;;;;;;14864:23;:58;;14921:1;14864:58;;;14890:28;14914:3;14890:19;14901:7;;14890:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;14864:58;14852:70;;14945:28;14976:24;14994:4;14976:9;:24::i;:::-;14945:55;;15050:1;15027:20;:24;15023:294;;;15080:19;15102:15;:13;:15::i;:::-;15080:37;;15172:11;15148:20;:35;;:56;;;;;15188:16;;;;;;;;;;;15187:17;15148:56;15144:150;;;15237:29;15254:11;15237:16;:29::i;:::-;15144:150;15053:264;15023:294;14700:636;14656:680;14349:1002;14249:1113;15379:22;15404:21;15415:9;15404:6;:10;;:21;;;;:::i;:::-;15379:46;;15454:27;15474:6;15454:9;:15;15464:4;15454:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;15436:9;:15;15446:4;15436:15;;;;;;;;;;;;;;;:45;;;;15508:33;15526:14;15508:9;:13;15518:2;15508:13;;;;;;;;;;;;;;;;:17;;:33;;;;:::i;:::-;15492:9;:13;15502:2;15492:13;;;;;;;;;;;;;;;:49;;;;15579:39;15608:9;15579;:24;15597:4;15579:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;15552:9;:24;15570:4;15552:24;;;;;;;;;;;;;;;:66;;;;15649:2;15634:29;;15643:4;15634:29;;;15653:9;15634:29;;;;;;:::i;:::-;;;;;;;;13822:1849;;;;13750:1921;;;:::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;12358:236::-;12445:9;12440:147;12464:9;;:16;;12460:1;:20;12440:147;;;12502:12;12517:9;;12527:1;12517:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;12502:27;;12571:4;12544:18;:24;12563:4;12544:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;12487:100;12482:3;;;;;:::i;:::-;;;;12440:147;;;;12358:236;;;:::o;16974:729::-;17100:21;17138:1;17124:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17100:40;;17169:4;17151;17156:1;17151:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;17195:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17185:4;17190:1;17185:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;17228:62;17245:4;17260:15;;;;;;;;;;;17278:11;17228:8;:62::i;:::-;17301:15;;;;;;;;;;;:66;;;17382:11;17408:1;17424:4;17451;17471:15;17301:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17510:18;17531:21;17510:42;;17563:17;17583;17598:1;17583:10;:14;;:17;;;;:::i;:::-;17563:37;;17621:6;;;;;;;;;;;17613:24;;:35;17638:9;17613:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17667:6;;;;;;;;;;;17659:24;;:35;17684:9;17659:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17029:674;;;16974:729;:::o;15679:546::-;15726:22;;;;;;;;;;;15723:495;;;15769:9;15765:442;15787:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15783:1;:24;15765:442;;;15833:14;15850:13;;;;;;;;;;;:27;;;15878:1;15850:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15833:47;;15899:14;15916:9;:17;15926:6;15916:17;;;;;;;;;;;;;;;;15899:34;;15964:1;15955:6;:10;15952:193;;;16010:29;16032:6;16010:9;:17;16020:6;16010:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;15990:9;:17;16000:6;15990:17;;;;;;;;;;;;;;;:49;;;;16089:36;16118:6;16089:9;:24;16107:4;16089:24;;;;;;;;;;;;;;;;:28;;:36;;;;:::i;:::-;16062:9;:24;16080:4;16062:24;;;;;;;;;;;;;;;:63;;;;15952:193;16163:13;;;;;;;;;;;:20;;;16184:6;16163:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15814:393;;15809:3;;;;;:::i;:::-;;;;15765:442;;;;15723:495;15679:546::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;1785:132::-;1843:7;1870:39;1874:1;1877;1870:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1863:46;;1785:132;;;;:::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;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:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:117::-;5935:1;5932;5925:12;5949:117;6058:1;6055;6048:12;6072:117;6181:1;6178;6171:12;6212:568;6285:8;6295:6;6345:3;6338:4;6330:6;6326:17;6322:27;6312:122;;6353:79;;:::i;:::-;6312:122;6466:6;6453:20;6443:30;;6496:18;6488:6;6485:30;6482:117;;;6518:79;;:::i;:::-;6482:117;6632:4;6624:6;6620:17;6608:29;;6686:3;6678:4;6670:6;6666:17;6656:8;6652:32;6649:41;6646:128;;;6693:79;;:::i;:::-;6646:128;6212:568;;;;;:::o;6786:116::-;6856:21;6871:5;6856:21;:::i;:::-;6849:5;6846:32;6836:60;;6892:1;6889;6882:12;6836:60;6786:116;:::o;6908:133::-;6951:5;6989:6;6976:20;6967:29;;7005:30;7029:5;7005:30;:::i;:::-;6908:133;;;;:::o;7047:698::-;7139:6;7147;7155;7204:2;7192:9;7183:7;7179:23;7175:32;7172:119;;;7210:79;;:::i;:::-;7172:119;7358:1;7347:9;7343:17;7330:31;7388:18;7380:6;7377:30;7374:117;;;7410:79;;:::i;:::-;7374:117;7523:80;7595:7;7586:6;7575:9;7571:22;7523:80;:::i;:::-;7505:98;;;;7301:312;7652:2;7678:50;7720:7;7711:6;7700:9;7696:22;7678:50;:::i;:::-;7668:60;;7623:115;7047:698;;;;;:::o;7751:118::-;7838:24;7856:5;7838:24;:::i;:::-;7833:3;7826:37;7751:118;;:::o;7875:222::-;7968:4;8006:2;7995:9;7991:18;7983:26;;8019:71;8087:1;8076:9;8072:17;8063:6;8019:71;:::i;:::-;7875:222;;;;:::o;8103:329::-;8162:6;8211:2;8199:9;8190:7;8186:23;8182:32;8179:119;;;8217:79;;:::i;:::-;8179:119;8337:1;8362:53;8407:7;8398:6;8387:9;8383:22;8362:53;:::i;:::-;8352:63;;8308:117;8103:329;;;;:::o;8438:474::-;8506:6;8514;8563:2;8551:9;8542:7;8538:23;8534:32;8531:119;;;8569:79;;:::i;:::-;8531:119;8689:1;8714:53;8759:7;8750:6;8739:9;8735:22;8714:53;:::i;:::-;8704:63;;8660:117;8816:2;8842:53;8887:7;8878:6;8867:9;8863:22;8842:53;:::i;:::-;8832:63;;8787:118;8438:474;;;;;:::o;8918:329::-;8977:6;9026:2;9014:9;9005:7;9001:23;8997:32;8994:119;;;9032:79;;:::i;:::-;8994:119;9152:1;9177:53;9222:7;9213:6;9202:9;9198:22;9177:53;:::i;:::-;9167:63;;9123:117;8918:329;;;;:::o;9253:474::-;9321:6;9329;9378:2;9366:9;9357:7;9353:23;9349:32;9346:119;;;9384:79;;:::i;:::-;9346:119;9504:1;9529:53;9574:7;9565:6;9554:9;9550:22;9529:53;:::i;:::-;9519:63;;9475:117;9631:2;9657:53;9702:7;9693:6;9682:9;9678:22;9657:53;:::i;:::-;9647:63;;9602:118;9253:474;;;;;:::o;9733:180::-;9781:77;9778:1;9771:88;9878:4;9875:1;9868:15;9902:4;9899:1;9892:15;9919:320;9963:6;10000:1;9994:4;9990:12;9980:22;;10047:1;10041:4;10037:12;10068:18;10058:81;;10124:4;10116:6;10112:17;10102:27;;10058:81;10186:2;10178:6;10175:14;10155:18;10152:38;10149:84;;10205:18;;:::i;:::-;10149:84;9970:269;9919:320;;;:::o;10245:182::-;10385:34;10381:1;10373:6;10369:14;10362:58;10245:182;:::o;10433:366::-;10575:3;10596:67;10660:2;10655:3;10596:67;:::i;:::-;10589:74;;10672:93;10761:3;10672:93;:::i;:::-;10790:2;10785:3;10781:12;10774:19;;10433:366;;;:::o;10805:419::-;10971:4;11009:2;10998:9;10994:18;10986:26;;11058:9;11052:4;11048:20;11044:1;11033:9;11029:17;11022:47;11086:131;11212:4;11086:131;:::i;:::-;11078:139;;10805:419;;;:::o;11230:180::-;11278:77;11275:1;11268:88;11375:4;11372:1;11365:15;11399:4;11396:1;11389:15;11416:143;11473:5;11504:6;11498:13;11489:22;;11520:33;11547:5;11520:33;:::i;:::-;11416:143;;;;:::o;11565:351::-;11635:6;11684:2;11672:9;11663:7;11659:23;11655:32;11652:119;;;11690:79;;:::i;:::-;11652:119;11810:1;11835:64;11891:7;11882:6;11871:9;11867:22;11835:64;:::i;:::-;11825:74;;11781:128;11565:351;;;;:::o;11922:180::-;11970:77;11967:1;11960:88;12067:4;12064:1;12057:15;12091:4;12088:1;12081:15;12108:114;12175:6;12209:5;12203:12;12193:22;;12108:114;;;:::o;12228:184::-;12327:11;12361:6;12356:3;12349:19;12401:4;12396:3;12392:14;12377:29;;12228:184;;;;:::o;12418:132::-;12485:4;12508:3;12500:11;;12538:4;12533:3;12529:14;12521:22;;12418:132;;;:::o;12556:108::-;12633:24;12651:5;12633:24;:::i;:::-;12628:3;12621:37;12556:108;;:::o;12670:179::-;12739:10;12760:46;12802:3;12794:6;12760:46;:::i;:::-;12838:4;12833:3;12829:14;12815:28;;12670:179;;;;:::o;12855:113::-;12925:4;12957;12952:3;12948:14;12940:22;;12855:113;;;:::o;13004:732::-;13123:3;13152:54;13200:5;13152:54;:::i;:::-;13222:86;13301:6;13296:3;13222:86;:::i;:::-;13215:93;;13332:56;13382:5;13332:56;:::i;:::-;13411:7;13442:1;13427:284;13452:6;13449:1;13446:13;13427:284;;;13528:6;13522:13;13555:63;13614:3;13599:13;13555:63;:::i;:::-;13548:70;;13641:60;13694:6;13641:60;:::i;:::-;13631:70;;13487:224;13474:1;13471;13467:9;13462:14;;13427:284;;;13431:14;13727:3;13720:10;;13128:608;;;13004:732;;;;:::o;13742:483::-;13913:4;13951:2;13940:9;13936:18;13928:26;;13964:71;14032:1;14021:9;14017:17;14008:6;13964:71;:::i;:::-;14082:9;14076:4;14072:20;14067:2;14056:9;14052:18;14045:48;14110:108;14213:4;14204:6;14110:108;:::i;:::-;14102:116;;13742:483;;;;;:::o;14231:281::-;14314:27;14336:4;14314:27;:::i;:::-;14306:6;14302:40;14444:6;14432:10;14429:22;14408:18;14396:10;14393:34;14390:62;14387:88;;;14455:18;;:::i;:::-;14387:88;14495:10;14491:2;14484:22;14274:238;14231:281;;:::o;14518:129::-;14552:6;14579:20;;:::i;:::-;14569:30;;14608:33;14636:4;14628:6;14608:33;:::i;:::-;14518:129;;;:::o;14653:311::-;14730:4;14820:18;14812:6;14809:30;14806:56;;;14842:18;;:::i;:::-;14806:56;14892:4;14884:6;14880:17;14872:25;;14952:4;14946;14942:15;14934:23;;14653:311;;;:::o;14970:143::-;15027:5;15058:6;15052:13;15043:22;;15074:33;15101:5;15074:33;:::i;:::-;14970:143;;;;:::o;15136:732::-;15243:5;15268:81;15284:64;15341:6;15284:64;:::i;:::-;15268:81;:::i;:::-;15259:90;;15369:5;15398:6;15391:5;15384:21;15432:4;15425:5;15421:16;15414:23;;15485:4;15477:6;15473:17;15465:6;15461:30;15514:3;15506:6;15503:15;15500:122;;;15533:79;;:::i;:::-;15500:122;15648:6;15631:231;15665:6;15660:3;15657:15;15631:231;;;15740:3;15769:48;15813:3;15801:10;15769:48;:::i;:::-;15764:3;15757:61;15847:4;15842:3;15838:14;15831:21;;15707:155;15691:4;15686:3;15682:14;15675:21;;15631:231;;;15635:21;15249:619;;15136:732;;;;;:::o;15891:385::-;15973:5;16022:3;16015:4;16007:6;16003:17;15999:27;15989:122;;16030:79;;:::i;:::-;15989:122;16140:6;16134:13;16165:105;16266:3;16258:6;16251:4;16243:6;16239:17;16165:105;:::i;:::-;16156:114;;15979:297;15891:385;;;;:::o;16282:554::-;16377:6;16426:2;16414:9;16405:7;16401:23;16397:32;16394:119;;;16432:79;;:::i;:::-;16394:119;16573:1;16562:9;16558:17;16552:24;16603:18;16595:6;16592:30;16589:117;;;16625:79;;:::i;:::-;16589:117;16730:89;16811:7;16802:6;16791:9;16787:22;16730:89;:::i;:::-;16720:99;;16523:306;16282:554;;;;:::o;16842:351::-;16912:6;16961:2;16949:9;16940:7;16936:23;16932:32;16929:119;;;16967:79;;:::i;:::-;16929:119;17087:1;17112:64;17168:7;17159:6;17148:9;17144:22;17112:64;:::i;:::-;17102:74;;17058:128;16842:351;;;;:::o;17199:332::-;17320:4;17358:2;17347:9;17343:18;17335:26;;17371:71;17439:1;17428:9;17424:17;17415:6;17371:71;:::i;:::-;17452:72;17520:2;17509:9;17505:18;17496:6;17452:72;:::i;:::-;17199:332;;;;;:::o;17537:137::-;17591:5;17622:6;17616:13;17607:22;;17638:30;17662:5;17638:30;:::i;:::-;17537:137;;;;:::o;17680:345::-;17747:6;17796:2;17784:9;17775:7;17771:23;17767:32;17764:119;;;17802:79;;:::i;:::-;17764:119;17922:1;17947:61;18000:7;17991:6;17980:9;17976:22;17947:61;:::i;:::-;17937:71;;17893:125;17680:345;;;;:::o;18031:221::-;18171:34;18167:1;18159:6;18155:14;18148:58;18240:4;18235:2;18227:6;18223:15;18216:29;18031:221;:::o;18258:366::-;18400:3;18421:67;18485:2;18480:3;18421:67;:::i;:::-;18414:74;;18497:93;18586:3;18497:93;:::i;:::-;18615:2;18610:3;18606:12;18599:19;;18258:366;;;:::o;18630:419::-;18796:4;18834:2;18823:9;18819:18;18811:26;;18883:9;18877:4;18873:20;18869:1;18858:9;18854:17;18847:47;18911:131;19037:4;18911:131;:::i;:::-;18903:139;;18630:419;;;:::o;19055:332::-;19176:4;19214:2;19203:9;19199:18;19191:26;;19227:71;19295:1;19284:9;19280:17;19271:6;19227:71;:::i;:::-;19308:72;19376:2;19365:9;19361:18;19352:6;19308:72;:::i;:::-;19055:332;;;;;:::o;19393:85::-;19438:7;19467:5;19456:16;;19393:85;;;:::o;19484:158::-;19542:9;19575:61;19593:42;19602:32;19628:5;19602:32;:::i;:::-;19593:42;:::i;:::-;19575:61;:::i;:::-;19562:74;;19484:158;;;:::o;19648:147::-;19743:45;19782:5;19743:45;:::i;:::-;19738:3;19731:58;19648:147;;:::o;19801:807::-;20050:4;20088:3;20077:9;20073:19;20065:27;;20102:71;20170:1;20159:9;20155:17;20146:6;20102:71;:::i;:::-;20183:72;20251:2;20240:9;20236:18;20227:6;20183:72;:::i;:::-;20265:80;20341:2;20330:9;20326:18;20317:6;20265:80;:::i;:::-;20355;20431:2;20420:9;20416:18;20407:6;20355:80;:::i;:::-;20445:73;20513:3;20502:9;20498:19;20489:6;20445:73;:::i;:::-;20528;20596:3;20585:9;20581:19;20572:6;20528:73;:::i;:::-;19801:807;;;;;;;;;:::o;20614:663::-;20702:6;20710;20718;20767:2;20755:9;20746:7;20742:23;20738:32;20735:119;;;20773:79;;:::i;:::-;20735:119;20893:1;20918:64;20974:7;20965:6;20954:9;20950:22;20918:64;:::i;:::-;20908:74;;20864:128;21031:2;21057:64;21113:7;21104:6;21093:9;21089:22;21057:64;:::i;:::-;21047:74;;21002:129;21170:2;21196:64;21252:7;21243:6;21232:9;21228:22;21196:64;:::i;:::-;21186:74;;21141:129;20614:663;;;;;:::o;21283:180::-;21331:77;21328:1;21321:88;21428:4;21425:1;21418:15;21452:4;21449:1;21442:15;21469:233;21508:3;21531:24;21549:5;21531:24;:::i;:::-;21522:33;;21577:66;21570:5;21567:77;21564:103;;21647:18;;:::i;:::-;21564:103;21694:1;21687:5;21683:13;21676:20;;21469:233;;;:::o;21708:224::-;21848:34;21844:1;21836:6;21832:14;21825:58;21917:7;21912:2;21904:6;21900:15;21893:32;21708:224;:::o;21938:366::-;22080:3;22101:67;22165:2;22160:3;22101:67;:::i;:::-;22094:74;;22177:93;22266:3;22177:93;:::i;:::-;22295:2;22290:3;22286:12;22279:19;;21938:366;;;:::o;22310:419::-;22476:4;22514:2;22503:9;22499:18;22491:26;;22563:9;22557:4;22553:20;22549:1;22538:9;22534:17;22527:47;22591:131;22717:4;22591:131;:::i;:::-;22583:139;;22310:419;;;:::o;22735:225::-;22875:34;22871:1;22863:6;22859:14;22852:58;22944:8;22939:2;22931:6;22927:15;22920:33;22735:225;:::o;22966:366::-;23108:3;23129:67;23193:2;23188:3;23129:67;:::i;:::-;23122:74;;23205:93;23294:3;23205:93;:::i;:::-;23323:2;23318:3;23314:12;23307:19;;22966:366;;;:::o;23338:419::-;23504:4;23542:2;23531:9;23527:18;23519:26;;23591:9;23585:4;23581:20;23577:1;23566:9;23562:17;23555:47;23619:131;23745:4;23619:131;:::i;:::-;23611:139;;23338:419;;;:::o;23763:223::-;23903:34;23899:1;23891:6;23887:14;23880:58;23972:6;23967:2;23959:6;23955:15;23948:31;23763:223;:::o;23992:366::-;24134:3;24155:67;24219:2;24214:3;24155:67;:::i;:::-;24148:74;;24231:93;24320:3;24231:93;:::i;:::-;24349:2;24344:3;24340:12;24333:19;;23992:366;;;:::o;24364:419::-;24530:4;24568:2;24557:9;24553:18;24545:26;;24617:9;24611:4;24607:20;24603:1;24592:9;24588:17;24581:47;24645:131;24771:4;24645:131;:::i;:::-;24637:139;;24364:419;;;:::o;24789:221::-;24929:34;24925:1;24917:6;24913:14;24906:58;24998:4;24993:2;24985:6;24981:15;24974:29;24789:221;:::o;25016:366::-;25158:3;25179:67;25243:2;25238:3;25179:67;:::i;:::-;25172:74;;25255:93;25344:3;25255:93;:::i;:::-;25373:2;25368:3;25364:12;25357:19;;25016:366;;;:::o;25388:419::-;25554:4;25592:2;25581:9;25577:18;25569:26;;25641:9;25635:4;25631:20;25627:1;25616:9;25612:17;25605:47;25669:131;25795:4;25669:131;:::i;:::-;25661:139;;25388:419;;;:::o;25813:224::-;25953:34;25949:1;25941:6;25937:14;25930:58;26022:7;26017:2;26009:6;26005:15;25998:32;25813:224;:::o;26043:366::-;26185:3;26206:67;26270:2;26265:3;26206:67;:::i;:::-;26199:74;;26282:93;26371:3;26282:93;:::i;:::-;26400:2;26395:3;26391:12;26384:19;;26043:366;;;:::o;26415:419::-;26581:4;26619:2;26608:9;26604:18;26596:26;;26668:9;26662:4;26658:20;26654:1;26643:9;26639:17;26632:47;26696:131;26822:4;26696:131;:::i;:::-;26688:139;;26415:419;;;:::o;26840:222::-;26980:34;26976:1;26968:6;26964:14;26957:58;27049:5;27044:2;27036:6;27032:15;27025:30;26840:222;:::o;27068:366::-;27210:3;27231:67;27295:2;27290:3;27231:67;:::i;:::-;27224:74;;27307:93;27396:3;27307:93;:::i;:::-;27425:2;27420:3;27416:12;27409:19;;27068:366;;;:::o;27440:419::-;27606:4;27644:2;27633:9;27629:18;27621:26;;27693:9;27687:4;27683:20;27679:1;27668:9;27664:17;27657:47;27721:131;27847:4;27721:131;:::i;:::-;27713:139;;27440:419;;;:::o;27865:228::-;28005:34;28001:1;27993:6;27989:14;27982:58;28074:11;28069:2;28061:6;28057:15;28050:36;27865:228;:::o;28099:366::-;28241:3;28262:67;28326:2;28321:3;28262:67;:::i;:::-;28255:74;;28338:93;28427:3;28338:93;:::i;:::-;28456:2;28451:3;28447:12;28440:19;;28099:366;;;:::o;28471:419::-;28637:4;28675:2;28664:9;28660:18;28652:26;;28724:9;28718:4;28714:20;28710:1;28699:9;28695:17;28688:47;28752:131;28878:4;28752:131;:::i;:::-;28744:139;;28471:419;;;:::o;28896:194::-;28936:4;28956:20;28974:1;28956:20;:::i;:::-;28951:25;;28990:20;29008:1;28990:20;:::i;:::-;28985:25;;29034:1;29031;29027:9;29019:17;;29058:1;29052:4;29049:11;29046:37;;;29063:18;;:::i;:::-;29046:37;28896:194;;;;:::o;29096:191::-;29136:3;29155:20;29173:1;29155:20;:::i;:::-;29150:25;;29189:20;29207:1;29189:20;:::i;:::-;29184:25;;29232:1;29229;29225:9;29218:16;;29253:3;29250:1;29247:10;29244:36;;;29260:18;;:::i;:::-;29244:36;29096:191;;;;:::o;29293:177::-;29433:29;29429:1;29421:6;29417:14;29410:53;29293:177;:::o;29476:366::-;29618:3;29639:67;29703:2;29698:3;29639:67;:::i;:::-;29632:74;;29715:93;29804:3;29715:93;:::i;:::-;29833:2;29828:3;29824:12;29817:19;;29476:366;;;:::o;29848:419::-;30014:4;30052:2;30041:9;30037:18;30029:26;;30101:9;30095:4;30091:20;30087:1;30076:9;30072:17;30065:47;30129:131;30255:4;30129:131;:::i;:::-;30121:139;;29848:419;;;:::o;30273:831::-;30536:4;30574:3;30563:9;30559:19;30551:27;;30588:71;30656:1;30645:9;30641:17;30632:6;30588:71;:::i;:::-;30669:80;30745:2;30734:9;30730:18;30721:6;30669:80;:::i;:::-;30796:9;30790:4;30786:20;30781:2;30770:9;30766:18;30759:48;30824:108;30927:4;30918:6;30824:108;:::i;:::-;30816:116;;30942:72;31010:2;30999:9;30995:18;30986:6;30942:72;:::i;:::-;31024:73;31092:3;31081:9;31077:19;31068:6;31024:73;:::i;:::-;30273:831;;;;;;;;:::o;31110:410::-;31150:7;31173:20;31191:1;31173:20;:::i;:::-;31168:25;;31207:20;31225:1;31207:20;:::i;:::-;31202:25;;31262:1;31259;31255:9;31284:30;31302:11;31284:30;:::i;:::-;31273:41;;31463:1;31454:7;31450:15;31447:1;31444:22;31424:1;31417:9;31397:83;31374:139;;31493:18;;:::i;:::-;31374:139;31158:362;31110:410;;;;:::o;31526:180::-;31574:77;31571:1;31564:88;31671:4;31668:1;31661:15;31695:4;31692:1;31685:15;31712:185;31752:1;31769:20;31787:1;31769:20;:::i;:::-;31764:25;;31803:20;31821:1;31803:20;:::i;:::-;31798:25;;31842:1;31832:35;;31847:18;;:::i;:::-;31832:35;31889:1;31886;31882:9;31877:14;;31712:185;;;;:::o;31903:220::-;32043:34;32039:1;32031:6;32027:14;32020:58;32112:3;32107:2;32099:6;32095:15;32088:28;31903:220;:::o;32129:366::-;32271:3;32292:67;32356:2;32351:3;32292:67;:::i;:::-;32285:74;;32368:93;32457:3;32368:93;:::i;:::-;32486:2;32481:3;32477:12;32470:19;;32129:366;;;:::o;32501:419::-;32667:4;32705:2;32694:9;32690:18;32682:26;;32754:9;32748:4;32744:20;32740:1;32729:9;32725:17;32718:47;32782:131;32908:4;32782:131;:::i;:::-;32774:139;;32501:419;;;:::o

Swarm Source

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