ETH Price: $3,173.50 (+3.00%)

Token

Algobot (ALGO)
 

Overview

Max Total Supply

1,000,000,000 ALGO

Holders

485

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,146,883.399351864952043034 ALGO

Value
$0.00
0xb91ef3ba42b275908092d961c6889cf0e0f41b73
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:
Algobot

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-25
*/

// SPDX-License-Identifier: MIT

/** 
    Twitter: https://twitter.com/AlgoBotPro
    Website: https://algobot.pro
    Telegram: https://t.me/AlgoBotPro
    Gitbook: https://docs.algobot.pro
**/

pragma solidity 0.8.21;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from,
        address to,
        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);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
}

contract Algobot is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address private _uniswapV2Pair;
    
    uint256 public maxHoldings;
    uint256 public feeTokenThreshold;
        
    bool private _inSwap;
    uint256 private _swapFee = 5;
    uint256 private _tokensForFee;
    address private _feeAddr;

    mapping (address => bool) private _excludedLimits;

    // much like onlyOwner() but used for the feeAddr so that once renounced fees and maxholdings can still be changed
    modifier onlyFeeAddr() {
        require(_feeAddr == _msgSender(), "Caller is not the _feeAddr address.");
        _;
    }

    constructor() ERC20("Algobot", "ALGO") payable {
        uint256 totalSupply = 1000000000 * 1e18;

        maxHoldings = totalSupply * 2 / 100; // 2%
        feeTokenThreshold = totalSupply * 1 / 100; // 1% initial

        _feeAddr = owner();

        // exclution from fees and limits
        _excludedLimits[owner()] = true;
        _excludedLimits[address(this)] = true;
        _excludedLimits[address(0xdead)] = true;

        // mint to contract address for lp
        _mint(address(this), totalSupply);
    }

    function createV2LP() external onlyOwner {
        // create pair
        _uniswapV2Pair = IUniswapV2Factory(
            _uniswapV2Router.factory()).createPair(address(this), 
            _uniswapV2Router.WETH()
        );

        // add lp to pair
        _approve(address(this), address(_uniswapV2Router), balanceOf(address(this)));

        _uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            _feeAddr,
            block.timestamp
        );
    }

    // updates the amount of tokens that needs to be reached before fee is swapped
    function updateFeeTokenThreshold(uint256 newThreshold) external onlyFeeAddr {        
  	    require(newThreshold >= totalSupply() * 1 / 10000, "Swap threshold cannot be lower than 0.01% total supply.");
  	    require(newThreshold <= totalSupply() * 2 / 100, "Swap threshold cannot be higher than 2% total supply.");
  	    feeTokenThreshold = newThreshold;
  	}

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "Transfer from the zero address not allowed.");
        require(to != address(0), "Transfer to the zero address not allowed.");

        // no reason to waste gas
        bool isBuy = from == _uniswapV2Pair;
        bool exluded = _excludedLimits[from] || _excludedLimits[to];

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        // if pair has not yet been created
        if (_uniswapV2Pair == address(0)) {
            require(exluded, "Please wait for the LP pair to be created.");
            return;
        }

        // max holding check
        if (maxHoldings > 0 && isBuy && to != owner() && to != address(this))
            require(super.balanceOf(to) + amount <= maxHoldings, "Balance exceeds max holdings amount, consider using a second wallet.");
        
        // take fees if they are on
        if (_swapFee > 0) {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= feeTokenThreshold;
            if (
                canSwap &&
                !_inSwap &&
                !isBuy &&
                !_excludedLimits[from] &&
                !_excludedLimits[to]
            ) {
                _inSwap = true;
                swapFee();
                _inSwap = false;
            }


            // check if we should be taking the fee
            bool takeFee = !_inSwap;
            if (exluded || !isBuy && to != _uniswapV2Pair) takeFee = false;
            
            if (takeFee) {
                uint256 fees = amount.mul(_swapFee).div(100);
                _tokensForFee = amount.mul(_swapFee).div(100);
                
                if (fees > 0)
                    super._transfer(from, address(this), fees);
                
                amount -= fees;
            }
        }

        super._transfer(from, to, amount);
    }

    // swaps fee from tokens to eth
    function swapFee() internal {
        uint256 contractBal = balanceOf(address(this));
        
        if (contractBal == 0 || _tokensForFee == 0) return;
        if (contractBal > feeTokenThreshold) contractBal = feeTokenThreshold;
        
        uint256 initETHBal = address(this).balance;

        // swap
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

        _approve(address(this), address(_uniswapV2Router), contractBal);

        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractBal,
            0,
            path,
            address(this),
            block.timestamp
        );
        
        uint256 ethBalance = address(this).balance.sub(initETHBal);
        payable(_feeAddr).transfer(ethBalance);

        _tokensForFee = 0;
    }

    // change fees
    function setFees(uint8 fee) external onlyFeeAddr {
        require(fee <= 5); // smaller than or equal to inital fee
        _swapFee = fee;
    }

    // perm disable max holdings
    function disableHoldingLimit() external onlyFeeAddr {
        maxHoldings = 0;
    }

    // transfers any stuck eth from contract to feeAddr
    function transferStuckETH() external {
        payable(_feeAddr).transfer(address(this).balance);
    }

    // transfers any stuck token from contract to feeAddr
    function transferStuckERC20(IERC20 token) external onlyFeeAddr {
        token.transfer(_feeAddr, token.balanceOf(address(this)));
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createV2LP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTokenThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxHoldings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fee","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"transferStuckERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateFeeTokenThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005600b556040518060400160405280600781526020017f416c676f626f74000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f414c474f000000000000000000000000000000000000000000000000000000008152508160039081620000da9190620007ad565b508060049081620000ec9190620007ad565b5050506200010f62000103620002dd60201b60201c565b620002e460201b60201c565b5f6b033b2e3c9fd0803ce800000090506064600282620001309190620008be565b6200013c919062000935565b6008819055506064600182620001539190620008be565b6200015f919062000935565b60098190555062000175620003a760201b60201c565b600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e5f620001c9620003a760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600e5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620002d63082620003cf60201b60201c565b5062000a50565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000440576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043790620009ca565b60405180910390fd5b620004535f83836200053f60201b60201c565b8060025f828254620004669190620009ea565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254620004ba9190620009ea565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000520919062000a35565b60405180910390a36200053b5f83836200054460201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620005c557607f821691505b602082108103620005db57620005da62000580565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200063f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000602565b6200064b868362000602565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620006956200068f620006898462000663565b6200066c565b62000663565b9050919050565b5f819050919050565b620006b08362000675565b620006c8620006bf826200069c565b8484546200060e565b825550505050565b5f90565b620006de620006d0565b620006eb818484620006a5565b505050565b5b818110156200071257620007065f82620006d4565b600181019050620006f1565b5050565b601f82111562000761576200072b81620005e1565b6200073684620005f3565b8101602085101562000746578190505b6200075e6200075585620005f3565b830182620006f0565b50505b505050565b5f82821c905092915050565b5f620007835f198460080262000766565b1980831691505092915050565b5f6200079d838362000772565b9150826002028217905092915050565b620007b88262000549565b67ffffffffffffffff811115620007d457620007d362000553565b5b620007e08254620005ad565b620007ed82828562000716565b5f60209050601f83116001811462000823575f84156200080e578287015190505b6200081a858262000790565b86555062000889565b601f1984166200083386620005e1565b5f5b828110156200085c5784890151825560018201915060208501945060208101905062000835565b868310156200087c578489015162000878601f89168262000772565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620008ca8262000663565b9150620008d78362000663565b9250828202620008e78162000663565b9150828204841483151762000901576200090062000891565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620009418262000663565b91506200094e8362000663565b92508262000961576200096062000908565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620009b2601f836200096c565b9150620009bf826200097c565b602082019050919050565b5f6020820190508181035f830152620009e381620009a4565b9050919050565b5f620009f68262000663565b915062000a038362000663565b925082820190508082111562000a1e5762000a1d62000891565b5b92915050565b62000a2f8162000663565b82525050565b5f60208201905062000a4a5f83018462000a24565b92915050565b6133058062000a5e5f395ff3fe608060405260043610610138575f3560e01c806370a08231116100aa578063a9059cbb1161006e578063a9059cbb146103fd578063d0c695f414610439578063dd62ed3e1461044f578063e54f4faa1461048b578063f2fde38b146104b5578063f442d3fb146104dd5761013f565b806370a082311461031b578063715018a6146103575780638da5cb5b1461036d57806395d89b4114610397578063a457c2d7146103c15761013f565b806323b872dd116100fc57806323b872dd14610213578063313ce5671461024f57806339509351146102795780635564ad71146102b557806362aaff3a146102cb578063701812a7146102f35761013f565b806306fdde0314610143578063095ea7b31461016d57806318160ddd146101a95780631fac6a3b146101d35780631ffc2998146101e95761013f565b3661013f57005b5f80fd5b34801561014e575f80fd5b50610157610505565b60405161016491906121c7565b60405180910390f35b348015610178575f80fd5b50610193600480360381019061018e9190612278565b610595565b6040516101a091906122d0565b60405180910390f35b3480156101b4575f80fd5b506101bd6105b7565b6040516101ca91906122f8565b60405180910390f35b3480156101de575f80fd5b506101e76105c0565b005b3480156101f4575f80fd5b506101fd610627565b60405161020a91906122f8565b60405180910390f35b34801561021e575f80fd5b5061023960048036038101906102349190612311565b61062d565b60405161024691906122d0565b60405180910390f35b34801561025a575f80fd5b5061026361065b565b604051610270919061237c565b60405180910390f35b348015610284575f80fd5b5061029f600480360381019061029a9190612278565b610663565b6040516102ac91906122d0565b60405180910390f35b3480156102c0575f80fd5b506102c9610708565b005b3480156102d6575f80fd5b506102f160048036038101906102ec91906123d0565b6107a7565b005b3480156102fe575f80fd5b5061031960048036038101906103149190612425565b610954565b005b348015610326575f80fd5b50610341600480360381019061033c9190612450565b610a07565b60405161034e91906122f8565b60405180910390f35b348015610362575f80fd5b5061036b610a4c565b005b348015610378575f80fd5b50610381610ad3565b60405161038e919061248a565b60405180910390f35b3480156103a2575f80fd5b506103ab610afb565b6040516103b891906121c7565b60405180910390f35b3480156103cc575f80fd5b506103e760048036038101906103e29190612278565b610b8b565b6040516103f491906122d0565b60405180910390f35b348015610408575f80fd5b50610423600480360381019061041e9190612278565b610c6f565b60405161043091906122d0565b60405180910390f35b348015610444575f80fd5b5061044d610c91565b005b34801561045a575f80fd5b50610475600480360381019061047091906124a3565b610fe9565b60405161048291906122f8565b60405180910390f35b348015610496575f80fd5b5061049f61106b565b6040516104ac91906122f8565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d69190612450565b611071565b005b3480156104e8575f80fd5b5061050360048036038101906104fe91906124e1565b611167565b005b60606003805461051490612539565b80601f016020809104026020016040519081016040528092919081815260200182805461054090612539565b801561058b5780601f106105625761010080835404028352916020019161058b565b820191905f5260205f20905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b5f8061059f6112cc565b90506105ac8185856112d3565b600191505092915050565b5f600254905090565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610624573d5f803e3d5ffd5b50565b60095481565b5f806106376112cc565b9050610644858285611496565b61064f858585611521565b60019150509392505050565b5f6012905090565b5f8061066d6112cc565b90506106fd81858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546106f89190612596565b6112d3565b600191505092915050565b6107106112cc565b73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461079e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079590612639565b60405180910390fd5b5f600881905550565b6107af6112cc565b73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490612639565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108b4919061248a565b602060405180830381865afa1580156108cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f3919061266b565b6040518363ffffffff1660e01b8152600401610910929190612696565b6020604051808303815f875af115801561092c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095091906126e7565b5050565b61095c6112cc565b73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e190612639565b60405180910390fd5b60058160ff1611156109fa575f80fd5b8060ff16600b8190555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610a546112cc565b73ffffffffffffffffffffffffffffffffffffffff16610a72610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf9061275c565b60405180910390fd5b610ad15f611ac7565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610b0a90612539565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3690612539565b8015610b815780601f10610b5857610100808354040283529160200191610b81565b820191905f5260205f20905b815481529060010190602001808311610b6457829003601f168201915b5050505050905090565b5f80610b956112cc565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d906127ea565b60405180910390fd5b610c6382868684036112d3565b60019250505092915050565b5f80610c796112cc565b9050610c86818585611521565b600191505092915050565b610c996112cc565b73ffffffffffffffffffffffffffffffffffffffff16610cb7610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d049061275c565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9b919061281c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e45919061281c565b6040518363ffffffff1660e01b8152600401610e62929190612847565b6020604051808303815f875af1158015610e7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea2919061281c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f153060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f1030610a07565b6112d3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610f5d30610a07565b5f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610fa3969594939291906128b0565b60606040518083038185885af1158015610fbf573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610fe4919061290f565b505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b6110796112cc565b73ffffffffffffffffffffffffffffffffffffffff16611097610ad3565b73ffffffffffffffffffffffffffffffffffffffff16146110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e49061275c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361115b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611152906129cf565b60405180910390fd5b61116481611ac7565b50565b61116f6112cc565b73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f490612639565b60405180910390fd5b612710600161120a6105b7565b61121491906129ed565b61121e9190612a5b565b811015611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125790612afb565b60405180910390fd5b6064600261126c6105b7565b61127691906129ed565b6112809190612a5b565b8111156112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b990612b89565b60405180910390fd5b8060098190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890612c17565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690612ca5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161148991906122f8565b60405180910390a3505050565b5f6114a18484610fe9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461151b578181101561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490612d0d565b60405180910390fd5b61151a84848484036112d3565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690612d9b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490612e29565b60405180910390fd5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505f600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806116ec5750600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f83036117075761170085855f611b8a565b5050611ac2565b5f73ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036117a2578061179b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179290612eb7565b60405180910390fd5b5050611ac2565b5f6008541180156117b05750815b80156117ef57506117bf610ad3565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561182757503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611885576008548361183986610a07565b6118439190612596565b1115611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90612f6b565b60405180910390fd5b5b5f600b541115611ab4575f61189930610a07565b90505f60095482101590508080156118bd5750600a5f9054906101000a900460ff16155b80156118c7575083155b801561191a5750600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561196d5750600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156119ae576001600a5f6101000a81548160ff021916908315150217905550611994611dff565b5f600a5f6101000a81548160ff0219169083151502179055505b5f600a5f9054906101000a900460ff161590508380611a24575084158015611a23575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b5b15611a2d575f90505b8015611ab0575f611a5c6064611a4e600b548a6120f490919063ffffffff16565b61210990919063ffffffff16565b9050611a866064611a78600b548a6120f490919063ffffffff16565b61210990919063ffffffff16565b600c819055505f811115611aa057611a9f893083611b8a565b5b8087611aac9190612f89565b9650505b5050505b611abf858585611b8a565b50505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef9061302c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d906130ba565b60405180910390fd5b611c7183838361211e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb90613148565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611d829190612596565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611de691906122f8565b60405180910390a3611df9848484612123565b50505050565b5f611e0930610a07565b90505f811480611e1a57505f600c54145b15611e2557506120f2565b600954811115611e355760095490505b5f4790505f600267ffffffffffffffff811115611e5557611e54613166565b5b604051908082528060200260200182016040528015611e835781602001602082028036833780820191505090505b50905030815f81518110611e9a57611e99613193565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f62919061281c565b81600181518110611f7657611f75613193565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611fdc3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856112d3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b815260040161203e959493929190613277565b5f604051808303815f87803b158015612055575f80fd5b505af1158015612067573d5f803e3d5ffd5b505050505f61207f834761212890919063ffffffff16565b9050600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156120e5573d5f803e3d5ffd5b505f600c81905550505050505b565b5f818361210191906129ed565b905092915050565b5f81836121169190612a5b565b905092915050565b505050565b505050565b5f81836121359190612f89565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612174578082015181840152602081019050612159565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6121998261213d565b6121a38185612147565b93506121b3818560208601612157565b6121bc8161217f565b840191505092915050565b5f6020820190508181035f8301526121df818461218f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612214826121eb565b9050919050565b6122248161220a565b811461222e575f80fd5b50565b5f8135905061223f8161221b565b92915050565b5f819050919050565b61225781612245565b8114612261575f80fd5b50565b5f813590506122728161224e565b92915050565b5f806040838503121561228e5761228d6121e7565b5b5f61229b85828601612231565b92505060206122ac85828601612264565b9150509250929050565b5f8115159050919050565b6122ca816122b6565b82525050565b5f6020820190506122e35f8301846122c1565b92915050565b6122f281612245565b82525050565b5f60208201905061230b5f8301846122e9565b92915050565b5f805f60608486031215612328576123276121e7565b5b5f61233586828701612231565b935050602061234686828701612231565b925050604061235786828701612264565b9150509250925092565b5f60ff82169050919050565b61237681612361565b82525050565b5f60208201905061238f5f83018461236d565b92915050565b5f61239f8261220a565b9050919050565b6123af81612395565b81146123b9575f80fd5b50565b5f813590506123ca816123a6565b92915050565b5f602082840312156123e5576123e46121e7565b5b5f6123f2848285016123bc565b91505092915050565b61240481612361565b811461240e575f80fd5b50565b5f8135905061241f816123fb565b92915050565b5f6020828403121561243a576124396121e7565b5b5f61244784828501612411565b91505092915050565b5f60208284031215612465576124646121e7565b5b5f61247284828501612231565b91505092915050565b6124848161220a565b82525050565b5f60208201905061249d5f83018461247b565b92915050565b5f80604083850312156124b9576124b86121e7565b5b5f6124c685828601612231565b92505060206124d785828601612231565b9150509250929050565b5f602082840312156124f6576124f56121e7565b5b5f61250384828501612264565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061255057607f821691505b6020821081036125635761256261250c565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6125a082612245565b91506125ab83612245565b92508282019050808211156125c3576125c2612569565b5b92915050565b7f43616c6c6572206973206e6f7420746865205f666565416464722061646472655f8201527f73732e0000000000000000000000000000000000000000000000000000000000602082015250565b5f612623602383612147565b915061262e826125c9565b604082019050919050565b5f6020820190508181035f83015261265081612617565b9050919050565b5f815190506126658161224e565b92915050565b5f602082840312156126805761267f6121e7565b5b5f61268d84828501612657565b91505092915050565b5f6040820190506126a95f83018561247b565b6126b660208301846122e9565b9392505050565b6126c6816122b6565b81146126d0575f80fd5b50565b5f815190506126e1816126bd565b92915050565b5f602082840312156126fc576126fb6121e7565b5b5f612709848285016126d3565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612746602083612147565b915061275182612712565b602082019050919050565b5f6020820190508181035f8301526127738161273a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6127d4602583612147565b91506127df8261277a565b604082019050919050565b5f6020820190508181035f830152612801816127c8565b9050919050565b5f815190506128168161221b565b92915050565b5f60208284031215612831576128306121e7565b5b5f61283e84828501612808565b91505092915050565b5f60408201905061285a5f83018561247b565b612867602083018461247b565b9392505050565b5f819050919050565b5f819050919050565b5f61289a6128956128908461286e565b612877565b612245565b9050919050565b6128aa81612880565b82525050565b5f60c0820190506128c35f83018961247b565b6128d060208301886122e9565b6128dd60408301876128a1565b6128ea60608301866128a1565b6128f7608083018561247b565b61290460a08301846122e9565b979650505050505050565b5f805f60608486031215612926576129256121e7565b5b5f61293386828701612657565b935050602061294486828701612657565b925050604061295586828701612657565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6129b9602683612147565b91506129c48261295f565b604082019050919050565b5f6020820190508181035f8301526129e6816129ad565b9050919050565b5f6129f782612245565b9150612a0283612245565b9250828202612a1081612245565b91508282048414831517612a2757612a26612569565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a6582612245565b9150612a7083612245565b925082612a8057612a7f612a2e565b5b828204905092915050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f77657220745f8201527f68616e20302e30312520746f74616c20737570706c792e000000000000000000602082015250565b5f612ae5603783612147565b9150612af082612a8b565b604082019050919050565b5f6020820190508181035f830152612b1281612ad9565b9050919050565b7f53776170207468726573686f6c642063616e6e6f7420626520686967686572205f8201527f7468616e20322520746f74616c20737570706c792e0000000000000000000000602082015250565b5f612b73603583612147565b9150612b7e82612b19565b604082019050919050565b5f6020820190508181035f830152612ba081612b67565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612c01602483612147565b9150612c0c82612ba7565b604082019050919050565b5f6020820190508181035f830152612c2e81612bf5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612c8f602283612147565b9150612c9a82612c35565b604082019050919050565b5f6020820190508181035f830152612cbc81612c83565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612cf7601d83612147565b9150612d0282612cc3565b602082019050919050565b5f6020820190508181035f830152612d2481612ceb565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e5f8201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b5f612d85602b83612147565b9150612d9082612d2b565b604082019050919050565b5f6020820190508181035f830152612db281612d79565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f745f8201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b5f612e13602983612147565b9150612e1e82612db9565b604082019050919050565b5f6020820190508181035f830152612e4081612e07565b9050919050565b7f506c65617365207761697420666f7220746865204c50207061697220746f20625f8201527f6520637265617465642e00000000000000000000000000000000000000000000602082015250565b5f612ea1602a83612147565b9150612eac82612e47565b604082019050919050565b5f6020820190508181035f830152612ece81612e95565b9050919050565b7f42616c616e63652065786365656473206d617820686f6c64696e677320616d6f5f8201527f756e742c20636f6e7369646572207573696e672061207365636f6e642077616c60208201527f6c65742e00000000000000000000000000000000000000000000000000000000604082015250565b5f612f55604483612147565b9150612f6082612ed5565b606082019050919050565b5f6020820190508181035f830152612f8281612f49565b9050919050565b5f612f9382612245565b9150612f9e83612245565b9250828203905081811115612fb657612fb5612569565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613016602583612147565b915061302182612fbc565b604082019050919050565b5f6020820190508181035f8301526130438161300a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6130a4602383612147565b91506130af8261304a565b604082019050919050565b5f6020820190508181035f8301526130d181613098565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613132602683612147565b915061313d826130d8565b604082019050919050565b5f6020820190508181035f83015261315f81613126565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6131f28161220a565b82525050565b5f61320383836131e9565b60208301905092915050565b5f602082019050919050565b5f613225826131c0565b61322f81856131ca565b935061323a836131da565b805f5b8381101561326a57815161325188826131f8565b975061325c8361320f565b92505060018101905061323d565b5085935050505092915050565b5f60a08201905061328a5f8301886122e9565b61329760208301876128a1565b81810360408301526132a9818661321b565b90506132b8606083018561247b565b6132c560808301846122e9565b969550505050505056fea2646970667358221220106b668f0700810435c4a1ec4248b6cfafef8d9f4d1fa2d8bed25f77fa9ebc2964736f6c63430008150033

Deployed Bytecode

0x608060405260043610610138575f3560e01c806370a08231116100aa578063a9059cbb1161006e578063a9059cbb146103fd578063d0c695f414610439578063dd62ed3e1461044f578063e54f4faa1461048b578063f2fde38b146104b5578063f442d3fb146104dd5761013f565b806370a082311461031b578063715018a6146103575780638da5cb5b1461036d57806395d89b4114610397578063a457c2d7146103c15761013f565b806323b872dd116100fc57806323b872dd14610213578063313ce5671461024f57806339509351146102795780635564ad71146102b557806362aaff3a146102cb578063701812a7146102f35761013f565b806306fdde0314610143578063095ea7b31461016d57806318160ddd146101a95780631fac6a3b146101d35780631ffc2998146101e95761013f565b3661013f57005b5f80fd5b34801561014e575f80fd5b50610157610505565b60405161016491906121c7565b60405180910390f35b348015610178575f80fd5b50610193600480360381019061018e9190612278565b610595565b6040516101a091906122d0565b60405180910390f35b3480156101b4575f80fd5b506101bd6105b7565b6040516101ca91906122f8565b60405180910390f35b3480156101de575f80fd5b506101e76105c0565b005b3480156101f4575f80fd5b506101fd610627565b60405161020a91906122f8565b60405180910390f35b34801561021e575f80fd5b5061023960048036038101906102349190612311565b61062d565b60405161024691906122d0565b60405180910390f35b34801561025a575f80fd5b5061026361065b565b604051610270919061237c565b60405180910390f35b348015610284575f80fd5b5061029f600480360381019061029a9190612278565b610663565b6040516102ac91906122d0565b60405180910390f35b3480156102c0575f80fd5b506102c9610708565b005b3480156102d6575f80fd5b506102f160048036038101906102ec91906123d0565b6107a7565b005b3480156102fe575f80fd5b5061031960048036038101906103149190612425565b610954565b005b348015610326575f80fd5b50610341600480360381019061033c9190612450565b610a07565b60405161034e91906122f8565b60405180910390f35b348015610362575f80fd5b5061036b610a4c565b005b348015610378575f80fd5b50610381610ad3565b60405161038e919061248a565b60405180910390f35b3480156103a2575f80fd5b506103ab610afb565b6040516103b891906121c7565b60405180910390f35b3480156103cc575f80fd5b506103e760048036038101906103e29190612278565b610b8b565b6040516103f491906122d0565b60405180910390f35b348015610408575f80fd5b50610423600480360381019061041e9190612278565b610c6f565b60405161043091906122d0565b60405180910390f35b348015610444575f80fd5b5061044d610c91565b005b34801561045a575f80fd5b50610475600480360381019061047091906124a3565b610fe9565b60405161048291906122f8565b60405180910390f35b348015610496575f80fd5b5061049f61106b565b6040516104ac91906122f8565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d69190612450565b611071565b005b3480156104e8575f80fd5b5061050360048036038101906104fe91906124e1565b611167565b005b60606003805461051490612539565b80601f016020809104026020016040519081016040528092919081815260200182805461054090612539565b801561058b5780601f106105625761010080835404028352916020019161058b565b820191905f5260205f20905b81548152906001019060200180831161056e57829003601f168201915b5050505050905090565b5f8061059f6112cc565b90506105ac8185856112d3565b600191505092915050565b5f600254905090565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610624573d5f803e3d5ffd5b50565b60095481565b5f806106376112cc565b9050610644858285611496565b61064f858585611521565b60019150509392505050565b5f6012905090565b5f8061066d6112cc565b90506106fd81858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546106f89190612596565b6112d3565b600191505092915050565b6107106112cc565b73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461079e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079590612639565b60405180910390fd5b5f600881905550565b6107af6112cc565b73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490612639565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108b4919061248a565b602060405180830381865afa1580156108cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f3919061266b565b6040518363ffffffff1660e01b8152600401610910929190612696565b6020604051808303815f875af115801561092c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095091906126e7565b5050565b61095c6112cc565b73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e190612639565b60405180910390fd5b60058160ff1611156109fa575f80fd5b8060ff16600b8190555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610a546112cc565b73ffffffffffffffffffffffffffffffffffffffff16610a72610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf9061275c565b60405180910390fd5b610ad15f611ac7565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610b0a90612539565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3690612539565b8015610b815780601f10610b5857610100808354040283529160200191610b81565b820191905f5260205f20905b815481529060010190602001808311610b6457829003601f168201915b5050505050905090565b5f80610b956112cc565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015610c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4d906127ea565b60405180910390fd5b610c6382868684036112d3565b60019250505092915050565b5f80610c796112cc565b9050610c86818585611521565b600191505092915050565b610c996112cc565b73ffffffffffffffffffffffffffffffffffffffff16610cb7610ad3565b73ffffffffffffffffffffffffffffffffffffffff1614610d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d049061275c565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9b919061281c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e45919061281c565b6040518363ffffffff1660e01b8152600401610e62929190612847565b6020604051808303815f875af1158015610e7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea2919061281c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610f153060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f1030610a07565b6112d3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610f5d30610a07565b5f80600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401610fa3969594939291906128b0565b60606040518083038185885af1158015610fbf573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610fe4919061290f565b505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60085481565b6110796112cc565b73ffffffffffffffffffffffffffffffffffffffff16611097610ad3565b73ffffffffffffffffffffffffffffffffffffffff16146110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e49061275c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361115b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611152906129cf565b60405180910390fd5b61116481611ac7565b50565b61116f6112cc565b73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f490612639565b60405180910390fd5b612710600161120a6105b7565b61121491906129ed565b61121e9190612a5b565b811015611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125790612afb565b60405180910390fd5b6064600261126c6105b7565b61127691906129ed565b6112809190612a5b565b8111156112c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b990612b89565b60405180910390fd5b8060098190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890612c17565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a690612ca5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161148991906122f8565b60405180910390a3505050565b5f6114a18484610fe9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461151b578181101561150d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150490612d0d565b60405180910390fd5b61151a84848484036112d3565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690612d9b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490612e29565b60405180910390fd5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505f600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806116ec5750600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f83036117075761170085855f611b8a565b5050611ac2565b5f73ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036117a2578061179b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179290612eb7565b60405180910390fd5b5050611ac2565b5f6008541180156117b05750815b80156117ef57506117bf610ad3565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561182757503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611885576008548361183986610a07565b6118439190612596565b1115611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90612f6b565b60405180910390fd5b5b5f600b541115611ab4575f61189930610a07565b90505f60095482101590508080156118bd5750600a5f9054906101000a900460ff16155b80156118c7575083155b801561191a5750600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561196d5750600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156119ae576001600a5f6101000a81548160ff021916908315150217905550611994611dff565b5f600a5f6101000a81548160ff0219169083151502179055505b5f600a5f9054906101000a900460ff161590508380611a24575084158015611a23575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b5b15611a2d575f90505b8015611ab0575f611a5c6064611a4e600b548a6120f490919063ffffffff16565b61210990919063ffffffff16565b9050611a866064611a78600b548a6120f490919063ffffffff16565b61210990919063ffffffff16565b600c819055505f811115611aa057611a9f893083611b8a565b5b8087611aac9190612f89565b9650505b5050505b611abf858585611b8a565b50505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef9061302c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d906130ba565b60405180910390fd5b611c7183838361211e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb90613148565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611d829190612596565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611de691906122f8565b60405180910390a3611df9848484612123565b50505050565b5f611e0930610a07565b90505f811480611e1a57505f600c54145b15611e2557506120f2565b600954811115611e355760095490505b5f4790505f600267ffffffffffffffff811115611e5557611e54613166565b5b604051908082528060200260200182016040528015611e835781602001602082028036833780820191505090505b50905030815f81518110611e9a57611e99613193565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f62919061281c565b81600181518110611f7657611f75613193565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611fdc3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856112d3565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b815260040161203e959493929190613277565b5f604051808303815f87803b158015612055575f80fd5b505af1158015612067573d5f803e3d5ffd5b505050505f61207f834761212890919063ffffffff16565b9050600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156120e5573d5f803e3d5ffd5b505f600c81905550505050505b565b5f818361210191906129ed565b905092915050565b5f81836121169190612a5b565b905092915050565b505050565b505050565b5f81836121359190612f89565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612174578082015181840152602081019050612159565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6121998261213d565b6121a38185612147565b93506121b3818560208601612157565b6121bc8161217f565b840191505092915050565b5f6020820190508181035f8301526121df818461218f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612214826121eb565b9050919050565b6122248161220a565b811461222e575f80fd5b50565b5f8135905061223f8161221b565b92915050565b5f819050919050565b61225781612245565b8114612261575f80fd5b50565b5f813590506122728161224e565b92915050565b5f806040838503121561228e5761228d6121e7565b5b5f61229b85828601612231565b92505060206122ac85828601612264565b9150509250929050565b5f8115159050919050565b6122ca816122b6565b82525050565b5f6020820190506122e35f8301846122c1565b92915050565b6122f281612245565b82525050565b5f60208201905061230b5f8301846122e9565b92915050565b5f805f60608486031215612328576123276121e7565b5b5f61233586828701612231565b935050602061234686828701612231565b925050604061235786828701612264565b9150509250925092565b5f60ff82169050919050565b61237681612361565b82525050565b5f60208201905061238f5f83018461236d565b92915050565b5f61239f8261220a565b9050919050565b6123af81612395565b81146123b9575f80fd5b50565b5f813590506123ca816123a6565b92915050565b5f602082840312156123e5576123e46121e7565b5b5f6123f2848285016123bc565b91505092915050565b61240481612361565b811461240e575f80fd5b50565b5f8135905061241f816123fb565b92915050565b5f6020828403121561243a576124396121e7565b5b5f61244784828501612411565b91505092915050565b5f60208284031215612465576124646121e7565b5b5f61247284828501612231565b91505092915050565b6124848161220a565b82525050565b5f60208201905061249d5f83018461247b565b92915050565b5f80604083850312156124b9576124b86121e7565b5b5f6124c685828601612231565b92505060206124d785828601612231565b9150509250929050565b5f602082840312156124f6576124f56121e7565b5b5f61250384828501612264565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061255057607f821691505b6020821081036125635761256261250c565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6125a082612245565b91506125ab83612245565b92508282019050808211156125c3576125c2612569565b5b92915050565b7f43616c6c6572206973206e6f7420746865205f666565416464722061646472655f8201527f73732e0000000000000000000000000000000000000000000000000000000000602082015250565b5f612623602383612147565b915061262e826125c9565b604082019050919050565b5f6020820190508181035f83015261265081612617565b9050919050565b5f815190506126658161224e565b92915050565b5f602082840312156126805761267f6121e7565b5b5f61268d84828501612657565b91505092915050565b5f6040820190506126a95f83018561247b565b6126b660208301846122e9565b9392505050565b6126c6816122b6565b81146126d0575f80fd5b50565b5f815190506126e1816126bd565b92915050565b5f602082840312156126fc576126fb6121e7565b5b5f612709848285016126d3565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612746602083612147565b915061275182612712565b602082019050919050565b5f6020820190508181035f8301526127738161273a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6127d4602583612147565b91506127df8261277a565b604082019050919050565b5f6020820190508181035f830152612801816127c8565b9050919050565b5f815190506128168161221b565b92915050565b5f60208284031215612831576128306121e7565b5b5f61283e84828501612808565b91505092915050565b5f60408201905061285a5f83018561247b565b612867602083018461247b565b9392505050565b5f819050919050565b5f819050919050565b5f61289a6128956128908461286e565b612877565b612245565b9050919050565b6128aa81612880565b82525050565b5f60c0820190506128c35f83018961247b565b6128d060208301886122e9565b6128dd60408301876128a1565b6128ea60608301866128a1565b6128f7608083018561247b565b61290460a08301846122e9565b979650505050505050565b5f805f60608486031215612926576129256121e7565b5b5f61293386828701612657565b935050602061294486828701612657565b925050604061295586828701612657565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6129b9602683612147565b91506129c48261295f565b604082019050919050565b5f6020820190508181035f8301526129e6816129ad565b9050919050565b5f6129f782612245565b9150612a0283612245565b9250828202612a1081612245565b91508282048414831517612a2757612a26612569565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612a6582612245565b9150612a7083612245565b925082612a8057612a7f612a2e565b5b828204905092915050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f77657220745f8201527f68616e20302e30312520746f74616c20737570706c792e000000000000000000602082015250565b5f612ae5603783612147565b9150612af082612a8b565b604082019050919050565b5f6020820190508181035f830152612b1281612ad9565b9050919050565b7f53776170207468726573686f6c642063616e6e6f7420626520686967686572205f8201527f7468616e20322520746f74616c20737570706c792e0000000000000000000000602082015250565b5f612b73603583612147565b9150612b7e82612b19565b604082019050919050565b5f6020820190508181035f830152612ba081612b67565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612c01602483612147565b9150612c0c82612ba7565b604082019050919050565b5f6020820190508181035f830152612c2e81612bf5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612c8f602283612147565b9150612c9a82612c35565b604082019050919050565b5f6020820190508181035f830152612cbc81612c83565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612cf7601d83612147565b9150612d0282612cc3565b602082019050919050565b5f6020820190508181035f830152612d2481612ceb565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e5f8201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b5f612d85602b83612147565b9150612d9082612d2b565b604082019050919050565b5f6020820190508181035f830152612db281612d79565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f745f8201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b5f612e13602983612147565b9150612e1e82612db9565b604082019050919050565b5f6020820190508181035f830152612e4081612e07565b9050919050565b7f506c65617365207761697420666f7220746865204c50207061697220746f20625f8201527f6520637265617465642e00000000000000000000000000000000000000000000602082015250565b5f612ea1602a83612147565b9150612eac82612e47565b604082019050919050565b5f6020820190508181035f830152612ece81612e95565b9050919050565b7f42616c616e63652065786365656473206d617820686f6c64696e677320616d6f5f8201527f756e742c20636f6e7369646572207573696e672061207365636f6e642077616c60208201527f6c65742e00000000000000000000000000000000000000000000000000000000604082015250565b5f612f55604483612147565b9150612f6082612ed5565b606082019050919050565b5f6020820190508181035f830152612f8281612f49565b9050919050565b5f612f9382612245565b9150612f9e83612245565b9250828203905081811115612fb657612fb5612569565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613016602583612147565b915061302182612fbc565b604082019050919050565b5f6020820190508181035f8301526130438161300a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6130a4602383612147565b91506130af8261304a565b604082019050919050565b5f6020820190508181035f8301526130d181613098565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613132602683612147565b915061313d826130d8565b604082019050919050565b5f6020820190508181035f83015261315f81613126565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6131f28161220a565b82525050565b5f61320383836131e9565b60208301905092915050565b5f602082019050919050565b5f613225826131c0565b61322f81856131ca565b935061323a836131da565b805f5b8381101561326a57815161325188826131f8565b975061325c8361320f565b92505060018101905061323d565b5085935050505092915050565b5f60a08201905061328a5f8301886122e9565b61329760208301876128a1565b81810360408301526132a9818661321b565b90506132b8606083018561247b565b6132c560808301846122e9565b969550505050505056fea2646970667358221220106b668f0700810435c4a1ec4248b6cfafef8d9f4d1fa2d8bed25f77fa9ebc2964736f6c63430008150033

Deployed Bytecode Sourcemap

9483:6119:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1803:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2735:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2124:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15252:105;;;;;;;;;;;;;:::i;:::-;;9751:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2944:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2023:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3247:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15101:86;;;;;;;;;;;;;:::i;:::-;;15424:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14910:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2240:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8023:103;;;;;;;;;;;;;:::i;:::-;;7800:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3495:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2375:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10782:589;;;;;;;;;;;;;:::i;:::-;;2576:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9718:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8134:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11463:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1803:100;1857:13;1890:5;1883:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1803:100;:::o;2735:201::-;2818:4;2835:13;2851:12;:10;:12::i;:::-;2835:28;;2874:32;2883:5;2890:7;2899:6;2874:8;:32::i;:::-;2924:4;2917:11;;;2735:201;;;;:::o;2124:108::-;2185:7;2212:12;;2205:19;;2124:108;:::o;15252:105::-;15308:8;;;;;;;;;;;15300:26;;:49;15327:21;15300:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15252:105::o;9751:32::-;;;;:::o;2944:295::-;3075:4;3092:15;3110:12;:10;:12::i;:::-;3092:30;;3133:38;3149:4;3155:7;3164:6;3133:15;:38::i;:::-;3182:27;3192:4;3198:2;3202:6;3182:9;:27::i;:::-;3227:4;3220:11;;;2944:295;;;;;:::o;2023:93::-;2081:5;2106:2;2099:9;;2023:93;:::o;3247:240::-;3335:4;3352:13;3368:12;:10;:12::i;:::-;3352:28;;3391:66;3400:5;3407:7;3446:10;3416:11;:18;3428:5;3416:18;;;;;;;;;;;;;;;:27;3435:7;3416:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;3391:8;:66::i;:::-;3475:4;3468:11;;;3247:240;;;;:::o;15101:86::-;10163:12;:10;:12::i;:::-;10151:24;;:8;;;;;;;;;;;:24;;;10143:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15178:1:::1;15164:11;:15;;;;15101:86::o:0;15424:138::-;10163:12;:10;:12::i;:::-;10151:24;;:8;;;;;;;;;;;:24;;;10143:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15498:5:::1;:14;;;15513:8;;;;;;;;;;;15523:5;:15;;;15547:4;15523:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15498:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15424:138:::0;:::o;14910:149::-;10163:12;:10;:12::i;:::-;10151:24;;:8;;;;;;;;;;;:24;;;10143:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14985:1:::1;14978:3;:8;;;;14970:17;;;::::0;::::1;;15048:3;15037:14;;:8;:14;;;;14910:149:::0;:::o;2240:127::-;2314:7;2341:9;:18;2351:7;2341:18;;;;;;;;;;;;;;;;2334:25;;2240:127;;;:::o;8023:103::-;7946:12;:10;:12::i;:::-;7935:23;;:7;:5;:7::i;:::-;:23;;;7927:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8088:30:::1;8115:1;8088:18;:30::i;:::-;8023:103::o:0;7800:87::-;7846:7;7873:6;;;;;;;;;;;7866:13;;7800:87;:::o;1911:104::-;1967:13;2000:7;1993:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1911:104;:::o;3495:438::-;3588:4;3605:13;3621:12;:10;:12::i;:::-;3605:28;;3644:24;3671:11;:18;3683:5;3671:18;;;;;;;;;;;;;;;:27;3690:7;3671:27;;;;;;;;;;;;;;;;3644:54;;3737:15;3717:16;:35;;3709:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3830:60;3839:5;3846:7;3874:15;3855:16;:34;3830:8;:60::i;:::-;3921:4;3914:11;;;;3495:438;;;;:::o;2375:193::-;2454:4;2471:13;2487:12;:10;:12::i;:::-;2471:28;;2510;2520:5;2527:2;2531:6;2510:9;:28::i;:::-;2556:4;2549:11;;;2375:193;;;;:::o;10782:589::-;7946:12;:10;:12::i;:::-;7935:23;;:7;:5;:7::i;:::-;:23;;;7927:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10907:16:::1;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10875:70;;;10954:4;10975:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10875:134;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10858:14;;:151;;;;;;;;;;;;;;;;;;11049:76;11066:4;11081:16;;;;;;;;;;;11100:24;11118:4;11100:9;:24::i;:::-;11049:8;:76::i;:::-;11138:16;;;;;;;;;;;:32;;;11178:21;11223:4;11243:24;11261:4;11243:9;:24::i;:::-;11282:1;11298::::0;11314:8:::1;;;;;;;;;;;11337:15;11138:225;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10782:589::o:0;2576:151::-;2665:7;2692:11;:18;2704:5;2692:18;;;;;;;;;;;;;;;:27;2711:7;2692:27;;;;;;;;;;;;;;;;2685:34;;2576:151;;;;:::o;9718:26::-;;;;:::o;8134:201::-;7946:12;:10;:12::i;:::-;7935:23;;:7;:5;:7::i;:::-;:23;;;7927:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8243:1:::1;8223:22;;:8;:22;;::::0;8215:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8299:28;8318:8;8299:18;:28::i;:::-;8134:201:::0;:::o;11463:367::-;10163:12;:10;:12::i;:::-;10151:24;;:8;;;;;;;;;;;:24;;;10143:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;11601:5:::1;11597:1;11581:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:25;;;;:::i;:::-;11565:12;:41;;11557:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;11720:3;11716:1;11700:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;11684:12;:39;;11676:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;11811:12;11791:17;:32;;;;11463:367:::0;:::o;265:98::-;318:7;345:10;338:17;;265:98;:::o;5626:380::-;5779:1;5762:19;;:5;:19;;;5754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5860:1;5841:21;;:7;:21;;;5833:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5944:6;5914:11;:18;5926:5;5914:18;;;;;;;;;;;;;;;:27;5933:7;5914:27;;;;;;;;;;;;;;;:36;;;;5982:7;5966:32;;5975:5;5966:32;;;5991:6;5966:32;;;;;;:::i;:::-;;;;;;;;5626:380;;;:::o;6014:453::-;6149:24;6176:25;6186:5;6193:7;6176:9;:25::i;:::-;6149:52;;6236:17;6216:16;:37;6212:248;;6298:6;6278:16;:26;;6270:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6382:51;6391:5;6398:7;6426:6;6407:16;:25;6382:8;:51::i;:::-;6212:248;6138:329;6014:453;;;:::o;11838:2101::-;11986:1;11970:18;;:4;:18;;;11962:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12069:1;12055:16;;:2;:16;;;12047:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12165:10;12186:14;;;;;;;;;;;12178:22;;:4;:22;;;12165:35;;12211:12;12226:15;:21;12242:4;12226:21;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;12251:15;:19;12267:2;12251:19;;;;;;;;;;;;;;;;;;;;;;;;;12226:44;12211:59;;12297:1;12287:6;:11;12283:93;;12315:28;12331:4;12337:2;12341:1;12315:15;:28::i;:::-;12358:7;;;;12283:93;12463:1;12437:28;;:14;;;;;;;;;;;:28;;;12433:144;;12490:7;12482:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;12559:7;;;;12433:144;12637:1;12623:11;;:15;:24;;;;;12642:5;12623:24;:41;;;;;12657:7;:5;:7::i;:::-;12651:13;;:2;:13;;;;12623:41;:64;;;;;12682:4;12668:19;;:2;:19;;;;12623:64;12619:207;;;12742:11;;12732:6;12710:19;12726:2;12710:15;:19::i;:::-;:28;;;;:::i;:::-;:43;;12702:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;12619:207;12899:1;12888:8;;:12;12884:1002;;;12917:28;12948:24;12966:4;12948:9;:24::i;:::-;12917:55;;12987:12;13026:17;;13002:20;:41;;12987:56;;13080:7;:36;;;;;13109:7;;;;;;;;;;;13108:8;13080:36;:63;;;;;13138:5;13137:6;13080:63;:106;;;;;13165:15;:21;13181:4;13165:21;;;;;;;;;;;;;;;;;;;;;;;;;13164:22;13080:106;:147;;;;;13208:15;:19;13224:2;13208:19;;;;;;;;;;;;;;;;;;;;;;;;;13207:20;13080:147;13058:296;;;13272:4;13262:7;;:14;;;;;;;;;;;;;;;;;;13295:9;:7;:9::i;:::-;13333:5;13323:7;;:15;;;;;;;;;;;;;;;;;;13058:296;13425:12;13441:7;;;;;;;;;;;13440:8;13425:23;;13467:7;:41;;;;13479:5;13478:6;:30;;;;;13494:14;;;;;;;;;;;13488:20;;:2;:20;;;;13478:30;13467:41;13463:62;;;13520:5;13510:15;;13463:62;13558:7;13554:321;;;13586:12;13601:29;13626:3;13601:20;13612:8;;13601:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;13586:44;;13665:29;13690:3;13665:20;13676:8;;13665:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;13649:13;:45;;;;13742:1;13735:4;:8;13731:77;;;13766:42;13782:4;13796;13803;13766:15;:42::i;:::-;13731:77;13855:4;13845:14;;;;;:::i;:::-;;;13567:308;13554:321;12902:984;;;12884:1002;13898:33;13914:4;13920:2;13924:6;13898:15;:33::i;:::-;11951:1988;;11838:2101;;;;:::o;8343:191::-;8417:16;8436:6;;;;;;;;;;;8417:25;;8462:8;8453:6;;:17;;;;;;;;;;;;;;;;;;8517:8;8486:40;;8507:8;8486:40;;;;;;;;;;;;8406:128;8343:191;:::o;3941:671::-;4088:1;4072:18;;:4;:18;;;4064:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4165:1;4151:16;;:2;:16;;;4143:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4220:38;4241:4;4247:2;4251:6;4220:20;:38::i;:::-;4271:19;4293:9;:15;4303:4;4293:15;;;;;;;;;;;;;;;;4271:37;;4342:6;4327:11;:21;;4319:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4459:6;4445:11;:20;4427:9;:15;4437:4;4427:15;;;;;;;;;;;;;;;:38;;;;4504:6;4487:9;:13;4497:2;4487:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;4543:2;4528:26;;4537:4;4528:26;;;4547:6;4528:26;;;;;;:::i;:::-;;;;;;;;4567:37;4587:4;4593:2;4597:6;4567:19;:37::i;:::-;4053:559;3941:671;;;:::o;13984:898::-;14023:19;14045:24;14063:4;14045:9;:24::i;:::-;14023:46;;14109:1;14094:11;:16;:38;;;;14131:1;14114:13;;:18;14094:38;14090:51;;;14134:7;;;14090:51;14169:17;;14155:11;:31;14151:68;;;14202:17;;14188:31;;14151:68;14240:18;14261:21;14240:42;;14312:21;14350:1;14336:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14312:40;;14381:4;14363;14368:1;14363:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;14407:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14397:4;14402:1;14397:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;14443:63;14460:4;14475:16;;;;;;;;;;;14494:11;14443:8;:63::i;:::-;14519:16;;;;;;;;;;;:67;;;14601:11;14627:1;14643:4;14670;14690:15;14519:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14737:18;14758:37;14784:10;14758:21;:25;;:37;;;;:::i;:::-;14737:58;;14814:8;;;;;;;;;;;14806:26;;:38;14833:10;14806:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14873:1;14857:13;:17;;;;14012:870;;;;13984:898;:::o;8777:98::-;8835:7;8866:1;8862;:5;;;;:::i;:::-;8855:12;;8777:98;;;;:::o;8883:::-;8941:7;8972:1;8968;:5;;;;:::i;:::-;8961:12;;8883:98;;;;:::o;6475:125::-;;;;:::o;6608:124::-;;;;:::o;8671:98::-;8729:7;8760:1;8756;:5;;;;:::i;:::-;8749:12;;8671:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:109::-;4903:7;4932:24;4950:5;4932:24;:::i;:::-;4921:35;;4853:109;;;:::o;4968:148::-;5054:37;5085:5;5054:37;:::i;:::-;5047:5;5044:48;5034:76;;5106:1;5103;5096:12;5034:76;4968:148;:::o;5122:165::-;5181:5;5219:6;5206:20;5197:29;;5235:46;5275:5;5235:46;:::i;:::-;5122:165;;;;:::o;5293:355::-;5365:6;5414:2;5402:9;5393:7;5389:23;5385:32;5382:119;;;5420:79;;:::i;:::-;5382:119;5540:1;5565:66;5623:7;5614:6;5603:9;5599:22;5565:66;:::i;:::-;5555:76;;5511:130;5293:355;;;;:::o;5654:118::-;5725:22;5741:5;5725:22;:::i;:::-;5718:5;5715:33;5705:61;;5762:1;5759;5752:12;5705:61;5654:118;:::o;5778:135::-;5822:5;5860:6;5847:20;5838:29;;5876:31;5901:5;5876:31;:::i;:::-;5778:135;;;;:::o;5919:325::-;5976:6;6025:2;6013:9;6004:7;6000:23;5996:32;5993:119;;;6031:79;;:::i;:::-;5993:119;6151:1;6176:51;6219:7;6210:6;6199:9;6195:22;6176:51;:::i;:::-;6166:61;;6122:115;5919:325;;;;:::o;6250:329::-;6309:6;6358:2;6346:9;6337:7;6333:23;6329:32;6326:119;;;6364:79;;:::i;:::-;6326:119;6484:1;6509:53;6554:7;6545:6;6534:9;6530:22;6509:53;:::i;:::-;6499:63;;6455:117;6250:329;;;;:::o;6585:118::-;6672:24;6690:5;6672:24;:::i;:::-;6667:3;6660:37;6585:118;;:::o;6709:222::-;6802:4;6840:2;6829:9;6825:18;6817:26;;6853:71;6921:1;6910:9;6906:17;6897:6;6853:71;:::i;:::-;6709:222;;;;:::o;6937:474::-;7005:6;7013;7062:2;7050:9;7041:7;7037:23;7033:32;7030:119;;;7068:79;;:::i;:::-;7030:119;7188:1;7213:53;7258:7;7249:6;7238:9;7234:22;7213:53;:::i;:::-;7203:63;;7159:117;7315:2;7341:53;7386:7;7377:6;7366:9;7362:22;7341:53;:::i;:::-;7331:63;;7286:118;6937:474;;;;;:::o;7417:329::-;7476:6;7525:2;7513:9;7504:7;7500:23;7496:32;7493:119;;;7531:79;;:::i;:::-;7493:119;7651:1;7676:53;7721:7;7712:6;7701:9;7697:22;7676:53;:::i;:::-;7666:63;;7622:117;7417:329;;;;:::o;7752:180::-;7800:77;7797:1;7790:88;7897:4;7894:1;7887:15;7921:4;7918:1;7911:15;7938:320;7982:6;8019:1;8013:4;8009:12;7999:22;;8066:1;8060:4;8056:12;8087:18;8077:81;;8143:4;8135:6;8131:17;8121:27;;8077:81;8205:2;8197:6;8194:14;8174:18;8171:38;8168:84;;8224:18;;:::i;:::-;8168:84;7989:269;7938:320;;;:::o;8264:180::-;8312:77;8309:1;8302:88;8409:4;8406:1;8399:15;8433:4;8430:1;8423:15;8450:191;8490:3;8509:20;8527:1;8509:20;:::i;:::-;8504:25;;8543:20;8561:1;8543:20;:::i;:::-;8538:25;;8586:1;8583;8579:9;8572:16;;8607:3;8604:1;8601:10;8598:36;;;8614:18;;:::i;:::-;8598:36;8450:191;;;;:::o;8647:222::-;8787:34;8783:1;8775:6;8771:14;8764:58;8856:5;8851:2;8843:6;8839:15;8832:30;8647:222;:::o;8875:366::-;9017:3;9038:67;9102:2;9097:3;9038:67;:::i;:::-;9031:74;;9114:93;9203:3;9114:93;:::i;:::-;9232:2;9227:3;9223:12;9216:19;;8875:366;;;:::o;9247:419::-;9413:4;9451:2;9440:9;9436:18;9428:26;;9500:9;9494:4;9490:20;9486:1;9475:9;9471:17;9464:47;9528:131;9654:4;9528:131;:::i;:::-;9520:139;;9247:419;;;:::o;9672:143::-;9729:5;9760:6;9754:13;9745:22;;9776:33;9803:5;9776:33;:::i;:::-;9672:143;;;;:::o;9821:351::-;9891:6;9940:2;9928:9;9919:7;9915:23;9911:32;9908:119;;;9946:79;;:::i;:::-;9908:119;10066:1;10091:64;10147:7;10138:6;10127:9;10123:22;10091:64;:::i;:::-;10081:74;;10037:128;9821:351;;;;:::o;10178:332::-;10299:4;10337:2;10326:9;10322:18;10314:26;;10350:71;10418:1;10407:9;10403:17;10394:6;10350:71;:::i;:::-;10431:72;10499:2;10488:9;10484:18;10475:6;10431:72;:::i;:::-;10178:332;;;;;:::o;10516:116::-;10586:21;10601:5;10586:21;:::i;:::-;10579:5;10576:32;10566:60;;10622:1;10619;10612:12;10566:60;10516:116;:::o;10638:137::-;10692:5;10723:6;10717:13;10708:22;;10739:30;10763:5;10739:30;:::i;:::-;10638:137;;;;:::o;10781:345::-;10848:6;10897:2;10885:9;10876:7;10872:23;10868:32;10865:119;;;10903:79;;:::i;:::-;10865:119;11023:1;11048:61;11101:7;11092:6;11081:9;11077:22;11048:61;:::i;:::-;11038:71;;10994:125;10781:345;;;;:::o;11132:182::-;11272:34;11268:1;11260:6;11256:14;11249:58;11132:182;:::o;11320:366::-;11462:3;11483:67;11547:2;11542:3;11483:67;:::i;:::-;11476:74;;11559:93;11648:3;11559:93;:::i;:::-;11677:2;11672:3;11668:12;11661:19;;11320:366;;;:::o;11692:419::-;11858:4;11896:2;11885:9;11881:18;11873:26;;11945:9;11939:4;11935:20;11931:1;11920:9;11916:17;11909:47;11973:131;12099:4;11973:131;:::i;:::-;11965:139;;11692:419;;;:::o;12117:224::-;12257:34;12253:1;12245:6;12241:14;12234:58;12326:7;12321:2;12313:6;12309:15;12302:32;12117:224;:::o;12347:366::-;12489:3;12510:67;12574:2;12569:3;12510:67;:::i;:::-;12503:74;;12586:93;12675:3;12586:93;:::i;:::-;12704:2;12699:3;12695:12;12688:19;;12347:366;;;:::o;12719:419::-;12885:4;12923:2;12912:9;12908:18;12900:26;;12972:9;12966:4;12962:20;12958:1;12947:9;12943:17;12936:47;13000:131;13126:4;13000:131;:::i;:::-;12992:139;;12719:419;;;:::o;13144:143::-;13201:5;13232:6;13226:13;13217:22;;13248:33;13275:5;13248:33;:::i;:::-;13144:143;;;;:::o;13293:351::-;13363:6;13412:2;13400:9;13391:7;13387:23;13383:32;13380:119;;;13418:79;;:::i;:::-;13380:119;13538:1;13563:64;13619:7;13610:6;13599:9;13595:22;13563:64;:::i;:::-;13553:74;;13509:128;13293:351;;;;:::o;13650:332::-;13771:4;13809:2;13798:9;13794:18;13786:26;;13822:71;13890:1;13879:9;13875:17;13866:6;13822:71;:::i;:::-;13903:72;13971:2;13960:9;13956:18;13947:6;13903:72;:::i;:::-;13650:332;;;;;:::o;13988:85::-;14033:7;14062:5;14051:16;;13988:85;;;:::o;14079:60::-;14107:3;14128:5;14121:12;;14079:60;;;:::o;14145:158::-;14203:9;14236:61;14254:42;14263:32;14289:5;14263:32;:::i;:::-;14254:42;:::i;:::-;14236:61;:::i;:::-;14223:74;;14145:158;;;:::o;14309:147::-;14404:45;14443:5;14404:45;:::i;:::-;14399:3;14392:58;14309:147;;:::o;14462:807::-;14711:4;14749:3;14738:9;14734:19;14726:27;;14763:71;14831:1;14820:9;14816:17;14807:6;14763:71;:::i;:::-;14844:72;14912:2;14901:9;14897:18;14888:6;14844:72;:::i;:::-;14926:80;15002:2;14991:9;14987:18;14978:6;14926:80;:::i;:::-;15016;15092:2;15081:9;15077:18;15068:6;15016:80;:::i;:::-;15106:73;15174:3;15163:9;15159:19;15150:6;15106:73;:::i;:::-;15189;15257:3;15246:9;15242:19;15233:6;15189:73;:::i;:::-;14462:807;;;;;;;;;:::o;15275:663::-;15363:6;15371;15379;15428:2;15416:9;15407:7;15403:23;15399:32;15396:119;;;15434:79;;:::i;:::-;15396:119;15554:1;15579:64;15635:7;15626:6;15615:9;15611:22;15579:64;:::i;:::-;15569:74;;15525:128;15692:2;15718:64;15774:7;15765:6;15754:9;15750:22;15718:64;:::i;:::-;15708:74;;15663:129;15831:2;15857:64;15913:7;15904:6;15893:9;15889:22;15857:64;:::i;:::-;15847:74;;15802:129;15275:663;;;;;:::o;15944:225::-;16084:34;16080:1;16072:6;16068:14;16061:58;16153:8;16148:2;16140:6;16136:15;16129:33;15944:225;:::o;16175:366::-;16317:3;16338:67;16402:2;16397:3;16338:67;:::i;:::-;16331:74;;16414:93;16503:3;16414:93;:::i;:::-;16532:2;16527:3;16523:12;16516:19;;16175:366;;;:::o;16547:419::-;16713:4;16751:2;16740:9;16736:18;16728:26;;16800:9;16794:4;16790:20;16786:1;16775:9;16771:17;16764:47;16828:131;16954:4;16828:131;:::i;:::-;16820:139;;16547:419;;;:::o;16972:410::-;17012:7;17035:20;17053:1;17035:20;:::i;:::-;17030:25;;17069:20;17087:1;17069:20;:::i;:::-;17064:25;;17124:1;17121;17117:9;17146:30;17164:11;17146:30;:::i;:::-;17135:41;;17325:1;17316:7;17312:15;17309:1;17306:22;17286:1;17279:9;17259:83;17236:139;;17355:18;;:::i;:::-;17236:139;17020:362;16972:410;;;;:::o;17388:180::-;17436:77;17433:1;17426:88;17533:4;17530:1;17523:15;17557:4;17554:1;17547:15;17574:185;17614:1;17631:20;17649:1;17631:20;:::i;:::-;17626:25;;17665:20;17683:1;17665:20;:::i;:::-;17660:25;;17704:1;17694:35;;17709:18;;:::i;:::-;17694:35;17751:1;17748;17744:9;17739:14;;17574:185;;;;:::o;17765:242::-;17905:34;17901:1;17893:6;17889:14;17882:58;17974:25;17969:2;17961:6;17957:15;17950:50;17765:242;:::o;18013:366::-;18155:3;18176:67;18240:2;18235:3;18176:67;:::i;:::-;18169:74;;18252:93;18341:3;18252:93;:::i;:::-;18370:2;18365:3;18361:12;18354:19;;18013:366;;;:::o;18385:419::-;18551:4;18589:2;18578:9;18574:18;18566:26;;18638:9;18632:4;18628:20;18624:1;18613:9;18609:17;18602:47;18666:131;18792:4;18666:131;:::i;:::-;18658:139;;18385:419;;;:::o;18810:240::-;18950:34;18946:1;18938:6;18934:14;18927:58;19019:23;19014:2;19006:6;19002:15;18995:48;18810:240;:::o;19056:366::-;19198:3;19219:67;19283:2;19278:3;19219:67;:::i;:::-;19212:74;;19295:93;19384:3;19295:93;:::i;:::-;19413:2;19408:3;19404:12;19397:19;;19056:366;;;:::o;19428:419::-;19594:4;19632:2;19621:9;19617:18;19609:26;;19681:9;19675:4;19671:20;19667:1;19656:9;19652:17;19645:47;19709:131;19835:4;19709:131;:::i;:::-;19701:139;;19428:419;;;:::o;19853:223::-;19993:34;19989:1;19981:6;19977:14;19970:58;20062:6;20057:2;20049:6;20045:15;20038:31;19853:223;:::o;20082:366::-;20224:3;20245:67;20309:2;20304:3;20245:67;:::i;:::-;20238:74;;20321:93;20410:3;20321:93;:::i;:::-;20439:2;20434:3;20430:12;20423:19;;20082:366;;;:::o;20454:419::-;20620:4;20658:2;20647:9;20643:18;20635:26;;20707:9;20701:4;20697:20;20693:1;20682:9;20678:17;20671:47;20735:131;20861:4;20735:131;:::i;:::-;20727:139;;20454:419;;;:::o;20879:221::-;21019:34;21015:1;21007:6;21003:14;20996:58;21088:4;21083:2;21075:6;21071:15;21064:29;20879:221;:::o;21106:366::-;21248:3;21269:67;21333:2;21328:3;21269:67;:::i;:::-;21262:74;;21345:93;21434:3;21345:93;:::i;:::-;21463:2;21458:3;21454:12;21447:19;;21106:366;;;:::o;21478:419::-;21644:4;21682:2;21671:9;21667:18;21659:26;;21731:9;21725:4;21721:20;21717:1;21706:9;21702:17;21695:47;21759:131;21885:4;21759:131;:::i;:::-;21751:139;;21478:419;;;:::o;21903:179::-;22043:31;22039:1;22031:6;22027:14;22020:55;21903:179;:::o;22088:366::-;22230:3;22251:67;22315:2;22310:3;22251:67;:::i;:::-;22244:74;;22327:93;22416:3;22327:93;:::i;:::-;22445:2;22440:3;22436:12;22429:19;;22088:366;;;:::o;22460:419::-;22626:4;22664:2;22653:9;22649:18;22641:26;;22713:9;22707:4;22703:20;22699:1;22688:9;22684:17;22677:47;22741:131;22867:4;22741:131;:::i;:::-;22733:139;;22460:419;;;:::o;22885:230::-;23025:34;23021:1;23013:6;23009:14;23002:58;23094:13;23089:2;23081:6;23077:15;23070:38;22885:230;:::o;23121:366::-;23263:3;23284:67;23348:2;23343:3;23284:67;:::i;:::-;23277:74;;23360:93;23449:3;23360:93;:::i;:::-;23478:2;23473:3;23469:12;23462:19;;23121:366;;;:::o;23493:419::-;23659:4;23697:2;23686:9;23682:18;23674:26;;23746:9;23740:4;23736:20;23732:1;23721:9;23717:17;23710:47;23774:131;23900:4;23774:131;:::i;:::-;23766:139;;23493:419;;;:::o;23918:228::-;24058:34;24054:1;24046:6;24042:14;24035:58;24127:11;24122:2;24114:6;24110:15;24103:36;23918:228;:::o;24152:366::-;24294:3;24315:67;24379:2;24374:3;24315:67;:::i;:::-;24308:74;;24391:93;24480:3;24391:93;:::i;:::-;24509:2;24504:3;24500:12;24493:19;;24152:366;;;:::o;24524:419::-;24690:4;24728:2;24717:9;24713:18;24705:26;;24777:9;24771:4;24767:20;24763:1;24752:9;24748:17;24741:47;24805:131;24931:4;24805:131;:::i;:::-;24797:139;;24524:419;;;:::o;24949:229::-;25089:34;25085:1;25077:6;25073:14;25066:58;25158:12;25153:2;25145:6;25141:15;25134:37;24949:229;:::o;25184:366::-;25326:3;25347:67;25411:2;25406:3;25347:67;:::i;:::-;25340:74;;25423:93;25512:3;25423:93;:::i;:::-;25541:2;25536:3;25532:12;25525:19;;25184:366;;;:::o;25556:419::-;25722:4;25760:2;25749:9;25745:18;25737:26;;25809:9;25803:4;25799:20;25795:1;25784:9;25780:17;25773:47;25837:131;25963:4;25837:131;:::i;:::-;25829:139;;25556:419;;;:::o;25981:292::-;26121:34;26117:1;26109:6;26105:14;26098:58;26190:34;26185:2;26177:6;26173:15;26166:59;26259:6;26254:2;26246:6;26242:15;26235:31;25981:292;:::o;26279:366::-;26421:3;26442:67;26506:2;26501:3;26442:67;:::i;:::-;26435:74;;26518:93;26607:3;26518:93;:::i;:::-;26636:2;26631:3;26627:12;26620:19;;26279:366;;;:::o;26651:419::-;26817:4;26855:2;26844:9;26840:18;26832:26;;26904:9;26898:4;26894:20;26890:1;26879:9;26875:17;26868:47;26932:131;27058:4;26932:131;:::i;:::-;26924:139;;26651:419;;;:::o;27076:194::-;27116:4;27136:20;27154:1;27136:20;:::i;:::-;27131:25;;27170:20;27188:1;27170:20;:::i;:::-;27165:25;;27214:1;27211;27207:9;27199:17;;27238:1;27232:4;27229:11;27226:37;;;27243:18;;:::i;:::-;27226:37;27076:194;;;;:::o;27276:224::-;27416:34;27412:1;27404:6;27400:14;27393:58;27485:7;27480:2;27472:6;27468:15;27461:32;27276:224;:::o;27506:366::-;27648:3;27669:67;27733:2;27728:3;27669:67;:::i;:::-;27662:74;;27745:93;27834:3;27745:93;:::i;:::-;27863:2;27858:3;27854:12;27847:19;;27506:366;;;:::o;27878:419::-;28044:4;28082:2;28071:9;28067:18;28059:26;;28131:9;28125:4;28121:20;28117:1;28106:9;28102:17;28095:47;28159:131;28285:4;28159:131;:::i;:::-;28151:139;;27878:419;;;:::o;28303:222::-;28443:34;28439:1;28431:6;28427:14;28420:58;28512:5;28507:2;28499:6;28495:15;28488:30;28303:222;:::o;28531:366::-;28673:3;28694:67;28758:2;28753:3;28694:67;:::i;:::-;28687:74;;28770:93;28859:3;28770:93;:::i;:::-;28888:2;28883:3;28879:12;28872:19;;28531:366;;;:::o;28903:419::-;29069:4;29107:2;29096:9;29092:18;29084:26;;29156:9;29150:4;29146:20;29142:1;29131:9;29127:17;29120:47;29184:131;29310:4;29184:131;:::i;:::-;29176:139;;28903:419;;;:::o;29328:225::-;29468:34;29464:1;29456:6;29452:14;29445:58;29537:8;29532:2;29524:6;29520:15;29513:33;29328:225;:::o;29559:366::-;29701:3;29722:67;29786:2;29781:3;29722:67;:::i;:::-;29715:74;;29798:93;29887:3;29798:93;:::i;:::-;29916:2;29911:3;29907:12;29900:19;;29559:366;;;:::o;29931:419::-;30097:4;30135:2;30124:9;30120:18;30112:26;;30184:9;30178:4;30174:20;30170:1;30159:9;30155:17;30148:47;30212:131;30338:4;30212:131;:::i;:::-;30204:139;;29931:419;;;:::o;30356:180::-;30404:77;30401:1;30394:88;30501:4;30498:1;30491:15;30525:4;30522:1;30515:15;30542:180;30590:77;30587:1;30580:88;30687:4;30684:1;30677:15;30711:4;30708:1;30701:15;30728:114;30795:6;30829:5;30823:12;30813:22;;30728:114;;;:::o;30848:184::-;30947:11;30981:6;30976:3;30969:19;31021:4;31016:3;31012:14;30997:29;;30848:184;;;;:::o;31038:132::-;31105:4;31128:3;31120:11;;31158:4;31153:3;31149:14;31141:22;;31038:132;;;:::o;31176:108::-;31253:24;31271:5;31253:24;:::i;:::-;31248:3;31241:37;31176:108;;:::o;31290:179::-;31359:10;31380:46;31422:3;31414:6;31380:46;:::i;:::-;31458:4;31453:3;31449:14;31435:28;;31290:179;;;;:::o;31475:113::-;31545:4;31577;31572:3;31568:14;31560:22;;31475:113;;;:::o;31624:732::-;31743:3;31772:54;31820:5;31772:54;:::i;:::-;31842:86;31921:6;31916:3;31842:86;:::i;:::-;31835:93;;31952:56;32002:5;31952:56;:::i;:::-;32031:7;32062:1;32047:284;32072:6;32069:1;32066:13;32047:284;;;32148:6;32142:13;32175:63;32234:3;32219:13;32175:63;:::i;:::-;32168:70;;32261:60;32314:6;32261:60;:::i;:::-;32251:70;;32107:224;32094:1;32091;32087:9;32082:14;;32047:284;;;32051:14;32347:3;32340:10;;31748:608;;;31624:732;;;;:::o;32362:831::-;32625:4;32663:3;32652:9;32648:19;32640:27;;32677:71;32745:1;32734:9;32730:17;32721:6;32677:71;:::i;:::-;32758:80;32834:2;32823:9;32819:18;32810:6;32758:80;:::i;:::-;32885:9;32879:4;32875:20;32870:2;32859:9;32855:18;32848:48;32913:108;33016:4;33007:6;32913:108;:::i;:::-;32905:116;;33031:72;33099:2;33088:9;33084:18;33075:6;33031:72;:::i;:::-;33113:73;33181:3;33170:9;33166:19;33157:6;33113:73;:::i;:::-;32362:831;;;;;;;;:::o

Swarm Source

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