ETH Price: $3,241.85 (-4.63%)

Contract

0x199E2CFaf8B4f2CC5423971EF3749d1c89Cf815C
 

More Info

Private Name Tags

ContractCreator

TokenTracker

Opal (OPAL) ($0.1098)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer237459022025-11-07 7:28:234 hrs ago1762500503IN
Opal: OPAL Token
0 ETH0.000126512.45413006
Approve237452802025-11-07 5:22:596 hrs ago1762492979IN
Opal: OPAL Token
0 ETH0.000014110.29843906
Approve237449662025-11-07 4:19:357 hrs ago1762489175IN
Opal: OPAL Token
0 ETH0.000033220.70643709
Approve237448572025-11-07 3:57:357 hrs ago1762487855IN
Opal: OPAL Token
0 ETH0.000015210.32169417
Approve237448042025-11-07 3:46:597 hrs ago1762487219IN
Opal: OPAL Token
0 ETH0.000018240.38591992
Approve237445222025-11-07 2:50:238 hrs ago1762483823IN
Opal: OPAL Token
0 ETH0.000015820.33459739
Approve237435362025-11-06 23:31:3512 hrs ago1762471895IN
Opal: OPAL Token
0 ETH0.000014090.29806127
Approve237414772025-11-06 16:37:4719 hrs ago1762447067IN
Opal: OPAL Token
0 ETH0.000198334.19768649
Approve237414022025-11-06 16:22:4719 hrs ago1762446167IN
Opal: OPAL Token
0 ETH0.00015035.02347783
Approve237411412025-11-06 15:29:4720 hrs ago1762442987IN
Opal: OPAL Token
0 ETH0.000289386.15455461
Approve237410782025-11-06 15:16:5920 hrs ago1762442219IN
Opal: OPAL Token
0 ETH0.00036127.63909142
Approve237405042025-11-06 13:21:1122 hrs ago1762435271IN
Opal: OPAL Token
0 ETH0.000190544.05354161
Approve237394542025-11-06 9:49:4725 hrs ago1762422587IN
Opal: OPAL Token
0 ETH0.000101962.15540475
Approve237389262025-11-06 8:03:1127 hrs ago1762416191IN
Opal: OPAL Token
0 ETH0.000023370.78065198
Approve237389192025-11-06 8:01:4727 hrs ago1762416107IN
Opal: OPAL Token
0 ETH0.000034430.73225471
Approve237385552025-11-06 6:48:4728 hrs ago1762411727IN
Opal: OPAL Token
0 ETH0.000020470.43296584
Approve237374722025-11-06 3:10:4732 hrs ago1762398647IN
Opal: OPAL Token
0 ETH0.00011792.50809767
Approve237374192025-11-06 2:59:5932 hrs ago1762397999IN
Opal: OPAL Token
0 ETH0.000062731.33415752
Approve237363712025-11-05 23:28:1136 hrs ago1762385291IN
Opal: OPAL Token
0 ETH0.00001530.32361466
Transfer237363432025-11-05 23:22:3536 hrs ago1762384955IN
Opal: OPAL Token
0 ETH0.000113472.20116311
Transfer237357592025-11-05 21:24:5938 hrs ago1762377899IN
Opal: OPAL Token
0 ETH0.000109422.33988316
Approve237350192025-11-05 18:55:4740 hrs ago1762368947IN
Opal: OPAL Token
0 ETH0.00004010.84898276
Approve237350182025-11-05 18:55:3540 hrs ago1762368935IN
Opal: OPAL Token
0 ETH0.000042610.90078258
Approve237343892025-11-05 16:49:1142 hrs ago1762361351IN
Opal: OPAL Token
0 ETH0.000063881.35031469
Approve237333002025-11-05 13:08:5946 hrs ago1762348139IN
Opal: OPAL Token
0 ETH0.000100212.13348608
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer237389272025-11-06 8:03:2327 hrs ago1762416203
Opal: OPAL Token
1.70807371 ETH
Transfer237389272025-11-06 8:03:2327 hrs ago1762416203
Opal: OPAL Token
1.70807371 ETH
Transfer237389202025-11-06 8:01:5927 hrs ago1762416119
Opal: OPAL Token
1.70807371 ETH
Transfer237389202025-11-06 8:01:5927 hrs ago1762416119
Opal: OPAL Token
1.70807371 ETH
Transfer237268022025-11-04 15:18:472 days ago1762269527
Opal: OPAL Token
1.59831797 ETH
Transfer237268022025-11-04 15:18:472 days ago1762269527
Opal: OPAL Token
1.59831797 ETH
Transfer237230022025-11-04 2:33:593 days ago1762223639
Opal: OPAL Token
1.43059631 ETH
Transfer237230022025-11-04 2:33:593 days ago1762223639
Opal: OPAL Token
1.43059631 ETH
Transfer237068372025-11-01 20:22:475 days ago1762028567
Opal: OPAL Token
1.66258561 ETH
Transfer237068372025-11-01 20:22:475 days ago1762028567
Opal: OPAL Token
1.66258561 ETH
Transfer236955182025-10-31 6:21:117 days ago1761891671
Opal: OPAL Token
1.49750655 ETH
Transfer236955182025-10-31 6:21:117 days ago1761891671
Opal: OPAL Token
1.49750655 ETH
Transfer236881762025-10-30 5:40:478 days ago1761802847
Opal: OPAL Token
1.53011182 ETH
Transfer236881762025-10-30 5:40:478 days ago1761802847
Opal: OPAL Token
1.53011182 ETH
Transfer236878262025-10-30 4:29:478 days ago1761798587
Opal: OPAL Token
1.811496 ETH
Transfer236878262025-10-30 4:29:478 days ago1761798587
Opal: OPAL Token
1.811496 ETH
Transfer236810672025-10-29 5:48:239 days ago1761716903
Opal: OPAL Token
1.86791812 ETH
Transfer236810672025-10-29 5:48:239 days ago1761716903
Opal: OPAL Token
1.86791812 ETH
Transfer236768592025-10-28 15:37:479 days ago1761665867
Opal: OPAL Token
1.84528572 ETH
Transfer236768592025-10-28 15:37:479 days ago1761665867
Opal: OPAL Token
1.84528572 ETH
Transfer236719532025-10-27 23:08:1110 days ago1761606491
Opal: OPAL Token
1.64984847 ETH
Transfer236719532025-10-27 23:08:1110 days ago1761606491
Opal: OPAL Token
1.64984847 ETH
Transfer236706662025-10-27 18:48:2310 days ago1761590903
Opal: OPAL Token
1.85597814 ETH
Transfer236706662025-10-27 18:48:2310 days ago1761590903
Opal: OPAL Token
1.85597814 ETH
Transfer236698572025-10-27 16:05:4710 days ago1761581147
Opal: OPAL Token
1.38310574 ETH
View All Internal Transactions
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Opal

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2025-09-30
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.30;

// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

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

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

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

interface IERC20Errors {
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidSpender(address spender);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                _totalSupply -= value;
            }
        } else {
            unchecked {
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    function _approve(address owner, address spender, uint256 value) internal {
        _approve(owner, spender, value, true);
    }

    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            if (currentAllowance < value) {
                revert ERC20InsufficientAllowance(spender, currentAllowance, value);
            }
            unchecked {
                _approve(owner, spender, currentAllowance - value, false);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);

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

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

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

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

interface IUniswapV2Router {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract Opal is Ownable, ERC20 {
    IUniswapV2Router public immutable swapRouter;

    address public constant ZERO_ADDRESS = address(0);

    address public immutable swapPair;
    address public taxWallet;

    bool public feesEnabled;
    bool private inSwapProcess;
    bool public isActivated;

    uint256 public activationBlock;
    uint256 public activationTime;

    uint256 private lastSwapBlock;

    // Basis points constants (1 basis point = 0.01%)
    uint256 public constant BASIS_POINTS = 10000;  // 100% = 10000 basis points
    uint256 public constant MAX_TOTAL_FEE_BPS = 2500; // 25%

    uint256 public tokensForSwap;
    uint256 public buyTaxBps;  // Buy tax in basis points
    uint256 public sellTaxBps; // Sell tax in basis points

    mapping(address => bool) public excludedFromFees;
    mapping(address => bool) public marketPairs;

    event Activation();
    event TaxWalletUpdated(address newWallet, address oldWallet);
    event FeesStatusChanged(bool status);
    event TokensForSwapUpdated(uint256 newValue, uint256 oldValue);
    event BuyTaxUpdated(uint256 newValueBps, uint256 oldValueBps);
    event SellTaxUpdated(uint256 newValueBps, uint256 oldValueBps);
    event ExcludedFromFees(address account, bool isExcluded);
    event MarketPairStatusUpdated(address pair, bool value);

    error AlreadyActivated();
    error InvalidAddress();
    error AmountTooSmall();
    error AmountTooLarge();
    error FeeTooHigh();
    error TaxCanOnlyDecrease();
    error PairAlreadySet();
    error NotActivated();

    modifier lockSwapProcess() {
        inSwapProcess = true;
        _;
        inSwapProcess = false;
    }

    constructor() Ownable(msg.sender) ERC20("Opal", "OPAL") {
        address owner = msg.sender;
        _mint(owner, 1_000_000_000 ether);

        // Set wallet addresses
        taxWallet = 0x1e041546A65537Cb6467A8E509172E3853E70b8A;

        tokensForSwap = 50000 ether;  // 50k tokens

        feesEnabled = true;

        buyTaxBps = 499;   // 499 basis points = 4.99%
        sellTaxBps = 1000;  // 1000 basis points = 10%

        swapRouter = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        swapPair = IUniswapV2Factory(swapRouter.factory()).createPair(
            address(this),
            swapRouter.WETH()
        );

        SetMarketPair(swapPair, true);
        _approve(address(this), address(swapRouter), type(uint256).max);
        _excludeFromFees(address(this), true);
        _excludeFromFees(owner, true);
        _excludeFromFees(taxWallet, true);
    }

    receive() external payable {}

    function _transferOwnership(address newOwner) internal override {
        address oldOwner = owner();
        if (oldOwner != ZERO_ADDRESS) {
            _excludeFromFees(oldOwner, false);
        }
        _excludeFromFees(newOwner, true);
        super._transferOwnership(newOwner);
    }

    function enableTrading() external onlyOwner {
        require(!isActivated, AlreadyActivated());
        isActivated = true;
        activationBlock = block.number;
        activationTime = block.timestamp;
        emit Activation();
    }

    function updateTaxWallet(address _taxWallet) external onlyOwner {
        require(_taxWallet != ZERO_ADDRESS, InvalidAddress());
        address oldWallet = taxWallet;
        taxWallet = _taxWallet;
        emit TaxWalletUpdated(taxWallet, oldWallet);
    }

    function setFeesEnabled(bool value) external onlyOwner {
        feesEnabled = value;
        emit FeesStatusChanged(value);
    }

    function setTokensForSwap(uint256 amount) external onlyOwner {
        uint256 totalSupplyTokens = totalSupply();
        require(amount >= (totalSupplyTokens * 1) / 1000000, AmountTooSmall());
        require(amount <= (totalSupplyTokens * 5) / 1000, AmountTooLarge());
        uint256 oldValue = tokensForSwap;
        tokensForSwap = amount;
        emit TokensForSwapUpdated(amount, oldValue);
    }

    function setTaxBps(uint256 _buyTaxBps, uint256 _sellTaxBps) external onlyOwner {
        require(_buyTaxBps <= buyTaxBps, TaxCanOnlyDecrease());
        require(_sellTaxBps <= sellTaxBps, TaxCanOnlyDecrease());
        require(_buyTaxBps <= MAX_TOTAL_FEE_BPS, FeeTooHigh());
        require(_sellTaxBps <= MAX_TOTAL_FEE_BPS, FeeTooHigh());

        uint256 oldBuyTax = buyTaxBps;
        uint256 oldSellTax = sellTaxBps;
        
        buyTaxBps = _buyTaxBps;
        sellTaxBps = _sellTaxBps;
        
        emit BuyTaxUpdated(_buyTaxBps, oldBuyTax);
        emit SellTaxUpdated(_sellTaxBps, oldSellTax);
    }


    function getSellTaxPercent() external view returns (uint256) {
        return sellTaxBps;
    }

    function excludeFromFees(address[] calldata accounts, bool value) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _excludeFromFees(accounts[i], value);
        }
    }

    function setMarketPair(address pair, bool value) external onlyOwner {
        require(!marketPairs[pair], PairAlreadySet());
        SetMarketPair(pair, value);
    }

    function _update(address from, address to, uint256 amount) internal virtual override {
        require(
            isActivated || excludedFromFees[from] || excludedFromFees[to],
            NotActivated()
        );

        bool applyFee = feesEnabled &&
            !inSwapProcess &&
            !(excludedFromFees[from] || excludedFromFees[to]);

        if (applyFee) {
            uint256 feeAmount = 0;
            if (marketPairs[to] && sellTaxBps > 0) {
                // Sell tax calculation using basis points
                feeAmount = (amount * sellTaxBps) / BASIS_POINTS;
            } else if (marketPairs[from] && buyTaxBps > 0) {
                // Buy tax calculation using basis points
                feeAmount = (amount * buyTaxBps) / BASIS_POINTS;
            }

            if (feeAmount > 0) {
                amount -= feeAmount;
                super._update(from, address(this), feeAmount);
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= tokensForSwap;
        if (applyFee && !marketPairs[from] && canSwap) {
            if (block.number > lastSwapBlock && block.number > activationBlock) {
                _swapTokens(contractTokenBalance);
                lastSwapBlock = block.number;
            }
        }

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

    function _swapTokens(uint256 tokenAmount) internal virtual lockSwapProcess {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = swapRouter.WETH();

        uint256 maxSwapAmount = tokensForSwap * 20;

        if (tokenAmount > maxSwapAmount) {
            tokenAmount = maxSwapAmount;
        }

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

        uint256 ethBalance = address(this).balance;
        if (ethBalance > 0) {
            (bool success, ) = address(taxWallet).call{value: ethBalance}("");
            require(success, "ETH transfer to tax wallet failed");
        }
    }

    function _excludeFromFees(address account, bool value) internal virtual {
        excludedFromFees[account] = value;
        emit ExcludedFromFees(account, value);
    }

    function SetMarketPair(address pair, bool value) internal virtual {
        marketPairs[pair] = value;
        emit MarketPairStatusUpdated(pair, value);
    }

    function manualSwap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance > 0, "No tokens to swap");
        _swapTokens(contractBalance);
    }

    function rescueETH() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No ETH to rescue");
        (bool success, ) = payable(msg.sender).call{value: balance}("");
        require(success, "ETH transfer failed");
    }

    function rescueTokens(address token) external onlyOwner {
        require(token != address(this), "Cannot rescue own tokens");
        uint256 balance = IERC20(token).balanceOf(address(this));
        require(balance > 0, "No tokens to rescue");
        IERC20(token).transfer(msg.sender, balance);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyActivated","type":"error"},{"inputs":[],"name":"AmountTooLarge","type":"error"},{"inputs":[],"name":"AmountTooSmall","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FeeTooHigh","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"NotActivated","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PairAlreadySet","type":"error"},{"inputs":[],"name":"TaxCanOnlyDecrease","type":"error"},{"anonymous":false,"inputs":[],"name":"Activation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValueBps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValueBps","type":"uint256"}],"name":"BuyTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"FeesStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"MarketPairStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValueBps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValueBps","type":"uint256"}],"name":"SellTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWallet","type":"address"},{"indexed":false,"internalType":"address","name":"oldWallet","type":"address"}],"name":"TaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"TokensForSwapUpdated","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":[],"name":"BASIS_POINTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_FEE_BPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":"buyTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellTaxPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTaxBps","type":"uint256"},{"internalType":"uint256","name":"_sellTaxBps","type":"uint256"}],"name":"setTaxBps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTokensForSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxWallet","type":"address"}],"name":"updateTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561000f575f5ffd5b506040518060400160405280600481526020017f4f70616c000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4f50414c00000000000000000000000000000000000000000000000000000000815250335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100ed575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100e49190611275565b60405180910390fd5b6100fc8161044360201b60201c565b50816004908161010c91906114cb565b50806005908161011c91906114cb565b5050505f33905061013f816b033b2e3c9fd0803ce80000006104bc60201b60201c565b731e041546a65537cb6467a8e509172e3853e70b8a60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550690a968163f0a57b400000600a819055506001600660146101000a81548160ff0219169083151502179055506101f3600b819055506103e8600c81905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610264573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028891906115c8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ef573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031391906115c8565b6040518363ffffffff1660e01b81526004016103309291906115f3565b6020604051808303815f875af115801561034c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037091906115c8565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506103b660a051600161054160201b60201c565b6103e9306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105d260201b60201c565b6103fa3060016105ea60201b60201c565b61040b8160016105ea60201b60201c565b61043d60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016105ea60201b60201c565b50611a3d565b5f61045261067b60201b60201c565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461049857610497815f6105ea60201b60201c565b5b6104a98260016105ea60201b60201c565b6104b8826106a260201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361052c575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016105239190611275565b60405180910390fd5b61053d5f838361076360201b60201c565b5050565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc4242182826040516105c6929190611634565b60405180910390a15050565b6105e58383836001610b0d60201b60201c565b505050565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb828260405161066f929190611634565b60405180910390a15050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600660169054906101000a900460ff16806107c45750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806108155750600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61084b576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600660149054906101000a900460ff1680156108755750600660159054906101000a900460ff16155b80156109195750600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806109175750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b90508015610a48575f5f9050600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561097c57505f600c54115b156109a357612710600c54846109929190611688565b61099c91906116f6565b9050610a1e565b600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156109fa57505f600b54115b15610a1d57612710600b5484610a109190611688565b610a1a91906116f6565b90505b5b5f811115610a46578083610a329190611726565b9250610a45853083610cdc60201b60201c565b5b505b5f610a5830610ef860201b60201c565b90505f600a548210159050828015610ab75750600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015610ac05750805b15610af45760095443118015610ad7575060075443115b15610af357610aeb82610f3e60201b60201c565b436009819055505b5b610b05868686610cdc60201b60201c565b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610b7d575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610b749190611275565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bed575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610be49190611275565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610cd6578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ccd9190611768565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d2c578060035f828254610d209190611781565b92505081905550610dfc565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610db6578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610dad939291906117b4565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e43578060035f8282540392505081905550610e8e565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610eeb9190611768565b60405180910390a3505050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6001600660156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff811115610f7557610f74611298565b5b604051908082528060200260200182016040528015610fa35781602001602082028036833780820191505090505b50905030815f81518110610fba57610fb96117e9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561103f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106391906115c8565b81600181518110611077576110766117e9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6014600a546110c19190611688565b9050808311156110cf578092505b60805173ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b8152600401611112959493929190611906565b5f604051808303815f87803b158015611129575f5ffd5b505af115801561113b573d5f5f3e3d5ffd5b505050505f4790505f811115611216575f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516111919061198b565b5f6040518083038185875af1925050503d805f81146111cb576040519150601f19603f3d011682016040523d82523d5f602084013e6111d0565b606091505b5050905080611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90611a1f565b60405180910390fd5b505b5050505f600660156101000a81548160ff02191690831515021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61125f82611236565b9050919050565b61126f81611255565b82525050565b5f6020820190506112885f830184611266565b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061130957607f821691505b60208210810361131c5761131b6112c5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261137e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611343565b6113888683611343565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6113cc6113c76113c2846113a0565b6113a9565b6113a0565b9050919050565b5f819050919050565b6113e5836113b2565b6113f96113f1826113d3565b84845461134f565b825550505050565b5f5f905090565b611410611401565b61141b8184846113dc565b505050565b5b8181101561143e576114335f82611408565b600181019050611421565b5050565b601f8211156114835761145481611322565b61145d84611334565b8101602085101561146c578190505b61148061147885611334565b830182611420565b50505b505050565b5f82821c905092915050565b5f6114a35f1984600802611488565b1980831691505092915050565b5f6114bb8383611494565b9150826002028217905092915050565b6114d48261128e565b67ffffffffffffffff8111156114ed576114ec611298565b5b6114f782546112f2565b611502828285611442565b5f60209050601f831160018114611533575f8415611521578287015190505b61152b85826114b0565b865550611592565b601f19841661154186611322565b5f5b8281101561156857848901518255600182019150602085019450602081019050611543565b868310156115855784890151611581601f891682611494565b8355505b6001600288020188555050505b505050505050565b5f5ffd5b6115a781611255565b81146115b1575f5ffd5b50565b5f815190506115c28161159e565b92915050565b5f602082840312156115dd576115dc61159a565b5b5f6115ea848285016115b4565b91505092915050565b5f6040820190506116065f830185611266565b6116136020830184611266565b9392505050565b5f8115159050919050565b61162e8161161a565b82525050565b5f6040820190506116475f830185611266565b6116546020830184611625565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611692826113a0565b915061169d836113a0565b92508282026116ab816113a0565b915082820484148315176116c2576116c161165b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611700826113a0565b915061170b836113a0565b92508261171b5761171a6116c9565b5b828204905092915050565b5f611730826113a0565b915061173b836113a0565b92508282039050818111156117535761175261165b565b5b92915050565b611762816113a0565b82525050565b5f60208201905061177b5f830184611759565b92915050565b5f61178b826113a0565b9150611796836113a0565b92508282019050808211156117ae576117ad61165b565b5b92915050565b5f6060820190506117c75f830186611266565b6117d46020830185611759565b6117e16040830184611759565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61183961183461182f84611816565b6113a9565b6113a0565b9050919050565b6118498161181f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61188181611255565b82525050565b5f6118928383611878565b60208301905092915050565b5f602082019050919050565b5f6118b48261184f565b6118be8185611859565b93506118c983611869565b805f5b838110156118f95781516118e08882611887565b97506118eb8361189e565b9250506001810190506118cc565b5085935050505092915050565b5f60a0820190506119195f830188611759565b6119266020830187611840565b818103604083015261193881866118aa565b90506119476060830185611266565b6119546080830184611759565b9695505050505050565b5f81905092915050565b50565b5f6119765f8361195e565b915061198182611968565b5f82019050919050565b5f6119958261196b565b9150819050919050565b5f82825260208201905092915050565b7f455448207472616e7366657220746f207461782077616c6c6574206661696c655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f611a0960218361199f565b9150611a14826119af565b604082019050919050565b5f6020820190508181035f830152611a36816119fd565b9050919050565b60805160a05161315f611a6c5f395f610c2a01525f818161141601528181611856015261194f015261315f5ff3fe608060405260043610610227575f3560e01c80638da5cb5b11610122578063c16dd4a4116100aa578063da4493f61161006e578063da4493f614610798578063dbe66ca0146107c2578063dd62ed3e146107fe578063e1f1c4a71461083a578063f2fde38b146108645761022e565b8063c16dd4a4146106c8578063c31c9c07146106f0578063c473413a1461071a578063cc04812314610744578063cffd129c1461076e5761022e565b8063a64e4f8a116100f1578063a64e4f8a146105d6578063a901dd9214610600578063a9059cbb14610628578063ad29ffde14610664578063b4b11b951461068c5761022e565b80638da5cb5b1461053257806395d89b411461055c578063a0496f6f14610586578063a49a910f146105ae5761022e565b8063313ce567116101b057806370a082311161017457806370a0823114610478578063715018a6146104b457806374c9f603146104ca57806380faa3d2146104f25780638a8c523c1461051c5761022e565b8063313ce567146103ba578063431a9caa146103e45780634a8c1fb41461040e57806351bc3c8514610438578063538ba4f91461044e5761022e565b80631ecd7d6e116101f75780631ecd7d6e146102ea57806320800a001461031457806323b872dd1461032a57806326991cc8146103665780632dc0562d146103905761022e565b8062ae3bf81461023257806306fdde031461025a578063095ea7b31461028457806318160ddd146102c05761022e565b3661022e57005b5f5ffd5b34801561023d575f5ffd5b50610258600480360381019061025391906124f5565b61088c565b005b348015610265575f5ffd5b5061026e610a3f565b60405161027b9190612590565b60405180910390f35b34801561028f575f5ffd5b506102aa60048036038101906102a591906125e3565b610acf565b6040516102b7919061263b565b60405180910390f35b3480156102cb575f5ffd5b506102d4610af1565b6040516102e19190612663565b60405180910390f35b3480156102f5575f5ffd5b506102fe610afa565b60405161030b9190612663565b60405180910390f35b34801561031f575f5ffd5b50610328610b00565b005b348015610335575f5ffd5b50610350600480360381019061034b919061267c565b610bfa565b60405161035d919061263b565b60405180910390f35b348015610371575f5ffd5b5061037a610c28565b60405161038791906126db565b60405180910390f35b34801561039b575f5ffd5b506103a4610c4c565b6040516103b191906126db565b60405180910390f35b3480156103c5575f5ffd5b506103ce610c71565b6040516103db919061270f565b60405180910390f35b3480156103ef575f5ffd5b506103f8610c79565b6040516104059190612663565b60405180910390f35b348015610419575f5ffd5b50610422610c7f565b60405161042f919061263b565b60405180910390f35b348015610443575f5ffd5b5061044c610c92565b005b348015610459575f5ffd5b50610462610cf4565b60405161046f91906126db565b60405180910390f35b348015610483575f5ffd5b5061049e600480360381019061049991906124f5565b610cf8565b6040516104ab9190612663565b60405180910390f35b3480156104bf575f5ffd5b506104c8610d3e565b005b3480156104d5575f5ffd5b506104f060048036038101906104eb91906124f5565b610d51565b005b3480156104fd575f5ffd5b50610506610e81565b6040516105139190612663565b60405180910390f35b348015610527575f5ffd5b50610530610e87565b005b34801561053d575f5ffd5b50610546610f2d565b60405161055391906126db565b60405180910390f35b348015610567575f5ffd5b50610570610f54565b60405161057d9190612590565b60405180910390f35b348015610591575f5ffd5b506105ac60048036038101906105a79190612728565b610fe4565b005b3480156105b9575f5ffd5b506105d460048036038101906105cf9190612766565b61116e565b005b3480156105e1575f5ffd5b506105ea611273565b6040516105f7919061263b565b60405180910390f35b34801561060b575f5ffd5b50610626600480360381019061062191906127bb565b611286565b005b348015610633575f5ffd5b5061064e600480360381019061064991906125e3565b6112e2565b60405161065b919061263b565b60405180910390f35b34801561066f575f5ffd5b5061068a60048036038101906106859190612847565b611304565b005b348015610697575f5ffd5b506106b260048036038101906106ad91906124f5565b611360565b6040516106bf919061263b565b60405180910390f35b3480156106d3575f5ffd5b506106ee60048036038101906106e991906128a4565b61137d565b005b3480156106fb575f5ffd5b50610704611414565b604051610711919061293d565b60405180910390f35b348015610725575f5ffd5b5061072e611438565b60405161073b9190612663565b60405180910390f35b34801561074f575f5ffd5b5061075861143e565b6040516107659190612663565b60405180910390f35b348015610779575f5ffd5b50610782611447565b60405161078f9190612663565b60405180910390f35b3480156107a3575f5ffd5b506107ac61144d565b6040516107b99190612663565b60405180910390f35b3480156107cd575f5ffd5b506107e860048036038101906107e391906124f5565b611453565b6040516107f5919061263b565b60405180910390f35b348015610809575f5ffd5b50610824600480360381019061081f9190612956565b611470565b6040516108319190612663565b60405180910390f35b348015610845575f5ffd5b5061084e6114f2565b60405161085b9190612663565b60405180910390f35b34801561086f575f5ffd5b5061088a600480360381019061088591906124f5565b6114f8565b005b61089461157c565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f9906129de565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161093c91906126db565b602060405180830381865afa158015610957573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097b9190612a10565b90505f81116109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b690612a85565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016109fa929190612aa3565b6020604051808303815f875af1158015610a16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3a9190612ade565b505050565b606060048054610a4e90612b36565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90612b36565b8015610ac55780601f10610a9c57610100808354040283529160200191610ac5565b820191905f5260205f20905b815481529060010190602001808311610aa857829003601f168201915b5050505050905090565b5f5f610ad9611603565b9050610ae681858561160a565b600191505092915050565b5f600354905090565b600a5481565b610b0861157c565b5f4790505f8111610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590612bb0565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1682604051610b7390612bfb565b5f6040518083038185875af1925050503d805f8114610bad576040519150601f19603f3d011682016040523d82523d5f602084013e610bb2565b606091505b5050905080610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed90612c59565b60405180910390fd5b5050565b5f5f610c04611603565b9050610c1185828561161c565b610c1c8585856116ae565b60019150509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b6109c481565b600660169054906101000a900460ff1681565b610c9a61157c565b5f610ca430610cf8565b90505f8111610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90612cc1565b60405180910390fd5b610cf18161179e565b50565b5f81565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d4661157c565b610d4f5f611ad2565b565b610d5961157c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dbe576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610e75929190612cdf565b60405180910390a15050565b60075481565b610e8f61157c565b600660169054906101000a900460ff1615610ed6576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600660166101000a81548160ff02191690831515021790555043600781905550426008819055507f6603428d483ce13b6662b7a6848d769996e12e801bed4b0f1b9e8d10f64d38ba60405160405180910390a1565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610f6390612b36565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8f90612b36565b8015610fda5780601f10610fb157610100808354040283529160200191610fda565b820191905f5260205f20905b815481529060010190602001808311610fbd57829003601f168201915b5050505050905090565b610fec61157c565b600b54821115611028576040517f06f3e25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c54811115611064576040517f06f3e25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c48211156110a0576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c48111156110dc576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600b5490505f600c54905083600b8190555082600c819055507fc3bfe6f433383f40fbda60ed9bf4df2023072e6d6a23295d627bfe9b7e5a103f8483604051611127929190612d06565b60405180910390a17f427381ae39e3e0c23654f2096a20e4cb23872fdae94928f0155964803335d1028382604051611160929190612d06565b60405180910390a150505050565b61117661157c565b5f61117f610af1565b9050620f42406001826111929190612d5a565b61119c9190612dc8565b8210156111d5576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86005826111e59190612d5a565b6111ef9190612dc8565b821115611228576040517f0625040100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600a54905082600a819055507f65a8c7442ea496b0a28890f1ef48a9819d1f5d747e9a8df155fe862dfd493c958382604051611266929190612d06565b60405180910390a1505050565b600660149054906101000a900460ff1681565b61128e61157c565b80600660146101000a81548160ff0219169083151502179055507fa6a3dda702515d3130fef8b72d8e25f9aebd0d02e89d10d63c0c31d80b52f4a0816040516112d7919061263b565b60405180910390a150565b5f5f6112ec611603565b90506112f98185856116ae565b600191505092915050565b61130c61157c565b5f5f90505b8383905081101561135a5761134d84848381811061133257611331612df8565b5b905060200201602081019061134791906124f5565b83611b33565b8080600101915050611311565b50505050565b600e602052805f5260405f205f915054906101000a900460ff1681565b61138561157c565b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611406576040517f027106be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114108282611bc4565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5481565b5f600c54905090565b600c5481565b60085481565b600d602052805f5260405f205f915054906101000a900460ff1681565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61271081565b61150061157c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611570575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161156791906126db565b60405180910390fd5b61157981611ad2565b50565b611584611603565b73ffffffffffffffffffffffffffffffffffffffff166115a2610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611601576115c5611603565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016115f891906126db565b60405180910390fd5b565b5f33905090565b6116178383836001611c55565b505050565b5f6116278484611470565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116a85781811015611699578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161169093929190612e25565b60405180910390fd5b6116a784848484035f611c55565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361171e575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161171591906126db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361178e575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161178591906126db565b60405180910390fd5b611799838383611e24565b505050565b6001600660156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156117d5576117d4612e5a565b5b6040519080825280602002602001820160405280156118035781602001602082028036833780820191505090505b50905030815f8151811061181a57611819612df8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e19190612e9b565b816001815181106118f5576118f4612df8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6014600a5461193f9190612d5a565b90508083111561194d578092505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b81526004016119ae959493929190612fb6565b5f604051808303815f87803b1580156119c5575f5ffd5b505af11580156119d7573d5f5f3e3d5ffd5b505050505f4790505f811115611ab2575f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611a2d90612bfb565b5f6040518083038185875af1925050503d805f8114611a67576040519150601f19603f3d011682016040523d82523d5f602084013e611a6c565b606091505b5050905080611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa79061307e565b60405180910390fd5b505b5050505f600660156101000a81548160ff02191690831515021790555050565b5f611adb610f2d565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b1b57611b1a815f611b33565b5b611b26826001611b33565b611b2f826121b6565b5050565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb8282604051611bb892919061309c565b60405180910390a15050565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc424218282604051611c4992919061309c565b60405180910390a15050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611cc5575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611cbc91906126db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d35575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611d2c91906126db565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611e1e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611e159190612663565b60405180910390a35b50505050565b600660169054906101000a900460ff1680611e855750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611ed65750600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f0c576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600660149054906101000a900460ff168015611f365750600660159054906101000a900460ff16155b8015611fda5750600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611fd85750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b90508015612103575f5f9050600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561203d57505f600c54115b1561206457612710600c54846120539190612d5a565b61205d9190612dc8565b90506120df565b600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156120bb57505f600b54115b156120de57612710600b54846120d19190612d5a565b6120db9190612dc8565b90505b5b5f8111156121015780836120f391906130c3565b9250612100853083612277565b5b505b5f61210d30610cf8565b90505f600a54821015905082801561216c5750600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156121755750805b156121a3576009544311801561218c575060075443115b156121a25761219a8261179e565b436009819055505b5b6121ae868686612277565b505050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7578060035f8282546122bb91906130f6565b92505081905550612397565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612351578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161234893929190612e25565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123de578060035f8282540392505081905550612429565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124869190612663565b60405180910390a3505050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124c48261249b565b9050919050565b6124d4816124ba565b81146124de575f5ffd5b50565b5f813590506124ef816124cb565b92915050565b5f6020828403121561250a57612509612493565b5b5f612517848285016124e1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61256282612520565b61256c818561252a565b935061257c81856020860161253a565b61258581612548565b840191505092915050565b5f6020820190508181035f8301526125a88184612558565b905092915050565b5f819050919050565b6125c2816125b0565b81146125cc575f5ffd5b50565b5f813590506125dd816125b9565b92915050565b5f5f604083850312156125f9576125f8612493565b5b5f612606858286016124e1565b9250506020612617858286016125cf565b9150509250929050565b5f8115159050919050565b61263581612621565b82525050565b5f60208201905061264e5f83018461262c565b92915050565b61265d816125b0565b82525050565b5f6020820190506126765f830184612654565b92915050565b5f5f5f6060848603121561269357612692612493565b5b5f6126a0868287016124e1565b93505060206126b1868287016124e1565b92505060406126c2868287016125cf565b9150509250925092565b6126d5816124ba565b82525050565b5f6020820190506126ee5f8301846126cc565b92915050565b5f60ff82169050919050565b612709816126f4565b82525050565b5f6020820190506127225f830184612700565b92915050565b5f5f6040838503121561273e5761273d612493565b5b5f61274b858286016125cf565b925050602061275c858286016125cf565b9150509250929050565b5f6020828403121561277b5761277a612493565b5b5f612788848285016125cf565b91505092915050565b61279a81612621565b81146127a4575f5ffd5b50565b5f813590506127b581612791565b92915050565b5f602082840312156127d0576127cf612493565b5b5f6127dd848285016127a7565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112612807576128066127e6565b5b8235905067ffffffffffffffff811115612824576128236127ea565b5b6020830191508360208202830111156128405761283f6127ee565b5b9250929050565b5f5f5f6040848603121561285e5761285d612493565b5b5f84013567ffffffffffffffff81111561287b5761287a612497565b5b612887868287016127f2565b9350935050602061289a868287016127a7565b9150509250925092565b5f5f604083850312156128ba576128b9612493565b5b5f6128c7858286016124e1565b92505060206128d8858286016127a7565b9150509250929050565b5f819050919050565b5f6129056129006128fb8461249b565b6128e2565b61249b565b9050919050565b5f612916826128eb565b9050919050565b5f6129278261290c565b9050919050565b6129378161291d565b82525050565b5f6020820190506129505f83018461292e565b92915050565b5f5f6040838503121561296c5761296b612493565b5b5f612979858286016124e1565b925050602061298a858286016124e1565b9150509250929050565b7f43616e6e6f7420726573637565206f776e20746f6b656e7300000000000000005f82015250565b5f6129c860188361252a565b91506129d382612994565b602082019050919050565b5f6020820190508181035f8301526129f5816129bc565b9050919050565b5f81519050612a0a816125b9565b92915050565b5f60208284031215612a2557612a24612493565b5b5f612a32848285016129fc565b91505092915050565b7f4e6f20746f6b656e7320746f20726573637565000000000000000000000000005f82015250565b5f612a6f60138361252a565b9150612a7a82612a3b565b602082019050919050565b5f6020820190508181035f830152612a9c81612a63565b9050919050565b5f604082019050612ab65f8301856126cc565b612ac36020830184612654565b9392505050565b5f81519050612ad881612791565b92915050565b5f60208284031215612af357612af2612493565b5b5f612b0084828501612aca565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b4d57607f821691505b602082108103612b6057612b5f612b09565b5b50919050565b7f4e6f2045544820746f20726573637565000000000000000000000000000000005f82015250565b5f612b9a60108361252a565b9150612ba582612b66565b602082019050919050565b5f6020820190508181035f830152612bc781612b8e565b9050919050565b5f81905092915050565b50565b5f612be65f83612bce565b9150612bf182612bd8565b5f82019050919050565b5f612c0582612bdb565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f612c4360138361252a565b9150612c4e82612c0f565b602082019050919050565b5f6020820190508181035f830152612c7081612c37565b9050919050565b7f4e6f20746f6b656e7320746f20737761700000000000000000000000000000005f82015250565b5f612cab60118361252a565b9150612cb682612c77565b602082019050919050565b5f6020820190508181035f830152612cd881612c9f565b9050919050565b5f604082019050612cf25f8301856126cc565b612cff60208301846126cc565b9392505050565b5f604082019050612d195f830185612654565b612d266020830184612654565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d64826125b0565b9150612d6f836125b0565b9250828202612d7d816125b0565b91508282048414831517612d9457612d93612d2d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612dd2826125b0565b9150612ddd836125b0565b925082612ded57612dec612d9b565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f606082019050612e385f8301866126cc565b612e456020830185612654565b612e526040830184612654565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050612e95816124cb565b92915050565b5f60208284031215612eb057612eaf612493565b5b5f612ebd84828501612e87565b91505092915050565b5f819050919050565b5f612ee9612ee4612edf84612ec6565b6128e2565b6125b0565b9050919050565b612ef981612ecf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f31816124ba565b82525050565b5f612f428383612f28565b60208301905092915050565b5f602082019050919050565b5f612f6482612eff565b612f6e8185612f09565b9350612f7983612f19565b805f5b83811015612fa9578151612f908882612f37565b9750612f9b83612f4e565b925050600181019050612f7c565b5085935050505092915050565b5f60a082019050612fc95f830188612654565b612fd66020830187612ef0565b8181036040830152612fe88186612f5a565b9050612ff760608301856126cc565b6130046080830184612654565b9695505050505050565b7f455448207472616e7366657220746f207461782077616c6c6574206661696c655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f61306860218361252a565b91506130738261300e565b604082019050919050565b5f6020820190508181035f8301526130958161305c565b9050919050565b5f6040820190506130af5f8301856126cc565b6130bc602083018461262c565b9392505050565b5f6130cd826125b0565b91506130d8836125b0565b92508282039050818111156130f0576130ef612d2d565b5b92915050565b5f613100826125b0565b915061310b836125b0565b925082820190508082111561312357613122612d2d565b5b9291505056fea2646970667358221220d971d5d260bc61637b40b6f6a6d0488bb39a2d38ae3518ee20302efe221c027064736f6c634300081e0033

Deployed Bytecode

0x608060405260043610610227575f3560e01c80638da5cb5b11610122578063c16dd4a4116100aa578063da4493f61161006e578063da4493f614610798578063dbe66ca0146107c2578063dd62ed3e146107fe578063e1f1c4a71461083a578063f2fde38b146108645761022e565b8063c16dd4a4146106c8578063c31c9c07146106f0578063c473413a1461071a578063cc04812314610744578063cffd129c1461076e5761022e565b8063a64e4f8a116100f1578063a64e4f8a146105d6578063a901dd9214610600578063a9059cbb14610628578063ad29ffde14610664578063b4b11b951461068c5761022e565b80638da5cb5b1461053257806395d89b411461055c578063a0496f6f14610586578063a49a910f146105ae5761022e565b8063313ce567116101b057806370a082311161017457806370a0823114610478578063715018a6146104b457806374c9f603146104ca57806380faa3d2146104f25780638a8c523c1461051c5761022e565b8063313ce567146103ba578063431a9caa146103e45780634a8c1fb41461040e57806351bc3c8514610438578063538ba4f91461044e5761022e565b80631ecd7d6e116101f75780631ecd7d6e146102ea57806320800a001461031457806323b872dd1461032a57806326991cc8146103665780632dc0562d146103905761022e565b8062ae3bf81461023257806306fdde031461025a578063095ea7b31461028457806318160ddd146102c05761022e565b3661022e57005b5f5ffd5b34801561023d575f5ffd5b50610258600480360381019061025391906124f5565b61088c565b005b348015610265575f5ffd5b5061026e610a3f565b60405161027b9190612590565b60405180910390f35b34801561028f575f5ffd5b506102aa60048036038101906102a591906125e3565b610acf565b6040516102b7919061263b565b60405180910390f35b3480156102cb575f5ffd5b506102d4610af1565b6040516102e19190612663565b60405180910390f35b3480156102f5575f5ffd5b506102fe610afa565b60405161030b9190612663565b60405180910390f35b34801561031f575f5ffd5b50610328610b00565b005b348015610335575f5ffd5b50610350600480360381019061034b919061267c565b610bfa565b60405161035d919061263b565b60405180910390f35b348015610371575f5ffd5b5061037a610c28565b60405161038791906126db565b60405180910390f35b34801561039b575f5ffd5b506103a4610c4c565b6040516103b191906126db565b60405180910390f35b3480156103c5575f5ffd5b506103ce610c71565b6040516103db919061270f565b60405180910390f35b3480156103ef575f5ffd5b506103f8610c79565b6040516104059190612663565b60405180910390f35b348015610419575f5ffd5b50610422610c7f565b60405161042f919061263b565b60405180910390f35b348015610443575f5ffd5b5061044c610c92565b005b348015610459575f5ffd5b50610462610cf4565b60405161046f91906126db565b60405180910390f35b348015610483575f5ffd5b5061049e600480360381019061049991906124f5565b610cf8565b6040516104ab9190612663565b60405180910390f35b3480156104bf575f5ffd5b506104c8610d3e565b005b3480156104d5575f5ffd5b506104f060048036038101906104eb91906124f5565b610d51565b005b3480156104fd575f5ffd5b50610506610e81565b6040516105139190612663565b60405180910390f35b348015610527575f5ffd5b50610530610e87565b005b34801561053d575f5ffd5b50610546610f2d565b60405161055391906126db565b60405180910390f35b348015610567575f5ffd5b50610570610f54565b60405161057d9190612590565b60405180910390f35b348015610591575f5ffd5b506105ac60048036038101906105a79190612728565b610fe4565b005b3480156105b9575f5ffd5b506105d460048036038101906105cf9190612766565b61116e565b005b3480156105e1575f5ffd5b506105ea611273565b6040516105f7919061263b565b60405180910390f35b34801561060b575f5ffd5b50610626600480360381019061062191906127bb565b611286565b005b348015610633575f5ffd5b5061064e600480360381019061064991906125e3565b6112e2565b60405161065b919061263b565b60405180910390f35b34801561066f575f5ffd5b5061068a60048036038101906106859190612847565b611304565b005b348015610697575f5ffd5b506106b260048036038101906106ad91906124f5565b611360565b6040516106bf919061263b565b60405180910390f35b3480156106d3575f5ffd5b506106ee60048036038101906106e991906128a4565b61137d565b005b3480156106fb575f5ffd5b50610704611414565b604051610711919061293d565b60405180910390f35b348015610725575f5ffd5b5061072e611438565b60405161073b9190612663565b60405180910390f35b34801561074f575f5ffd5b5061075861143e565b6040516107659190612663565b60405180910390f35b348015610779575f5ffd5b50610782611447565b60405161078f9190612663565b60405180910390f35b3480156107a3575f5ffd5b506107ac61144d565b6040516107b99190612663565b60405180910390f35b3480156107cd575f5ffd5b506107e860048036038101906107e391906124f5565b611453565b6040516107f5919061263b565b60405180910390f35b348015610809575f5ffd5b50610824600480360381019061081f9190612956565b611470565b6040516108319190612663565b60405180910390f35b348015610845575f5ffd5b5061084e6114f2565b60405161085b9190612663565b60405180910390f35b34801561086f575f5ffd5b5061088a600480360381019061088591906124f5565b6114f8565b005b61089461157c565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f9906129de565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161093c91906126db565b602060405180830381865afa158015610957573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097b9190612a10565b90505f81116109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b690612a85565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016109fa929190612aa3565b6020604051808303815f875af1158015610a16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3a9190612ade565b505050565b606060048054610a4e90612b36565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7a90612b36565b8015610ac55780601f10610a9c57610100808354040283529160200191610ac5565b820191905f5260205f20905b815481529060010190602001808311610aa857829003601f168201915b5050505050905090565b5f5f610ad9611603565b9050610ae681858561160a565b600191505092915050565b5f600354905090565b600a5481565b610b0861157c565b5f4790505f8111610b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4590612bb0565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1682604051610b7390612bfb565b5f6040518083038185875af1925050503d805f8114610bad576040519150601f19603f3d011682016040523d82523d5f602084013e610bb2565b606091505b5050905080610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed90612c59565b60405180910390fd5b5050565b5f5f610c04611603565b9050610c1185828561161c565b610c1c8585856116ae565b60019150509392505050565b7f0000000000000000000000005bcebcee72f13004f1d00d7da7bf22b082f93f7081565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b6109c481565b600660169054906101000a900460ff1681565b610c9a61157c565b5f610ca430610cf8565b90505f8111610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90612cc1565b60405180910390fd5b610cf18161179e565b50565b5f81565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610d4661157c565b610d4f5f611ad2565b565b610d5961157c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dbe576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682604051610e75929190612cdf565b60405180910390a15050565b60075481565b610e8f61157c565b600660169054906101000a900460ff1615610ed6576040517fef65161f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600660166101000a81548160ff02191690831515021790555043600781905550426008819055507f6603428d483ce13b6662b7a6848d769996e12e801bed4b0f1b9e8d10f64d38ba60405160405180910390a1565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610f6390612b36565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8f90612b36565b8015610fda5780601f10610fb157610100808354040283529160200191610fda565b820191905f5260205f20905b815481529060010190602001808311610fbd57829003601f168201915b5050505050905090565b610fec61157c565b600b54821115611028576040517f06f3e25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600c54811115611064576040517f06f3e25500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c48211156110a0576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109c48111156110dc576040517fcd4e616700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600b5490505f600c54905083600b8190555082600c819055507fc3bfe6f433383f40fbda60ed9bf4df2023072e6d6a23295d627bfe9b7e5a103f8483604051611127929190612d06565b60405180910390a17f427381ae39e3e0c23654f2096a20e4cb23872fdae94928f0155964803335d1028382604051611160929190612d06565b60405180910390a150505050565b61117661157c565b5f61117f610af1565b9050620f42406001826111929190612d5a565b61119c9190612dc8565b8210156111d5576040517fc2f5625a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e86005826111e59190612d5a565b6111ef9190612dc8565b821115611228576040517f0625040100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600a54905082600a819055507f65a8c7442ea496b0a28890f1ef48a9819d1f5d747e9a8df155fe862dfd493c958382604051611266929190612d06565b60405180910390a1505050565b600660149054906101000a900460ff1681565b61128e61157c565b80600660146101000a81548160ff0219169083151502179055507fa6a3dda702515d3130fef8b72d8e25f9aebd0d02e89d10d63c0c31d80b52f4a0816040516112d7919061263b565b60405180910390a150565b5f5f6112ec611603565b90506112f98185856116ae565b600191505092915050565b61130c61157c565b5f5f90505b8383905081101561135a5761134d84848381811061133257611331612df8565b5b905060200201602081019061134791906124f5565b83611b33565b8080600101915050611311565b50505050565b600e602052805f5260405f205f915054906101000a900460ff1681565b61138561157c565b600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611406576040517f027106be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114108282611bc4565b5050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600b5481565b5f600c54905090565b600c5481565b60085481565b600d602052805f5260405f205f915054906101000a900460ff1681565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61271081565b61150061157c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611570575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161156791906126db565b60405180910390fd5b61157981611ad2565b50565b611584611603565b73ffffffffffffffffffffffffffffffffffffffff166115a2610f2d565b73ffffffffffffffffffffffffffffffffffffffff1614611601576115c5611603565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016115f891906126db565b60405180910390fd5b565b5f33905090565b6116178383836001611c55565b505050565b5f6116278484611470565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146116a85781811015611699578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161169093929190612e25565b60405180910390fd5b6116a784848484035f611c55565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361171e575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161171591906126db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361178e575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161178591906126db565b60405180910390fd5b611799838383611e24565b505050565b6001600660156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156117d5576117d4612e5a565b5b6040519080825280602002602001820160405280156118035781602001602082028036833780820191505090505b50905030815f8151811061181a57611819612df8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e19190612e9b565b816001815181106118f5576118f4612df8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6014600a5461193f9190612d5a565b90508083111561194d578092505b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b81526004016119ae959493929190612fb6565b5f604051808303815f87803b1580156119c5575f5ffd5b505af11580156119d7573d5f5f3e3d5ffd5b505050505f4790505f811115611ab2575f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611a2d90612bfb565b5f6040518083038185875af1925050503d805f8114611a67576040519150601f19603f3d011682016040523d82523d5f602084013e611a6c565b606091505b5050905080611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa79061307e565b60405180910390fd5b505b5050505f600660156101000a81548160ff02191690831515021790555050565b5f611adb610f2d565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b1b57611b1a815f611b33565b5b611b26826001611b33565b611b2f826121b6565b5050565b80600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb8282604051611bb892919061309c565b60405180910390a15050565b80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f024f6c8d60a57c94822c46d989fd6935057590269281b07fe8327d7e9bc424218282604051611c4992919061309c565b60405180910390a15050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611cc5575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611cbc91906126db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d35575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611d2c91906126db565b60405180910390fd5b8160025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611e1e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611e159190612663565b60405180910390a35b50505050565b600660169054906101000a900460ff1680611e855750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611ed65750600d5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f0c576040517f037c597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600660149054906101000a900460ff168015611f365750600660159054906101000a900460ff16155b8015611fda5750600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611fd85750600d5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b155b90508015612103575f5f9050600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561203d57505f600c54115b1561206457612710600c54846120539190612d5a565b61205d9190612dc8565b90506120df565b600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156120bb57505f600b54115b156120de57612710600b54846120d19190612d5a565b6120db9190612dc8565b90505b5b5f8111156121015780836120f391906130c3565b9250612100853083612277565b5b505b5f61210d30610cf8565b90505f600a54821015905082801561216c5750600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156121755750805b156121a3576009544311801561218c575060075443115b156121a25761219a8261179e565b436009819055505b5b6121ae868686612277565b505050505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122c7578060035f8282546122bb91906130f6565b92505081905550612397565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612351578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161234893929190612e25565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123de578060035f8282540392505081905550612429565b8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124869190612663565b60405180910390a3505050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124c48261249b565b9050919050565b6124d4816124ba565b81146124de575f5ffd5b50565b5f813590506124ef816124cb565b92915050565b5f6020828403121561250a57612509612493565b5b5f612517848285016124e1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61256282612520565b61256c818561252a565b935061257c81856020860161253a565b61258581612548565b840191505092915050565b5f6020820190508181035f8301526125a88184612558565b905092915050565b5f819050919050565b6125c2816125b0565b81146125cc575f5ffd5b50565b5f813590506125dd816125b9565b92915050565b5f5f604083850312156125f9576125f8612493565b5b5f612606858286016124e1565b9250506020612617858286016125cf565b9150509250929050565b5f8115159050919050565b61263581612621565b82525050565b5f60208201905061264e5f83018461262c565b92915050565b61265d816125b0565b82525050565b5f6020820190506126765f830184612654565b92915050565b5f5f5f6060848603121561269357612692612493565b5b5f6126a0868287016124e1565b93505060206126b1868287016124e1565b92505060406126c2868287016125cf565b9150509250925092565b6126d5816124ba565b82525050565b5f6020820190506126ee5f8301846126cc565b92915050565b5f60ff82169050919050565b612709816126f4565b82525050565b5f6020820190506127225f830184612700565b92915050565b5f5f6040838503121561273e5761273d612493565b5b5f61274b858286016125cf565b925050602061275c858286016125cf565b9150509250929050565b5f6020828403121561277b5761277a612493565b5b5f612788848285016125cf565b91505092915050565b61279a81612621565b81146127a4575f5ffd5b50565b5f813590506127b581612791565b92915050565b5f602082840312156127d0576127cf612493565b5b5f6127dd848285016127a7565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112612807576128066127e6565b5b8235905067ffffffffffffffff811115612824576128236127ea565b5b6020830191508360208202830111156128405761283f6127ee565b5b9250929050565b5f5f5f6040848603121561285e5761285d612493565b5b5f84013567ffffffffffffffff81111561287b5761287a612497565b5b612887868287016127f2565b9350935050602061289a868287016127a7565b9150509250925092565b5f5f604083850312156128ba576128b9612493565b5b5f6128c7858286016124e1565b92505060206128d8858286016127a7565b9150509250929050565b5f819050919050565b5f6129056129006128fb8461249b565b6128e2565b61249b565b9050919050565b5f612916826128eb565b9050919050565b5f6129278261290c565b9050919050565b6129378161291d565b82525050565b5f6020820190506129505f83018461292e565b92915050565b5f5f6040838503121561296c5761296b612493565b5b5f612979858286016124e1565b925050602061298a858286016124e1565b9150509250929050565b7f43616e6e6f7420726573637565206f776e20746f6b656e7300000000000000005f82015250565b5f6129c860188361252a565b91506129d382612994565b602082019050919050565b5f6020820190508181035f8301526129f5816129bc565b9050919050565b5f81519050612a0a816125b9565b92915050565b5f60208284031215612a2557612a24612493565b5b5f612a32848285016129fc565b91505092915050565b7f4e6f20746f6b656e7320746f20726573637565000000000000000000000000005f82015250565b5f612a6f60138361252a565b9150612a7a82612a3b565b602082019050919050565b5f6020820190508181035f830152612a9c81612a63565b9050919050565b5f604082019050612ab65f8301856126cc565b612ac36020830184612654565b9392505050565b5f81519050612ad881612791565b92915050565b5f60208284031215612af357612af2612493565b5b5f612b0084828501612aca565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612b4d57607f821691505b602082108103612b6057612b5f612b09565b5b50919050565b7f4e6f2045544820746f20726573637565000000000000000000000000000000005f82015250565b5f612b9a60108361252a565b9150612ba582612b66565b602082019050919050565b5f6020820190508181035f830152612bc781612b8e565b9050919050565b5f81905092915050565b50565b5f612be65f83612bce565b9150612bf182612bd8565b5f82019050919050565b5f612c0582612bdb565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f612c4360138361252a565b9150612c4e82612c0f565b602082019050919050565b5f6020820190508181035f830152612c7081612c37565b9050919050565b7f4e6f20746f6b656e7320746f20737761700000000000000000000000000000005f82015250565b5f612cab60118361252a565b9150612cb682612c77565b602082019050919050565b5f6020820190508181035f830152612cd881612c9f565b9050919050565b5f604082019050612cf25f8301856126cc565b612cff60208301846126cc565b9392505050565b5f604082019050612d195f830185612654565b612d266020830184612654565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d64826125b0565b9150612d6f836125b0565b9250828202612d7d816125b0565b91508282048414831517612d9457612d93612d2d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612dd2826125b0565b9150612ddd836125b0565b925082612ded57612dec612d9b565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f606082019050612e385f8301866126cc565b612e456020830185612654565b612e526040830184612654565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050612e95816124cb565b92915050565b5f60208284031215612eb057612eaf612493565b5b5f612ebd84828501612e87565b91505092915050565b5f819050919050565b5f612ee9612ee4612edf84612ec6565b6128e2565b6125b0565b9050919050565b612ef981612ecf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612f31816124ba565b82525050565b5f612f428383612f28565b60208301905092915050565b5f602082019050919050565b5f612f6482612eff565b612f6e8185612f09565b9350612f7983612f19565b805f5b83811015612fa9578151612f908882612f37565b9750612f9b83612f4e565b925050600181019050612f7c565b5085935050505092915050565b5f60a082019050612fc95f830188612654565b612fd66020830187612ef0565b8181036040830152612fe88186612f5a565b9050612ff760608301856126cc565b6130046080830184612654565b9695505050505050565b7f455448207472616e7366657220746f207461782077616c6c6574206661696c655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f61306860218361252a565b91506130738261300e565b604082019050919050565b5f6020820190508181035f8301526130958161305c565b9050919050565b5f6040820190506130af5f8301856126cc565b6130bc602083018461262c565b9392505050565b5f6130cd826125b0565b91506130d8836125b0565b92508282039050818111156130f0576130ef612d2d565b5b92915050565b5f613100826125b0565b915061310b836125b0565b925082820190508082111561312357613122612d2d565b5b9291505056fea2646970667358221220d971d5d260bc61637b40b6f6a6d0488bb39a2d38ae3518ee20302efe221c027064736f6c634300081e0033

Deployed Bytecode Sourcemap

7616:8610:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15914:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2091:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2958:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2385:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8247:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15633:273;;;;;;;;;;;;;:::i;:::-;;3156:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7766:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7806:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8183:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7902:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15416:209;;;;;;;;;;;;;:::i;:::-;;7708:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2492:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6585:103;;;;;;;;;;;;;:::i;:::-;;10855:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7934:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10602:245;;;;;;;;;;;;;:::i;:::-;;6316:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2190:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11685:629;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11267:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7839:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11126:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2618:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12429:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8458:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12649:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7655:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8282:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12324:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8341:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7971:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8403:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2808:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8102:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6696:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15914:309;6275:13;:11;:13::i;:::-;16006:4:::1;15989:22;;:5;:22;;::::0;15981:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16051:15;16076:5;16069:23;;;16101:4;16069:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16051:56;;16136:1;16126:7;:11;16118:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;16179:5;16172:22;;;16195:10;16207:7;16172:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15970:253;15914:309:::0;:::o;2091:91::-;2136:13;2169:5;2162:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2091:91;:::o;2958:190::-;3031:4;3048:13;3064:12;:10;:12::i;:::-;3048:28;;3087:31;3096:5;3103:7;3112:5;3087:8;:31::i;:::-;3136:4;3129:11;;;2958:190;;;;:::o;2385:99::-;2437:7;2464:12;;2457:19;;2385:99;:::o;8247:28::-;;;;:::o;15633:273::-;6275:13;:11;:13::i;:::-;15684:15:::1;15702:21;15684:39;;15752:1;15742:7;:11;15734:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;15786:12;15812:10;15804:24;;15836:7;15804:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15785:63;;;15867:7;15859:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;15673:233;;15633:273::o:0;3156:249::-;3243:4;3260:15;3278:12;:10;:12::i;:::-;3260:30;;3301:37;3317:4;3323:7;3332:5;3301:15;:37::i;:::-;3349:26;3359:4;3365:2;3369:5;3349:9;:26::i;:::-;3393:4;3386:11;;;3156:249;;;;;:::o;7766:33::-;;;:::o;7806:24::-;;;;;;;;;;;;;:::o;2293:84::-;2342:5;2367:2;2360:9;;2293:84;:::o;8183:48::-;8227:4;8183:48;:::o;7902:23::-;;;;;;;;;;;;;:::o;15416:209::-;6275:13;:11;:13::i;:::-;15468:23:::1;15494:24;15512:4;15494:9;:24::i;:::-;15468:50;;15555:1;15537:15;:19;15529:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;15589:28;15601:15;15589:11;:28::i;:::-;15457:168;15416:209::o:0;7708:49::-;7755:1;7708:49;:::o;2492:118::-;2557:7;2584:9;:18;2594:7;2584:18;;;;;;;;;;;;;;;;2577:25;;2492:118;;;:::o;6585:103::-;6275:13;:11;:13::i;:::-;6650:30:::1;6677:1;6650:18;:30::i;:::-;6585:103::o:0;10855:263::-;6275:13;:11;:13::i;:::-;7755:1:::1;10938:26;;:10;:26;;::::0;10930:53:::1;;;;;;;;;;;;;;;;;10994:17;11014:9;;;;;;;;;;;10994:29;;11046:10;11034:9;;:22;;;;;;;;;;;;;;;;;;11072:38;11089:9;;;;;;;;;;;11100;11072:38;;;;;;;:::i;:::-;;;;;;;;10919:199;10855:263:::0;:::o;7934:30::-;;;;:::o;10602:245::-;6275:13;:11;:13::i;:::-;10666:11:::1;;;;;;;;;;;10665:12;10657:41;;;;;;;;;;;;;;;;;10723:4;10709:11;;:18;;;;;;;;;;;;;;;;;;10756:12;10738:15;:30;;;;10796:15;10779:14;:32;;;;10827:12;;;;;;;;;;10602:245::o:0;6316:87::-;6362:7;6389:6;;;;;;;;;;;6382:13;;6316:87;:::o;2190:95::-;2237:13;2270:7;2263:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2190:95;:::o;11685:629::-;6275:13;:11;:13::i;:::-;11797:9:::1;;11783:10;:23;;11775:54;;;;;;;;;;;;;;;;;11863:10;;11848:11;:25;;11840:56;;;;;;;;;;;;;;;;;8227:4;11915:10;:31;;11907:54;;;;;;;;;;;;;;;;;8227:4;11980:11;:32;;11972:55;;;;;;;;;;;;;;;;;12040:17;12060:9;;12040:29;;12080:18;12101:10;;12080:31;;12144:10;12132:9;:22;;;;12178:11;12165:10;:24;;;;12215:36;12229:10;12241:9;12215:36;;;;;;;:::i;:::-;;;;;;;;12267:39;12282:11;12295:10;12267:39;;;;;;;:::i;:::-;;;;;;;;11764:550;;11685:629:::0;;:::o;11267:410::-;6275:13;:11;:13::i;:::-;11339:25:::1;11367:13;:11;:13::i;:::-;11339:41;;11435:7;11430:1;11410:17;:21;;;;:::i;:::-;11409:33;;;;:::i;:::-;11399:6;:43;;11391:70;;;;;;;;;;;;;;;;;11516:4;11511:1;11491:17;:21;;;;:::i;:::-;11490:30;;;;:::i;:::-;11480:6;:40;;11472:67;;;;;;;;;;;;;;;;;11550:16;11569:13;;11550:32;;11609:6;11593:13;:22;;;;11631:38;11652:6;11660:8;11631:38;;;;;;;:::i;:::-;;;;;;;;11328:349;;11267:410:::0;:::o;7839:23::-;;;;;;;;;;;;;:::o;11126:133::-;6275:13;:11;:13::i;:::-;11206:5:::1;11192:11;;:19;;;;;;;;;;;;;;;;;;11227:24;11245:5;11227:24;;;;;;:::i;:::-;;;;;;;;11126:133:::0;:::o;2618:182::-;2687:4;2704:13;2720:12;:10;:12::i;:::-;2704:28;;2743:27;2753:5;2760:2;2764:5;2743:9;:27::i;:::-;2788:4;2781:11;;;2618:182;;;;:::o;12429:212::-;6275:13;:11;:13::i;:::-;12530:9:::1;12542:1;12530:13;;12525:109;12549:8;;:15;;12545:1;:19;12525:109;;;12586:36;12603:8;;12612:1;12603:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;12616:5;12586:16;:36::i;:::-;12566:3;;;;;;;12525:109;;;;12429:212:::0;;;:::o;8458:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;12649:169::-;6275:13;:11;:13::i;:::-;12737:11:::1;:17;12749:4;12737:17;;;;;;;;;;;;;;;;;;;;;;;;;12736:18;12728:45;;;;;;;;;;;;;;;;;12784:26;12798:4;12804:5;12784:13;:26::i;:::-;12649:169:::0;;:::o;7655:44::-;;;:::o;8282:24::-;;;;:::o;12324:97::-;12376:7;12403:10;;12396:17;;12324:97;:::o;8341:25::-;;;;:::o;7971:29::-;;;;:::o;8403:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;2808:142::-;2888:7;2915:11;:18;2927:5;2915:18;;;;;;;;;;;;;;;:27;2934:7;2915:27;;;;;;;;;;;;;;;;2908:34;;2808:142;;;;:::o;8102:44::-;8141:5;8102:44;:::o;6696:220::-;6275:13;:11;:13::i;:::-;6801:1:::1;6781:22;;:8;:22;;::::0;6777:93:::1;;6855:1;6827:31;;;;;;;;;;;:::i;:::-;;;;;;;;6777:93;6880:28;6899:8;6880:18;:28::i;:::-;6696:220:::0;:::o;6411:166::-;6482:12;:10;:12::i;:::-;6471:23;;:7;:5;:7::i;:::-;:23;;;6467:103;;6545:12;:10;:12::i;:::-;6518:40;;;;;;;;;;;:::i;:::-;;;;;;;;6467:103;6411:166::o;1048:98::-;1101:7;1128:10;1121:17;;1048:98;:::o;4688:130::-;4773:37;4782:5;4789:7;4798:5;4805:4;4773:8;:37::i;:::-;4688:130;;;:::o;5277:487::-;5377:24;5404:25;5414:5;5421:7;5404:9;:25::i;:::-;5377:52;;5464:17;5444:16;:37;5440:317;;5521:5;5502:16;:24;5498:132;;;5581:7;5590:16;5608:5;5554:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;5498:132;5673:57;5682:5;5689:7;5717:5;5698:16;:24;5724:5;5673:8;:57::i;:::-;5440:317;5366:398;5277:487;;;:::o;3413:308::-;3513:1;3497:18;;:4;:18;;;3493:88;;3566:1;3539:30;;;;;;;;;;;:::i;:::-;;;;;;;;3493:88;3609:1;3595:16;;:2;:16;;;3591:88;;3664:1;3635:32;;;;;;;;;;;:::i;:::-;;;;;;;;3591:88;3689:24;3697:4;3703:2;3707:5;3689:7;:24::i;:::-;3413:308;;;:::o;14249:809::-;9266:4;9250:13;;:20;;;;;;;;;;;;;;;;;;14335:21:::1;14373:1;14359:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14335:40;;14404:4;14386;14391:1;14386:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;14430:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14420:4;14425:1;14420:7;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;::::0;::::1;14460:21;14500:2;14484:13;;:18;;;;:::i;:::-;14460:42;;14533:13;14519:11;:27;14515:87;;;14577:13;14563:27;;14515:87;14614:10;:61;;;14690:11;14716:1;14732:4;14759;14779:15;14614:191;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14818:18;14839:21;14818:42;;14888:1;14875:10;:14;14871:180;;;14907:12;14933:9;;;;;;;;;;;14925:23;;14956:10;14925:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14906:65;;;14994:7;14986:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;14891:160;14871:180;14324:734;;;9309:5:::0;9293:13;;:21;;;;;;;;;;;;;;;;;;14249:809;:::o;10297:297::-;10372:16;10391:7;:5;:7::i;:::-;10372:26;;7755:1;10413:24;;:8;:24;;;10409:90;;10454:33;10471:8;10481:5;10454:16;:33::i;:::-;10409:90;10509:32;10526:8;10536:4;10509:16;:32::i;:::-;10552:34;10577:8;10552:24;:34::i;:::-;10361:233;10297:297;:::o;15066:172::-;15177:5;15149:16;:25;15166:7;15149:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;15198:32;15215:7;15224:5;15198:32;;;;;;;:::i;:::-;;;;;;;;15066:172;;:::o;15246:162::-;15343:5;15323:11;:17;15335:4;15323:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15364:36;15388:4;15394:5;15364:36;;;;;;;:::i;:::-;;;;;;;;15246:162;;:::o;4826:443::-;4956:1;4939:19;;:5;:19;;;4935:91;;5011:1;4982:32;;;;;;;;;;;:::i;:::-;;;;;;;;4935:91;5059:1;5040:21;;:7;:21;;;5036:92;;5113:1;5085:31;;;;;;;;;;;:::i;:::-;;;;;;;;5036:92;5168:5;5138:11;:18;5150:5;5138:18;;;;;;;;;;;;;;;:27;5157:7;5138:27;;;;;;;;;;;;;;;:35;;;;5188:9;5184:78;;;5235:7;5219:31;;5228:5;5219:31;;;5244:5;5219:31;;;;;;:::i;:::-;;;;;;;;5184:78;4826:443;;;;:::o;12826:1415::-;12944:11;;;;;;;;;;;:37;;;;12959:16;:22;12976:4;12959:22;;;;;;;;;;;;;;;;;;;;;;;;;12944:37;:61;;;;12985:16;:20;13002:2;12985:20;;;;;;;;;;;;;;;;;;;;;;;;;12944:61;12922:123;;;;;;;;;;;;;;;;;13058:13;13074:11;;;;;;;;;;;:42;;;;;13103:13;;;;;;;;;;;13102:14;13074:42;:108;;;;;13135:16;:22;13152:4;13135:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;13161:16;:20;13178:2;13161:20;;;;;;;;;;;;;;;;;;;;;;;;;13135:46;13133:49;13074:108;13058:124;;13199:8;13195:598;;;13224:17;13244:1;13224:21;;13264:11;:15;13276:2;13264:15;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;13296:1;13283:10;;:14;13264:33;13260:369;;;8141:5;13400:10;;13391:6;:19;;;;:::i;:::-;13390:36;;;;:::i;:::-;13378:48;;13260:369;;;13452:11;:17;13464:4;13452:17;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;13485:1;13473:9;;:13;13452:34;13448:181;;;8141:5;13588:9;;13579:6;:18;;;;:::i;:::-;13578:35;;;;:::i;:::-;13566:47;;13448:181;13260:369;13661:1;13649:9;:13;13645:137;;;13693:9;13683:19;;;;;:::i;:::-;;;13721:45;13735:4;13749;13756:9;13721:13;:45::i;:::-;13645:137;13209:584;13195:598;13805:28;13836:24;13854:4;13836:9;:24::i;:::-;13805:55;;13871:12;13910:13;;13886:20;:37;;13871:52;;13938:8;:30;;;;;13951:11;:17;13963:4;13951:17;;;;;;;;;;;;;;;;;;;;;;;;;13950:18;13938:30;:41;;;;;13972:7;13938:41;13934:256;;;14015:13;;14000:12;:28;:62;;;;;14047:15;;14032:12;:30;14000:62;13996:183;;;14083:33;14095:20;14083:11;:33::i;:::-;14151:12;14135:13;:28;;;;13996:183;13934:256;14202:31;14216:4;14222:2;14226:6;14202:13;:31::i;:::-;12911:1330;;;12826:1415;;;:::o;6924:191::-;6998:16;7017:6;;;;;;;;;;;6998:25;;7043:8;7034:6;;:17;;;;;;;;;;;;;;;;;;7098:8;7067:40;;7088:8;7067:40;;;;;;;;;;;;6987:128;6924:191;:::o;3729:730::-;3835:1;3819:18;;:4;:18;;;3815:369;;3870:5;3854:12;;:21;;;;;;;:::i;:::-;;;;;;;;3815:369;;;3908:19;3930:9;:15;3940:4;3930:15;;;;;;;;;;;;;;;;3908:37;;3978:5;3964:11;:19;3960:117;;;4036:4;4042:11;4055:5;4011:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;3960:117;4152:5;4138:11;:19;4120:9;:15;4130:4;4120:15;;;;;;;;;;;;;;;:37;;;;3893:291;3815:369;4214:1;4200:16;;:2;:16;;;4196:213;;4278:5;4262:12;;:21;;;;;;;;;;;4196:213;;;4377:5;4360:9;:13;4370:2;4360:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;4196:213;4441:2;4426:25;;4435:4;4426:25;;;4445:5;4426:25;;;;;;:::i;:::-;;;;;;;;3729:730;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:139::-;1545:6;1540:3;1535;1529:23;1586:1;1577:6;1572:3;1568:16;1561:27;1456:139;;;:::o;1601:102::-;1642:6;1693:2;1689:7;1684:2;1677:5;1673:14;1669:28;1659:38;;1601:102;;;:::o;1709:377::-;1797:3;1825:39;1858:5;1825:39;:::i;:::-;1880:71;1944:6;1939:3;1880:71;:::i;:::-;1873:78;;1960:65;2018:6;2013:3;2006:4;1999:5;1995:16;1960:65;:::i;:::-;2050:29;2072:6;2050:29;:::i;:::-;2045:3;2041:39;2034:46;;1801:285;1709:377;;;;:::o;2092:313::-;2205:4;2243:2;2232:9;2228:18;2220:26;;2292:9;2286:4;2282:20;2278:1;2267:9;2263:17;2256:47;2320:78;2393:4;2384:6;2320:78;:::i;:::-;2312:86;;2092:313;;;;:::o;2411:77::-;2448:7;2477:5;2466:16;;2411:77;;;:::o;2494:122::-;2567:24;2585:5;2567:24;:::i;:::-;2560:5;2557:35;2547:63;;2606:1;2603;2596:12;2547:63;2494:122;:::o;2622:139::-;2668:5;2706:6;2693:20;2684:29;;2722:33;2749:5;2722:33;:::i;:::-;2622:139;;;;:::o;2767:474::-;2835:6;2843;2892:2;2880:9;2871:7;2867:23;2863:32;2860:119;;;2898:79;;:::i;:::-;2860:119;3018:1;3043:53;3088:7;3079:6;3068:9;3064:22;3043:53;:::i;:::-;3033:63;;2989:117;3145:2;3171:53;3216:7;3207:6;3196:9;3192:22;3171:53;:::i;:::-;3161:63;;3116:118;2767:474;;;;;:::o;3247:90::-;3281:7;3324:5;3317:13;3310:21;3299:32;;3247:90;;;:::o;3343:109::-;3424:21;3439:5;3424:21;:::i;:::-;3419:3;3412:34;3343:109;;:::o;3458:210::-;3545:4;3583:2;3572:9;3568:18;3560:26;;3596:65;3658:1;3647:9;3643:17;3634:6;3596:65;:::i;:::-;3458:210;;;;:::o;3674:118::-;3761:24;3779:5;3761:24;:::i;:::-;3756:3;3749:37;3674:118;;:::o;3798:222::-;3891:4;3929:2;3918:9;3914:18;3906:26;;3942:71;4010:1;3999:9;3995:17;3986:6;3942:71;:::i;:::-;3798:222;;;;:::o;4026:619::-;4103:6;4111;4119;4168:2;4156:9;4147:7;4143:23;4139:32;4136:119;;;4174:79;;:::i;:::-;4136:119;4294:1;4319:53;4364:7;4355:6;4344:9;4340:22;4319:53;:::i;:::-;4309:63;;4265:117;4421:2;4447:53;4492:7;4483:6;4472:9;4468:22;4447:53;:::i;:::-;4437:63;;4392:118;4549:2;4575:53;4620:7;4611:6;4600:9;4596:22;4575:53;:::i;:::-;4565:63;;4520:118;4026:619;;;;;:::o;4651:118::-;4738:24;4756:5;4738:24;:::i;:::-;4733:3;4726:37;4651:118;;:::o;4775:222::-;4868:4;4906:2;4895:9;4891:18;4883:26;;4919:71;4987:1;4976:9;4972:17;4963:6;4919:71;:::i;:::-;4775:222;;;;:::o;5003:86::-;5038:7;5078:4;5071:5;5067:16;5056:27;;5003:86;;;:::o;5095:112::-;5178:22;5194:5;5178:22;:::i;:::-;5173:3;5166:35;5095:112;;:::o;5213:214::-;5302:4;5340:2;5329:9;5325:18;5317:26;;5353:67;5417:1;5406:9;5402:17;5393:6;5353:67;:::i;:::-;5213:214;;;;:::o;5433:474::-;5501:6;5509;5558:2;5546:9;5537:7;5533:23;5529:32;5526:119;;;5564:79;;:::i;:::-;5526:119;5684:1;5709:53;5754:7;5745:6;5734:9;5730:22;5709:53;:::i;:::-;5699:63;;5655:117;5811:2;5837:53;5882:7;5873:6;5862:9;5858:22;5837:53;:::i;:::-;5827:63;;5782:118;5433:474;;;;;:::o;5913:329::-;5972:6;6021:2;6009:9;6000:7;5996:23;5992:32;5989:119;;;6027:79;;:::i;:::-;5989:119;6147:1;6172:53;6217:7;6208:6;6197:9;6193:22;6172:53;:::i;:::-;6162:63;;6118:117;5913:329;;;;:::o;6248:116::-;6318:21;6333:5;6318:21;:::i;:::-;6311:5;6308:32;6298:60;;6354:1;6351;6344:12;6298:60;6248:116;:::o;6370:133::-;6413:5;6451:6;6438:20;6429:29;;6467:30;6491:5;6467:30;:::i;:::-;6370:133;;;;:::o;6509:323::-;6565:6;6614:2;6602:9;6593:7;6589:23;6585:32;6582:119;;;6620:79;;:::i;:::-;6582:119;6740:1;6765:50;6807:7;6798:6;6787:9;6783:22;6765:50;:::i;:::-;6755:60;;6711:114;6509:323;;;;:::o;6838:117::-;6947:1;6944;6937:12;6961:117;7070:1;7067;7060:12;7084:117;7193:1;7190;7183:12;7224:568;7297:8;7307:6;7357:3;7350:4;7342:6;7338:17;7334:27;7324:122;;7365:79;;:::i;:::-;7324:122;7478:6;7465:20;7455:30;;7508:18;7500:6;7497:30;7494:117;;;7530:79;;:::i;:::-;7494:117;7644:4;7636:6;7632:17;7620:29;;7698:3;7690:4;7682:6;7678:17;7668:8;7664:32;7661:41;7658:128;;;7705:79;;:::i;:::-;7658:128;7224:568;;;;;:::o;7798:698::-;7890:6;7898;7906;7955:2;7943:9;7934:7;7930:23;7926:32;7923:119;;;7961:79;;:::i;:::-;7923:119;8109:1;8098:9;8094:17;8081:31;8139:18;8131:6;8128:30;8125:117;;;8161:79;;:::i;:::-;8125:117;8274:80;8346:7;8337:6;8326:9;8322:22;8274:80;:::i;:::-;8256:98;;;;8052:312;8403:2;8429:50;8471:7;8462:6;8451:9;8447:22;8429:50;:::i;:::-;8419:60;;8374:115;7798:698;;;;;:::o;8502:468::-;8567:6;8575;8624:2;8612:9;8603:7;8599:23;8595:32;8592:119;;;8630:79;;:::i;:::-;8592:119;8750:1;8775:53;8820:7;8811:6;8800:9;8796:22;8775:53;:::i;:::-;8765:63;;8721:117;8877:2;8903:50;8945:7;8936:6;8925:9;8921:22;8903:50;:::i;:::-;8893:60;;8848:115;8502:468;;;;;:::o;8976:60::-;9004:3;9025:5;9018:12;;8976:60;;;:::o;9042:142::-;9092:9;9125:53;9143:34;9152:24;9170:5;9152:24;:::i;:::-;9143:34;:::i;:::-;9125:53;:::i;:::-;9112:66;;9042:142;;;:::o;9190:126::-;9240:9;9273:37;9304:5;9273:37;:::i;:::-;9260:50;;9190:126;;;:::o;9322:150::-;9396:9;9429:37;9460:5;9429:37;:::i;:::-;9416:50;;9322:150;;;:::o;9478:179::-;9589:61;9644:5;9589:61;:::i;:::-;9584:3;9577:74;9478:179;;:::o;9663:270::-;9780:4;9818:2;9807:9;9803:18;9795:26;;9831:95;9923:1;9912:9;9908:17;9899:6;9831:95;:::i;:::-;9663:270;;;;:::o;9939:474::-;10007:6;10015;10064:2;10052:9;10043:7;10039:23;10035:32;10032:119;;;10070:79;;:::i;:::-;10032:119;10190:1;10215:53;10260:7;10251:6;10240:9;10236:22;10215:53;:::i;:::-;10205:63;;10161:117;10317:2;10343:53;10388:7;10379:6;10368:9;10364:22;10343:53;:::i;:::-;10333:63;;10288:118;9939:474;;;;;:::o;10419:174::-;10559:26;10555:1;10547:6;10543:14;10536:50;10419:174;:::o;10599:366::-;10741:3;10762:67;10826:2;10821:3;10762:67;:::i;:::-;10755:74;;10838:93;10927:3;10838:93;:::i;:::-;10956:2;10951:3;10947:12;10940:19;;10599:366;;;:::o;10971:419::-;11137:4;11175:2;11164:9;11160:18;11152:26;;11224:9;11218:4;11214:20;11210:1;11199:9;11195:17;11188:47;11252:131;11378:4;11252:131;:::i;:::-;11244:139;;10971:419;;;:::o;11396:143::-;11453:5;11484:6;11478:13;11469:22;;11500:33;11527:5;11500:33;:::i;:::-;11396:143;;;;:::o;11545:351::-;11615:6;11664:2;11652:9;11643:7;11639:23;11635:32;11632:119;;;11670:79;;:::i;:::-;11632:119;11790:1;11815:64;11871:7;11862:6;11851:9;11847:22;11815:64;:::i;:::-;11805:74;;11761:128;11545:351;;;;:::o;11902:169::-;12042:21;12038:1;12030:6;12026:14;12019:45;11902:169;:::o;12077:366::-;12219:3;12240:67;12304:2;12299:3;12240:67;:::i;:::-;12233:74;;12316:93;12405:3;12316:93;:::i;:::-;12434:2;12429:3;12425:12;12418:19;;12077:366;;;:::o;12449:419::-;12615:4;12653:2;12642:9;12638:18;12630:26;;12702:9;12696:4;12692:20;12688:1;12677:9;12673:17;12666:47;12730:131;12856:4;12730:131;:::i;:::-;12722:139;;12449:419;;;:::o;12874:332::-;12995:4;13033:2;13022:9;13018:18;13010:26;;13046:71;13114:1;13103:9;13099:17;13090:6;13046:71;:::i;:::-;13127:72;13195:2;13184:9;13180:18;13171:6;13127:72;:::i;:::-;12874:332;;;;;:::o;13212:137::-;13266:5;13297:6;13291:13;13282:22;;13313:30;13337:5;13313:30;:::i;:::-;13212:137;;;;:::o;13355:345::-;13422:6;13471:2;13459:9;13450:7;13446:23;13442:32;13439:119;;;13477:79;;:::i;:::-;13439:119;13597:1;13622:61;13675:7;13666:6;13655:9;13651:22;13622:61;:::i;:::-;13612:71;;13568:125;13355:345;;;;:::o;13706:180::-;13754:77;13751:1;13744:88;13851:4;13848:1;13841:15;13875:4;13872:1;13865:15;13892:320;13936:6;13973:1;13967:4;13963:12;13953:22;;14020:1;14014:4;14010:12;14041:18;14031:81;;14097:4;14089:6;14085:17;14075:27;;14031:81;14159:2;14151:6;14148:14;14128:18;14125:38;14122:84;;14178:18;;:::i;:::-;14122:84;13943:269;13892:320;;;:::o;14218:166::-;14358:18;14354:1;14346:6;14342:14;14335:42;14218:166;:::o;14390:366::-;14532:3;14553:67;14617:2;14612:3;14553:67;:::i;:::-;14546:74;;14629:93;14718:3;14629:93;:::i;:::-;14747:2;14742:3;14738:12;14731:19;;14390:366;;;:::o;14762:419::-;14928:4;14966:2;14955:9;14951:18;14943:26;;15015:9;15009:4;15005:20;15001:1;14990:9;14986:17;14979:47;15043:131;15169:4;15043:131;:::i;:::-;15035:139;;14762:419;;;:::o;15187:147::-;15288:11;15325:3;15310:18;;15187:147;;;;:::o;15340:114::-;;:::o;15460:398::-;15619:3;15640:83;15721:1;15716:3;15640:83;:::i;:::-;15633:90;;15732:93;15821:3;15732:93;:::i;:::-;15850:1;15845:3;15841:11;15834:18;;15460:398;;;:::o;15864:379::-;16048:3;16070:147;16213:3;16070:147;:::i;:::-;16063:154;;16234:3;16227:10;;15864:379;;;:::o;16249:169::-;16389:21;16385:1;16377:6;16373:14;16366:45;16249:169;:::o;16424:366::-;16566:3;16587:67;16651:2;16646:3;16587:67;:::i;:::-;16580:74;;16663:93;16752:3;16663:93;:::i;:::-;16781:2;16776:3;16772:12;16765:19;;16424:366;;;:::o;16796:419::-;16962:4;17000:2;16989:9;16985:18;16977:26;;17049:9;17043:4;17039:20;17035:1;17024:9;17020:17;17013:47;17077:131;17203:4;17077:131;:::i;:::-;17069:139;;16796:419;;;:::o;17221:167::-;17361:19;17357:1;17349:6;17345:14;17338:43;17221:167;:::o;17394:366::-;17536:3;17557:67;17621:2;17616:3;17557:67;:::i;:::-;17550:74;;17633:93;17722:3;17633:93;:::i;:::-;17751:2;17746:3;17742:12;17735:19;;17394:366;;;:::o;17766:419::-;17932:4;17970:2;17959:9;17955:18;17947:26;;18019:9;18013:4;18009:20;18005:1;17994:9;17990:17;17983:47;18047:131;18173:4;18047:131;:::i;:::-;18039:139;;17766:419;;;:::o;18191:332::-;18312:4;18350:2;18339:9;18335:18;18327:26;;18363:71;18431:1;18420:9;18416:17;18407:6;18363:71;:::i;:::-;18444:72;18512:2;18501:9;18497:18;18488:6;18444:72;:::i;:::-;18191:332;;;;;:::o;18529:::-;18650:4;18688:2;18677:9;18673:18;18665:26;;18701:71;18769:1;18758:9;18754:17;18745:6;18701:71;:::i;:::-;18782:72;18850:2;18839:9;18835:18;18826:6;18782:72;:::i;:::-;18529:332;;;;;:::o;18867:180::-;18915:77;18912:1;18905:88;19012:4;19009:1;19002:15;19036:4;19033:1;19026:15;19053:410;19093:7;19116:20;19134:1;19116:20;:::i;:::-;19111:25;;19150:20;19168:1;19150:20;:::i;:::-;19145:25;;19205:1;19202;19198:9;19227:30;19245:11;19227:30;:::i;:::-;19216:41;;19406:1;19397:7;19393:15;19390:1;19387:22;19367:1;19360:9;19340:83;19317:139;;19436:18;;:::i;:::-;19317:139;19101:362;19053:410;;;;:::o;19469:180::-;19517:77;19514:1;19507:88;19614:4;19611:1;19604:15;19638:4;19635:1;19628:15;19655:185;19695:1;19712:20;19730:1;19712:20;:::i;:::-;19707:25;;19746:20;19764:1;19746:20;:::i;:::-;19741:25;;19785:1;19775:35;;19790:18;;:::i;:::-;19775:35;19832:1;19829;19825:9;19820:14;;19655:185;;;;:::o;19846:180::-;19894:77;19891:1;19884:88;19991:4;19988:1;19981:15;20015:4;20012:1;20005:15;20032:442;20181:4;20219:2;20208:9;20204:18;20196:26;;20232:71;20300:1;20289:9;20285:17;20276:6;20232:71;:::i;:::-;20313:72;20381:2;20370:9;20366:18;20357:6;20313:72;:::i;:::-;20395;20463:2;20452:9;20448:18;20439:6;20395:72;:::i;:::-;20032:442;;;;;;:::o;20480:180::-;20528:77;20525:1;20518:88;20625:4;20622:1;20615:15;20649:4;20646:1;20639:15;20666:143;20723:5;20754:6;20748:13;20739:22;;20770:33;20797:5;20770:33;:::i;:::-;20666:143;;;;:::o;20815:351::-;20885:6;20934:2;20922:9;20913:7;20909:23;20905:32;20902:119;;;20940:79;;:::i;:::-;20902:119;21060:1;21085:64;21141:7;21132:6;21121:9;21117:22;21085:64;:::i;:::-;21075:74;;21031:128;20815:351;;;;:::o;21172:85::-;21217:7;21246:5;21235:16;;21172:85;;;:::o;21263:158::-;21321:9;21354:61;21372:42;21381:32;21407:5;21381:32;:::i;:::-;21372:42;:::i;:::-;21354:61;:::i;:::-;21341:74;;21263:158;;;:::o;21427:147::-;21522:45;21561:5;21522:45;:::i;:::-;21517:3;21510:58;21427:147;;:::o;21580:114::-;21647:6;21681:5;21675:12;21665:22;;21580:114;;;:::o;21700:184::-;21799:11;21833:6;21828:3;21821:19;21873:4;21868:3;21864:14;21849:29;;21700:184;;;;:::o;21890:132::-;21957:4;21980:3;21972:11;;22010:4;22005:3;22001:14;21993:22;;21890:132;;;:::o;22028:108::-;22105:24;22123:5;22105:24;:::i;:::-;22100:3;22093:37;22028:108;;:::o;22142:179::-;22211:10;22232:46;22274:3;22266:6;22232:46;:::i;:::-;22310:4;22305:3;22301:14;22287:28;;22142:179;;;;:::o;22327:113::-;22397:4;22429;22424:3;22420:14;22412:22;;22327:113;;;:::o;22476:732::-;22595:3;22624:54;22672:5;22624:54;:::i;:::-;22694:86;22773:6;22768:3;22694:86;:::i;:::-;22687:93;;22804:56;22854:5;22804:56;:::i;:::-;22883:7;22914:1;22899:284;22924:6;22921:1;22918:13;22899:284;;;23000:6;22994:13;23027:63;23086:3;23071:13;23027:63;:::i;:::-;23020:70;;23113:60;23166:6;23113:60;:::i;:::-;23103:70;;22959:224;22946:1;22943;22939:9;22934:14;;22899:284;;;22903:14;23199:3;23192:10;;22600:608;;;22476:732;;;;:::o;23214:831::-;23477:4;23515:3;23504:9;23500:19;23492:27;;23529:71;23597:1;23586:9;23582:17;23573:6;23529:71;:::i;:::-;23610:80;23686:2;23675:9;23671:18;23662:6;23610:80;:::i;:::-;23737:9;23731:4;23727:20;23722:2;23711:9;23707:18;23700:48;23765:108;23868:4;23859:6;23765:108;:::i;:::-;23757:116;;23883:72;23951:2;23940:9;23936:18;23927:6;23883:72;:::i;:::-;23965:73;24033:3;24022:9;24018:19;24009:6;23965:73;:::i;:::-;23214:831;;;;;;;;:::o;24051:220::-;24191:34;24187:1;24179:6;24175:14;24168:58;24260:3;24255:2;24247:6;24243:15;24236:28;24051:220;:::o;24277:366::-;24419:3;24440:67;24504:2;24499:3;24440:67;:::i;:::-;24433:74;;24516:93;24605:3;24516:93;:::i;:::-;24634:2;24629:3;24625:12;24618:19;;24277:366;;;:::o;24649:419::-;24815:4;24853:2;24842:9;24838:18;24830:26;;24902:9;24896:4;24892:20;24888:1;24877:9;24873:17;24866:47;24930:131;25056:4;24930:131;:::i;:::-;24922:139;;24649:419;;;:::o;25074:320::-;25189:4;25227:2;25216:9;25212:18;25204:26;;25240:71;25308:1;25297:9;25293:17;25284:6;25240:71;:::i;:::-;25321:66;25383:2;25372:9;25368:18;25359:6;25321:66;:::i;:::-;25074:320;;;;;:::o;25400:194::-;25440:4;25460:20;25478:1;25460:20;:::i;:::-;25455:25;;25494:20;25512:1;25494:20;:::i;:::-;25489:25;;25538:1;25535;25531:9;25523:17;;25562:1;25556:4;25553:11;25550:37;;;25567:18;;:::i;:::-;25550:37;25400:194;;;;:::o;25600:191::-;25640:3;25659:20;25677:1;25659:20;:::i;:::-;25654:25;;25693:20;25711:1;25693:20;:::i;:::-;25688:25;;25736:1;25733;25729:9;25722:16;;25757:3;25754:1;25751:10;25748:36;;;25764:18;;:::i;:::-;25748:36;25600:191;;;;:::o

Swarm Source

ipfs://d971d5d260bc61637b40b6f6a6d0488bb39a2d38ae3518ee20302efe221c0270

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

OVERVIEW

Opal is a privacy-first perpetuals exchange built for traders who demand fairness. Sealed trades no one can exploit, not even the house. 100% of revenue distributed in ETH to ALL holders.

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.