ETH Price: $3,587.20 (+4.79%)

Token

One Punch Man (OPM)
 

Overview

Max Total Supply

110,000,000,000 OPM

Holders

227

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
736,273,000.836574712 OPM

Value
$0.00
0xa1962da8b3fb1649649e622847af3146a623e43f
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:
OnePunchMan

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-22
*/

/**
https://linktr.ee/opmerc
*/



// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.9;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
 
interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    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;
    }

}

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) {
        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;
        return c;
    }
}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        address referrer,
        uint256 deadline
    ) external;

    function factory() external pure returns (address);

    function WETH() external pure returns (address);
}

contract OnePunchMan is Context, IERC20, Ownable {

    using SafeMath for uint256;

    string private constant _name = unicode"One Punch Man";
    string private constant _symbol = unicode"OPM";
    uint8 private constant _decimals = 9;
 
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 110_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 15;
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 55;
  
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousredisFee = _redisFee;
    uint256 private _previoustaxFee = _taxFee;

    mapping(address => bool) public bots; mapping (address => uint256) public _buyMap;
    address payable private _developmentAddress = payable(0xD656794E4f6b3cD04290a21947a66300BA0Faa8d);
    address payable private _marketingAddress = payable(0xD656794E4f6b3cD04290a21947a66300BA0Faa8d);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private tradingOpen = true;
    bool private inSwap = false;
    bool private swapEnabled = true;

    uint256 public _maxTxAmount =  2 * (_tTotal/100);
    uint256 public _maxWalletSize = 2 * (_tTotal/100);
    uint256 public _swapTokensAtAmount = 20 *(_tTotal/1000);

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _; 
        inSwap = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_developmentAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[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 tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;

        _previousredisFee = _redisFee;
        _previoustaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousredisFee;
        _taxFee = _previoustaxFee;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner()) {

            //Trade start check
            if (!tradingOpen) {
                require(from == owner(), "TOKEN: This account cannot send tokens until trading is enabled");
            }

            require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit");
            require(!bots[from] && !bots[to], "TOKEN: Your account is blacklisted!");

            if(to != uniswapV2Pair) {
                require(balanceOf(to) + amount < _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

            if(contractTokenBalance >= _maxTxAmount)
            {
                contractTokenBalance = _maxTxAmount;
            }

            if (canSwap && !inSwap && from != uniswapV2Pair && swapEnabled && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        //Transfer Tokens
        if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
            takeFee = false;
        } else {

            //Set Fee for Buys
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }

            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }

        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        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),
            0x0000000000000000000000000000000000000000,
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        _marketingAddress.transfer(amount);
    }
    //Camelot Dex Router 0xc873fEcbd354f5A56E00E710B90EF4201db2448d
    function setTrading(bool _tradingOpen) public onlyOwner {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        tradingOpen = _tradingOpen;
    }

    function manualswap() external {
        require(_msgSender() == _developmentAddress || _msgSender() == _marketingAddress);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == _developmentAddress || _msgSender() == _marketingAddress);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) =
            _getTValues(tAmount, _redisFee, _taxFee);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) =
            _getRValues(tAmount, tFee, tTeam, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function setFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

    //Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(uint256 swapTokensAtAmount) public onlyOwner {
        _swapTokensAtAmount = swapTokensAtAmount;
    }

    //Set minimum tokens required to swap.
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    //Set maximum transaction
    function setMaxTxnAmount(uint256 maxTxAmount) public onlyOwner {
        _maxTxAmount = maxTxAmount;
    }

    function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner {
        _maxWalletSize = maxWalletSize;
    }

    function setMaxAll() public onlyOwner {
        _maxWalletSize = _tTotal;
        _maxTxAmount = _tTotal;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":"","type":"address"}],"name":"_buyMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setMaxAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000760565b64199c82cc00620000269190620007b1565b60001962000035919062000841565b60001962000044919062000879565b6006556000600855600f6009556000600a556037600b55600a54600c55600b54600d55600c54600e55600d54600f5573d656794e4f6b3cd04290a21947a66300ba0faa8d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d656794e4f6b3cd04290a21947a66300ba0faa8d601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560146101000a81548160ff02191690831515021790555060006015806101000a81548160ff0219169083151502179055506001601560166101000a81548160ff02191690831515021790555060646009600a6200017f919062000760565b64199c82cc00620001919190620007b1565b6200019d9190620008b4565b6002620001ab9190620007b1565b60165560646009600a620001c0919062000760565b64199c82cc00620001d29190620007b1565b620001de9190620008b4565b6002620001ec9190620007b1565b6017556103e86009600a62000202919062000760565b64199c82cc00620002149190620007b1565b620002209190620008b4565b60146200022e9190620007b1565b6018553480156200023e57600080fd5b506000620002516200059560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060065460026000620003066200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600560006200035a6200059d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005076200059560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a62000566919062000760565b64199c82cc00620005789190620007b1565b604051620005879190620008fd565b60405180910390a36200091a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000654578086048111156200062c576200062b620005c6565b5b60018516156200063c5780820291505b80810290506200064c85620005f5565b94506200060c565b94509492505050565b6000826200066f576001905062000742565b816200067f576000905062000742565b8160018114620006985760028114620006a357620006d9565b600191505062000742565b60ff841115620006b857620006b7620005c6565b5b8360020a915084821115620006d257620006d1620005c6565b5b5062000742565b5060208310610133831016604e8410600b8410161715620007135782820a9050838111156200070d576200070c620005c6565b5b62000742565b62000722848484600162000602565b925090508184048111156200073c576200073b620005c6565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200076d8262000749565b91506200077a8362000753565b9250620007a97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200065d565b905092915050565b6000620007be8262000749565b9150620007cb8362000749565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008075762000806620005c6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200084e8262000749565b91506200085b8362000749565b9250826200086e576200086d62000812565b5b828206905092915050565b6000620008868262000749565b9150620008938362000749565b925082821015620008a957620008a8620005c6565b5b828203905092915050565b6000620008c18262000749565b9150620008ce8362000749565b925082620008e157620008e062000812565b5b828204905092915050565b620008f78162000749565b82525050565b6000602082019050620009146000830184620008ec565b92915050565b613cab806200092a6000396000f3fe6080604052600436106101bb5760003560e01c80637d1db4a5116100ec578063a2a957bb1161008a578063c3c8cd8011610064578063c3c8cd80146105f5578063dd62ed3e1461060c578063ea1644d514610649578063f2fde38b14610672576101c2565b8063a2a957bb14610552578063a9059cbb1461057b578063bfd79284146105b8576101c2565b80638f70ccf7116100c65780638f70ccf7146104aa5780638f9a55c0146104d357806395d89b41146104fe57806398a5c31514610529576101c2565b80637d1db4a5146104175780637f2feddc146104425780638da5cb5b1461047f576101c2565b806341c2bd55116101595780636fc3eaec116101335780636fc3eaec1461038357806370a082311461039a578063715018a6146103d757806374010ece146103ee576101c2565b806341c2bd551461031857806349bd5a5e1461032f5780636d8aa8f81461035a576101c2565b806318160ddd1161019557806318160ddd1461025a57806323b872dd146102855780632fd689e3146102c2578063313ce567146102ed576101c2565b806306fdde03146101c7578063095ea7b3146101f25780631694505e1461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc61069b565b6040516101e99190612bc5565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190612c80565b6106d8565b6040516102269190612cdb565b60405180910390f35b34801561023b57600080fd5b506102446106f6565b6040516102519190612d55565b60405180910390f35b34801561026657600080fd5b5061026f61071c565b60405161027c9190612d7f565b60405180910390f35b34801561029157600080fd5b506102ac60048036038101906102a79190612d9a565b610741565b6040516102b99190612cdb565b60405180910390f35b3480156102ce57600080fd5b506102d761081a565b6040516102e49190612d7f565b60405180910390f35b3480156102f957600080fd5b50610302610820565b60405161030f9190612e09565b60405180910390f35b34801561032457600080fd5b5061032d610829565b005b34801561033b57600080fd5b50610344610908565b6040516103519190612e33565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190612e7a565b61092e565b005b34801561038f57600080fd5b506103986109e0565b005b3480156103a657600080fd5b506103c160048036038101906103bc9190612ea7565b610ab1565b6040516103ce9190612d7f565b60405180910390f35b3480156103e357600080fd5b506103ec610b02565b005b3480156103fa57600080fd5b5061041560048036038101906104109190612ed4565b610c55565b005b34801561042357600080fd5b5061042c610cf4565b6040516104399190612d7f565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190612ea7565b610cfa565b6040516104769190612d7f565b60405180910390f35b34801561048b57600080fd5b50610494610d12565b6040516104a19190612e33565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190612e7a565b610d3b565b005b3480156104df57600080fd5b506104e861100f565b6040516104f59190612d7f565b60405180910390f35b34801561050a57600080fd5b50610513611015565b6040516105209190612bc5565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b9190612ed4565b611052565b005b34801561055e57600080fd5b5061057960048036038101906105749190612f01565b6110f1565b005b34801561058757600080fd5b506105a2600480360381019061059d9190612c80565b6111a8565b6040516105af9190612cdb565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190612ea7565b6111c6565b6040516105ec9190612cdb565b60405180910390f35b34801561060157600080fd5b5061060a6111e6565b005b34801561061857600080fd5b50610633600480360381019061062e9190612f68565b6112bf565b6040516106409190612d7f565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190612ed4565b611346565b005b34801561067e57600080fd5b5061069960048036038101906106949190612ea7565b6113e5565b005b60606040518060400160405280600d81526020017f4f6e652050756e6368204d616e00000000000000000000000000000000000000815250905090565b60006106ec6106e56115a7565b84846115af565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a61072c919061310a565b64199c82cc0061073c9190613155565b905090565b600061074e84848461177a565b61080f8461075a6115a7565b61080a85604051806060016040528060288152602001613c4e60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107c06115a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fff9092919063ffffffff16565b6115af565b600190509392505050565b60185481565b60006009905090565b6108316115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b5906131fb565b60405180910390fd5b6009600a6108cc919061310a565b64199c82cc006108dc9190613155565b6017819055506009600a6108f0919061310a565b64199c82cc006109009190613155565b601681905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109366115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ba906131fb565b60405180910390fd5b80601560166101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a216115a7565b73ffffffffffffffffffffffffffffffffffffffff161480610a975750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a7f6115a7565b73ffffffffffffffffffffffffffffffffffffffff16145b610aa057600080fd5b6000479050610aae81612063565b50565b6000610afb600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf565b9050919050565b610b0a6115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e906131fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610c5d6115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce1906131fb565b60405180910390fd5b8060168190555050565b60165481565b60116020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d436115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc7906131fb565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7057600080fd5b505afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190613230565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0a57600080fd5b505afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f429190613230565b6040518363ffffffff1660e01b8152600401610f5f92919061325d565b602060405180830381600087803b158015610f7957600080fd5b505af1158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb19190613230565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601560146101000a81548160ff0219169083151502179055505050565b60175481565b60606040518060400160405280600381526020017f4f504d0000000000000000000000000000000000000000000000000000000000815250905090565b61105a6115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de906131fb565b60405180910390fd5b8060188190555050565b6110f96115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d906131fb565b60405180910390fd5b8360088190555082600a819055508160098190555080600b8190555050505050565b60006111bc6111b56115a7565b848461177a565b6001905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112276115a7565b73ffffffffffffffffffffffffffffffffffffffff16148061129d5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112856115a7565b73ffffffffffffffffffffffffffffffffffffffff16145b6112a657600080fd5b60006112b130610ab1565b90506112bc8161213d565b50565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61134e6115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d2906131fb565b60405180910390fd5b8060178190555050565b6113ed6115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611471906131fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e1906132f8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561161f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116169061338a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561168f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116869061341c565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161176d9190612d7f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906134ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190613540565b60405180910390fd5b6000811161189d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611894906135d2565b60405180910390fd5b6118a5610d12565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561191357506118e3610d12565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611cfe57601560149054906101000a900460ff166119a257611934610d12565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613664565b60405180910390fd5b5b6016548111156119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906136d0565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a8b5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac190613762565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611b775760175481611b2c84610ab1565b611b369190613782565b10611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d9061384a565b60405180910390fd5b5b6000611b8230610ab1565b9050600060185482101590506016548210611b9d5760165491505b808015611bb5575060158054906101000a900460ff16155b8015611c0f5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611c275750601560169054906101000a900460ff165b8015611c7d5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611cd35750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cfb57611ce18261213d565b60004790506000811115611cf957611cf847612063565b5b505b50505b600060019050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611da55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611e585750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611e575750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611e665760009050611fed565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611f115750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f2957600854600c81905550600954600d819055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611fd45750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611fec57600a54600c81905550600b54600d819055505b5b611ff9848484846123c6565b50505050565b6000838311158290612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e9190612bc5565b60405180910390fd5b5060008385612056919061386a565b9050809150509392505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156120cb573d6000803e3d6000fd5b5050565b6000600654821115612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d90613910565b60405180910390fd5b60006121206123f3565b9050612135818461241e90919063ffffffff16565b915050919050565b60016015806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561217457612173613930565b5b6040519080825280602002602001820160405280156121a25781602001602082028036833780820191505090505b50905030816000815181106121ba576121b961395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561225c57600080fd5b505afa158015612270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122949190613230565b816001815181106122a8576122a761395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061230f30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846115af565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352aa4c2283600084306000426040518763ffffffff1660e01b815260040161237696959493929190613a87565b600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b505050505060006015806101000a81548160ff02191690831515021790555050565b806123d4576123d3612468565b5b6123df8484846124ab565b806123ed576123ec612676565b5b50505050565b600080600061240061268a565b91509150612417818361241e90919063ffffffff16565b9250505090565b600061246083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612728565b905092915050565b6000600c5414801561247c57506000600d54145b15612486576124a9565b600c54600e81905550600d54600f819055506000600c819055506000600d819055505b565b6000806000806000806124bd8761278b565b95509550955095509550955061251b86600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125b085600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461283d90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125fc8161289b565b6126068483612958565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516126639190612d7f565b60405180910390a3505050505050505050565b600e54600c81905550600f54600d81905550565b6000806000600654905060006009600a6126a4919061310a565b64199c82cc006126b49190613155565b90506126e86009600a6126c7919061310a565b64199c82cc006126d79190613155565b60065461241e90919063ffffffff16565b82101561271b576006546009600a612700919061310a565b64199c82cc006127109190613155565b935093505050612724565b81819350935050505b9091565b6000808311829061276f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127669190612bc5565b60405180910390fd5b506000838561277e9190613b1e565b9050809150509392505050565b60008060008060008060008060006127a88a600c54600d54612992565b92509250925060006127b86123f3565b905060008060006127cb8e878787612a28565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061283583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fff565b905092915050565b600080828461284c9190613782565b905083811015612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890613b9b565b60405180910390fd5b8091505092915050565b60006128a56123f3565b905060006128bc8284612ab190919063ffffffff16565b905061291081600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461283d90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b61296d826006546127f390919063ffffffff16565b6006819055506129888160075461283d90919063ffffffff16565b6007819055505050565b6000806000806129be60646129b0888a612ab190919063ffffffff16565b61241e90919063ffffffff16565b905060006129e860646129da888b612ab190919063ffffffff16565b61241e90919063ffffffff16565b90506000612a1182612a03858c6127f390919063ffffffff16565b6127f390919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612a418589612ab190919063ffffffff16565b90506000612a588689612ab190919063ffffffff16565b90506000612a6f8789612ab190919063ffffffff16565b90506000612a9882612a8a85876127f390919063ffffffff16565b6127f390919063ffffffff16565b9050838184965096509650505050509450945094915050565b600080831415612ac45760009050612b26565b60008284612ad29190613155565b9050828482612ae19190613b1e565b14612b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1890613c2d565b60405180910390fd5b809150505b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b66578082015181840152602081019050612b4b565b83811115612b75576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b9782612b2c565b612ba18185612b37565b9350612bb1818560208601612b48565b612bba81612b7b565b840191505092915050565b60006020820190508181036000830152612bdf8184612b8c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c1782612bec565b9050919050565b612c2781612c0c565b8114612c3257600080fd5b50565b600081359050612c4481612c1e565b92915050565b6000819050919050565b612c5d81612c4a565b8114612c6857600080fd5b50565b600081359050612c7a81612c54565b92915050565b60008060408385031215612c9757612c96612be7565b5b6000612ca585828601612c35565b9250506020612cb685828601612c6b565b9150509250929050565b60008115159050919050565b612cd581612cc0565b82525050565b6000602082019050612cf06000830184612ccc565b92915050565b6000819050919050565b6000612d1b612d16612d1184612bec565b612cf6565b612bec565b9050919050565b6000612d2d82612d00565b9050919050565b6000612d3f82612d22565b9050919050565b612d4f81612d34565b82525050565b6000602082019050612d6a6000830184612d46565b92915050565b612d7981612c4a565b82525050565b6000602082019050612d946000830184612d70565b92915050565b600080600060608486031215612db357612db2612be7565b5b6000612dc186828701612c35565b9350506020612dd286828701612c35565b9250506040612de386828701612c6b565b9150509250925092565b600060ff82169050919050565b612e0381612ded565b82525050565b6000602082019050612e1e6000830184612dfa565b92915050565b612e2d81612c0c565b82525050565b6000602082019050612e486000830184612e24565b92915050565b612e5781612cc0565b8114612e6257600080fd5b50565b600081359050612e7481612e4e565b92915050565b600060208284031215612e9057612e8f612be7565b5b6000612e9e84828501612e65565b91505092915050565b600060208284031215612ebd57612ebc612be7565b5b6000612ecb84828501612c35565b91505092915050565b600060208284031215612eea57612ee9612be7565b5b6000612ef884828501612c6b565b91505092915050565b60008060008060808587031215612f1b57612f1a612be7565b5b6000612f2987828801612c6b565b9450506020612f3a87828801612c6b565b9350506040612f4b87828801612c6b565b9250506060612f5c87828801612c6b565b91505092959194509250565b60008060408385031215612f7f57612f7e612be7565b5b6000612f8d85828601612c35565b9250506020612f9e85828601612c35565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561302e5780860481111561300a57613009612fa8565b5b60018516156130195780820291505b808102905061302785612fd7565b9450612fee565b94509492505050565b6000826130475760019050613103565b816130555760009050613103565b816001811461306b5760028114613075576130a4565b6001915050613103565b60ff84111561308757613086612fa8565b5b8360020a91508482111561309e5761309d612fa8565b5b50613103565b5060208310610133831016604e8410600b84101617156130d95782820a9050838111156130d4576130d3612fa8565b5b613103565b6130e68484846001612fe4565b925090508184048111156130fd576130fc612fa8565b5b81810290505b9392505050565b600061311582612c4a565b915061312083612ded565b925061314d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613037565b905092915050565b600061316082612c4a565b915061316b83612c4a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131a4576131a3612fa8565b5b828202905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131e5602083612b37565b91506131f0826131af565b602082019050919050565b60006020820190508181036000830152613214816131d8565b9050919050565b60008151905061322a81612c1e565b92915050565b60006020828403121561324657613245612be7565b5b60006132548482850161321b565b91505092915050565b60006040820190506132726000830185612e24565b61327f6020830184612e24565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132e2602683612b37565b91506132ed82613286565b604082019050919050565b60006020820190508181036000830152613311816132d5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613374602483612b37565b915061337f82613318565b604082019050919050565b600060208201905081810360008301526133a381613367565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613406602283612b37565b9150613411826133aa565b604082019050919050565b60006020820190508181036000830152613435816133f9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613498602583612b37565b91506134a38261343c565b604082019050919050565b600060208201905081810360008301526134c78161348b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061352a602383612b37565b9150613535826134ce565b604082019050919050565b600060208201905081810360008301526135598161351d565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006135bc602983612b37565b91506135c782613560565b604082019050919050565b600060208201905081810360008301526135eb816135af565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b600061364e603f83612b37565b9150613659826135f2565b604082019050919050565b6000602082019050818103600083015261367d81613641565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b60006136ba601c83612b37565b91506136c582613684565b602082019050919050565b600060208201905081810360008301526136e9816136ad565b9050919050565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b600061374c602383612b37565b9150613757826136f0565b604082019050919050565b6000602082019050818103600083015261377b8161373f565b9050919050565b600061378d82612c4a565b915061379883612c4a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137cd576137cc612fa8565b5b828201905092915050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613834602383612b37565b915061383f826137d8565b604082019050919050565b6000602082019050818103600083015261386381613827565b9050919050565b600061387582612c4a565b915061388083612c4a565b92508282101561389357613892612fa8565b5b828203905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006138fa602a83612b37565b91506139058261389e565b604082019050919050565b60006020820190508181036000830152613929816138ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006139b36139ae6139a98461398e565b612cf6565b612c4a565b9050919050565b6139c381613998565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139fe81612c0c565b82525050565b6000613a1083836139f5565b60208301905092915050565b6000602082019050919050565b6000613a34826139c9565b613a3e81856139d4565b9350613a49836139e5565b8060005b83811015613a7a578151613a618882613a04565b9750613a6c83613a1c565b925050600181019050613a4d565b5085935050505092915050565b600060c082019050613a9c6000830189612d70565b613aa960208301886139ba565b8181036040830152613abb8187613a29565b9050613aca6060830186612e24565b613ad76080830185612e24565b613ae460a0830184612d70565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613b2982612c4a565b9150613b3483612c4a565b925082613b4457613b43613aef565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613b85601b83612b37565b9150613b9082613b4f565b602082019050919050565b60006020820190508181036000830152613bb481613b78565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c17602183612b37565b9150613c2282613bbb565b604082019050919050565b60006020820190508181036000830152613c4681613c0a565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d403702e8dec203218dad0e44626b389a110661177e7d6d9494ff684c3d73a4764736f6c63430008090033

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c80637d1db4a5116100ec578063a2a957bb1161008a578063c3c8cd8011610064578063c3c8cd80146105f5578063dd62ed3e1461060c578063ea1644d514610649578063f2fde38b14610672576101c2565b8063a2a957bb14610552578063a9059cbb1461057b578063bfd79284146105b8576101c2565b80638f70ccf7116100c65780638f70ccf7146104aa5780638f9a55c0146104d357806395d89b41146104fe57806398a5c31514610529576101c2565b80637d1db4a5146104175780637f2feddc146104425780638da5cb5b1461047f576101c2565b806341c2bd55116101595780636fc3eaec116101335780636fc3eaec1461038357806370a082311461039a578063715018a6146103d757806374010ece146103ee576101c2565b806341c2bd551461031857806349bd5a5e1461032f5780636d8aa8f81461035a576101c2565b806318160ddd1161019557806318160ddd1461025a57806323b872dd146102855780632fd689e3146102c2578063313ce567146102ed576101c2565b806306fdde03146101c7578063095ea7b3146101f25780631694505e1461022f576101c2565b366101c257005b600080fd5b3480156101d357600080fd5b506101dc61069b565b6040516101e99190612bc5565b60405180910390f35b3480156101fe57600080fd5b5061021960048036038101906102149190612c80565b6106d8565b6040516102269190612cdb565b60405180910390f35b34801561023b57600080fd5b506102446106f6565b6040516102519190612d55565b60405180910390f35b34801561026657600080fd5b5061026f61071c565b60405161027c9190612d7f565b60405180910390f35b34801561029157600080fd5b506102ac60048036038101906102a79190612d9a565b610741565b6040516102b99190612cdb565b60405180910390f35b3480156102ce57600080fd5b506102d761081a565b6040516102e49190612d7f565b60405180910390f35b3480156102f957600080fd5b50610302610820565b60405161030f9190612e09565b60405180910390f35b34801561032457600080fd5b5061032d610829565b005b34801561033b57600080fd5b50610344610908565b6040516103519190612e33565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190612e7a565b61092e565b005b34801561038f57600080fd5b506103986109e0565b005b3480156103a657600080fd5b506103c160048036038101906103bc9190612ea7565b610ab1565b6040516103ce9190612d7f565b60405180910390f35b3480156103e357600080fd5b506103ec610b02565b005b3480156103fa57600080fd5b5061041560048036038101906104109190612ed4565b610c55565b005b34801561042357600080fd5b5061042c610cf4565b6040516104399190612d7f565b60405180910390f35b34801561044e57600080fd5b5061046960048036038101906104649190612ea7565b610cfa565b6040516104769190612d7f565b60405180910390f35b34801561048b57600080fd5b50610494610d12565b6040516104a19190612e33565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190612e7a565b610d3b565b005b3480156104df57600080fd5b506104e861100f565b6040516104f59190612d7f565b60405180910390f35b34801561050a57600080fd5b50610513611015565b6040516105209190612bc5565b60405180910390f35b34801561053557600080fd5b50610550600480360381019061054b9190612ed4565b611052565b005b34801561055e57600080fd5b5061057960048036038101906105749190612f01565b6110f1565b005b34801561058757600080fd5b506105a2600480360381019061059d9190612c80565b6111a8565b6040516105af9190612cdb565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190612ea7565b6111c6565b6040516105ec9190612cdb565b60405180910390f35b34801561060157600080fd5b5061060a6111e6565b005b34801561061857600080fd5b50610633600480360381019061062e9190612f68565b6112bf565b6040516106409190612d7f565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b9190612ed4565b611346565b005b34801561067e57600080fd5b5061069960048036038101906106949190612ea7565b6113e5565b005b60606040518060400160405280600d81526020017f4f6e652050756e6368204d616e00000000000000000000000000000000000000815250905090565b60006106ec6106e56115a7565b84846115af565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a61072c919061310a565b64199c82cc0061073c9190613155565b905090565b600061074e84848461177a565b61080f8461075a6115a7565b61080a85604051806060016040528060288152602001613c4e60289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107c06115a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fff9092919063ffffffff16565b6115af565b600190509392505050565b60185481565b60006009905090565b6108316115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b5906131fb565b60405180910390fd5b6009600a6108cc919061310a565b64199c82cc006108dc9190613155565b6017819055506009600a6108f0919061310a565b64199c82cc006109009190613155565b601681905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109366115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ba906131fb565b60405180910390fd5b80601560166101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a216115a7565b73ffffffffffffffffffffffffffffffffffffffff161480610a975750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610a7f6115a7565b73ffffffffffffffffffffffffffffffffffffffff16145b610aa057600080fd5b6000479050610aae81612063565b50565b6000610afb600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120cf565b9050919050565b610b0a6115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e906131fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610c5d6115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce1906131fb565b60405180910390fd5b8060168190555050565b60165481565b60116020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d436115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc7906131fb565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7057600080fd5b505afa158015610e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190613230565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0a57600080fd5b505afa158015610f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f429190613230565b6040518363ffffffff1660e01b8152600401610f5f92919061325d565b602060405180830381600087803b158015610f7957600080fd5b505af1158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb19190613230565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601560146101000a81548160ff0219169083151502179055505050565b60175481565b60606040518060400160405280600381526020017f4f504d0000000000000000000000000000000000000000000000000000000000815250905090565b61105a6115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de906131fb565b60405180910390fd5b8060188190555050565b6110f96115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d906131fb565b60405180910390fd5b8360088190555082600a819055508160098190555080600b8190555050505050565b60006111bc6111b56115a7565b848461177a565b6001905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112276115a7565b73ffffffffffffffffffffffffffffffffffffffff16148061129d5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112856115a7565b73ffffffffffffffffffffffffffffffffffffffff16145b6112a657600080fd5b60006112b130610ab1565b90506112bc8161213d565b50565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61134e6115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d2906131fb565b60405180910390fd5b8060178190555050565b6113ed6115a7565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611471906131fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e1906132f8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561161f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116169061338a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561168f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116869061341c565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161176d9190612d7f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906134ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190613540565b60405180910390fd5b6000811161189d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611894906135d2565b60405180910390fd5b6118a5610d12565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561191357506118e3610d12565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611cfe57601560149054906101000a900460ff166119a257611934610d12565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199890613664565b60405180910390fd5b5b6016548111156119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906136d0565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611a8b5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac190613762565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611b775760175481611b2c84610ab1565b611b369190613782565b10611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d9061384a565b60405180910390fd5b5b6000611b8230610ab1565b9050600060185482101590506016548210611b9d5760165491505b808015611bb5575060158054906101000a900460ff16155b8015611c0f5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611c275750601560169054906101000a900460ff165b8015611c7d5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611cd35750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cfb57611ce18261213d565b60004790506000811115611cf957611cf847612063565b5b505b50505b600060019050600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611da55750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611e585750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611e575750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611e665760009050611fed565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611f115750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f2957600854600c81905550600954600d819055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611fd45750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611fec57600a54600c81905550600b54600d819055505b5b611ff9848484846123c6565b50505050565b6000838311158290612047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203e9190612bc5565b60405180910390fd5b5060008385612056919061386a565b9050809150509392505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156120cb573d6000803e3d6000fd5b5050565b6000600654821115612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d90613910565b60405180910390fd5b60006121206123f3565b9050612135818461241e90919063ffffffff16565b915050919050565b60016015806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561217457612173613930565b5b6040519080825280602002602001820160405280156121a25781602001602082028036833780820191505090505b50905030816000815181106121ba576121b961395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561225c57600080fd5b505afa158015612270573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122949190613230565b816001815181106122a8576122a761395f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061230f30601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846115af565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352aa4c2283600084306000426040518763ffffffff1660e01b815260040161237696959493929190613a87565b600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b505050505060006015806101000a81548160ff02191690831515021790555050565b806123d4576123d3612468565b5b6123df8484846124ab565b806123ed576123ec612676565b5b50505050565b600080600061240061268a565b91509150612417818361241e90919063ffffffff16565b9250505090565b600061246083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612728565b905092915050565b6000600c5414801561247c57506000600d54145b15612486576124a9565b600c54600e81905550600d54600f819055506000600c819055506000600d819055505b565b6000806000806000806124bd8761278b565b95509550955095509550955061251b86600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127f390919063ffffffff16565b600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125b085600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461283d90919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125fc8161289b565b6126068483612958565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516126639190612d7f565b60405180910390a3505050505050505050565b600e54600c81905550600f54600d81905550565b6000806000600654905060006009600a6126a4919061310a565b64199c82cc006126b49190613155565b90506126e86009600a6126c7919061310a565b64199c82cc006126d79190613155565b60065461241e90919063ffffffff16565b82101561271b576006546009600a612700919061310a565b64199c82cc006127109190613155565b935093505050612724565b81819350935050505b9091565b6000808311829061276f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127669190612bc5565b60405180910390fd5b506000838561277e9190613b1e565b9050809150509392505050565b60008060008060008060008060006127a88a600c54600d54612992565b92509250925060006127b86123f3565b905060008060006127cb8e878787612a28565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061283583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611fff565b905092915050565b600080828461284c9190613782565b905083811015612891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288890613b9b565b60405180910390fd5b8091505092915050565b60006128a56123f3565b905060006128bc8284612ab190919063ffffffff16565b905061291081600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461283d90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b61296d826006546127f390919063ffffffff16565b6006819055506129888160075461283d90919063ffffffff16565b6007819055505050565b6000806000806129be60646129b0888a612ab190919063ffffffff16565b61241e90919063ffffffff16565b905060006129e860646129da888b612ab190919063ffffffff16565b61241e90919063ffffffff16565b90506000612a1182612a03858c6127f390919063ffffffff16565b6127f390919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612a418589612ab190919063ffffffff16565b90506000612a588689612ab190919063ffffffff16565b90506000612a6f8789612ab190919063ffffffff16565b90506000612a9882612a8a85876127f390919063ffffffff16565b6127f390919063ffffffff16565b9050838184965096509650505050509450945094915050565b600080831415612ac45760009050612b26565b60008284612ad29190613155565b9050828482612ae19190613b1e565b14612b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1890613c2d565b60405180910390fd5b809150505b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b66578082015181840152602081019050612b4b565b83811115612b75576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b9782612b2c565b612ba18185612b37565b9350612bb1818560208601612b48565b612bba81612b7b565b840191505092915050565b60006020820190508181036000830152612bdf8184612b8c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c1782612bec565b9050919050565b612c2781612c0c565b8114612c3257600080fd5b50565b600081359050612c4481612c1e565b92915050565b6000819050919050565b612c5d81612c4a565b8114612c6857600080fd5b50565b600081359050612c7a81612c54565b92915050565b60008060408385031215612c9757612c96612be7565b5b6000612ca585828601612c35565b9250506020612cb685828601612c6b565b9150509250929050565b60008115159050919050565b612cd581612cc0565b82525050565b6000602082019050612cf06000830184612ccc565b92915050565b6000819050919050565b6000612d1b612d16612d1184612bec565b612cf6565b612bec565b9050919050565b6000612d2d82612d00565b9050919050565b6000612d3f82612d22565b9050919050565b612d4f81612d34565b82525050565b6000602082019050612d6a6000830184612d46565b92915050565b612d7981612c4a565b82525050565b6000602082019050612d946000830184612d70565b92915050565b600080600060608486031215612db357612db2612be7565b5b6000612dc186828701612c35565b9350506020612dd286828701612c35565b9250506040612de386828701612c6b565b9150509250925092565b600060ff82169050919050565b612e0381612ded565b82525050565b6000602082019050612e1e6000830184612dfa565b92915050565b612e2d81612c0c565b82525050565b6000602082019050612e486000830184612e24565b92915050565b612e5781612cc0565b8114612e6257600080fd5b50565b600081359050612e7481612e4e565b92915050565b600060208284031215612e9057612e8f612be7565b5b6000612e9e84828501612e65565b91505092915050565b600060208284031215612ebd57612ebc612be7565b5b6000612ecb84828501612c35565b91505092915050565b600060208284031215612eea57612ee9612be7565b5b6000612ef884828501612c6b565b91505092915050565b60008060008060808587031215612f1b57612f1a612be7565b5b6000612f2987828801612c6b565b9450506020612f3a87828801612c6b565b9350506040612f4b87828801612c6b565b9250506060612f5c87828801612c6b565b91505092959194509250565b60008060408385031215612f7f57612f7e612be7565b5b6000612f8d85828601612c35565b9250506020612f9e85828601612c35565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561302e5780860481111561300a57613009612fa8565b5b60018516156130195780820291505b808102905061302785612fd7565b9450612fee565b94509492505050565b6000826130475760019050613103565b816130555760009050613103565b816001811461306b5760028114613075576130a4565b6001915050613103565b60ff84111561308757613086612fa8565b5b8360020a91508482111561309e5761309d612fa8565b5b50613103565b5060208310610133831016604e8410600b84101617156130d95782820a9050838111156130d4576130d3612fa8565b5b613103565b6130e68484846001612fe4565b925090508184048111156130fd576130fc612fa8565b5b81810290505b9392505050565b600061311582612c4a565b915061312083612ded565b925061314d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613037565b905092915050565b600061316082612c4a565b915061316b83612c4a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131a4576131a3612fa8565b5b828202905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131e5602083612b37565b91506131f0826131af565b602082019050919050565b60006020820190508181036000830152613214816131d8565b9050919050565b60008151905061322a81612c1e565b92915050565b60006020828403121561324657613245612be7565b5b60006132548482850161321b565b91505092915050565b60006040820190506132726000830185612e24565b61327f6020830184612e24565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006132e2602683612b37565b91506132ed82613286565b604082019050919050565b60006020820190508181036000830152613311816132d5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613374602483612b37565b915061337f82613318565b604082019050919050565b600060208201905081810360008301526133a381613367565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613406602283612b37565b9150613411826133aa565b604082019050919050565b60006020820190508181036000830152613435816133f9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613498602583612b37565b91506134a38261343c565b604082019050919050565b600060208201905081810360008301526134c78161348b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061352a602383612b37565b9150613535826134ce565b604082019050919050565b600060208201905081810360008301526135598161351d565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006135bc602983612b37565b91506135c782613560565b604082019050919050565b600060208201905081810360008301526135eb816135af565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b600061364e603f83612b37565b9150613659826135f2565b604082019050919050565b6000602082019050818103600083015261367d81613641565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b60006136ba601c83612b37565b91506136c582613684565b602082019050919050565b600060208201905081810360008301526136e9816136ad565b9050919050565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b600061374c602383612b37565b9150613757826136f0565b604082019050919050565b6000602082019050818103600083015261377b8161373f565b9050919050565b600061378d82612c4a565b915061379883612c4a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137cd576137cc612fa8565b5b828201905092915050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613834602383612b37565b915061383f826137d8565b604082019050919050565b6000602082019050818103600083015261386381613827565b9050919050565b600061387582612c4a565b915061388083612c4a565b92508282101561389357613892612fa8565b5b828203905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006138fa602a83612b37565b91506139058261389e565b604082019050919050565b60006020820190508181036000830152613929816138ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006139b36139ae6139a98461398e565b612cf6565b612c4a565b9050919050565b6139c381613998565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139fe81612c0c565b82525050565b6000613a1083836139f5565b60208301905092915050565b6000602082019050919050565b6000613a34826139c9565b613a3e81856139d4565b9350613a49836139e5565b8060005b83811015613a7a578151613a618882613a04565b9750613a6c83613a1c565b925050600181019050613a4d565b5085935050505092915050565b600060c082019050613a9c6000830189612d70565b613aa960208301886139ba565b8181036040830152613abb8187613a29565b9050613aca6060830186612e24565b613ad76080830185612e24565b613ae460a0830184612d70565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613b2982612c4a565b9150613b3483612c4a565b925082613b4457613b43613aef565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613b85601b83612b37565b9150613b9082613b4f565b602082019050919050565b60006020820190508181036000830152613bb481613b78565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c17602183612b37565b9150613c2282613bbb565b604082019050919050565b60006020820190508181036000830152613c4681613c0a565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d403702e8dec203218dad0e44626b389a110661177e7d6d9494ff684c3d73a4764736f6c63430008090033

Deployed Bytecode Sourcemap

3764:13244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5991:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6916:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5124:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6268:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7117:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5432:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6177:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16891:114;;;;;;;;;;;;;:::i;:::-;;5172:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16512:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12337:235;;;;;;;;;;;;;:::i;:::-;;6371:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1599:148;;;;;;;;;;;;;:::i;:::-;;16652:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5321:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4866:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1385:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11691:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5376:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6082:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16321:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15978:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6517:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4828:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12093:236;;;;;;;;;;;;;:::i;:::-;;6724:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16768:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1755:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5991:83;6028:13;6061:5;;;;;;;;;;;;;;;;;6054:12;;5991:83;:::o;6916:193::-;7018:4;7040:39;7049:12;:10;:12::i;:::-;7063:7;7072:6;7040:8;:39::i;:::-;7097:4;7090:11;;6916:193;;;;:::o;5124:41::-;;;;;;;;;;;;;:::o;6268:95::-;6321:7;4006:1;4351:2;:13;;;;:::i;:::-;4333:15;:31;;;;:::i;:::-;6341:14;;6268:95;:::o;7117:446::-;7249:4;7266:36;7276:6;7284:9;7295:6;7266:9;:36::i;:::-;7313:220;7336:6;7357:12;:10;:12::i;:::-;7384:138;7440:6;7384:138;;;;;;;;;;;;;;;;;:11;:19;7396:6;7384:19;;;;;;;;;;;;;;;:33;7404:12;:10;:12::i;:::-;7384:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;7313:8;:220::i;:::-;7551:4;7544:11;;7117:446;;;;;:::o;5432:55::-;;;;:::o;6177:83::-;6218:5;4006:1;6236:16;;6177:83;:::o;16891:114::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;4006:1:::1;4351:2;:13;;;;:::i;:::-;4333:15;:31;;;;:::i;:::-;16940:14;:24;;;;4006:1;4351:2;:13;;;;:::i;:::-;4333:15;:31;;;;:::i;:::-;16975:12;:22;;;;16891:114::o:0;5172:28::-;;;;;;;;;;;;;:::o;16512:101::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16593:12:::1;16579:11;;:26;;;;;;;;;;;;;;;;;;16512:101:::0;:::o;12337:235::-;12403:19;;;;;;;;;;;12387:35;;:12;:10;:12::i;:::-;:35;;;:72;;;;12442:17;;;;;;;;;;;12426:33;;:12;:10;:12::i;:::-;:33;;;12387:72;12379:81;;;;;;12471:26;12500:21;12471:50;;12532:32;12545:18;12532:12;:32::i;:::-;12368:204;12337:235::o;6371:138::-;6437:7;6464:37;6484:7;:16;6492:7;6484:16;;;;;;;;;;;;;;;;6464:19;:37::i;:::-;6457:44;;6371:138;;;:::o;1599:148::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1706:1:::1;1669:40;;1690:6;::::0;::::1;;;;;;;;1669:40;;;;;;;;;;;;1737:1;1720:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1599:148::o:0;16652:108::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16741:11:::1;16726:12;:26;;;;16652:108:::0;:::o;5321:48::-;;;;:::o;4866:43::-;;;;;;;;;;;;;;;;;:::o;1385:79::-;1423:7;1450:6;;;;;;;;;;;1443:13;;1385:79;:::o;11691:394::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11758:35:::1;11815:42;11758:100;;11887:16;11869:15;;:34;;;;;;;;;;;;;;;;;;11948:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11930:70;;;12009:4;12016:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11930:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11914:13;;:126;;;;;;;;;;;;;;;;;;12065:12;12051:11;;:26;;;;;;;;;;;;;;;;;;11747:338;11691:394:::0;:::o;5376:49::-;;;;:::o;6082:87::-;6121:13;6154:7;;;;;;;;;;;;;;;;;6147:14;;6082:87;:::o;16321:139::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16434:18:::1;16412:19;:40;;;;16321:139:::0;:::o;15978:291::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16129:13:::1;16112:14;:30;;;;16171:14;16153:15;:32;;;;16211:11;16196:12;:26;;;;16249:12;16233:13;:28;;;;15978:291:::0;;;;:::o;6517:199::-;6622:4;6644:42;6654:12;:10;:12::i;:::-;6668:9;6679:6;6644:9;:42::i;:::-;6704:4;6697:11;;6517:199;;;;:::o;4828:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;12093:236::-;12159:19;;;;;;;;;;;12143:35;;:12;:10;:12::i;:::-;:35;;;:72;;;;12198:17;;;;;;;;;;;12182:33;;:12;:10;:12::i;:::-;:33;;;12143:72;12135:81;;;;;;12227:23;12253:24;12271:4;12253:9;:24::i;:::-;12227:50;;12288:33;12305:15;12288:16;:33::i;:::-;12124:205;12093:236::o;6724:184::-;6841:7;6873:11;:18;6885:5;6873:18;;;;;;;;;;;;;;;:27;6892:7;6873:27;;;;;;;;;;;;;;;;6866:34;;6724:184;;;;:::o;16768:115::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16862:13:::1;16845:14;:30;;;;16768:115:::0;:::o;1755:244::-;1522:12;:10;:12::i;:::-;1512:22;;:6;;;;;;;;;;:22;;;1504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1864:1:::1;1844:22;;:8;:22;;;;1836:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1954:8;1925:38;;1946:6;::::0;::::1;;;;;;;;1925:38;;;;;;;;;;;;1983:8;1974:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1755:244:::0;:::o;141:98::-;194:7;221:10;214:17;;141:98;:::o;8254:369::-;8398:1;8381:19;;:5;:19;;;;8373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8479:1;8460:21;;:7;:21;;;;8452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8561:6;8531:11;:18;8543:5;8531:18;;;;;;;;;;;;;;;:27;8550:7;8531:27;;;;;;;;;;;;;;;:36;;;;8599:7;8583:32;;8592:5;8583:32;;;8608:6;8583:32;;;;;;:::i;:::-;;;;;;;;8254:369;;;:::o;8631:2330::-;8769:1;8753:18;;:4;:18;;;;8745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8846:1;8832:16;;:2;:16;;;;8824:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8916:1;8907:6;:10;8899:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8988:7;:5;:7::i;:::-;8980:15;;:4;:15;;;;:32;;;;;9005:7;:5;:7::i;:::-;8999:13;;:2;:13;;;;8980:32;8976:1259;;;9069:11;;;;;;;;;;;9064:144;;9117:7;:5;:7::i;:::-;9109:15;;:4;:15;;;9101:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;9064:144;9242:12;;9232:6;:22;;9224:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9311:4;:10;9316:4;9311:10;;;;;;;;;;;;;;;;;;;;;;;;;9310:11;:24;;;;;9326:4;:8;9331:2;9326:8;;;;;;;;;;;;;;;;;;;;;;;;;9325:9;9310:24;9302:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;9400:13;;;;;;;;;;;9394:19;;:2;:19;;;9391:146;;9467:14;;9458:6;9442:13;9452:2;9442:9;:13::i;:::-;:22;;;;:::i;:::-;:39;9434:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;9391:146;9553:28;9584:24;9602:4;9584:9;:24::i;:::-;9553:55;;9623:12;9662:19;;9638:20;:43;;9623:58;;9725:12;;9701:20;:36;9698:124;;9794:12;;9771:35;;9698:124;9842:7;:18;;;;;9854:6;;;;;;;;;;9853:7;9842:18;:43;;;;;9872:13;;;;;;;;;;;9864:21;;:4;:21;;;;9842:43;:58;;;;;9889:11;;;;;;;;;;;9842:58;:87;;;;;9905:18;:24;9924:4;9905:24;;;;;;;;;;;;;;;;;;;;;;;;;9904:25;9842:87;:114;;;;;9934:18;:22;9953:2;9934:22;;;;;;;;;;;;;;;;;;;;;;;;;9933:23;9842:114;9838:386;;;9977:38;9994:20;9977:16;:38::i;:::-;10034:26;10063:21;10034:50;;10128:1;10107:18;:22;10103:106;;;10154:35;10167:21;10154:12;:35::i;:::-;10103:106;9958:266;9838:386;9014:1221;;8976:1259;10247:12;10262:4;10247:19;;10311:18;:24;10330:4;10311:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;10339:18;:22;10358:2;10339:22;;;;;;;;;;;;;;;;;;;;;;;;;10311:50;10310:102;;;;10375:13;;;;;;;;;;;10367:21;;:4;:21;;;;:44;;;;;10398:13;;;;;;;;;;;10392:19;;:2;:19;;;;10367:44;10310:102;10306:594;;;10439:5;10429:15;;10306:594;;;10522:13;;;;;;;;;;;10514:21;;:4;:21;;;:55;;;;;10553:15;;;;;;;;;;;10539:30;;:2;:30;;;;10514:55;10511:162;;;10602:14;;10590:9;:26;;;;10645:12;;10635:7;:22;;;;10511:162;10732:13;;;;;;;;;;;10726:19;;:2;:19;;;:55;;;;;10765:15;;;;;;;;;;;10749:32;;:4;:32;;;;10726:55;10722:165;;;10814:15;;10802:9;:27;;;;10858:13;;10848:7;:23;;;;10722:165;10306:594;10912:41;10927:4;10933:2;10937:6;10945:7;10912:14;:41::i;:::-;8734:2227;8631:2330;;;:::o;2363:224::-;2483:7;2516:1;2511;:6;;2519:12;2503:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2543:9;2559:1;2555;:5;;;;:::i;:::-;2543:17;;2578:1;2571:8;;;2363:224;;;;;:::o;11517:99::-;11574:17;;;;;;;;;;;:26;;:34;11601:6;11574:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11517:99;:::o;7571:323::-;7666:7;7724;;7713;:18;;7691:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;7812:19;7834:10;:8;:10::i;:::-;7812:32;;7862:24;7874:11;7862:7;:11;;:24;;;;:::i;:::-;7855:31;;;7571:323;;;:::o;10969:540::-;5590:4;5581:6;;:13;;;;;;;;;;;;;;;;;;11047:21:::1;11085:1;11071:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11047:40;;11116:4;11098;11103:1;11098:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;11142:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11132:4;11137:1;11132:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;11175:62;11192:4;11207:15;;;;;;;;;;;11225:11;11175:8;:62::i;:::-;11248:15;;;;;;;;;;;:66;;;11329:11;11355:1;11371:4;11398;11418:42;11475:15;11248:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11036:473;5627:5:::0;5618:6;;:14;;;;;;;;;;;;;;;;;;10969:540;:::o;12580:282::-;12736:7;12731:28;;12745:14;:12;:14::i;:::-;12731:28;12770:44;12788:6;12796:9;12807:6;12770:17;:44::i;:::-;12830:7;12825:29;;12839:15;:13;:15::i;:::-;12825:29;12580:282;;;;:::o;15541:164::-;15583:7;15604:15;15621;15640:19;:17;:19::i;:::-;15603:56;;;;15677:20;15689:7;15677;:11;;:20;;;;:::i;:::-;15670:27;;;;15541:164;:::o;2849:132::-;2907:7;2934:39;2938:1;2941;2934:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2927:46;;2849:132;;;;:::o;7902:219::-;7962:1;7949:9;;:14;:30;;;;;7978:1;7967:7;;:12;7949:30;7945:43;;;7981:7;;7945:43;8020:9;;8000:17;:29;;;;8058:7;;8040:15;:25;;;;8090:1;8078:9;:13;;;;8112:1;8102:7;:11;;;;7902:219;:::o;12870:610::-;13017:15;13047:23;13085:12;13112:23;13150:12;13177:13;13204:19;13215:7;13204:10;:19::i;:::-;13002:221;;;;;;;;;;;;13252:28;13272:7;13252;:15;13260:6;13252:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;13234:7;:15;13242:6;13234:15;;;;;;;;;;;;;;;:46;;;;13312:39;13335:15;13312:7;:18;13320:9;13312:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;13291:7;:18;13299:9;13291:18;;;;;;;;;;;;;;;:60;;;;13362:16;13372:5;13362:9;:16::i;:::-;13389:23;13401:4;13407;13389:11;:23::i;:::-;13445:9;13428:44;;13437:6;13428:44;;;13456:15;13428:44;;;;;;:::i;:::-;;;;;;;;12991:489;;;;;;12870:610;;;:::o;8129:117::-;8185:17;;8173:9;:29;;;;8223:15;;8213:7;:25;;;;8129:117::o;15713:257::-;15764:7;15773;15793:15;15811:7;;15793:25;;15829:15;4006:1;4351:2;:13;;;;:::i;:::-;4333:15;:31;;;;:::i;:::-;15829:25;;15879:20;4006:1;4351:2;:13;;;;:::i;:::-;4333:15;:31;;;;:::i;:::-;15879:7;;:11;;:20;;;;:::i;:::-;15869:7;:30;15865:61;;;15909:7;;4006:1;4351:2;:13;;;;:::i;:::-;4333:15;:31;;;;:::i;:::-;15901:25;;;;;;;;15865:61;15945:7;15954;15937:25;;;;;;15713:257;;;:::o;2989:223::-;3109:7;3141:1;3137;:5;3144:12;3129:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3168:9;3184:1;3180;:5;;;;:::i;:::-;3168:17;;3203:1;3196:8;;;2989:223;;;;;:::o;13899:615::-;13999:7;14021;14043;14065;14087;14109;14145:23;14170:12;14184:13;14214:40;14226:7;14235:9;;14246:7;;14214:11;:40::i;:::-;14144:110;;;;;;14265:19;14287:10;:8;:10::i;:::-;14265:32;;14309:15;14326:23;14351:12;14380:46;14392:7;14401:4;14407:5;14414:11;14380;:46::i;:::-;14308:118;;;;;;14445:7;14454:15;14471:4;14477:15;14494:4;14500:5;14437:69;;;;;;;;;;;;;;;;;;;13899:615;;;;;;;:::o;2219:136::-;2277:7;2304:43;2308:1;2311;2304:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2297:50;;2219:136;;;;:::o;2032:179::-;2090:7;2110:9;2126:1;2122;:5;;;;:::i;:::-;2110:17;;2151:1;2146;:6;;2138:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2202:1;2195:8;;;2032:179;;;;:::o;13488:211::-;13541:19;13563:10;:8;:10::i;:::-;13541:32;;13584:13;13600:22;13610:11;13600:5;:9;;:22;;;;:::i;:::-;13584:38;;13658:33;13685:5;13658:7;:22;13674:4;13658:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;13633:7;:22;13649:4;13633:22;;;;;;;;;;;;;;;:58;;;;13530:169;;13488:211;:::o;13707:147::-;13785:17;13797:4;13785:7;;:11;;:17;;;;:::i;:::-;13775:7;:27;;;;13826:20;13841:4;13826:10;;:14;;:20;;;;:::i;:::-;13813:10;:33;;;;13707:147;;:::o;14522:469::-;14691:7;14713;14735;14770:12;14785:30;14811:3;14785:21;14797:8;14785:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;14770:45;;14826:13;14842:28;14866:3;14842:19;14854:6;14842:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;14826:44;;14881:23;14907:28;14929:5;14907:17;14919:4;14907:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;14881:54;;14954:15;14971:4;14977:5;14946:37;;;;;;;;;14522:469;;;;;;;:::o;14999:534::-;15193:7;15215;15237;15272:15;15290:24;15302:11;15290:7;:11;;:24;;;;:::i;:::-;15272:42;;15325:12;15340:21;15349:11;15340:4;:8;;:21;;;;:::i;:::-;15325:36;;15372:13;15388:22;15398:11;15388:5;:9;;:22;;;;:::i;:::-;15372:38;;15421:23;15447:28;15469:5;15447:17;15459:4;15447:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;15421:54;;15494:7;15503:15;15520:4;15486:39;;;;;;;;;;14999:534;;;;;;;;:::o;2595:246::-;2653:7;2682:1;2677;:6;2673:47;;;2707:1;2700:8;;;;2673:47;2730:9;2746:1;2742;:5;;;;:::i;:::-;2730:17;;2775:1;2770;2766;:5;;;;:::i;:::-;:10;2758:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2832:1;2825:8;;;2595:246;;;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:152::-;3916:9;3949:37;3980:5;3949:37;:::i;:::-;3936:50;;3840:152;;;:::o;3998:183::-;4111:63;4168:5;4111:63;:::i;:::-;4106:3;4099:76;3998:183;;:::o;4187:274::-;4306:4;4344:2;4333:9;4329:18;4321:26;;4357:97;4451:1;4440:9;4436:17;4427:6;4357:97;:::i;:::-;4187:274;;;;:::o;4467:118::-;4554:24;4572:5;4554:24;:::i;:::-;4549:3;4542:37;4467:118;;:::o;4591:222::-;4684:4;4722:2;4711:9;4707:18;4699:26;;4735:71;4803:1;4792:9;4788:17;4779:6;4735:71;:::i;:::-;4591:222;;;;:::o;4819:619::-;4896:6;4904;4912;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;5214:2;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5185:118;5342:2;5368:53;5413:7;5404:6;5393:9;5389:22;5368:53;:::i;:::-;5358:63;;5313:118;4819:619;;;;;:::o;5444:86::-;5479:7;5519:4;5512:5;5508:16;5497:27;;5444:86;;;:::o;5536:112::-;5619:22;5635:5;5619:22;:::i;:::-;5614:3;5607:35;5536:112;;:::o;5654:214::-;5743:4;5781:2;5770:9;5766:18;5758:26;;5794:67;5858:1;5847:9;5843:17;5834:6;5794:67;:::i;:::-;5654:214;;;;:::o;5874:118::-;5961:24;5979:5;5961:24;:::i;:::-;5956:3;5949:37;5874:118;;:::o;5998:222::-;6091:4;6129:2;6118:9;6114:18;6106:26;;6142:71;6210:1;6199:9;6195:17;6186:6;6142:71;:::i;:::-;5998:222;;;;:::o;6226:116::-;6296:21;6311:5;6296:21;:::i;:::-;6289:5;6286:32;6276:60;;6332:1;6329;6322:12;6276:60;6226:116;:::o;6348:133::-;6391:5;6429:6;6416:20;6407:29;;6445:30;6469:5;6445:30;:::i;:::-;6348:133;;;;:::o;6487:323::-;6543:6;6592:2;6580:9;6571:7;6567:23;6563:32;6560:119;;;6598:79;;:::i;:::-;6560:119;6718:1;6743:50;6785:7;6776:6;6765:9;6761:22;6743:50;:::i;:::-;6733:60;;6689:114;6487:323;;;;:::o;6816:329::-;6875:6;6924:2;6912:9;6903:7;6899:23;6895:32;6892:119;;;6930:79;;:::i;:::-;6892:119;7050:1;7075:53;7120:7;7111:6;7100:9;7096:22;7075:53;:::i;:::-;7065:63;;7021:117;6816:329;;;;:::o;7151:::-;7210:6;7259:2;7247:9;7238:7;7234:23;7230:32;7227:119;;;7265:79;;:::i;:::-;7227:119;7385:1;7410:53;7455:7;7446:6;7435:9;7431:22;7410:53;:::i;:::-;7400:63;;7356:117;7151:329;;;;:::o;7486:765::-;7572:6;7580;7588;7596;7645:3;7633:9;7624:7;7620:23;7616:33;7613:120;;;7652:79;;:::i;:::-;7613:120;7772:1;7797:53;7842:7;7833:6;7822:9;7818:22;7797:53;:::i;:::-;7787:63;;7743:117;7899:2;7925:53;7970:7;7961:6;7950:9;7946:22;7925:53;:::i;:::-;7915:63;;7870:118;8027:2;8053:53;8098:7;8089:6;8078:9;8074:22;8053:53;:::i;:::-;8043:63;;7998:118;8155:2;8181:53;8226:7;8217:6;8206:9;8202:22;8181:53;:::i;:::-;8171:63;;8126:118;7486:765;;;;;;;:::o;8257:474::-;8325:6;8333;8382:2;8370:9;8361:7;8357:23;8353:32;8350:119;;;8388:79;;:::i;:::-;8350:119;8508:1;8533:53;8578:7;8569:6;8558:9;8554:22;8533:53;:::i;:::-;8523:63;;8479:117;8635:2;8661:53;8706:7;8697:6;8686:9;8682:22;8661:53;:::i;:::-;8651:63;;8606:118;8257:474;;;;;:::o;8737:180::-;8785:77;8782:1;8775:88;8882:4;8879:1;8872:15;8906:4;8903:1;8896:15;8923:102;8965:8;9012:5;9009:1;9005:13;8984:34;;8923:102;;;:::o;9031:848::-;9092:5;9099:4;9123:6;9114:15;;9147:5;9138:14;;9161:712;9182:1;9172:8;9169:15;9161:712;;;9277:4;9272:3;9268:14;9262:4;9259:24;9256:50;;;9286:18;;:::i;:::-;9256:50;9336:1;9326:8;9322:16;9319:451;;;9751:4;9744:5;9740:16;9731:25;;9319:451;9801:4;9795;9791:15;9783:23;;9831:32;9854:8;9831:32;:::i;:::-;9819:44;;9161:712;;;9031:848;;;;;;;:::o;9885:1073::-;9939:5;10130:8;10120:40;;10151:1;10142:10;;10153:5;;10120:40;10179:4;10169:36;;10196:1;10187:10;;10198:5;;10169:36;10265:4;10313:1;10308:27;;;;10349:1;10344:191;;;;10258:277;;10308:27;10326:1;10317:10;;10328:5;;;10344:191;10389:3;10379:8;10376:17;10373:43;;;10396:18;;:::i;:::-;10373:43;10445:8;10442:1;10438:16;10429:25;;10480:3;10473:5;10470:14;10467:40;;;10487:18;;:::i;:::-;10467:40;10520:5;;;10258:277;;10644:2;10634:8;10631:16;10625:3;10619:4;10616:13;10612:36;10594:2;10584:8;10581:16;10576:2;10570:4;10567:12;10563:35;10547:111;10544:246;;;10700:8;10694:4;10690:19;10681:28;;10735:3;10728:5;10725:14;10722:40;;;10742:18;;:::i;:::-;10722:40;10775:5;;10544:246;10815:42;10853:3;10843:8;10837:4;10834:1;10815:42;:::i;:::-;10800:57;;;;10889:4;10884:3;10880:14;10873:5;10870:25;10867:51;;;10898:18;;:::i;:::-;10867:51;10947:4;10940:5;10936:16;10927:25;;9885:1073;;;;;;:::o;10964:281::-;11022:5;11046:23;11064:4;11046:23;:::i;:::-;11038:31;;11090:25;11106:8;11090:25;:::i;:::-;11078:37;;11134:104;11171:66;11161:8;11155:4;11134:104;:::i;:::-;11125:113;;10964:281;;;;:::o;11251:348::-;11291:7;11314:20;11332:1;11314:20;:::i;:::-;11309:25;;11348:20;11366:1;11348:20;:::i;:::-;11343:25;;11536:1;11468:66;11464:74;11461:1;11458:81;11453:1;11446:9;11439:17;11435:105;11432:131;;;11543:18;;:::i;:::-;11432:131;11591:1;11588;11584:9;11573:20;;11251:348;;;;:::o;11605:182::-;11745:34;11741:1;11733:6;11729:14;11722:58;11605:182;:::o;11793:366::-;11935:3;11956:67;12020:2;12015:3;11956:67;:::i;:::-;11949:74;;12032:93;12121:3;12032:93;:::i;:::-;12150:2;12145:3;12141:12;12134:19;;11793:366;;;:::o;12165:419::-;12331:4;12369:2;12358:9;12354:18;12346:26;;12418:9;12412:4;12408:20;12404:1;12393:9;12389:17;12382:47;12446:131;12572:4;12446:131;:::i;:::-;12438:139;;12165:419;;;:::o;12590:143::-;12647:5;12678:6;12672:13;12663:22;;12694:33;12721:5;12694:33;:::i;:::-;12590:143;;;;:::o;12739:351::-;12809:6;12858:2;12846:9;12837:7;12833:23;12829:32;12826:119;;;12864:79;;:::i;:::-;12826:119;12984:1;13009:64;13065:7;13056:6;13045:9;13041:22;13009:64;:::i;:::-;12999:74;;12955:128;12739:351;;;;:::o;13096:332::-;13217:4;13255:2;13244:9;13240:18;13232:26;;13268:71;13336:1;13325:9;13321:17;13312:6;13268:71;:::i;:::-;13349:72;13417:2;13406:9;13402:18;13393:6;13349:72;:::i;:::-;13096:332;;;;;:::o;13434:225::-;13574:34;13570:1;13562:6;13558:14;13551:58;13643:8;13638:2;13630:6;13626:15;13619:33;13434:225;:::o;13665:366::-;13807:3;13828:67;13892:2;13887:3;13828:67;:::i;:::-;13821:74;;13904:93;13993:3;13904:93;:::i;:::-;14022:2;14017:3;14013:12;14006:19;;13665:366;;;:::o;14037:419::-;14203:4;14241:2;14230:9;14226:18;14218:26;;14290:9;14284:4;14280:20;14276:1;14265:9;14261:17;14254:47;14318:131;14444:4;14318:131;:::i;:::-;14310:139;;14037:419;;;:::o;14462:223::-;14602:34;14598:1;14590:6;14586:14;14579:58;14671:6;14666:2;14658:6;14654:15;14647:31;14462:223;:::o;14691:366::-;14833:3;14854:67;14918:2;14913:3;14854:67;:::i;:::-;14847:74;;14930:93;15019:3;14930:93;:::i;:::-;15048:2;15043:3;15039:12;15032:19;;14691:366;;;:::o;15063:419::-;15229:4;15267:2;15256:9;15252:18;15244:26;;15316:9;15310:4;15306:20;15302:1;15291:9;15287:17;15280:47;15344:131;15470:4;15344:131;:::i;:::-;15336:139;;15063:419;;;:::o;15488:221::-;15628:34;15624:1;15616:6;15612:14;15605:58;15697:4;15692:2;15684:6;15680:15;15673:29;15488:221;:::o;15715:366::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:419::-;16253:4;16291:2;16280:9;16276:18;16268:26;;16340:9;16334:4;16330:20;16326:1;16315:9;16311:17;16304:47;16368:131;16494:4;16368:131;:::i;:::-;16360:139;;16087:419;;;:::o;16512:224::-;16652:34;16648:1;16640:6;16636:14;16629:58;16721:7;16716:2;16708:6;16704:15;16697:32;16512:224;:::o;16742:366::-;16884:3;16905:67;16969:2;16964:3;16905:67;:::i;:::-;16898:74;;16981:93;17070:3;16981:93;:::i;:::-;17099:2;17094:3;17090:12;17083:19;;16742:366;;;:::o;17114:419::-;17280:4;17318:2;17307:9;17303:18;17295:26;;17367:9;17361:4;17357:20;17353:1;17342:9;17338:17;17331:47;17395:131;17521:4;17395:131;:::i;:::-;17387:139;;17114:419;;;:::o;17539:222::-;17679:34;17675:1;17667:6;17663:14;17656:58;17748:5;17743:2;17735:6;17731:15;17724:30;17539:222;:::o;17767:366::-;17909:3;17930:67;17994:2;17989:3;17930:67;:::i;:::-;17923:74;;18006:93;18095:3;18006:93;:::i;:::-;18124:2;18119:3;18115:12;18108:19;;17767:366;;;:::o;18139:419::-;18305:4;18343:2;18332:9;18328:18;18320:26;;18392:9;18386:4;18382:20;18378:1;18367:9;18363:17;18356:47;18420:131;18546:4;18420:131;:::i;:::-;18412:139;;18139:419;;;:::o;18564:228::-;18704:34;18700:1;18692:6;18688:14;18681:58;18773:11;18768:2;18760:6;18756:15;18749:36;18564:228;:::o;18798:366::-;18940:3;18961:67;19025:2;19020:3;18961:67;:::i;:::-;18954:74;;19037:93;19126:3;19037:93;:::i;:::-;19155:2;19150:3;19146:12;19139:19;;18798:366;;;:::o;19170:419::-;19336:4;19374:2;19363:9;19359:18;19351:26;;19423:9;19417:4;19413:20;19409:1;19398:9;19394:17;19387:47;19451:131;19577:4;19451:131;:::i;:::-;19443:139;;19170:419;;;:::o;19595:250::-;19735:34;19731:1;19723:6;19719:14;19712:58;19804:33;19799:2;19791:6;19787:15;19780:58;19595:250;:::o;19851:366::-;19993:3;20014:67;20078:2;20073:3;20014:67;:::i;:::-;20007:74;;20090:93;20179:3;20090:93;:::i;:::-;20208:2;20203:3;20199:12;20192:19;;19851:366;;;:::o;20223:419::-;20389:4;20427:2;20416:9;20412:18;20404:26;;20476:9;20470:4;20466:20;20462:1;20451:9;20447:17;20440:47;20504:131;20630:4;20504:131;:::i;:::-;20496:139;;20223:419;;;:::o;20648:178::-;20788:30;20784:1;20776:6;20772:14;20765:54;20648:178;:::o;20832:366::-;20974:3;20995:67;21059:2;21054:3;20995:67;:::i;:::-;20988:74;;21071:93;21160:3;21071:93;:::i;:::-;21189:2;21184:3;21180:12;21173:19;;20832:366;;;:::o;21204:419::-;21370:4;21408:2;21397:9;21393:18;21385:26;;21457:9;21451:4;21447:20;21443:1;21432:9;21428:17;21421:47;21485:131;21611:4;21485:131;:::i;:::-;21477:139;;21204:419;;;:::o;21629:222::-;21769:34;21765:1;21757:6;21753:14;21746:58;21838:5;21833:2;21825:6;21821:15;21814:30;21629:222;:::o;21857:366::-;21999:3;22020:67;22084:2;22079:3;22020:67;:::i;:::-;22013:74;;22096:93;22185:3;22096:93;:::i;:::-;22214:2;22209:3;22205:12;22198:19;;21857:366;;;:::o;22229:419::-;22395:4;22433:2;22422:9;22418:18;22410:26;;22482:9;22476:4;22472:20;22468:1;22457:9;22453:17;22446:47;22510:131;22636:4;22510:131;:::i;:::-;22502:139;;22229:419;;;:::o;22654:305::-;22694:3;22713:20;22731:1;22713:20;:::i;:::-;22708:25;;22747:20;22765:1;22747:20;:::i;:::-;22742:25;;22901:1;22833:66;22829:74;22826:1;22823:81;22820:107;;;22907:18;;:::i;:::-;22820:107;22951:1;22948;22944:9;22937:16;;22654:305;;;;:::o;22965:222::-;23105:34;23101:1;23093:6;23089:14;23082:58;23174:5;23169:2;23161:6;23157:15;23150:30;22965:222;:::o;23193:366::-;23335:3;23356:67;23420:2;23415:3;23356:67;:::i;:::-;23349:74;;23432:93;23521:3;23432:93;:::i;:::-;23550:2;23545:3;23541:12;23534:19;;23193:366;;;:::o;23565:419::-;23731:4;23769:2;23758:9;23754:18;23746:26;;23818:9;23812:4;23808:20;23804:1;23793:9;23789:17;23782:47;23846:131;23972:4;23846:131;:::i;:::-;23838:139;;23565:419;;;:::o;23990:191::-;24030:4;24050:20;24068:1;24050:20;:::i;:::-;24045:25;;24084:20;24102:1;24084:20;:::i;:::-;24079:25;;24123:1;24120;24117:8;24114:34;;;24128:18;;:::i;:::-;24114:34;24173:1;24170;24166:9;24158:17;;23990:191;;;;:::o;24187:229::-;24327:34;24323:1;24315:6;24311:14;24304:58;24396:12;24391:2;24383:6;24379:15;24372:37;24187:229;:::o;24422:366::-;24564:3;24585:67;24649:2;24644:3;24585:67;:::i;:::-;24578:74;;24661:93;24750:3;24661:93;:::i;:::-;24779:2;24774:3;24770:12;24763:19;;24422:366;;;:::o;24794:419::-;24960:4;24998:2;24987:9;24983:18;24975:26;;25047:9;25041:4;25037:20;25033:1;25022:9;25018:17;25011:47;25075:131;25201:4;25075:131;:::i;:::-;25067:139;;24794:419;;;:::o;25219:180::-;25267:77;25264:1;25257:88;25364:4;25361:1;25354:15;25388:4;25385:1;25378:15;25405:180;25453:77;25450:1;25443:88;25550:4;25547:1;25540:15;25574:4;25571:1;25564:15;25591:85;25636:7;25665:5;25654:16;;25591:85;;;:::o;25682:158::-;25740:9;25773:61;25791:42;25800:32;25826:5;25800:32;:::i;:::-;25791:42;:::i;:::-;25773:61;:::i;:::-;25760:74;;25682:158;;;:::o;25846:147::-;25941:45;25980:5;25941:45;:::i;:::-;25936:3;25929:58;25846:147;;:::o;25999:114::-;26066:6;26100:5;26094:12;26084:22;;25999:114;;;:::o;26119:184::-;26218:11;26252:6;26247:3;26240:19;26292:4;26287:3;26283:14;26268:29;;26119:184;;;;:::o;26309:132::-;26376:4;26399:3;26391:11;;26429:4;26424:3;26420:14;26412:22;;26309:132;;;:::o;26447:108::-;26524:24;26542:5;26524:24;:::i;:::-;26519:3;26512:37;26447:108;;:::o;26561:179::-;26630:10;26651:46;26693:3;26685:6;26651:46;:::i;:::-;26729:4;26724:3;26720:14;26706:28;;26561:179;;;;:::o;26746:113::-;26816:4;26848;26843:3;26839:14;26831:22;;26746:113;;;:::o;26895:732::-;27014:3;27043:54;27091:5;27043:54;:::i;:::-;27113:86;27192:6;27187:3;27113:86;:::i;:::-;27106:93;;27223:56;27273:5;27223:56;:::i;:::-;27302:7;27333:1;27318:284;27343:6;27340:1;27337:13;27318:284;;;27419:6;27413:13;27446:63;27505:3;27490:13;27446:63;:::i;:::-;27439:70;;27532:60;27585:6;27532:60;:::i;:::-;27522:70;;27378:224;27365:1;27362;27358:9;27353:14;;27318:284;;;27322:14;27618:3;27611:10;;27019:608;;;26895:732;;;;:::o;27633:942::-;27924:4;27962:3;27951:9;27947:19;27939:27;;27976:71;28044:1;28033:9;28029:17;28020:6;27976:71;:::i;:::-;28057:80;28133:2;28122:9;28118:18;28109:6;28057:80;:::i;:::-;28184:9;28178:4;28174:20;28169:2;28158:9;28154:18;28147:48;28212:108;28315:4;28306:6;28212:108;:::i;:::-;28204:116;;28330:72;28398:2;28387:9;28383:18;28374:6;28330:72;:::i;:::-;28412:73;28480:3;28469:9;28465:19;28456:6;28412:73;:::i;:::-;28495;28563:3;28552:9;28548:19;28539:6;28495:73;:::i;:::-;27633:942;;;;;;;;;:::o;28581:180::-;28629:77;28626:1;28619:88;28726:4;28723:1;28716:15;28750:4;28747:1;28740:15;28767:185;28807:1;28824:20;28842:1;28824:20;:::i;:::-;28819:25;;28858:20;28876:1;28858:20;:::i;:::-;28853:25;;28897:1;28887:35;;28902:18;;:::i;:::-;28887:35;28944:1;28941;28937:9;28932:14;;28767:185;;;;:::o;28958:177::-;29098:29;29094:1;29086:6;29082:14;29075:53;28958:177;:::o;29141:366::-;29283:3;29304:67;29368:2;29363:3;29304:67;:::i;:::-;29297:74;;29380:93;29469:3;29380:93;:::i;:::-;29498:2;29493:3;29489:12;29482:19;;29141:366;;;:::o;29513:419::-;29679:4;29717:2;29706:9;29702:18;29694:26;;29766:9;29760:4;29756:20;29752:1;29741:9;29737:17;29730:47;29794:131;29920:4;29794:131;:::i;:::-;29786:139;;29513:419;;;:::o;29938:220::-;30078:34;30074:1;30066:6;30062:14;30055:58;30147:3;30142:2;30134:6;30130:15;30123:28;29938:220;:::o;30164:366::-;30306:3;30327:67;30391:2;30386:3;30327:67;:::i;:::-;30320:74;;30403:93;30492:3;30403:93;:::i;:::-;30521:2;30516:3;30512:12;30505:19;;30164:366;;;:::o;30536:419::-;30702:4;30740:2;30729:9;30725:18;30717:26;;30789:9;30783:4;30779:20;30775:1;30764:9;30760:17;30753:47;30817:131;30943:4;30817:131;:::i;:::-;30809:139;;30536:419;;;:::o

Swarm Source

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