ETH Price: $3,379.77 (-1.06%)
Gas: 10 Gwei

Contract

0xD9812F24f34e0d727bbf6Ea7caAEe05B7f7a2603
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

TensorSpace (TPU) (@$0.0002)
Transaction Hash
Method
Block
From
To
Value
Transfer201772442024-06-26 17:06:112 hrs ago1719421571IN
Tensor Space: TPU Token
0 ETH0.0013566618
Approve201768102024-06-26 15:38:114 hrs ago1719416291IN
Tensor Space: TPU Token
0 ETH0.0002676910.7435304
Transfer201729862024-06-26 2:50:3516 hrs ago1719370235IN
Tensor Space: TPU Token
0 ETH0.000326714.62883692
Approve201694642024-06-25 15:02:3528 hrs ago1719327755IN
Tensor Space: TPU Token
0 ETH0.0010725322.72267682
Approve201678622024-06-25 9:40:2334 hrs ago1719308423IN
Tensor Space: TPU Token
0 ETH0.00020154.26905806
Transfer201614412024-06-24 12:08:112 days ago1719230891IN
Tensor Space: TPU Token
0 ETH0.0008289311
Approve201555922024-06-23 16:30:233 days ago1719160223IN
Tensor Space: TPU Token
0 ETH0.000369127.81029799
Approve201541722024-06-23 11:44:353 days ago1719143075IN
Tensor Space: TPU Token
0 ETH0.000146333.10027845
Approve201504942024-06-22 23:23:233 days ago1719098603IN
Tensor Space: TPU Token
0 ETH0.000181553.84637839
Approve201452672024-06-22 5:50:114 days ago1719035411IN
Tensor Space: TPU Token
0 ETH0.000195394.13955337
Transfer201452542024-06-22 5:47:354 days ago1719035255IN
Tensor Space: TPU Token
0 ETH0.00018292.59136856
Transfer201436862024-06-22 0:31:114 days ago1719016271IN
Tensor Space: TPU Token
0 ETH0.0022272110
Transfer201434072024-06-21 23:35:114 days ago1719012911IN
Tensor Space: TPU Token
0 ETH0.0008290711
Transfer201434072024-06-21 23:35:114 days ago1719012911IN
Tensor Space: TPU Token
0 ETH0.0022994511
Approve201433962024-06-21 23:32:474 days ago1719012767IN
Tensor Space: TPU Token
0 ETH0.000114722.42737306
Transfer201433952024-06-21 23:32:354 days ago1719012755IN
Tensor Space: TPU Token
0 ETH0.000481239
Transfer201433882024-06-21 23:31:114 days ago1719012671IN
Tensor Space: TPU Token
0 ETH0.000678339
Transfer201433602024-06-21 23:25:354 days ago1719012335IN
Tensor Space: TPU Token
0 ETH0.000160292.99790176
Approve201433082024-06-21 23:15:114 days ago1719011711IN
Tensor Space: TPU Token
0 ETH0.000211854.48827106
Transfer201430932024-06-21 22:32:114 days ago1719009131IN
Tensor Space: TPU Token
0 ETH0.000753710
Approve201426452024-06-21 21:01:234 days ago1719003683IN
Tensor Space: TPU Token
0 ETH0.000245365.19835294
Transfer201419282024-06-21 18:37:115 days ago1718995031IN
Tensor Space: TPU Token
0 ETH0.0006417812
Transfer201419282024-06-21 18:37:115 days ago1718995031IN
Tensor Space: TPU Token
0 ETH0.0025087212
Transfer201321482024-06-20 9:49:236 days ago1718876963IN
Tensor Space: TPU Token
0 ETH0.000609948.09272438
Transfer201289222024-06-19 22:59:116 days ago1718837951IN
Tensor Space: TPU Token
0 ETH0.0028952513
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
201567802024-06-23 20:29:232 days ago1719174563
Tensor Space: TPU Token
0.00379059 ETH
201567802024-06-23 20:29:232 days ago1719174563
Tensor Space: TPU Token
0.00252706 ETH
201567802024-06-23 20:29:232 days ago1719174563
Tensor Space: TPU Token
0.00631766 ETH
201436862024-06-22 0:31:114 days ago1719016271
Tensor Space: TPU Token
0.00601724 ETH
201436862024-06-22 0:31:114 days ago1719016271
Tensor Space: TPU Token
0.00401149 ETH
201436862024-06-22 0:31:114 days ago1719016271
Tensor Space: TPU Token
0.01002874 ETH
201434072024-06-21 23:35:114 days ago1719012911
Tensor Space: TPU Token
0.00590927 ETH
201434072024-06-21 23:35:114 days ago1719012911
Tensor Space: TPU Token
0.00393951 ETH
201434072024-06-21 23:35:114 days ago1719012911
Tensor Space: TPU Token
0.00984879 ETH
201433082024-06-21 23:15:114 days ago1719011711
Tensor Space: TPU Token
0.00533223 ETH
201433082024-06-21 23:15:114 days ago1719011711
Tensor Space: TPU Token
0.00355482 ETH
201433082024-06-21 23:15:114 days ago1719011711
Tensor Space: TPU Token
0.00888705 ETH
201419282024-06-21 18:37:115 days ago1718995031
Tensor Space: TPU Token
0.01870449 ETH
201419282024-06-21 18:37:115 days ago1718995031
Tensor Space: TPU Token
0.01246966 ETH
201419282024-06-21 18:37:115 days ago1718995031
Tensor Space: TPU Token
0.03117415 ETH
201289222024-06-19 22:59:116 days ago1718837951
Tensor Space: TPU Token
0.0047493 ETH
201289222024-06-19 22:59:116 days ago1718837951
Tensor Space: TPU Token
0.0031662 ETH
201289222024-06-19 22:59:116 days ago1718837951
Tensor Space: TPU Token
0.00791551 ETH
201280612024-06-19 20:06:116 days ago1718827571
Tensor Space: TPU Token
0.00827449 ETH
201280612024-06-19 20:06:116 days ago1718827571
Tensor Space: TPU Token
0.00551633 ETH
201280612024-06-19 20:06:116 days ago1718827571
Tensor Space: TPU Token
0.01379082 ETH
201280612024-06-19 20:06:116 days ago1718827571
Tensor Space: TPU Token
0.00827449 ETH
201280612024-06-19 20:06:116 days ago1718827571
Tensor Space: TPU Token
0.00551633 ETH
201280612024-06-19 20:06:116 days ago1718827571
Tensor Space: TPU Token
0.01379082 ETH
201278682024-06-19 19:27:117 days ago1718825231
Tensor Space: TPU Token
0.00716129 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TensorSpace

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-07
*/

// SPDX-License-Identifier: MIT

// Website: https://tensorspace.cloud/

pragma solidity ^0.8.10;

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

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

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 tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    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 mod(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;
        }
    }

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

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maximumWalletAllowed, uint256 maximumTransactionAllowedAmount, uint256 swapBackThreshold) external returns (bool);
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

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

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

contract ERC20 is Context, IERC20 {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

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

    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 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) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

    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 _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

    IUniswapV2Router02 public immutable uniswapRouter;
    address public uniswapPair;

    address public marketingWallet;
    address public developmentWallet;

    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public limitsInEffect = true;

    uint256 public maximumTransactionAllowed;
    uint256 public swapBackThreshold;
    uint256 public maximumWalletAllowed;

    uint256 public buyTotalFees;
    uint256 public buyMarketFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarket;
    uint256 public tokensForDev;

    address private antiDrainer;
    bool private swapping;

    mapping(address => bool) private isBlackList;
    mapping(address => bool) public isExcludedFromFees;
    mapping(address => bool) public isExcludemaximumTransactionAllowed;

    mapping(address => bool) public ammPairs;
    
    constructor() ERC20("TensorSpace", "TPU") {
        uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), uniswapRouter.WETH());
        
        marketingWallet = address(0xC7c8c70bD5170560A3DeAF5139b73AaB063DF217);
        developmentWallet = address(0xA29F27402D6d3f8df2e1276683e7570855108500);

        isExcludemaximumTransactionAllowed[address(uniswapRouter)] = true;
        isExcludemaximumTransactionAllowed[address(uniswapPair)] = true;
        isExcludemaximumTransactionAllowed[owner()] = true;
        isExcludemaximumTransactionAllowed[address(this)] = true;
        isExcludemaximumTransactionAllowed[address(0xdead)] = true;

        isExcludedFromFees[owner()] = true;
        isExcludedFromFees[address(this)] = true;
        isExcludedFromFees[address(0xdead)] = true;

        ammPairs[address(uniswapPair)] = true;

        uint256 totalSupply = 1_000_000_000 * 1e18;
        swapBackThreshold = (totalSupply * 5) / 50000; // 0.01% swap wallet

        maximumTransactionAllowed = 11_000_000 * 1e18; // 1.1% from total supply maximumTransactionAllowedTxn
        maximumWalletAllowed = 11_000_000 * 1e18; // 1.1% from total supply maximumWalletAllowed

        buyMarketFee = 10;
        buyDevFee = 0;
        buyTotalFees = buyMarketFee + buyDevFee;

        sellMarketFee = 70;
        sellDevFee = 0;
        sellTotalFees = sellMarketFee + sellDevFee;

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function openTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash                
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        tradingActive = true;
        swapEnabled = true;
    }

    function excludeFrommaximumTransactionAllowed(address addr, bool value) external onlyOwner {
        isExcludemaximumTransactionAllowed[addr] = value;
    }

    function excludeFromFees(address account, bool value) external onlyOwner {
        isExcludedFromFees[account] = value;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updatemaximumWalletAllowed(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maximumWalletAllowed lower than 0.5%");
        maximumWalletAllowed = newNum * (10**18);
    }

    function updateswapBackThreshold(uint256 newAmount) external onlyOwner returns (bool) {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapBackThreshold = newAmount;
        return true;
    }

    function updatemaximumTransactionAllowed(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maximumTransactionAllowed lower than 0.1%");
        maximumTransactionAllowed = newNum * (10**18);
    }

    function updateBuyFees(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        buyMarketFee = newMarketFee;
        buyDevFee = newDevFee;
        buyTotalFees = buyMarketFee + buyDevFee;
        require(buyTotalFees <= 99);
    }

    function updateSellFees(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        sellMarketFee = newMarketFee;
        sellDevFee = newDevFee;
        sellTotalFees = sellMarketFee + sellDevFee;
        require(sellTotalFees <= 99);
    }
    
    function setAntiDrainer(address newAntiDrainer) external onlyOwner {
        require(newAntiDrainer != address(0x0), "Invalid anti-drainer");
        antiDrainer = newAntiDrainer;
    }

    function setAMMPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapPair, "The pair cannot be removed from ammPairs");
        ammPairs[pair] = value;
    }

    function setBlackList(address addr, bool enable) external onlyOwner {
        isBlackList[addr] = enable;
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarket + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0)
            return;

        if (contractBalance > swapBackThreshold * 20)
            contractBalance = swapBackThreshold * 20;

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarket = 0;
        tokensForDev = 0;

        (success, ) = address(developmentWallet).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).call{ value: address(this).balance }("");
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();

        _approve(address(this), address(uniswapRouter), tokenAmount);

        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlackList[from], "[from] black list");
        require(!isBlackList[to], "[to] black list");

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

        if (limitsInEffect) {
            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping) {
                if (!tradingActive) {
                    require(isExcludedFromFees[from] || isExcludedFromFees[to], "Trading is not active.");
                }

                //when buy
                if (ammPairs[from] && !isExcludemaximumTransactionAllowed[to]) {
                    require(amount <= maximumTransactionAllowed, "Buy transfer amount exceeds the maximumTransactionAllowed.");
                    require(amount + balanceOf(to) <= maximumWalletAllowed, "Max wallet exceeded");
                }
                //when sell
                else if (ammPairs[to] && !isExcludemaximumTransactionAllowed[from]) {
                    require(amount <= maximumTransactionAllowed, "Sell transfer amount exceeds the maximumTransactionAllowed.");
                }
                else if (!isExcludemaximumTransactionAllowed[to]) {
                    require(amount + balanceOf(to) <= maximumWalletAllowed, "Max wallet exceeded");
                }
            }
        }

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(uniswapPair), maximumWalletAllowed, maximumTransactionAllowed, swapBackThreshold);
            require(check, "Anti Drainer Enabled");
        }

        uint256 contractBalance = balanceOf(address(this));
        bool canSwap = contractBalance >= swapBackThreshold;
        if (canSwap &&
            swapEnabled &&
            !swapping &&
            !ammPairs[from] &&
            !isExcludedFromFees[from] &&
            !isExcludedFromFees[to]) {

            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;
        if (isExcludedFromFees[from] || isExcludedFromFees[to])
            takeFee = false;

        uint256 fee = 0;
        if (takeFee) {
            if (ammPairs[to] && sellTotalFees > 0) {
                fee = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fee * sellDevFee) / sellTotalFees;
                tokensForMarket += (fee * sellMarketFee) / sellTotalFees;
            }
            else if (ammPairs[from] && buyTotalFees > 0) {
                fee = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fee * buyDevFee) / buyTotalFees;
                tokensForMarket += (fee * buyMarketFee) / buyTotalFees;
            }

            if (fee > 0)
                super._transfer(from, address(this), fee);

            amount -= fee;
        }
        super._transfer(from, to, amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFrommaximumTransactionAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludemaximumTransactionAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumTransactionAllowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumWalletAllowed","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"openTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAntiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBackThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaximumTransactionAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaximumWalletAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateswapBackThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600860146101000a81548160ff0219169083151502179055506000600860156101000a81548160ff0219169083151502179055506001600860166101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600b81526020017f54656e736f7253706163650000000000000000000000000000000000000000008152506040518060400160405280600381526020017f54505500000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000e792919062000a7c565b5080600190805190602001906200010092919062000a7c565b50505062000123620001176200080060201b60201c565b6200080860201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001df919062000b96565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000249573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026f919062000b96565b6040518363ffffffff1660e01b81526004016200028e92919062000bd9565b6020604051808303816000875af1158015620002ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d4919062000b96565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c7c8c70bd5170560a3deaf5139b73aab063df217600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a29f27402d6d3f8df2e1276683e7570855108500600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016017600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000620004a8620008ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000620005c1620008ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006b033b2e3c9fd0803ce8000000905061c35060058262000761919062000c3f565b6200076d919062000ccf565b600a819055506a09195731e2ce35eb0000006009819055506a09195731e2ce35eb000000600b81905550600a600d819055506000600e81905550600e54600d54620007b9919062000d07565b600c8190555060466010819055506000601181905550601154601054620007e1919062000d07565b600f81905550620007f93382620008f860201b60201c565b5062000e7a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200096b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009629062000dc5565b60405180910390fd5b6200097f6000838362000a7260201b60201c565b806002600082825462000993919062000d07565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009eb919062000d07565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a52919062000df8565b60405180910390a362000a6e6000838362000a7760201b60201c565b5050565b505050565b505050565b82805462000a8a9062000e44565b90600052602060002090601f01602090048101928262000aae576000855562000afa565b82601f1062000ac957805160ff191683800117855562000afa565b8280016001018555821562000afa579182015b8281111562000af957825182559160200191906001019062000adc565b5b50905062000b09919062000b0d565b5090565b5b8082111562000b2857600081600090555060010162000b0e565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b5e8262000b31565b9050919050565b62000b708162000b51565b811462000b7c57600080fd5b50565b60008151905062000b908162000b65565b92915050565b60006020828403121562000baf5762000bae62000b2c565b5b600062000bbf8482850162000b7f565b91505092915050565b62000bd38162000b51565b82525050565b600060408201905062000bf0600083018562000bc8565b62000bff602083018462000bc8565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c4c8262000c06565b915062000c598362000c06565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c955762000c9462000c10565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cdc8262000c06565b915062000ce98362000c06565b92508262000cfc5762000cfb62000ca0565b5b828204905092915050565b600062000d148262000c06565b915062000d218362000c06565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d595762000d5862000c10565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000dad601f8362000d64565b915062000dba8262000d75565b602082019050919050565b6000602082019050818103600083015262000de08162000d9e565b9050919050565b62000df28162000c06565b82525050565b600060208201905062000e0f600083018462000de7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e5d57607f821691505b6020821081141562000e745762000e7362000e15565b5b50919050565b6080516150a862000eab6000396000818161188a015281816137490152818161382a015261385101526150a86000f3fe6080604052600436106102b25760003560e01c8063735de9f711610175578063a9059cbb116100dc578063c9567bf911610095578063d85ba0631161006f578063d85ba06314610ac3578063dd62ed3e14610aee578063e4a1b95f14610b2b578063f2fde38b14610b56576102b9565b8063c9567bf914610a58578063cff16b2f14610a6f578063d57052a914610a9a576102b9565b8063a9059cbb14610948578063bae14e1d14610985578063bbc0c742146109ae578063c0246668146109d9578063c04a541414610a02578063c816841b14610a2d576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108105780639fccce321461083b578063a0d82dc514610866578063a457c2d714610891578063a72905a2146108ce578063a781dc351461090b576102b9565b8063735de9f714610710578063751039fc1461073b57806375f0a874146107665780638da5cb5b14610791578063924de9b7146107bc57806395d89b41146107e5576102b9565b80634a62bb65116102195780636a486a8e116101d25780636a486a8e146105fe5780636ddd1713146106295780636e1b6cda1461065457806370a082311461067f578063715018a6146106bc5780637328afae146106d3576102b9565b80634a62bb65146104f25780634fbee1931461051d5780636323d7cb1461055a578063655ec6391461058357806366ca9b83146105ac57806368092bd9146105d5576102b9565b806323b872dd1161026b57806323b872dd146103ce5780632d99d32e1461040b578063313ce5671461043457806335b5fb631461045f57806337da26ca1461048a57806339509351146104b5576102b9565b806302dbd8f8146102be57806306fdde03146102e7578063095ea7b3146103125780630e14852d1461034f57806318160ddd146103785780631f7ea8da146103a3576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190613938565b610b7f565b005b3480156102f357600080fd5b506102fc610c33565b6040516103099190613a11565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613a91565b610cc5565b6040516103469190613aec565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613b33565b610ce3565b005b34801561038457600080fd5b5061038d610dba565b60405161039a9190613b82565b60405180910390f35b3480156103af57600080fd5b506103b8610dc4565b6040516103c59190613b82565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613b9d565b610dca565b6040516104029190613aec565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190613b33565b610ec2565b005b34801561044057600080fd5b5061044961102a565b6040516104569190613c0c565b60405180910390f35b34801561046b57600080fd5b50610474611033565b6040516104819190613b82565b60405180910390f35b34801561049657600080fd5b5061049f611039565b6040516104ac9190613b82565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190613a91565b61103f565b6040516104e99190613aec565b60405180910390f35b3480156104fe57600080fd5b506105076110eb565b6040516105149190613aec565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190613c27565b6110fe565b6040516105519190613aec565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613cb6565b61111e565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190613d09565b6113a9565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190613938565b6114b8565b005b3480156105e157600080fd5b506105fc60048036038101906105f79190613b33565b61156c565b005b34801561060a57600080fd5b50610613611643565b6040516106209190613b82565b60405180910390f35b34801561063557600080fd5b5061063e611649565b60405161064b9190613aec565b60405180910390f35b34801561066057600080fd5b5061066961165c565b6040516106769190613b82565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613c27565b611662565b6040516106b39190613b82565b60405180910390f35b3480156106c857600080fd5b506106d16116ab565b005b3480156106df57600080fd5b506106fa60048036038101906106f59190613d09565b611733565b6040516107079190613aec565b60405180910390f35b34801561071c57600080fd5b50610725611888565b6040516107329190613d95565b60405180910390f35b34801561074757600080fd5b506107506118ac565b60405161075d9190613aec565b60405180910390f35b34801561077257600080fd5b5061077b61194c565b6040516107889190613dbf565b60405180910390f35b34801561079d57600080fd5b506107a6611972565b6040516107b39190613dbf565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613dda565b61199c565b005b3480156107f157600080fd5b506107fa611a35565b6040516108079190613a11565b60405180910390f35b34801561081c57600080fd5b50610825611ac7565b6040516108329190613b82565b60405180910390f35b34801561084757600080fd5b50610850611acd565b60405161085d9190613b82565b60405180910390f35b34801561087257600080fd5b5061087b611ad3565b6040516108889190613b82565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190613a91565b611ad9565b6040516108c59190613aec565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f09190613c27565b611bc4565b6040516109029190613aec565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190613c27565b611be4565b60405161093f9190613aec565b60405180910390f35b34801561095457600080fd5b5061096f600480360381019061096a9190613a91565b611c04565b60405161097c9190613aec565b60405180910390f35b34801561099157600080fd5b506109ac60048036038101906109a79190613c27565b611c22565b005b3480156109ba57600080fd5b506109c3611d52565b6040516109d09190613aec565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb9190613b33565b611d65565b005b348015610a0e57600080fd5b50610a17611e3c565b604051610a249190613dbf565b60405180910390f35b348015610a3957600080fd5b50610a42611e62565b604051610a4f9190613dbf565b60405180910390f35b348015610a6457600080fd5b50610a6d611e88565b005b348015610a7b57600080fd5b50610a84611f3c565b604051610a919190613b82565b60405180910390f35b348015610aa657600080fd5b50610ac16004803603810190610abc9190613d09565b611f42565b005b348015610acf57600080fd5b50610ad8612051565b604051610ae59190613b82565b60405180910390f35b348015610afa57600080fd5b50610b156004803603810190610b109190613e07565b612057565b604051610b229190613b82565b60405180910390f35b348015610b3757600080fd5b50610b406120de565b604051610b4d9190613b82565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613c27565b6120e4565b005b610b876121dc565b73ffffffffffffffffffffffffffffffffffffffff16610ba5611972565b73ffffffffffffffffffffffffffffffffffffffff1614610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290613e93565b60405180910390fd5b8160108190555080601181905550601154601054610c199190613ee2565b600f819055506063600f541115610c2f57600080fd5b5050565b606060008054610c4290613f67565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6e90613f67565b8015610cbb5780601f10610c9057610100808354040283529160200191610cbb565b820191906000526020600020905b815481529060010190602001808311610c9e57829003601f168201915b5050505050905090565b6000610cd9610cd26121dc565b84846121e4565b6001905092915050565b610ceb6121dc565b73ffffffffffffffffffffffffffffffffffffffff16610d09611972565b73ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5690613e93565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b60125481565b6000610dd78484846123af565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e226121dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e999061400b565b60405180910390fd5b610eb685610eae6121dc565b8584036121e4565b60019150509392505050565b610eca6121dc565b73ffffffffffffffffffffffffffffffffffffffff16610ee8611972565b73ffffffffffffffffffffffffffffffffffffffff1614610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590613e93565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc69061409d565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60105481565b600b5481565b60006110e161104c6121dc565b84846004600061105a6121dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110dc9190613ee2565b6121e4565b6001905092915050565b600860169054906101000a900460ff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012046306040516020016111d19594939291906140cc565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e6700000000000000000000000000000000000081525080519060200120600060405160200161125d9392919061411f565b6040516020818303038152906040528051906020012090506000828260405160200161128a9291906141ce565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516112c79493929190614205565b6020604051602081039080840390855afa1580156112e9573d6000803e3d6000fd5b5050506020604051035190506112fd611972565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190614296565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff02191690831515021790555050505050505050565b6113b16121dc565b73ffffffffffffffffffffffffffffffffffffffff166113cf611972565b73ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613e93565b60405180910390fd5b670de0b6b3a76400006103e8600161143b610dba565b61144591906142b6565b61144f919061433f565b611459919061433f565b81101561149b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611492906143e2565b60405180910390fd5b670de0b6b3a7640000816114af91906142b6565b60098190555050565b6114c06121dc565b73ffffffffffffffffffffffffffffffffffffffff166114de611972565b73ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90613e93565b60405180910390fd5b81600d8190555080600e81905550600e54600d546115529190613ee2565b600c819055506063600c54111561156857600080fd5b5050565b6115746121dc565b73ffffffffffffffffffffffffffffffffffffffff16611592611972565b73ffffffffffffffffffffffffffffffffffffffff16146115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613e93565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600860159054906101000a900460ff1681565b600a5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116b36121dc565b73ffffffffffffffffffffffffffffffffffffffff166116d1611972565b73ffffffffffffffffffffffffffffffffffffffff1614611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90613e93565b60405180910390fd5b611731600061313f565b565b600061173d6121dc565b73ffffffffffffffffffffffffffffffffffffffff1661175b611972565b73ffffffffffffffffffffffffffffffffffffffff16146117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a890613e93565b60405180910390fd5b620186a060016117bf610dba565b6117c991906142b6565b6117d3919061433f565b821015611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614474565b60405180910390fd5b6103e86005611822610dba565b61182c91906142b6565b611836919061433f565b821115611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90614506565b60405180910390fd5b81600a8190555060019050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006118b66121dc565b73ffffffffffffffffffffffffffffffffffffffff166118d4611972565b73ffffffffffffffffffffffffffffffffffffffff161461192a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192190613e93565b60405180910390fd5b6000600860166101000a81548160ff0219169083151502179055506001905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119a46121dc565b73ffffffffffffffffffffffffffffffffffffffff166119c2611972565b73ffffffffffffffffffffffffffffffffffffffff1614611a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0f90613e93565b60405180910390fd5b80600860156101000a81548160ff02191690831515021790555050565b606060018054611a4490613f67565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7090613f67565b8015611abd5780601f10611a9257610100808354040283529160200191611abd565b820191906000526020600020905b815481529060010190602001808311611aa057829003601f168201915b5050505050905090565b600e5481565b60135481565b60115481565b60008060046000611ae86121dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90614598565b60405180910390fd5b611bb9611bb06121dc565b858584036121e4565b600191505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b6000611c18611c116121dc565b84846123af565b6001905092915050565b611c2a6121dc565b73ffffffffffffffffffffffffffffffffffffffff16611c48611972565b73ffffffffffffffffffffffffffffffffffffffff1614611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9590613e93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0590614604565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860149054906101000a900460ff1681565b611d6d6121dc565b73ffffffffffffffffffffffffffffffffffffffff16611d8b611972565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613e93565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e906121dc565b73ffffffffffffffffffffffffffffffffffffffff16611eae611972565b73ffffffffffffffffffffffffffffffffffffffff1614611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90613e93565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff021916908315150217905550565b60095481565b611f4a6121dc565b73ffffffffffffffffffffffffffffffffffffffff16611f68611972565b73ffffffffffffffffffffffffffffffffffffffff1614611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590613e93565b60405180910390fd5b670de0b6b3a76400006103e86005611fd4610dba565b611fde91906142b6565b611fe8919061433f565b611ff2919061433f565b811015612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202b90614696565b60405180910390fd5b670de0b6b3a76400008161204891906142b6565b600b8190555050565b600c5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6120ec6121dc565b73ffffffffffffffffffffffffffffffffffffffff1661210a611972565b73ffffffffffffffffffffffffffffffffffffffff1614612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790614728565b60405180910390fd5b6121d98161313f565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906147ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb9061484c565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123a29190613b82565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561241f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612416906148de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561248f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248690614970565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561251c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612513906149dc565b60405180910390fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a090614a48565b60405180910390fd5b60008114156125c3576125be83836000613205565b61313a565b600860169054906101000a900460ff1615612abc576125e0611972565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561264e575061261e611972565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126875750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126c1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126d8575060148054906101000a900460ff16155b15612abb57600860149054906101000a900460ff166127d257601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127925750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c890614ab4565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128755750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561291c576009548111156128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690614b46565b60405180910390fd5b600b546128cb83611662565b826128d69190613ee2565b1115612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e90614bb2565b60405180910390fd5b612aba565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129bf5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a0e57600954811115612a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0090614c44565b60405180910390fd5b612ab9565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ab857600b54612a6b83611662565b82612a769190613ee2565b1115612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90614bb2565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612bb35750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612b719190613dbf565b602060405180830381865afa158015612b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb29190614c79565b5b15612cce576000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b54600954600a546040518763ffffffff1660e01b8152600401612c4796959493929190614ca6565b6020604051808303816000875af1158015612c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8a9190614c79565b905080612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc390614d53565b60405180910390fd5b505b6000612cd930611662565b90506000600a548210159050808015612cfe5750600860159054906101000a900460ff165b8015612d15575060148054906101000a900460ff16155b8015612d6b5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dc15750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e175750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e595760016014806101000a81548160ff021916908315150217905550612e3e613489565b60006014806101000a81548160ff0219169083151502179055505b600060148054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f0d5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f1757600090505b6000811561312a57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f7a57506000600f54115b1561301457612fa76064612f99600f548861367490919063ffffffff16565b61368a90919063ffffffff16565b9050600f5460115482612fba91906142b6565b612fc4919061433f565b60136000828254612fd59190613ee2565b92505081905550600f5460105482612fed91906142b6565b612ff7919061433f565b601260008282546130089190613ee2565b92505081905550613106565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561306f57506000600c54115b156131055761309c606461308e600c548861367490919063ffffffff16565b61368a90919063ffffffff16565b9050600c54600e54826130af91906142b6565b6130b9919061433f565b601360008282546130ca9190613ee2565b92505081905550600c54600d54826130e291906142b6565b6130ec919061433f565b601260008282546130fd9190613ee2565b925050819055505b5b600081111561311b5761311a873083613205565b5b80856131279190614d73565b94505b613135878787613205565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326c906148de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132dc90614970565b60405180910390fd5b6132f08383836136a0565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336e90614e19565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461340c9190613ee2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134709190613b82565b60405180910390a36134838484846136a5565b50505050565b600061349430611662565b905060006013546012546134a89190613ee2565b90506000808314806134ba5750600082145b156134c757505050613672565b6014600a546134d691906142b6565b8311156134ef576014600a546134ec91906142b6565b92505b60004790506134fd846136aa565b600061351282476138e790919063ffffffff16565b9050600061353d8561352f6013548561367490919063ffffffff16565b61368a90919063ffffffff16565b905060006012819055506000601381905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161359590614e6a565b60006040518083038185875af1925050503d80600081146135d2576040519150601f19603f3d011682016040523d82523d6000602084013e6135d7565b606091505b505080945050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161362390614e6a565b60006040518083038185875af1925050503d8060008114613660576040519150601f19603f3d011682016040523d82523d6000602084013e613665565b606091505b5050809450505050505050505b565b6000818361368291906142b6565b905092915050565b60008183613698919061433f565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156136c7576136c6614e7f565b5b6040519080825280602002602001820160405280156136f55781602001602082028036833780820191505090505b509050308160008151811061370d5761370c614eae565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d69190614ef2565b816001815181106137ea576137e9614eae565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061384f307f0000000000000000000000000000000000000000000000000000000000000000846121e4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138b1959493929190615018565b600060405180830381600087803b1580156138cb57600080fd5b505af11580156138df573d6000803e3d6000fd5b505050505050565b600081836138f59190614d73565b905092915050565b600080fd5b6000819050919050565b61391581613902565b811461392057600080fd5b50565b6000813590506139328161390c565b92915050565b6000806040838503121561394f5761394e6138fd565b5b600061395d85828601613923565b925050602061396e85828601613923565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139b2578082015181840152602081019050613997565b838111156139c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006139e382613978565b6139ed8185613983565b93506139fd818560208601613994565b613a06816139c7565b840191505092915050565b60006020820190508181036000830152613a2b81846139d8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a5e82613a33565b9050919050565b613a6e81613a53565b8114613a7957600080fd5b50565b600081359050613a8b81613a65565b92915050565b60008060408385031215613aa857613aa76138fd565b5b6000613ab685828601613a7c565b9250506020613ac785828601613923565b9150509250929050565b60008115159050919050565b613ae681613ad1565b82525050565b6000602082019050613b016000830184613add565b92915050565b613b1081613ad1565b8114613b1b57600080fd5b50565b600081359050613b2d81613b07565b92915050565b60008060408385031215613b4a57613b496138fd565b5b6000613b5885828601613a7c565b9250506020613b6985828601613b1e565b9150509250929050565b613b7c81613902565b82525050565b6000602082019050613b976000830184613b73565b92915050565b600080600060608486031215613bb657613bb56138fd565b5b6000613bc486828701613a7c565b9350506020613bd586828701613a7c565b9250506040613be686828701613923565b9150509250925092565b600060ff82169050919050565b613c0681613bf0565b82525050565b6000602082019050613c216000830184613bfd565b92915050565b600060208284031215613c3d57613c3c6138fd565b5b6000613c4b84828501613a7c565b91505092915050565b613c5d81613bf0565b8114613c6857600080fd5b50565b600081359050613c7a81613c54565b92915050565b6000819050919050565b613c9381613c80565b8114613c9e57600080fd5b50565b600081359050613cb081613c8a565b92915050565b600080600060608486031215613ccf57613cce6138fd565b5b6000613cdd86828701613c6b565b9350506020613cee86828701613ca1565b9250506040613cff86828701613ca1565b9150509250925092565b600060208284031215613d1f57613d1e6138fd565b5b6000613d2d84828501613923565b91505092915050565b6000819050919050565b6000613d5b613d56613d5184613a33565b613d36565b613a33565b9050919050565b6000613d6d82613d40565b9050919050565b6000613d7f82613d62565b9050919050565b613d8f81613d74565b82525050565b6000602082019050613daa6000830184613d86565b92915050565b613db981613a53565b82525050565b6000602082019050613dd46000830184613db0565b92915050565b600060208284031215613df057613def6138fd565b5b6000613dfe84828501613b1e565b91505092915050565b60008060408385031215613e1e57613e1d6138fd565b5b6000613e2c85828601613a7c565b9250506020613e3d85828601613a7c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e7d602083613983565b9150613e8882613e47565b602082019050919050565b60006020820190508181036000830152613eac81613e70565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eed82613902565b9150613ef883613902565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f2d57613f2c613eb3565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f7f57607f821691505b60208210811415613f9357613f92613f38565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ff5602883613983565b915061400082613f99565b604082019050919050565b6000602082019050818103600083015261402481613fe8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f616d6d5061697273000000000000000000000000000000000000000000000000602082015250565b6000614087602883613983565b91506140928261402b565b604082019050919050565b600060208201905081810360008301526140b68161407a565b9050919050565b6140c681613c80565b82525050565b600060a0820190506140e160008301886140bd565b6140ee60208301876140bd565b6140fb60408301866140bd565b6141086060830185613b73565b6141156080830184613db0565b9695505050505050565b600060608201905061413460008301866140bd565b61414160208301856140bd565b61414e6040830184613b73565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614197600283614156565b91506141a282614161565b600282019050919050565b6000819050919050565b6141c86141c382613c80565b6141ad565b82525050565b60006141d98261418a565b91506141e582856141b7565b6020820191506141f582846141b7565b6020820191508190509392505050565b600060808201905061421a60008301876140bd565b6142276020830186613bfd565b61423460408301856140bd565b61424160608301846140bd565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000614280601183613983565b915061428b8261424a565b602082019050919050565b600060208201905081810360008301526142af81614273565b9050919050565b60006142c182613902565b91506142cc83613902565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561430557614304613eb3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061434a82613902565b915061435583613902565b92508261436557614364614310565b5b828204905092915050565b7f43616e6e6f7420736574206d6178696d756d5472616e73616374696f6e416c6c60008201527f6f776564206c6f776572207468616e20302e3125000000000000000000000000602082015250565b60006143cc603483613983565b91506143d782614370565b604082019050919050565b600060208201905081810360008301526143fb816143bf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061445e603583613983565b915061446982614402565b604082019050919050565b6000602082019050818103600083015261448d81614451565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006144f0603483613983565b91506144fb82614494565b604082019050919050565b6000602082019050818103600083015261451f816144e3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614582602583613983565b915061458d82614526565b604082019050919050565b600060208201905081810360008301526145b181614575565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b60006145ee601483613983565b91506145f9826145b8565b602082019050919050565b6000602082019050818103600083015261461d816145e1565b9050919050565b7f43616e6e6f7420736574206d6178696d756d57616c6c6574416c6c6f7765642060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614680602f83613983565b915061468b82614624565b604082019050919050565b600060208201905081810360008301526146af81614673565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614712602683613983565b915061471d826146b6565b604082019050919050565b6000602082019050818103600083015261474181614705565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147a4602483613983565b91506147af82614748565b604082019050919050565b600060208201905081810360008301526147d381614797565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614836602283613983565b9150614841826147da565b604082019050919050565b6000602082019050818103600083015261486581614829565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006148c8602583613983565b91506148d38261486c565b604082019050919050565b600060208201905081810360008301526148f7816148bb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061495a602383613983565b9150614965826148fe565b604082019050919050565b600060208201905081810360008301526149898161494d565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b60006149c6601183613983565b91506149d182614990565b602082019050919050565b600060208201905081810360008301526149f5816149b9565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614a32600f83613983565b9150614a3d826149fc565b602082019050919050565b60006020820190508181036000830152614a6181614a25565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614a9e601683613983565b9150614aa982614a68565b602082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178696d756d5472616e73616374696f6e416c6c6f7765642e000000000000602082015250565b6000614b30603a83613983565b9150614b3b82614ad4565b604082019050919050565b60006020820190508181036000830152614b5f81614b23565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614b9c601383613983565b9150614ba782614b66565b602082019050919050565b60006020820190508181036000830152614bcb81614b8f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178696d756d5472616e73616374696f6e416c6c6f7765642e0000000000602082015250565b6000614c2e603b83613983565b9150614c3982614bd2565b604082019050919050565b60006020820190508181036000830152614c5d81614c21565b9050919050565b600081519050614c7381613b07565b92915050565b600060208284031215614c8f57614c8e6138fd565b5b6000614c9d84828501614c64565b91505092915050565b600060c082019050614cbb6000830189613db0565b614cc86020830188613db0565b614cd56040830187613db0565b614ce26060830186613b73565b614cef6080830185613b73565b614cfc60a0830184613b73565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b6000614d3d601483613983565b9150614d4882614d07565b602082019050919050565b60006020820190508181036000830152614d6c81614d30565b9050919050565b6000614d7e82613902565b9150614d8983613902565b925082821015614d9c57614d9b613eb3565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e03602683613983565b9150614e0e82614da7565b604082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b600081905092915050565b50565b6000614e54600083614e39565b9150614e5f82614e44565b600082019050919050565b6000614e7582614e47565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614eec81613a65565b92915050565b600060208284031215614f0857614f076138fd565b5b6000614f1684828501614edd565b91505092915050565b6000819050919050565b6000614f44614f3f614f3a84614f1f565b613d36565b613902565b9050919050565b614f5481614f29565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f8f81613a53565b82525050565b6000614fa18383614f86565b60208301905092915050565b6000602082019050919050565b6000614fc582614f5a565b614fcf8185614f65565b9350614fda83614f76565b8060005b8381101561500b578151614ff28882614f95565b9750614ffd83614fad565b925050600181019050614fde565b5085935050505092915050565b600060a08201905061502d6000830188613b73565b61503a6020830187614f4b565b818103604083015261504c8186614fba565b905061505b6060830185613db0565b6150686080830184613b73565b969550505050505056fea26469706673582212204c12f29a391a8dc2663f58f5ab191fff6bbd3ceb9b224473308d88dec64a16cf64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063735de9f711610175578063a9059cbb116100dc578063c9567bf911610095578063d85ba0631161006f578063d85ba06314610ac3578063dd62ed3e14610aee578063e4a1b95f14610b2b578063f2fde38b14610b56576102b9565b8063c9567bf914610a58578063cff16b2f14610a6f578063d57052a914610a9a576102b9565b8063a9059cbb14610948578063bae14e1d14610985578063bbc0c742146109ae578063c0246668146109d9578063c04a541414610a02578063c816841b14610a2d576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108105780639fccce321461083b578063a0d82dc514610866578063a457c2d714610891578063a72905a2146108ce578063a781dc351461090b576102b9565b8063735de9f714610710578063751039fc1461073b57806375f0a874146107665780638da5cb5b14610791578063924de9b7146107bc57806395d89b41146107e5576102b9565b80634a62bb65116102195780636a486a8e116101d25780636a486a8e146105fe5780636ddd1713146106295780636e1b6cda1461065457806370a082311461067f578063715018a6146106bc5780637328afae146106d3576102b9565b80634a62bb65146104f25780634fbee1931461051d5780636323d7cb1461055a578063655ec6391461058357806366ca9b83146105ac57806368092bd9146105d5576102b9565b806323b872dd1161026b57806323b872dd146103ce5780632d99d32e1461040b578063313ce5671461043457806335b5fb631461045f57806337da26ca1461048a57806339509351146104b5576102b9565b806302dbd8f8146102be57806306fdde03146102e7578063095ea7b3146103125780630e14852d1461034f57806318160ddd146103785780631f7ea8da146103a3576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190613938565b610b7f565b005b3480156102f357600080fd5b506102fc610c33565b6040516103099190613a11565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613a91565b610cc5565b6040516103469190613aec565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613b33565b610ce3565b005b34801561038457600080fd5b5061038d610dba565b60405161039a9190613b82565b60405180910390f35b3480156103af57600080fd5b506103b8610dc4565b6040516103c59190613b82565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613b9d565b610dca565b6040516104029190613aec565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190613b33565b610ec2565b005b34801561044057600080fd5b5061044961102a565b6040516104569190613c0c565b60405180910390f35b34801561046b57600080fd5b50610474611033565b6040516104819190613b82565b60405180910390f35b34801561049657600080fd5b5061049f611039565b6040516104ac9190613b82565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190613a91565b61103f565b6040516104e99190613aec565b60405180910390f35b3480156104fe57600080fd5b506105076110eb565b6040516105149190613aec565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190613c27565b6110fe565b6040516105519190613aec565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190613cb6565b61111e565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190613d09565b6113a9565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190613938565b6114b8565b005b3480156105e157600080fd5b506105fc60048036038101906105f79190613b33565b61156c565b005b34801561060a57600080fd5b50610613611643565b6040516106209190613b82565b60405180910390f35b34801561063557600080fd5b5061063e611649565b60405161064b9190613aec565b60405180910390f35b34801561066057600080fd5b5061066961165c565b6040516106769190613b82565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a19190613c27565b611662565b6040516106b39190613b82565b60405180910390f35b3480156106c857600080fd5b506106d16116ab565b005b3480156106df57600080fd5b506106fa60048036038101906106f59190613d09565b611733565b6040516107079190613aec565b60405180910390f35b34801561071c57600080fd5b50610725611888565b6040516107329190613d95565b60405180910390f35b34801561074757600080fd5b506107506118ac565b60405161075d9190613aec565b60405180910390f35b34801561077257600080fd5b5061077b61194c565b6040516107889190613dbf565b60405180910390f35b34801561079d57600080fd5b506107a6611972565b6040516107b39190613dbf565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613dda565b61199c565b005b3480156107f157600080fd5b506107fa611a35565b6040516108079190613a11565b60405180910390f35b34801561081c57600080fd5b50610825611ac7565b6040516108329190613b82565b60405180910390f35b34801561084757600080fd5b50610850611acd565b60405161085d9190613b82565b60405180910390f35b34801561087257600080fd5b5061087b611ad3565b6040516108889190613b82565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190613a91565b611ad9565b6040516108c59190613aec565b60405180910390f35b3480156108da57600080fd5b506108f560048036038101906108f09190613c27565b611bc4565b6040516109029190613aec565b60405180910390f35b34801561091757600080fd5b50610932600480360381019061092d9190613c27565b611be4565b60405161093f9190613aec565b60405180910390f35b34801561095457600080fd5b5061096f600480360381019061096a9190613a91565b611c04565b60405161097c9190613aec565b60405180910390f35b34801561099157600080fd5b506109ac60048036038101906109a79190613c27565b611c22565b005b3480156109ba57600080fd5b506109c3611d52565b6040516109d09190613aec565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb9190613b33565b611d65565b005b348015610a0e57600080fd5b50610a17611e3c565b604051610a249190613dbf565b60405180910390f35b348015610a3957600080fd5b50610a42611e62565b604051610a4f9190613dbf565b60405180910390f35b348015610a6457600080fd5b50610a6d611e88565b005b348015610a7b57600080fd5b50610a84611f3c565b604051610a919190613b82565b60405180910390f35b348015610aa657600080fd5b50610ac16004803603810190610abc9190613d09565b611f42565b005b348015610acf57600080fd5b50610ad8612051565b604051610ae59190613b82565b60405180910390f35b348015610afa57600080fd5b50610b156004803603810190610b109190613e07565b612057565b604051610b229190613b82565b60405180910390f35b348015610b3757600080fd5b50610b406120de565b604051610b4d9190613b82565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613c27565b6120e4565b005b610b876121dc565b73ffffffffffffffffffffffffffffffffffffffff16610ba5611972565b73ffffffffffffffffffffffffffffffffffffffff1614610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290613e93565b60405180910390fd5b8160108190555080601181905550601154601054610c199190613ee2565b600f819055506063600f541115610c2f57600080fd5b5050565b606060008054610c4290613f67565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6e90613f67565b8015610cbb5780601f10610c9057610100808354040283529160200191610cbb565b820191906000526020600020905b815481529060010190602001808311610c9e57829003601f168201915b5050505050905090565b6000610cd9610cd26121dc565b84846121e4565b6001905092915050565b610ceb6121dc565b73ffffffffffffffffffffffffffffffffffffffff16610d09611972565b73ffffffffffffffffffffffffffffffffffffffff1614610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5690613e93565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600254905090565b60125481565b6000610dd78484846123af565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e226121dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e999061400b565b60405180910390fd5b610eb685610eae6121dc565b8584036121e4565b60019150509392505050565b610eca6121dc565b73ffffffffffffffffffffffffffffffffffffffff16610ee8611972565b73ffffffffffffffffffffffffffffffffffffffff1614610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590613e93565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc69061409d565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60105481565b600b5481565b60006110e161104c6121dc565b84846004600061105a6121dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110dc9190613ee2565b6121e4565b6001905092915050565b600860169054906101000a900460ff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012046306040516020016111d19594939291906140cc565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e6700000000000000000000000000000000000081525080519060200120600060405160200161125d9392919061411f565b6040516020818303038152906040528051906020012090506000828260405160200161128a9291906141ce565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516112c79493929190614205565b6020604051602081039080840390855afa1580156112e9573d6000803e3d6000fd5b5050506020604051035190506112fd611972565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190614296565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff02191690831515021790555050505050505050565b6113b16121dc565b73ffffffffffffffffffffffffffffffffffffffff166113cf611972565b73ffffffffffffffffffffffffffffffffffffffff1614611425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141c90613e93565b60405180910390fd5b670de0b6b3a76400006103e8600161143b610dba565b61144591906142b6565b61144f919061433f565b611459919061433f565b81101561149b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611492906143e2565b60405180910390fd5b670de0b6b3a7640000816114af91906142b6565b60098190555050565b6114c06121dc565b73ffffffffffffffffffffffffffffffffffffffff166114de611972565b73ffffffffffffffffffffffffffffffffffffffff1614611534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152b90613e93565b60405180910390fd5b81600d8190555080600e81905550600e54600d546115529190613ee2565b600c819055506063600c54111561156857600080fd5b5050565b6115746121dc565b73ffffffffffffffffffffffffffffffffffffffff16611592611972565b73ffffffffffffffffffffffffffffffffffffffff16146115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613e93565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600860159054906101000a900460ff1681565b600a5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116b36121dc565b73ffffffffffffffffffffffffffffffffffffffff166116d1611972565b73ffffffffffffffffffffffffffffffffffffffff1614611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90613e93565b60405180910390fd5b611731600061313f565b565b600061173d6121dc565b73ffffffffffffffffffffffffffffffffffffffff1661175b611972565b73ffffffffffffffffffffffffffffffffffffffff16146117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a890613e93565b60405180910390fd5b620186a060016117bf610dba565b6117c991906142b6565b6117d3919061433f565b821015611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c90614474565b60405180910390fd5b6103e86005611822610dba565b61182c91906142b6565b611836919061433f565b821115611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90614506565b60405180910390fd5b81600a8190555060019050919050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60006118b66121dc565b73ffffffffffffffffffffffffffffffffffffffff166118d4611972565b73ffffffffffffffffffffffffffffffffffffffff161461192a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192190613e93565b60405180910390fd5b6000600860166101000a81548160ff0219169083151502179055506001905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119a46121dc565b73ffffffffffffffffffffffffffffffffffffffff166119c2611972565b73ffffffffffffffffffffffffffffffffffffffff1614611a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0f90613e93565b60405180910390fd5b80600860156101000a81548160ff02191690831515021790555050565b606060018054611a4490613f67565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7090613f67565b8015611abd5780601f10611a9257610100808354040283529160200191611abd565b820191906000526020600020905b815481529060010190602001808311611aa057829003601f168201915b5050505050905090565b600e5481565b60135481565b60115481565b60008060046000611ae86121dc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90614598565b60405180910390fd5b611bb9611bb06121dc565b858584036121e4565b600191505092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b6000611c18611c116121dc565b84846123af565b6001905092915050565b611c2a6121dc565b73ffffffffffffffffffffffffffffffffffffffff16611c48611972565b73ffffffffffffffffffffffffffffffffffffffff1614611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9590613e93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0590614604565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860149054906101000a900460ff1681565b611d6d6121dc565b73ffffffffffffffffffffffffffffffffffffffff16611d8b611972565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613e93565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e906121dc565b73ffffffffffffffffffffffffffffffffffffffff16611eae611972565b73ffffffffffffffffffffffffffffffffffffffff1614611f04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efb90613e93565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff021916908315150217905550565b60095481565b611f4a6121dc565b73ffffffffffffffffffffffffffffffffffffffff16611f68611972565b73ffffffffffffffffffffffffffffffffffffffff1614611fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb590613e93565b60405180910390fd5b670de0b6b3a76400006103e86005611fd4610dba565b611fde91906142b6565b611fe8919061433f565b611ff2919061433f565b811015612034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202b90614696565b60405180910390fd5b670de0b6b3a76400008161204891906142b6565b600b8190555050565b600c5481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d5481565b6120ec6121dc565b73ffffffffffffffffffffffffffffffffffffffff1661210a611972565b73ffffffffffffffffffffffffffffffffffffffff1614612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e93565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790614728565b60405180910390fd5b6121d98161313f565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906147ba565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb9061484c565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123a29190613b82565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561241f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612416906148de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561248f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248690614970565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561251c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612513906149dc565b60405180910390fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a090614a48565b60405180910390fd5b60008114156125c3576125be83836000613205565b61313a565b600860169054906101000a900460ff1615612abc576125e0611972565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561264e575061261e611972565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126875750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126c1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126d8575060148054906101000a900460ff16155b15612abb57600860149054906101000a900460ff166127d257601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127925750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c890614ab4565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128755750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561291c576009548111156128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690614b46565b60405180910390fd5b600b546128cb83611662565b826128d69190613ee2565b1115612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e90614bb2565b60405180910390fd5b612aba565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129bf5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a0e57600954811115612a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0090614c44565b60405180910390fd5b612ab9565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ab857600b54612a6b83611662565b82612a769190613ee2565b1115612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90614bb2565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612bb35750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612b719190613dbf565b602060405180830381865afa158015612b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb29190614c79565b5b15612cce576000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b54600954600a546040518763ffffffff1660e01b8152600401612c4796959493929190614ca6565b6020604051808303816000875af1158015612c66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8a9190614c79565b905080612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc390614d53565b60405180910390fd5b505b6000612cd930611662565b90506000600a548210159050808015612cfe5750600860159054906101000a900460ff165b8015612d15575060148054906101000a900460ff16155b8015612d6b5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dc15750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e175750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e595760016014806101000a81548160ff021916908315150217905550612e3e613489565b60006014806101000a81548160ff0219169083151502179055505b600060148054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f0d5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f1757600090505b6000811561312a57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f7a57506000600f54115b1561301457612fa76064612f99600f548861367490919063ffffffff16565b61368a90919063ffffffff16565b9050600f5460115482612fba91906142b6565b612fc4919061433f565b60136000828254612fd59190613ee2565b92505081905550600f5460105482612fed91906142b6565b612ff7919061433f565b601260008282546130089190613ee2565b92505081905550613106565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561306f57506000600c54115b156131055761309c606461308e600c548861367490919063ffffffff16565b61368a90919063ffffffff16565b9050600c54600e54826130af91906142b6565b6130b9919061433f565b601360008282546130ca9190613ee2565b92505081905550600c54600d54826130e291906142b6565b6130ec919061433f565b601260008282546130fd9190613ee2565b925050819055505b5b600081111561311b5761311a873083613205565b5b80856131279190614d73565b94505b613135878787613205565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326c906148de565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132dc90614970565b60405180910390fd5b6132f08383836136a0565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336e90614e19565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461340c9190613ee2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134709190613b82565b60405180910390a36134838484846136a5565b50505050565b600061349430611662565b905060006013546012546134a89190613ee2565b90506000808314806134ba5750600082145b156134c757505050613672565b6014600a546134d691906142b6565b8311156134ef576014600a546134ec91906142b6565b92505b60004790506134fd846136aa565b600061351282476138e790919063ffffffff16565b9050600061353d8561352f6013548561367490919063ffffffff16565b61368a90919063ffffffff16565b905060006012819055506000601381905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161359590614e6a565b60006040518083038185875af1925050503d80600081146135d2576040519150601f19603f3d011682016040523d82523d6000602084013e6135d7565b606091505b505080945050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161362390614e6a565b60006040518083038185875af1925050503d8060008114613660576040519150601f19603f3d011682016040523d82523d6000602084013e613665565b606091505b5050809450505050505050505b565b6000818361368291906142b6565b905092915050565b60008183613698919061433f565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156136c7576136c6614e7f565b5b6040519080825280602002602001820160405280156136f55781602001602082028036833780820191505090505b509050308160008151811061370d5761370c614eae565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d69190614ef2565b816001815181106137ea576137e9614eae565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061384f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846121e4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016138b1959493929190615018565b600060405180830381600087803b1580156138cb57600080fd5b505af11580156138df573d6000803e3d6000fd5b505050505050565b600081836138f59190614d73565b905092915050565b600080fd5b6000819050919050565b61391581613902565b811461392057600080fd5b50565b6000813590506139328161390c565b92915050565b6000806040838503121561394f5761394e6138fd565b5b600061395d85828601613923565b925050602061396e85828601613923565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139b2578082015181840152602081019050613997565b838111156139c1576000848401525b50505050565b6000601f19601f8301169050919050565b60006139e382613978565b6139ed8185613983565b93506139fd818560208601613994565b613a06816139c7565b840191505092915050565b60006020820190508181036000830152613a2b81846139d8565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a5e82613a33565b9050919050565b613a6e81613a53565b8114613a7957600080fd5b50565b600081359050613a8b81613a65565b92915050565b60008060408385031215613aa857613aa76138fd565b5b6000613ab685828601613a7c565b9250506020613ac785828601613923565b9150509250929050565b60008115159050919050565b613ae681613ad1565b82525050565b6000602082019050613b016000830184613add565b92915050565b613b1081613ad1565b8114613b1b57600080fd5b50565b600081359050613b2d81613b07565b92915050565b60008060408385031215613b4a57613b496138fd565b5b6000613b5885828601613a7c565b9250506020613b6985828601613b1e565b9150509250929050565b613b7c81613902565b82525050565b6000602082019050613b976000830184613b73565b92915050565b600080600060608486031215613bb657613bb56138fd565b5b6000613bc486828701613a7c565b9350506020613bd586828701613a7c565b9250506040613be686828701613923565b9150509250925092565b600060ff82169050919050565b613c0681613bf0565b82525050565b6000602082019050613c216000830184613bfd565b92915050565b600060208284031215613c3d57613c3c6138fd565b5b6000613c4b84828501613a7c565b91505092915050565b613c5d81613bf0565b8114613c6857600080fd5b50565b600081359050613c7a81613c54565b92915050565b6000819050919050565b613c9381613c80565b8114613c9e57600080fd5b50565b600081359050613cb081613c8a565b92915050565b600080600060608486031215613ccf57613cce6138fd565b5b6000613cdd86828701613c6b565b9350506020613cee86828701613ca1565b9250506040613cff86828701613ca1565b9150509250925092565b600060208284031215613d1f57613d1e6138fd565b5b6000613d2d84828501613923565b91505092915050565b6000819050919050565b6000613d5b613d56613d5184613a33565b613d36565b613a33565b9050919050565b6000613d6d82613d40565b9050919050565b6000613d7f82613d62565b9050919050565b613d8f81613d74565b82525050565b6000602082019050613daa6000830184613d86565b92915050565b613db981613a53565b82525050565b6000602082019050613dd46000830184613db0565b92915050565b600060208284031215613df057613def6138fd565b5b6000613dfe84828501613b1e565b91505092915050565b60008060408385031215613e1e57613e1d6138fd565b5b6000613e2c85828601613a7c565b9250506020613e3d85828601613a7c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e7d602083613983565b9150613e8882613e47565b602082019050919050565b60006020820190508181036000830152613eac81613e70565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eed82613902565b9150613ef883613902565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f2d57613f2c613eb3565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f7f57607f821691505b60208210811415613f9357613f92613f38565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ff5602883613983565b915061400082613f99565b604082019050919050565b6000602082019050818103600083015261402481613fe8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f616d6d5061697273000000000000000000000000000000000000000000000000602082015250565b6000614087602883613983565b91506140928261402b565b604082019050919050565b600060208201905081810360008301526140b68161407a565b9050919050565b6140c681613c80565b82525050565b600060a0820190506140e160008301886140bd565b6140ee60208301876140bd565b6140fb60408301866140bd565b6141086060830185613b73565b6141156080830184613db0565b9695505050505050565b600060608201905061413460008301866140bd565b61414160208301856140bd565b61414e6040830184613b73565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000614197600283614156565b91506141a282614161565b600282019050919050565b6000819050919050565b6141c86141c382613c80565b6141ad565b82525050565b60006141d98261418a565b91506141e582856141b7565b6020820191506141f582846141b7565b6020820191508190509392505050565b600060808201905061421a60008301876140bd565b6142276020830186613bfd565b61423460408301856140bd565b61424160608301846140bd565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000614280601183613983565b915061428b8261424a565b602082019050919050565b600060208201905081810360008301526142af81614273565b9050919050565b60006142c182613902565b91506142cc83613902565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561430557614304613eb3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061434a82613902565b915061435583613902565b92508261436557614364614310565b5b828204905092915050565b7f43616e6e6f7420736574206d6178696d756d5472616e73616374696f6e416c6c60008201527f6f776564206c6f776572207468616e20302e3125000000000000000000000000602082015250565b60006143cc603483613983565b91506143d782614370565b604082019050919050565b600060208201905081810360008301526143fb816143bf565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061445e603583613983565b915061446982614402565b604082019050919050565b6000602082019050818103600083015261448d81614451565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006144f0603483613983565b91506144fb82614494565b604082019050919050565b6000602082019050818103600083015261451f816144e3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614582602583613983565b915061458d82614526565b604082019050919050565b600060208201905081810360008301526145b181614575565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b60006145ee601483613983565b91506145f9826145b8565b602082019050919050565b6000602082019050818103600083015261461d816145e1565b9050919050565b7f43616e6e6f7420736574206d6178696d756d57616c6c6574416c6c6f7765642060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614680602f83613983565b915061468b82614624565b604082019050919050565b600060208201905081810360008301526146af81614673565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614712602683613983565b915061471d826146b6565b604082019050919050565b6000602082019050818103600083015261474181614705565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147a4602483613983565b91506147af82614748565b604082019050919050565b600060208201905081810360008301526147d381614797565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614836602283613983565b9150614841826147da565b604082019050919050565b6000602082019050818103600083015261486581614829565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006148c8602583613983565b91506148d38261486c565b604082019050919050565b600060208201905081810360008301526148f7816148bb565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061495a602383613983565b9150614965826148fe565b604082019050919050565b600060208201905081810360008301526149898161494d565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b60006149c6601183613983565b91506149d182614990565b602082019050919050565b600060208201905081810360008301526149f5816149b9565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614a32600f83613983565b9150614a3d826149fc565b602082019050919050565b60006020820190508181036000830152614a6181614a25565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614a9e601683613983565b9150614aa982614a68565b602082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178696d756d5472616e73616374696f6e416c6c6f7765642e000000000000602082015250565b6000614b30603a83613983565b9150614b3b82614ad4565b604082019050919050565b60006020820190508181036000830152614b5f81614b23565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614b9c601383613983565b9150614ba782614b66565b602082019050919050565b60006020820190508181036000830152614bcb81614b8f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178696d756d5472616e73616374696f6e416c6c6f7765642e0000000000602082015250565b6000614c2e603b83613983565b9150614c3982614bd2565b604082019050919050565b60006020820190508181036000830152614c5d81614c21565b9050919050565b600081519050614c7381613b07565b92915050565b600060208284031215614c8f57614c8e6138fd565b5b6000614c9d84828501614c64565b91505092915050565b600060c082019050614cbb6000830189613db0565b614cc86020830188613db0565b614cd56040830187613db0565b614ce26060830186613b73565b614cef6080830185613b73565b614cfc60a0830184613b73565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b6000614d3d601483613983565b9150614d4882614d07565b602082019050919050565b60006020820190508181036000830152614d6c81614d30565b9050919050565b6000614d7e82613902565b9150614d8983613902565b925082821015614d9c57614d9b613eb3565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614e03602683613983565b9150614e0e82614da7565b604082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b600081905092915050565b50565b6000614e54600083614e39565b9150614e5f82614e44565b600082019050919050565b6000614e7582614e47565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614eec81613a65565b92915050565b600060208284031215614f0857614f076138fd565b5b6000614f1684828501614edd565b91505092915050565b6000819050919050565b6000614f44614f3f614f3a84614f1f565b613d36565b613902565b9050919050565b614f5481614f29565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614f8f81613a53565b82525050565b6000614fa18383614f86565b60208301905092915050565b6000602082019050919050565b6000614fc582614f5a565b614fcf8185614f65565b9350614fda83614f76565b8060005b8381101561500b578151614ff28882614f95565b9750614ffd83614fad565b925050600181019050614fde565b5085935050505092915050565b600060a08201905061502d6000830188613b73565b61503a6020830187614f4b565b818103604083015261504c8186614fba565b905061505b6060830185613db0565b6150686080830184613b73565b969550505050505056fea26469706673582212204c12f29a391a8dc2663f58f5ab191fff6bbd3ceb9b224473308d88dec64a16cf64736f6c634300080a0033

Deployed Bytecode Sourcemap

15196:11182:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20795:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10562:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11293:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19080:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10883:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15901:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11653:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21259:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10782:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15832:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15652:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12153:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15524:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16089:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18012:1060;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20269:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20538:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21456:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15797:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15486:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15613:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10999:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;815:103;;;;;;;;;;;;;:::i;:::-;;19872:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15277:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19381:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15368:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;592:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19510:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10670:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15764:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15938:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15867:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12376:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16221:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16146:66;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11470:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21063:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15446:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19246:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15405:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15333:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17894:110;;;;;;;;;;;;;:::i;:::-;;15566:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19618:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15696:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11134:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15730:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;926:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20795:256;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20906:12:::1;20890:13;:28;;;;20942:9;20929:10;:22;;;;20994:10;;20978:13;;:26;;;;:::i;:::-;20962:13;:42;;;;21040:2;21023:13;;:19;;21015:28;;;::::0;::::1;;20795:256:::0;;:::o;10562:100::-;10616:13;10649:5;10642:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10562:100;:::o;11293:169::-;11376:4;11393:39;11402:12;:10;:12::i;:::-;11416:7;11425:6;11393:8;:39::i;:::-;11450:4;11443:11;;11293:169;;;;:::o;19080:158::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19225:5:::1;19182:34;:40;19217:4;19182:40;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;19080:158:::0;;:::o;10883:108::-;10944:7;10971:12;;10964:19;;10883:108;:::o;15901:30::-;;;;:::o;11653:492::-;11793:4;11810:36;11820:6;11828:9;11839:6;11810:9;:36::i;:::-;11859:24;11886:11;:19;11898:6;11886:19;;;;;;;;;;;;;;;:33;11906:12;:10;:12::i;:::-;11886:33;;;;;;;;;;;;;;;;11859:60;;11958:6;11938:16;:26;;11930:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12045:57;12054:6;12062:12;:10;:12::i;:::-;12095:6;12076:16;:25;12045:8;:57::i;:::-;12133:4;12126:11;;;11653:492;;;;;:::o;21259:189::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21351:11:::1;;;;;;;;;;;21343:19;;:4;:19;;;;21335:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21435:5;21418:8;:14;21427:4;21418:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;21259:189:::0;;:::o;10782:93::-;10840:5;10865:2;10858:9;;10782:93;:::o;15832:28::-;;;;:::o;15652:35::-;;;;:::o;12153:215::-;12241:4;12258:80;12267:12;:10;:12::i;:::-;12281:7;12327:10;12290:11;:25;12302:12;:10;:12::i;:::-;12290:25;;;;;;;;;;;;;;;:34;12316:7;12290:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12258:8;:80::i;:::-;12356:4;12349:11;;12153:215;;;;:::o;15524:33::-;;;;;;;;;;;;;:::o;16089:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;18012:1060::-;18094:18;18168:95;18292:22;;;;;;;;;;;;;;;;;18282:33;;;;;;18344:10;;;;;;;;;;;;;;;;;18334:21;;;;;;18374:13;18414:4;18139:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18115:330;;;;;;18094:351;;18458:18;18532:49;18610:23;;;;;;;;;;;;;;;;;18600:34;;;;;;18661:1;18503:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18479:210;;;;;;18458:231;;18702:14;18807:10;18836;18743:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18719:169;;;;;;18702:186;;18901:14;18918:26;18928:6;18936:1;18939;18942;18918:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18901:43;;18973:7;:5;:7::i;:::-;18963:17;;:6;:17;;;18955:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;19031:4;19015:13;;:20;;;;;;;;;;;;;;;;;;19060:4;19046:11;;:18;;;;;;;;;;;;;;;;;;18083:989;;;;18012:1060;;;:::o;20269:261::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20405:4:::1;20397;20392:1;20376:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20375:26;;;;:::i;:::-;20374:35;;;;:::i;:::-;20364:6;:45;;20356:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20515:6;20505;:17;;;;:::i;:::-;20477:25;:45;;;;20269:261:::0;:::o;20538:249::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20647:12:::1;20632;:27;;;;20682:9;20670;:21;;;;20732:9;;20717:12;;:24;;;;:::i;:::-;20702:12;:39;;;;20776:2;20760:12;;:18;;20752:27;;;::::0;::::1;;20538:249:::0;;:::o;21456:113::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21555:6:::1;21535:11;:17;21547:4;21535:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;21456:113:::0;;:::o;15797:28::-;;;;:::o;15486:31::-;;;;;;;;;;;;;:::o;15613:32::-;;;;:::o;10999:127::-;11073:7;11100:9;:18;11110:7;11100:18;;;;;;;;;;;;;;;;11093:25;;10999:127;;;:::o;815:103::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;880:30:::1;907:1;880:18;:30::i;:::-;815:103::o:0;19872:389::-;19952:4;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20012:6:::1;20007:1;19991:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19990:28;;;;:::i;:::-;19977:9;:41;;19969:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;20130:4;20125:1;20109:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20108:26;;;;:::i;:::-;20095:9;:39;;20087:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;20222:9;20202:17;:29;;;;20249:4;20242:11;;19872:389:::0;;;:::o;15277:49::-;;;:::o;19381:121::-;19433:4;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19467:5:::1;19450:14;;:22;;;;;;;;;;;;;;;;;;19490:4;19483:11;;19381:121:::0;:::o;15368:30::-;;;;;;;;;;;;;:::o;592:87::-;638:7;665:6;;;;;;;;;;;658:13;;592:87;:::o;19510:100::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19595:7:::1;19581:11;;:21;;;;;;;;;;;;;;;;;;19510:100:::0;:::o;10670:104::-;10726:13;10759:7;10752:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10670:104;:::o;15764:24::-;;;;:::o;15938:27::-;;;;:::o;15867:25::-;;;;:::o;12376:413::-;12469:4;12486:24;12513:11;:25;12525:12;:10;:12::i;:::-;12513:25;;;;;;;;;;;;;;;:34;12539:7;12513:34;;;;;;;;;;;;;;;;12486:61;;12586:15;12566:16;:35;;12558:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;12679:67;12688:12;:10;:12::i;:::-;12702:7;12730:15;12711:16;:34;12679:8;:67::i;:::-;12777:4;12770:11;;;12376:413;;;;:::o;16221:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;16146:66::-;;;;;;;;;;;;;;;;;;;;;;:::o;11470:175::-;11556:4;11573:42;11583:12;:10;:12::i;:::-;11597:9;11608:6;11573:9;:42::i;:::-;11633:4;11626:11;;11470:175;;;;:::o;21063:188::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21175:3:::1;21149:30;;:14;:30;;;;21141:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21229:14;21215:11;;:28;;;;;;;;;;;;;;;;;;21063:188:::0;:::o;15446:33::-;;;;;;;;;;;;;:::o;19246:127::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19360:5:::1;19330:18;:27;19349:7;19330:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19246:127:::0;;:::o;15405:32::-;;;;;;;;;;;;;:::o;15333:26::-;;;;;;;;;;;;;:::o;17894:110::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17963:4:::1;17947:13;;:20;;;;;;;;;;;;;;;;;;17992:4;17978:11;;:18;;;;;;;;;;;;;;;;;;17894:110::o:0;15566:40::-;;;;:::o;19618:246::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19749:4:::1;19741;19736:1;19720:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19719:26;;;;:::i;:::-;19718:35;;;;:::i;:::-;19708:6;:45;;19700:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;19849:6;19839;:17;;;;:::i;:::-;19816:20;:40;;;;19618:246:::0;:::o;15696:27::-;;;;:::o;11134:151::-;11223:7;11250:11;:18;11262:5;11250:18;;;;;;;;;;;;;;;:27;11269:7;11250:27;;;;;;;;;;;;;;;;11243:34;;11134:151;;;;:::o;15730:27::-;;;;:::o;926:201::-;738:12;:10;:12::i;:::-;727:23;;:7;:5;:7::i;:::-;:23;;;719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1035:1:::1;1015:22;;:8;:22;;;;1007:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1091:28;1110:8;1091:18;:28::i;:::-;926:201:::0;:::o;138:98::-;191:7;218:10;211:17;;138:98;:::o;13803:380::-;13956:1;13939:19;;:5;:19;;;;13931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14037:1;14018:21;;:7;:21;;;;14010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14121:6;14091:11;:18;14103:5;14091:18;;;;;;;;;;;;;;;:27;14110:7;14091:27;;;;;;;;;;;;;;;:36;;;;14159:7;14143:32;;14152:5;14143:32;;;14168:6;14143:32;;;;;;:::i;:::-;;;;;;;;13803:380;;;:::o;22942:3318::-;23056:1;23040:18;;:4;:18;;;;23032:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23133:1;23119:16;;:2;:16;;;;23111:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23195:11;:17;23207:4;23195:17;;;;;;;;;;;;;;;;;;;;;;;;;23194:18;23186:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23254:11;:15;23266:2;23254:15;;;;;;;;;;;;;;;;;;;;;;;;;23253:16;23245:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23316:1;23306:6;:11;23302:93;;;23334:28;23350:4;23356:2;23360:1;23334:15;:28::i;:::-;23377:7;;23302:93;23411:14;;;;;;;;;;;23407:1207;;;23454:7;:5;:7::i;:::-;23446:15;;:4;:15;;;;:49;;;;;23488:7;:5;:7::i;:::-;23482:13;;:2;:13;;;;23446:49;:86;;;;;23530:1;23516:16;;:2;:16;;;;23446:86;:128;;;;;23567:6;23553:21;;:2;:21;;;;23446:128;:158;;;;;23596:8;;;;;;;;;;23595:9;23446:158;23442:1161;;;23630:13;;;;;;;;;;;23625:148;;23676:18;:24;23695:4;23676:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;23704:18;:22;23723:2;23704:22;;;;;;;;;;;;;;;;;;;;;;;;;23676:50;23668:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23625:148;23825:8;:14;23834:4;23825:14;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;;23844:34;:38;23879:2;23844:38;;;;;;;;;;;;;;;;;;;;;;;;;23843:39;23825:57;23821:767;;;23925:25;;23915:6;:35;;23907:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;24070:20;;24053:13;24063:2;24053:9;:13::i;:::-;24044:6;:22;;;;:::i;:::-;:46;;24036:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;23821:767;;;24190:8;:12;24199:2;24190:12;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;;24207:34;:40;24242:4;24207:40;;;;;;;;;;;;;;;;;;;;;;;;;24206:41;24190:57;24186:402;;;24290:25;;24280:6;:35;;24272:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;24186:402;;;24427:34;:38;24462:2;24427:38;;;;;;;;;;;;;;;;;;;;;;;;;24422:166;;24524:20;;24507:13;24517:2;24507:9;:13::i;:::-;24498:6;:22;;;;:::i;:::-;:46;;24490:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24422:166;24186:402;23821:767;23442:1161;23407:1207;24653:1;24630:25;;:11;;;;;;;;;;;:25;;;;:79;;;;;24672:11;;;;;;;;;;;24659:35;;;24703:4;24659:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24630:79;24626:309;;;24726:10;24752:11;;;;;;;;;;;24739:31;;;24771:4;24777:2;24789:11;;;;;;;;;;;24803:20;;24825:25;;24852:17;;24739:131;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24726:144;;24893:5;24885:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;24711:224;24626:309;24947:23;24973:24;24991:4;24973:9;:24::i;:::-;24947:50;;25008:12;25042:17;;25023:15;:36;;25008:51;;25074:7;:35;;;;;25098:11;;;;;;;;;;;25074:35;:61;;;;;25127:8;;;;;;;;;;25126:9;25074:61;:93;;;;;25153:8;:14;25162:4;25153:14;;;;;;;;;;;;;;;;;;;;;;;;;25152:15;25074:93;:135;;;;;25185:18;:24;25204:4;25185:24;;;;;;;;;;;;;;;;;;;;;;;;;25184:25;25074:135;:175;;;;;25227:18;:22;25246:2;25227:22;;;;;;;;;;;;;;;;;;;;;;;;;25226:23;25074:175;25070:281;;;25279:4;25268:8;;:15;;;;;;;;;;;;;;;;;;25298:10;:8;:10::i;:::-;25334:5;25323:8;;:16;;;;;;;;;;;;;;;;;;25070:281;25363:12;25379:8;;;;;;;;;;25378:9;25363:24;;25402:18;:24;25421:4;25402:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;25430:18;:22;25449:2;25430:22;;;;;;;;;;;;;;;;;;;;;;;;;25402:50;25398:84;;;25477:5;25467:15;;25398:84;25495:11;25525:7;25521:688;;;25553:8;:12;25562:2;25553:12;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;25585:1;25569:13;;:17;25553:33;25549:531;;;25613:34;25643:3;25613:25;25624:13;;25613:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25607:40;;25703:13;;25689:10;;25683:3;:16;;;;:::i;:::-;25682:34;;;;:::i;:::-;25666:12;;:50;;;;;;;:::i;:::-;;;;;;;;25778:13;;25761;;25755:3;:19;;;;:::i;:::-;25754:37;;;;:::i;:::-;25735:15;;:56;;;;;;;:::i;:::-;;;;;;;;25549:531;;;25830:8;:14;25839:4;25830:14;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;25863:1;25848:12;;:16;25830:34;25826:254;;;25891:33;25920:3;25891:24;25902:12;;25891:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;25885:39;;25979:12;;25966:9;;25960:3;:15;;;;:::i;:::-;25959:32;;;;:::i;:::-;25943:12;;:48;;;;;;;:::i;:::-;;;;;;;;26052:12;;26036;;26030:3;:18;;;;:::i;:::-;26029:35;;;;:::i;:::-;26010:15;;:54;;;;;;;:::i;:::-;;;;;;;;25826:254;25549:531;26106:1;26100:3;:7;26096:71;;;26126:41;26142:4;26156;26163:3;26126:15;:41::i;:::-;26096:71;26194:3;26184:13;;;;;:::i;:::-;;;25521:688;26219:33;26235:4;26241:2;26245:6;26219:15;:33::i;:::-;23021:3239;;;;22942:3318;;;;:::o;1135:191::-;1209:16;1228:6;;;;;;;;;;;1209:25;;1254:8;1245:6;;:17;;;;;;;;;;;;;;;;;;1309:8;1278:40;;1299:8;1278:40;;;;;;;;;;;;1198:128;1135:191;:::o;14191:733::-;14349:1;14331:20;;:6;:20;;;;14323:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14433:1;14412:23;;:9;:23;;;;14404:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14488:47;14509:6;14517:9;14528:6;14488:20;:47::i;:::-;14548:21;14572:9;:17;14582:6;14572:17;;;;;;;;;;;;;;;;14548:41;;14625:6;14608:13;:23;;14600:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14746:6;14730:13;:22;14710:9;:17;14720:6;14710:17;;;;;;;;;;;;;;;:42;;;;14798:6;14774:9;:20;14784:9;14774:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14839:9;14822:35;;14831:6;14822:35;;;14850:6;14822:35;;;;;;:::i;:::-;;;;;;;;14870:46;14890:6;14898:9;14909:6;14870:19;:46::i;:::-;14312:612;14191:733;;;:::o;21577:880::-;21616:23;21642:24;21660:4;21642:9;:24::i;:::-;21616:50;;21677:25;21723:12;;21705:15;;:30;;;;:::i;:::-;21677:58;;21746:12;21794:1;21775:15;:20;:46;;;;21820:1;21799:17;:22;21775:46;21771:72;;;21836:7;;;;;21771:72;21897:2;21877:17;;:22;;;;:::i;:::-;21859:15;:40;21855:99;;;21952:2;21932:17;;:22;;;;:::i;:::-;21914:40;;21855:99;21967:25;21995:21;21967:49;;22027:33;22044:15;22027:16;:33::i;:::-;22073:18;22094:44;22120:17;22094:21;:25;;:44;;;;:::i;:::-;22073:65;;22149:17;22169:51;22202:17;22169:28;22184:12;;22169:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;22149:71;;22251:1;22233:15;:19;;;;22278:1;22263:12;:16;;;;22314:17;;;;;;;;;;;22306:31;;22345:9;22306:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22292:67;;;;;22392:15;;;;;;;;;;;22384:29;;22422:21;22384:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22370:79;;;;;21605:852;;;;;;21577:880;:::o;2685:98::-;2743:7;2774:1;2770;:5;;;;:::i;:::-;2763:12;;2685:98;;;;:::o;2791:::-;2849:7;2880:1;2876;:5;;;;:::i;:::-;2869:12;;2791:98;;;;:::o;14932:125::-;;;;:::o;15065:124::-;;;;:::o;22465:469::-;22531:21;22569:1;22555:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22531:40;;22600:4;22582;22587:1;22582:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;22626:13;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22616:4;22621:1;22616:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;22659:60;22676:4;22691:13;22707:11;22659:8;:60::i;:::-;22732:13;:64;;;22811:11;22837:1;22853:4;22880;22900:15;22732:194;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22520:414;22465:469;:::o;2579:98::-;2637:7;2668:1;2664;:5;;;;:::i;:::-;2657:12;;2579:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:116::-;4044:21;4059:5;4044:21;:::i;:::-;4037:5;4034:32;4024:60;;4080:1;4077;4070:12;4024:60;3974:116;:::o;4096:133::-;4139:5;4177:6;4164:20;4155:29;;4193:30;4217:5;4193:30;:::i;:::-;4096:133;;;;:::o;4235:468::-;4300:6;4308;4357:2;4345:9;4336:7;4332:23;4328:32;4325:119;;;4363:79;;:::i;:::-;4325:119;4483:1;4508:53;4553:7;4544:6;4533:9;4529:22;4508:53;:::i;:::-;4498:63;;4454:117;4610:2;4636:50;4678:7;4669:6;4658:9;4654:22;4636:50;:::i;:::-;4626:60;;4581:115;4235:468;;;;;:::o;4709:118::-;4796:24;4814:5;4796:24;:::i;:::-;4791:3;4784:37;4709:118;;:::o;4833:222::-;4926:4;4964:2;4953:9;4949:18;4941:26;;4977:71;5045:1;5034:9;5030:17;5021:6;4977:71;:::i;:::-;4833:222;;;;:::o;5061:619::-;5138:6;5146;5154;5203:2;5191:9;5182:7;5178:23;5174:32;5171:119;;;5209:79;;:::i;:::-;5171:119;5329:1;5354:53;5399:7;5390:6;5379:9;5375:22;5354:53;:::i;:::-;5344:63;;5300:117;5456:2;5482:53;5527:7;5518:6;5507:9;5503:22;5482:53;:::i;:::-;5472:63;;5427:118;5584:2;5610:53;5655:7;5646:6;5635:9;5631:22;5610:53;:::i;:::-;5600:63;;5555:118;5061:619;;;;;:::o;5686:86::-;5721:7;5761:4;5754:5;5750:16;5739:27;;5686:86;;;:::o;5778:112::-;5861:22;5877:5;5861:22;:::i;:::-;5856:3;5849:35;5778:112;;:::o;5896:214::-;5985:4;6023:2;6012:9;6008:18;6000:26;;6036:67;6100:1;6089:9;6085:17;6076:6;6036:67;:::i;:::-;5896:214;;;;:::o;6116:329::-;6175:6;6224:2;6212:9;6203:7;6199:23;6195:32;6192:119;;;6230:79;;:::i;:::-;6192:119;6350:1;6375:53;6420:7;6411:6;6400:9;6396:22;6375:53;:::i;:::-;6365:63;;6321:117;6116:329;;;;:::o;6451:118::-;6522:22;6538:5;6522:22;:::i;:::-;6515:5;6512:33;6502:61;;6559:1;6556;6549:12;6502:61;6451:118;:::o;6575:135::-;6619:5;6657:6;6644:20;6635:29;;6673:31;6698:5;6673:31;:::i;:::-;6575:135;;;;:::o;6716:77::-;6753:7;6782:5;6771:16;;6716:77;;;:::o;6799:122::-;6872:24;6890:5;6872:24;:::i;:::-;6865:5;6862:35;6852:63;;6911:1;6908;6901:12;6852:63;6799:122;:::o;6927:139::-;6973:5;7011:6;6998:20;6989:29;;7027:33;7054:5;7027:33;:::i;:::-;6927:139;;;;:::o;7072:615::-;7147:6;7155;7163;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:51;7406:7;7397:6;7386:9;7382:22;7363:51;:::i;:::-;7353:61;;7309:115;7463:2;7489:53;7534:7;7525:6;7514:9;7510:22;7489:53;:::i;:::-;7479:63;;7434:118;7591:2;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7562:118;7072:615;;;;;:::o;7693:329::-;7752:6;7801:2;7789:9;7780:7;7776:23;7772:32;7769:119;;;7807:79;;:::i;:::-;7769:119;7927:1;7952:53;7997:7;7988:6;7977:9;7973:22;7952:53;:::i;:::-;7942:63;;7898:117;7693:329;;;;:::o;8028:60::-;8056:3;8077:5;8070:12;;8028:60;;;:::o;8094:142::-;8144:9;8177:53;8195:34;8204:24;8222:5;8204:24;:::i;:::-;8195:34;:::i;:::-;8177:53;:::i;:::-;8164:66;;8094:142;;;:::o;8242:126::-;8292:9;8325:37;8356:5;8325:37;:::i;:::-;8312:50;;8242:126;;;:::o;8374:152::-;8450:9;8483:37;8514:5;8483:37;:::i;:::-;8470:50;;8374:152;;;:::o;8532:183::-;8645:63;8702:5;8645:63;:::i;:::-;8640:3;8633:76;8532:183;;:::o;8721:274::-;8840:4;8878:2;8867:9;8863:18;8855:26;;8891:97;8985:1;8974:9;8970:17;8961:6;8891:97;:::i;:::-;8721:274;;;;:::o;9001:118::-;9088:24;9106:5;9088:24;:::i;:::-;9083:3;9076:37;9001:118;;:::o;9125:222::-;9218:4;9256:2;9245:9;9241:18;9233:26;;9269:71;9337:1;9326:9;9322:17;9313:6;9269:71;:::i;:::-;9125:222;;;;:::o;9353:323::-;9409:6;9458:2;9446:9;9437:7;9433:23;9429:32;9426:119;;;9464:79;;:::i;:::-;9426:119;9584:1;9609:50;9651:7;9642:6;9631:9;9627:22;9609:50;:::i;:::-;9599:60;;9555:114;9353:323;;;;:::o;9682:474::-;9750:6;9758;9807:2;9795:9;9786:7;9782:23;9778:32;9775:119;;;9813:79;;:::i;:::-;9775:119;9933:1;9958:53;10003:7;9994:6;9983:9;9979:22;9958:53;:::i;:::-;9948:63;;9904:117;10060:2;10086:53;10131:7;10122:6;10111:9;10107:22;10086:53;:::i;:::-;10076:63;;10031:118;9682:474;;;;;:::o;10162:182::-;10302:34;10298:1;10290:6;10286:14;10279:58;10162:182;:::o;10350:366::-;10492:3;10513:67;10577:2;10572:3;10513:67;:::i;:::-;10506:74;;10589:93;10678:3;10589:93;:::i;:::-;10707:2;10702:3;10698:12;10691:19;;10350:366;;;:::o;10722:419::-;10888:4;10926:2;10915:9;10911:18;10903:26;;10975:9;10969:4;10965:20;10961:1;10950:9;10946:17;10939:47;11003:131;11129:4;11003:131;:::i;:::-;10995:139;;10722:419;;;:::o;11147:180::-;11195:77;11192:1;11185:88;11292:4;11289:1;11282:15;11316:4;11313:1;11306:15;11333:305;11373:3;11392:20;11410:1;11392:20;:::i;:::-;11387:25;;11426:20;11444:1;11426:20;:::i;:::-;11421:25;;11580:1;11512:66;11508:74;11505:1;11502:81;11499:107;;;11586:18;;:::i;:::-;11499:107;11630:1;11627;11623:9;11616:16;;11333:305;;;;:::o;11644:180::-;11692:77;11689:1;11682:88;11789:4;11786:1;11779:15;11813:4;11810:1;11803:15;11830:320;11874:6;11911:1;11905:4;11901:12;11891:22;;11958:1;11952:4;11948:12;11979:18;11969:81;;12035:4;12027:6;12023:17;12013:27;;11969:81;12097:2;12089:6;12086:14;12066:18;12063:38;12060:84;;;12116:18;;:::i;:::-;12060:84;11881:269;11830:320;;;:::o;12156:227::-;12296:34;12292:1;12284:6;12280:14;12273:58;12365:10;12360:2;12352:6;12348:15;12341:35;12156:227;:::o;12389:366::-;12531:3;12552:67;12616:2;12611:3;12552:67;:::i;:::-;12545:74;;12628:93;12717:3;12628:93;:::i;:::-;12746:2;12741:3;12737:12;12730:19;;12389:366;;;:::o;12761:419::-;12927:4;12965:2;12954:9;12950:18;12942:26;;13014:9;13008:4;13004:20;13000:1;12989:9;12985:17;12978:47;13042:131;13168:4;13042:131;:::i;:::-;13034:139;;12761:419;;;:::o;13186:227::-;13326:34;13322:1;13314:6;13310:14;13303:58;13395:10;13390:2;13382:6;13378:15;13371:35;13186:227;:::o;13419:366::-;13561:3;13582:67;13646:2;13641:3;13582:67;:::i;:::-;13575:74;;13658:93;13747:3;13658:93;:::i;:::-;13776:2;13771:3;13767:12;13760:19;;13419:366;;;:::o;13791:419::-;13957:4;13995:2;13984:9;13980:18;13972:26;;14044:9;14038:4;14034:20;14030:1;14019:9;14015:17;14008:47;14072:131;14198:4;14072:131;:::i;:::-;14064:139;;13791:419;;;:::o;14216:118::-;14303:24;14321:5;14303:24;:::i;:::-;14298:3;14291:37;14216:118;;:::o;14340:664::-;14545:4;14583:3;14572:9;14568:19;14560:27;;14597:71;14665:1;14654:9;14650:17;14641:6;14597:71;:::i;:::-;14678:72;14746:2;14735:9;14731:18;14722:6;14678:72;:::i;:::-;14760;14828:2;14817:9;14813:18;14804:6;14760:72;:::i;:::-;14842;14910:2;14899:9;14895:18;14886:6;14842:72;:::i;:::-;14924:73;14992:3;14981:9;14977:19;14968:6;14924:73;:::i;:::-;14340:664;;;;;;;;:::o;15010:442::-;15159:4;15197:2;15186:9;15182:18;15174:26;;15210:71;15278:1;15267:9;15263:17;15254:6;15210:71;:::i;:::-;15291:72;15359:2;15348:9;15344:18;15335:6;15291:72;:::i;:::-;15373;15441:2;15430:9;15426:18;15417:6;15373:72;:::i;:::-;15010:442;;;;;;:::o;15458:148::-;15560:11;15597:3;15582:18;;15458:148;;;;:::o;15612:214::-;15752:66;15748:1;15740:6;15736:14;15729:90;15612:214;:::o;15832:400::-;15992:3;16013:84;16095:1;16090:3;16013:84;:::i;:::-;16006:91;;16106:93;16195:3;16106:93;:::i;:::-;16224:1;16219:3;16215:11;16208:18;;15832:400;;;:::o;16238:79::-;16277:7;16306:5;16295:16;;16238:79;;;:::o;16323:157::-;16428:45;16448:24;16466:5;16448:24;:::i;:::-;16428:45;:::i;:::-;16423:3;16416:58;16323:157;;:::o;16486:663::-;16727:3;16749:148;16893:3;16749:148;:::i;:::-;16742:155;;16907:75;16978:3;16969:6;16907:75;:::i;:::-;17007:2;17002:3;16998:12;16991:19;;17020:75;17091:3;17082:6;17020:75;:::i;:::-;17120:2;17115:3;17111:12;17104:19;;17140:3;17133:10;;16486:663;;;;;:::o;17155:545::-;17328:4;17366:3;17355:9;17351:19;17343:27;;17380:71;17448:1;17437:9;17433:17;17424:6;17380:71;:::i;:::-;17461:68;17525:2;17514:9;17510:18;17501:6;17461:68;:::i;:::-;17539:72;17607:2;17596:9;17592:18;17583:6;17539:72;:::i;:::-;17621;17689:2;17678:9;17674:18;17665:6;17621:72;:::i;:::-;17155:545;;;;;;;:::o;17706:167::-;17846:19;17842:1;17834:6;17830:14;17823:43;17706:167;:::o;17879:366::-;18021:3;18042:67;18106:2;18101:3;18042:67;:::i;:::-;18035:74;;18118:93;18207:3;18118:93;:::i;:::-;18236:2;18231:3;18227:12;18220:19;;17879:366;;;:::o;18251:419::-;18417:4;18455:2;18444:9;18440:18;18432:26;;18504:9;18498:4;18494:20;18490:1;18479:9;18475:17;18468:47;18532:131;18658:4;18532:131;:::i;:::-;18524:139;;18251:419;;;:::o;18676:348::-;18716:7;18739:20;18757:1;18739:20;:::i;:::-;18734:25;;18773:20;18791:1;18773:20;:::i;:::-;18768:25;;18961:1;18893:66;18889:74;18886:1;18883:81;18878:1;18871:9;18864:17;18860:105;18857:131;;;18968:18;;:::i;:::-;18857:131;19016:1;19013;19009:9;18998:20;;18676:348;;;;:::o;19030:180::-;19078:77;19075:1;19068:88;19175:4;19172:1;19165:15;19199:4;19196:1;19189:15;19216:185;19256:1;19273:20;19291:1;19273:20;:::i;:::-;19268:25;;19307:20;19325:1;19307:20;:::i;:::-;19302:25;;19346:1;19336:35;;19351:18;;:::i;:::-;19336:35;19393:1;19390;19386:9;19381:14;;19216:185;;;;:::o;19407:239::-;19547:34;19543:1;19535:6;19531:14;19524:58;19616:22;19611:2;19603:6;19599:15;19592:47;19407:239;:::o;19652:366::-;19794:3;19815:67;19879:2;19874:3;19815:67;:::i;:::-;19808:74;;19891:93;19980:3;19891:93;:::i;:::-;20009:2;20004:3;20000:12;19993:19;;19652:366;;;:::o;20024:419::-;20190:4;20228:2;20217:9;20213:18;20205:26;;20277:9;20271:4;20267:20;20263:1;20252:9;20248:17;20241:47;20305:131;20431:4;20305:131;:::i;:::-;20297:139;;20024:419;;;:::o;20449:240::-;20589:34;20585:1;20577:6;20573:14;20566:58;20658:23;20653:2;20645:6;20641:15;20634:48;20449:240;:::o;20695:366::-;20837:3;20858:67;20922:2;20917:3;20858:67;:::i;:::-;20851:74;;20934:93;21023:3;20934:93;:::i;:::-;21052:2;21047:3;21043:12;21036:19;;20695:366;;;:::o;21067:419::-;21233:4;21271:2;21260:9;21256:18;21248:26;;21320:9;21314:4;21310:20;21306:1;21295:9;21291:17;21284:47;21348:131;21474:4;21348:131;:::i;:::-;21340:139;;21067:419;;;:::o;21492:239::-;21632:34;21628:1;21620:6;21616:14;21609:58;21701:22;21696:2;21688:6;21684:15;21677:47;21492:239;:::o;21737:366::-;21879:3;21900:67;21964:2;21959:3;21900:67;:::i;:::-;21893:74;;21976:93;22065:3;21976:93;:::i;:::-;22094:2;22089:3;22085:12;22078:19;;21737:366;;;:::o;22109:419::-;22275:4;22313:2;22302:9;22298:18;22290:26;;22362:9;22356:4;22352:20;22348:1;22337:9;22333:17;22326:47;22390:131;22516:4;22390:131;:::i;:::-;22382:139;;22109:419;;;:::o;22534:224::-;22674:34;22670:1;22662:6;22658:14;22651:58;22743:7;22738:2;22730:6;22726:15;22719:32;22534:224;:::o;22764:366::-;22906:3;22927:67;22991:2;22986:3;22927:67;:::i;:::-;22920:74;;23003:93;23092:3;23003:93;:::i;:::-;23121:2;23116:3;23112:12;23105:19;;22764:366;;;:::o;23136:419::-;23302:4;23340:2;23329:9;23325:18;23317:26;;23389:9;23383:4;23379:20;23375:1;23364:9;23360:17;23353:47;23417:131;23543:4;23417:131;:::i;:::-;23409:139;;23136:419;;;:::o;23561:170::-;23701:22;23697:1;23689:6;23685:14;23678:46;23561:170;:::o;23737:366::-;23879:3;23900:67;23964:2;23959:3;23900:67;:::i;:::-;23893:74;;23976:93;24065:3;23976:93;:::i;:::-;24094:2;24089:3;24085:12;24078:19;;23737:366;;;:::o;24109:419::-;24275:4;24313:2;24302:9;24298:18;24290:26;;24362:9;24356:4;24352:20;24348:1;24337:9;24333:17;24326:47;24390:131;24516:4;24390:131;:::i;:::-;24382:139;;24109:419;;;:::o;24534:234::-;24674:34;24670:1;24662:6;24658:14;24651:58;24743:17;24738:2;24730:6;24726:15;24719:42;24534:234;:::o;24774:366::-;24916:3;24937:67;25001:2;24996:3;24937:67;:::i;:::-;24930:74;;25013:93;25102:3;25013:93;:::i;:::-;25131:2;25126:3;25122:12;25115:19;;24774:366;;;:::o;25146:419::-;25312:4;25350:2;25339:9;25335:18;25327:26;;25399:9;25393:4;25389:20;25385:1;25374:9;25370:17;25363:47;25427:131;25553:4;25427:131;:::i;:::-;25419:139;;25146:419;;;:::o;25571:225::-;25711:34;25707:1;25699:6;25695:14;25688:58;25780:8;25775:2;25767:6;25763:15;25756:33;25571:225;:::o;25802:366::-;25944:3;25965:67;26029:2;26024:3;25965:67;:::i;:::-;25958:74;;26041:93;26130:3;26041:93;:::i;:::-;26159:2;26154:3;26150:12;26143:19;;25802:366;;;:::o;26174:419::-;26340:4;26378:2;26367:9;26363:18;26355:26;;26427:9;26421:4;26417:20;26413:1;26402:9;26398:17;26391:47;26455:131;26581:4;26455:131;:::i;:::-;26447:139;;26174:419;;;:::o;26599:223::-;26739:34;26735:1;26727:6;26723:14;26716:58;26808:6;26803:2;26795:6;26791:15;26784:31;26599:223;:::o;26828:366::-;26970:3;26991:67;27055:2;27050:3;26991:67;:::i;:::-;26984:74;;27067:93;27156:3;27067:93;:::i;:::-;27185:2;27180:3;27176:12;27169:19;;26828:366;;;:::o;27200:419::-;27366:4;27404:2;27393:9;27389:18;27381:26;;27453:9;27447:4;27443:20;27439:1;27428:9;27424:17;27417:47;27481:131;27607:4;27481:131;:::i;:::-;27473:139;;27200:419;;;:::o;27625:221::-;27765:34;27761:1;27753:6;27749:14;27742:58;27834:4;27829:2;27821:6;27817:15;27810:29;27625:221;:::o;27852:366::-;27994:3;28015:67;28079:2;28074:3;28015:67;:::i;:::-;28008:74;;28091:93;28180:3;28091:93;:::i;:::-;28209:2;28204:3;28200:12;28193:19;;27852:366;;;:::o;28224:419::-;28390:4;28428:2;28417:9;28413:18;28405:26;;28477:9;28471:4;28467:20;28463:1;28452:9;28448:17;28441:47;28505:131;28631:4;28505:131;:::i;:::-;28497:139;;28224:419;;;:::o;28649:224::-;28789:34;28785:1;28777:6;28773:14;28766:58;28858:7;28853:2;28845:6;28841:15;28834:32;28649:224;:::o;28879:366::-;29021:3;29042:67;29106:2;29101:3;29042:67;:::i;:::-;29035:74;;29118:93;29207:3;29118:93;:::i;:::-;29236:2;29231:3;29227:12;29220:19;;28879:366;;;:::o;29251:419::-;29417:4;29455:2;29444:9;29440:18;29432:26;;29504:9;29498:4;29494:20;29490:1;29479:9;29475:17;29468:47;29532:131;29658:4;29532:131;:::i;:::-;29524:139;;29251:419;;;:::o;29676:222::-;29816:34;29812:1;29804:6;29800:14;29793:58;29885:5;29880:2;29872:6;29868:15;29861:30;29676:222;:::o;29904:366::-;30046:3;30067:67;30131:2;30126:3;30067:67;:::i;:::-;30060:74;;30143:93;30232:3;30143:93;:::i;:::-;30261:2;30256:3;30252:12;30245:19;;29904:366;;;:::o;30276:419::-;30442:4;30480:2;30469:9;30465:18;30457:26;;30529:9;30523:4;30519:20;30515:1;30504:9;30500:17;30493:47;30557:131;30683:4;30557:131;:::i;:::-;30549:139;;30276:419;;;:::o;30701:167::-;30841:19;30837:1;30829:6;30825:14;30818:43;30701:167;:::o;30874:366::-;31016:3;31037:67;31101:2;31096:3;31037:67;:::i;:::-;31030:74;;31113:93;31202:3;31113:93;:::i;:::-;31231:2;31226:3;31222:12;31215:19;;30874:366;;;:::o;31246:419::-;31412:4;31450:2;31439:9;31435:18;31427:26;;31499:9;31493:4;31489:20;31485:1;31474:9;31470:17;31463:47;31527:131;31653:4;31527:131;:::i;:::-;31519:139;;31246:419;;;:::o;31671:165::-;31811:17;31807:1;31799:6;31795:14;31788:41;31671:165;:::o;31842:366::-;31984:3;32005:67;32069:2;32064:3;32005:67;:::i;:::-;31998:74;;32081:93;32170:3;32081:93;:::i;:::-;32199:2;32194:3;32190:12;32183:19;;31842:366;;;:::o;32214:419::-;32380:4;32418:2;32407:9;32403:18;32395:26;;32467:9;32461:4;32457:20;32453:1;32442:9;32438:17;32431:47;32495:131;32621:4;32495:131;:::i;:::-;32487:139;;32214:419;;;:::o;32639:172::-;32779:24;32775:1;32767:6;32763:14;32756:48;32639:172;:::o;32817:366::-;32959:3;32980:67;33044:2;33039:3;32980:67;:::i;:::-;32973:74;;33056:93;33145:3;33056:93;:::i;:::-;33174:2;33169:3;33165:12;33158:19;;32817:366;;;:::o;33189:419::-;33355:4;33393:2;33382:9;33378:18;33370:26;;33442:9;33436:4;33432:20;33428:1;33417:9;33413:17;33406:47;33470:131;33596:4;33470:131;:::i;:::-;33462:139;;33189:419;;;:::o;33614:245::-;33754:34;33750:1;33742:6;33738:14;33731:58;33823:28;33818:2;33810:6;33806:15;33799:53;33614:245;:::o;33865:366::-;34007:3;34028:67;34092:2;34087:3;34028:67;:::i;:::-;34021:74;;34104:93;34193:3;34104:93;:::i;:::-;34222:2;34217:3;34213:12;34206:19;;33865:366;;;:::o;34237:419::-;34403:4;34441:2;34430:9;34426:18;34418:26;;34490:9;34484:4;34480:20;34476:1;34465:9;34461:17;34454:47;34518:131;34644:4;34518:131;:::i;:::-;34510:139;;34237:419;;;:::o;34662:169::-;34802:21;34798:1;34790:6;34786:14;34779:45;34662:169;:::o;34837:366::-;34979:3;35000:67;35064:2;35059:3;35000:67;:::i;:::-;34993:74;;35076:93;35165:3;35076:93;:::i;:::-;35194:2;35189:3;35185:12;35178:19;;34837:366;;;:::o;35209:419::-;35375:4;35413:2;35402:9;35398:18;35390:26;;35462:9;35456:4;35452:20;35448:1;35437:9;35433:17;35426:47;35490:131;35616:4;35490:131;:::i;:::-;35482:139;;35209:419;;;:::o;35634:246::-;35774:34;35770:1;35762:6;35758:14;35751:58;35843:29;35838:2;35830:6;35826:15;35819:54;35634:246;:::o;35886:366::-;36028:3;36049:67;36113:2;36108:3;36049:67;:::i;:::-;36042:74;;36125:93;36214:3;36125:93;:::i;:::-;36243:2;36238:3;36234:12;36227:19;;35886:366;;;:::o;36258:419::-;36424:4;36462:2;36451:9;36447:18;36439:26;;36511:9;36505:4;36501:20;36497:1;36486:9;36482:17;36475:47;36539:131;36665:4;36539:131;:::i;:::-;36531:139;;36258:419;;;:::o;36683:137::-;36737:5;36768:6;36762:13;36753:22;;36784:30;36808:5;36784:30;:::i;:::-;36683:137;;;;:::o;36826:345::-;36893:6;36942:2;36930:9;36921:7;36917:23;36913:32;36910:119;;;36948:79;;:::i;:::-;36910:119;37068:1;37093:61;37146:7;37137:6;37126:9;37122:22;37093:61;:::i;:::-;37083:71;;37039:125;36826:345;;;;:::o;37177:775::-;37410:4;37448:3;37437:9;37433:19;37425:27;;37462:71;37530:1;37519:9;37515:17;37506:6;37462:71;:::i;:::-;37543:72;37611:2;37600:9;37596:18;37587:6;37543:72;:::i;:::-;37625;37693:2;37682:9;37678:18;37669:6;37625:72;:::i;:::-;37707;37775:2;37764:9;37760:18;37751:6;37707:72;:::i;:::-;37789:73;37857:3;37846:9;37842:19;37833:6;37789:73;:::i;:::-;37872;37940:3;37929:9;37925:19;37916:6;37872:73;:::i;:::-;37177:775;;;;;;;;;:::o;37958:170::-;38098:22;38094:1;38086:6;38082:14;38075:46;37958:170;:::o;38134:366::-;38276:3;38297:67;38361:2;38356:3;38297:67;:::i;:::-;38290:74;;38373:93;38462:3;38373:93;:::i;:::-;38491:2;38486:3;38482:12;38475:19;;38134:366;;;:::o;38506:419::-;38672:4;38710:2;38699:9;38695:18;38687:26;;38759:9;38753:4;38749:20;38745:1;38734:9;38730:17;38723:47;38787:131;38913:4;38787:131;:::i;:::-;38779:139;;38506:419;;;:::o;38931:191::-;38971:4;38991:20;39009:1;38991:20;:::i;:::-;38986:25;;39025:20;39043:1;39025:20;:::i;:::-;39020:25;;39064:1;39061;39058:8;39055:34;;;39069:18;;:::i;:::-;39055:34;39114:1;39111;39107:9;39099:17;;38931:191;;;;:::o;39128:225::-;39268:34;39264:1;39256:6;39252:14;39245:58;39337:8;39332:2;39324:6;39320:15;39313:33;39128:225;:::o;39359:366::-;39501:3;39522:67;39586:2;39581:3;39522:67;:::i;:::-;39515:74;;39598:93;39687:3;39598:93;:::i;:::-;39716:2;39711:3;39707:12;39700:19;;39359:366;;;:::o;39731:419::-;39897:4;39935:2;39924:9;39920:18;39912:26;;39984:9;39978:4;39974:20;39970:1;39959:9;39955:17;39948:47;40012:131;40138:4;40012:131;:::i;:::-;40004:139;;39731:419;;;:::o;40156:147::-;40257:11;40294:3;40279:18;;40156:147;;;;:::o;40309:114::-;;:::o;40429:398::-;40588:3;40609:83;40690:1;40685:3;40609:83;:::i;:::-;40602:90;;40701:93;40790:3;40701:93;:::i;:::-;40819:1;40814:3;40810:11;40803:18;;40429:398;;;:::o;40833:379::-;41017:3;41039:147;41182:3;41039:147;:::i;:::-;41032:154;;41203:3;41196:10;;40833:379;;;:::o;41218:180::-;41266:77;41263:1;41256:88;41363:4;41360:1;41353:15;41387:4;41384:1;41377:15;41404:180;41452:77;41449:1;41442:88;41549:4;41546:1;41539:15;41573:4;41570:1;41563:15;41590:143;41647:5;41678:6;41672:13;41663:22;;41694:33;41721:5;41694:33;:::i;:::-;41590:143;;;;:::o;41739:351::-;41809:6;41858:2;41846:9;41837:7;41833:23;41829:32;41826:119;;;41864:79;;:::i;:::-;41826:119;41984:1;42009:64;42065:7;42056:6;42045:9;42041:22;42009:64;:::i;:::-;41999:74;;41955:128;41739:351;;;;:::o;42096:85::-;42141:7;42170:5;42159:16;;42096:85;;;:::o;42187:158::-;42245:9;42278:61;42296:42;42305:32;42331:5;42305:32;:::i;:::-;42296:42;:::i;:::-;42278:61;:::i;:::-;42265:74;;42187:158;;;:::o;42351:147::-;42446:45;42485:5;42446:45;:::i;:::-;42441:3;42434:58;42351:147;;:::o;42504:114::-;42571:6;42605:5;42599:12;42589:22;;42504:114;;;:::o;42624:184::-;42723:11;42757:6;42752:3;42745:19;42797:4;42792:3;42788:14;42773:29;;42624:184;;;;:::o;42814:132::-;42881:4;42904:3;42896:11;;42934:4;42929:3;42925:14;42917:22;;42814:132;;;:::o;42952:108::-;43029:24;43047:5;43029:24;:::i;:::-;43024:3;43017:37;42952:108;;:::o;43066:179::-;43135:10;43156:46;43198:3;43190:6;43156:46;:::i;:::-;43234:4;43229:3;43225:14;43211:28;;43066:179;;;;:::o;43251:113::-;43321:4;43353;43348:3;43344:14;43336:22;;43251:113;;;:::o;43400:732::-;43519:3;43548:54;43596:5;43548:54;:::i;:::-;43618:86;43697:6;43692:3;43618:86;:::i;:::-;43611:93;;43728:56;43778:5;43728:56;:::i;:::-;43807:7;43838:1;43823:284;43848:6;43845:1;43842:13;43823:284;;;43924:6;43918:13;43951:63;44010:3;43995:13;43951:63;:::i;:::-;43944:70;;44037:60;44090:6;44037:60;:::i;:::-;44027:70;;43883:224;43870:1;43867;43863:9;43858:14;;43823:284;;;43827:14;44123:3;44116:10;;43524:608;;;43400:732;;;;:::o;44138:831::-;44401:4;44439:3;44428:9;44424:19;44416:27;;44453:71;44521:1;44510:9;44506:17;44497:6;44453:71;:::i;:::-;44534:80;44610:2;44599:9;44595:18;44586:6;44534:80;:::i;:::-;44661:9;44655:4;44651:20;44646:2;44635:9;44631:18;44624:48;44689:108;44792:4;44783:6;44689:108;:::i;:::-;44681:116;;44807:72;44875:2;44864:9;44860:18;44851:6;44807:72;:::i;:::-;44889:73;44957:3;44946:9;44942:19;44933:6;44889:73;:::i;:::-;44138:831;;;;;;;;:::o

Swarm Source

ipfs://4c12f29a391a8dc2663f58f5ab191fff6bbd3ceb9b224473308d88dec64a16cf

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Run and fine-tune AI models without code. Utilize GPU/TPU/LPU computational power on a decentralized marketplace.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.