ETH Price: $3,406.67 (-1.86%)
Gas: 14 Gwei

Contract

0xa8d8B65629653471cE7Fa9dC8Efc1Bfb47b5c8Ae
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve200510632024-06-09 1:43:3544 days ago1717897415IN
0xa8d8B656...b47b5c8Ae
0 ETH0.000237075.1
Transfer200510502024-06-09 1:40:5944 days ago1717897259IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0029612212.06768302
Approve195921792024-04-05 21:21:11108 days ago1712352071IN
0xa8d8B656...b47b5c8Ae
0 ETH0.000942920.38893273
Approve195921772024-04-05 21:20:47108 days ago1712352047IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0009303420.11740833
Sweep195750742024-04-03 11:54:35111 days ago1712145275IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0005703818.79617702
Approve195750202024-04-03 11:43:23111 days ago1712144603IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0010308922.1763569
Approve181914322023-09-22 12:38:23305 days ago1695386303IN
0xa8d8B656...b47b5c8Ae
0 ETH0.000375698.13440692
Approve181652492023-09-18 20:37:59308 days ago1695069479IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0011372724.63019036
Approve175343262023-06-22 9:39:35397 days ago1687426775IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0006016213.02619783
Approve173434562023-05-26 13:06:23424 days ago1685106383IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0014460831.10801994
Approve166852602023-02-22 16:47:59517 days ago1677084479IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0022048547.43046677
Approve165846192023-02-08 14:21:23531 days ago1675866083IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0010688744.16462779
Approve165846152023-02-08 14:20:35531 days ago1675866035IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0019921942.85582302
Approve165622312023-02-05 11:16:59534 days ago1675595819IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0007834916.8545234
Approve165085542023-01-28 23:18:47541 days ago1674947927IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0006730814.47934227
Approve164634202023-01-22 16:04:35548 days ago1674403475IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0003830415.78767969
Approve164464502023-01-20 7:13:59550 days ago1674198839IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0007215415.5017419
Approve162766012022-12-27 14:12:35574 days ago1672150355IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0006020712.9349511
Approve157036422022-10-08 13:22:23654 days ago1665235343IN
0xa8d8B656...b47b5c8Ae
0 ETH0.000295486.34815498
Approve154214882022-08-27 12:06:59696 days ago1661602019IN
0xa8d8B656...b47b5c8Ae
0 ETH0.000281846.05525138
Approve153725642022-08-19 17:08:59704 days ago1660928939IN
0xa8d8B656...b47b5c8Ae
0 ETH0.000390918.39840633
Approve153513192022-08-16 8:33:08707 days ago1660638788IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0005258811.29816189
Approve152593542022-08-01 22:31:44721 days ago1659393104IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0002962112.20915649
Approve152432752022-07-30 10:34:36724 days ago1659177276IN
0xa8d8B656...b47b5c8Ae
0 ETH0.000225724.8495836
Approve151571602022-07-17 1:18:19737 days ago1658020699IN
0xa8d8B656...b47b5c8Ae
0 ETH0.0008684818.66335708
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
195750742024-04-03 11:54:35111 days ago1712145275
0xa8d8B656...b47b5c8Ae
0.05594491 ETH
195750252024-04-03 11:44:23111 days ago1712144663
0xa8d8B656...b47b5c8Ae
0.00117215 ETH
195750252024-04-03 11:44:23111 days ago1712144663
0xa8d8B656...b47b5c8Ae
0.00234431 ETH
195750252024-04-03 11:44:23111 days ago1712144663
0xa8d8B656...b47b5c8Ae
0.00117215 ETH
195750252024-04-03 11:44:23111 days ago1712144663
0xa8d8B656...b47b5c8Ae
0.00468862 ETH
175343292023-06-22 9:40:11397 days ago1687426811
0xa8d8B656...b47b5c8Ae
0.00052305 ETH
175343292023-06-22 9:40:11397 days ago1687426811
0xa8d8B656...b47b5c8Ae
0.00104611 ETH
175343292023-06-22 9:40:11397 days ago1687426811
0xa8d8B656...b47b5c8Ae
0.00052305 ETH
175343292023-06-22 9:40:11397 days ago1687426811
0xa8d8B656...b47b5c8Ae
0.00209222 ETH
173434612023-05-26 13:07:23424 days ago1685106443
0xa8d8B656...b47b5c8Ae
0.00137478 ETH
173434612023-05-26 13:07:23424 days ago1685106443
0xa8d8B656...b47b5c8Ae
0.00274957 ETH
173434612023-05-26 13:07:23424 days ago1685106443
0xa8d8B656...b47b5c8Ae
0.00137478 ETH
173434612023-05-26 13:07:23424 days ago1685106443
0xa8d8B656...b47b5c8Ae
0.00549914 ETH
165622352023-02-05 11:17:59534 days ago1675595879
0xa8d8B656...b47b5c8Ae
0.00052942 ETH
165622352023-02-05 11:17:59534 days ago1675595879
0xa8d8B656...b47b5c8Ae
0.00105884 ETH
165622352023-02-05 11:17:59534 days ago1675595879
0xa8d8B656...b47b5c8Ae
0.00052942 ETH
165622352023-02-05 11:17:59534 days ago1675595879
0xa8d8B656...b47b5c8Ae
0.00211769 ETH
164465252023-01-20 7:29:11550 days ago1674199751
0xa8d8B656...b47b5c8Ae
0.00087568 ETH
164465252023-01-20 7:29:11550 days ago1674199751
0xa8d8B656...b47b5c8Ae
0.00175137 ETH
164465252023-01-20 7:29:11550 days ago1674199751
0xa8d8B656...b47b5c8Ae
0.00087568 ETH
164465252023-01-20 7:29:11550 days ago1674199751
0xa8d8B656...b47b5c8Ae
0.00350275 ETH
157036442022-10-08 13:22:47654 days ago1665235367
0xa8d8B656...b47b5c8Ae
0.00071143 ETH
157036442022-10-08 13:22:47654 days ago1665235367
0xa8d8B656...b47b5c8Ae
0.00142287 ETH
157036442022-10-08 13:22:47654 days ago1665235367
0xa8d8B656...b47b5c8Ae
0.00071143 ETH
157036442022-10-08 13:22:47654 days ago1665235367
0xa8d8B656...b47b5c8Ae
0.00284575 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Zero

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-10
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
    address internal owner;
    constructor(address _owner) {
        owner = _owner;
    }
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        emit OwnershipTransferred(adr);
    }
    event OwnershipTransferred(address owner);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
}

interface IDividendDistributor {
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
}

interface IVault {
    function sendToDevWallet() external payable;
}

contract DividendDistributor is IDividendDistributor, Auth {
    using SafeMath for uint256;

    address _token;
    address _depositorOne;
    address _depositorTwo;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IERC20 BASE = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => uint256) public totalRewardsDistributed;
    mapping (address => mapping (address => uint256)) public totalRewardsToUser;

    mapping (address => mapping (address => bool)) public canClaimDividendOfUser;

    mapping (address => bool) public availableRewards;
    mapping (address => address) public pathRewards;

    mapping (address => bool) public allowed;
    mapping (address => address) public choice;

    mapping (address => Share) public shares;

    address public DEFAULT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; // USDT (Default)
    address public constant USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    address public constant DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    modifier onlyToken() {
        require(msg.sender == _token || msg.sender == _depositorOne || msg.sender == _depositorTwo);
        _;
    }

    constructor (
        address _router,
        address _owner
    ) Auth(_owner) {
        router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
        _depositorOne = 0x7f62FFC4730887561320D5bc5fd8651F739C207e;
        _depositorTwo = 0x7f62FFC4730887561320D5bc5fd8651F739C207e;
        allowed[DEFAULT] = true;
        allowed[USDC] = true;
        allowed[DAI] = true;
        IERC20(BASE).approve(_router, 2**256 - 1);
    }

    receive() external payable {}

    function getTotalRewards(address token) public view returns (uint256) {
        return totalRewardsDistributed[token];
    }

    function getTotalRewardsToUser(address token, address user) public view returns (uint256) {
        return totalRewardsToUser[token][user];
    }

    function checkCanClaimDividendOfUser(address user, address claimer) public view returns (bool) {
        return canClaimDividendOfUser[user][claimer];
    }

    function setReward(
        address _reward,
        bool status
    ) public onlyOwner {
        availableRewards[_reward] = status;
    }

    function setPathReward(
        address _reward,
        address _path
    ) public onlyOwner {
        pathRewards[_reward] = _path;
    }

    function getPathReward(
        address _reward
    ) public view returns (address) {
        return pathRewards[_reward];
    }

    function changeRouterVersion(
        address _router
    ) external onlyOwner {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);
        router = _uniswapV2Router;
    }

    function setShare(
        address shareholder,
        uint256 amount
    ) external override onlyToken {
        if (shares[shareholder].amount > 0) {
            if (allowed[choice[shareholder]]) {
                distributeDividend(shareholder, choice[shareholder]);
            } else {
                distributeDividend(shareholder, DEFAULT);
            }
        }
        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 amount = msg.value;
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function depositOwner() external payable onlyOwner {
        if (msg.value > 0) {
            uint256 amount = msg.value;
            totalDividends = totalDividends.add(amount);
            dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
        }
    }

    function distributeDividend(
        address shareholder,
        address rewardAddress
    ) internal {
        require(allowed[rewardAddress], "Invalid reward address!");
        if (shares[shareholder].amount == 0) return;
        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            if (rewardAddress == address(BASE)) {
                payable(shareholder).transfer(amount);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(amount);  
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(amount);
            } else {
                IERC20 rewardToken = IERC20(rewardAddress);
                uint256 beforeBalance = rewardToken.balanceOf(shareholder);
                if (pathRewards[rewardAddress] == address(0)) {
                    address[] memory path = new address[](2);
                    path[0] = address(BASE);
                    path[1] = rewardAddress;
                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path, shareholder, block.timestamp);                 
                } else {
                    address[] memory path = new address[](3);
                    path[0] = address(BASE);
                    path[1] = pathRewards[rewardAddress];
                    path[2] = rewardAddress;
                    router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path, shareholder, block.timestamp);
                }
                uint256 afterBalance = rewardToken.balanceOf(shareholder);
                totalRewardsDistributed[rewardAddress] = totalRewardsDistributed[rewardAddress].add(afterBalance.sub(beforeBalance));
                totalRewardsToUser[rewardAddress][shareholder] = totalRewardsToUser[rewardAddress][shareholder].add(afterBalance.sub(beforeBalance));
            }
        }
    }

    function makeApprove(
        address token,
        address spender,
        uint256 amount
    ) public onlyOwner {
        IERC20(token).approve(spender, amount);
    }

    function claimDividend(
        address rewardAddress
    ) external {
        distributeDividend(msg.sender, rewardAddress);
    }

    function setChoice(
        address _choice
    ) external {
        require(allowed[_choice]);
        choice[msg.sender] = _choice;
    }

    function toggleChoice(
        address _choice
    ) public onlyOwner {
        allowed[_choice] = !allowed[_choice];
    }

    function getChoice(
        address _choice
    ) public view returns (bool) {
        return allowed[_choice];
    }

    function claimDividendOfUser(
        address user,
        address rewardAddress
    ) external {
        require(canClaimDividendOfUser[user][msg.sender], "You can't do that");
        distributeDividend(user, rewardAddress);
    }

    function setClaimDividendOfUser(
        address claimer,
        bool status
    ) external {
        canClaimDividendOfUser[msg.sender][claimer] = status;
    }

    function getUnpaidEarnings(
        address shareholder
    ) public view returns (uint256) {
        if (shares[shareholder].amount == 0) return 0;
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if (shareholderTotalDividends <= shareholderTotalExcluded) return 0;
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(
        uint256 share
    ) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(
        address shareholder
    ) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(
        address shareholder
    ) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1];
        shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

    function sweep() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function changeBASE(
        address _BASE
    ) external onlyOwner {
        BASE = IERC20(_BASE);
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function changeDEFAULT(
        address _DEFAULT
    ) external onlyOwner {
        DEFAULT = _DEFAULT;
    }

    function changeDepositorOne(
        address depositor
    ) external onlyOwner {
        _depositorOne = depositor;
    }

    function changeDepositorTwo(
        address depositor
    ) external onlyOwner {
        _depositorTwo = depositor;
    }

    function newApproval(
        address token,
        address _contract
    ) external onlyOwner {
        IERC20(token).approve(_contract, 2**256 - 1);
    }

    function transferForeignToken(
        address token,
        address _to
    ) external onlyOwner {
        require(token != address(this), "Can't withdraw native tokens");
        IERC20(token).transfer(_to, IERC20(token).balanceOf(address(this)));
    }
}

contract Zero is IERC20, Auth {
    using SafeMath for uint256;

    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Going to Zero";
    string constant _symbol = "ZERO";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 public _maxWallet = _totalSupply.div(50);

    uint256 public minAmountToTriggerSwap = 0;

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

    mapping (address => bool) public isDisabledExempt;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) public _isFree;

    bool public isFeeOnTransferEnabled = false;

    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 buyLiquidityFee = 0;
    uint256 buyReflectionFee = 500;
    uint256 buyOperationsFee = 500;
    uint256 buyTreasuryFee = 0;
    uint256 buyTotalFee = 1000;

    uint256 sellLiquidityFee = 250;
    uint256 sellReflectionFee = 0;
    uint256 sellOperationsFee = 500;
    uint256 sellTreasuryFee = 750;
    uint256 sellTotalFee = 1500;

    uint256 feeDenominator = 10000;

    uint256 _liquidityTokensToSwap;
    uint256 _reflectionTokensToSwap;
    uint256 _operationsTokensToSwap;
    uint256 _treasuryTokensToSwap;

    address public autoLiquidityReceiver = 0x1344974f45eff7b975AE85B69A7067bE7f2D231d;
    address public operationsFeeReceiver = msg.sender;
    address public treasuryFeeReceiver = 0x1344974f45eff7b975AE85B69A7067bE7f2D231d;

    address public vaultAddress = 0x7618C6ED407EE083DDEcBc013a33218B7453932F;
    IVault public vault = IVault(vaultAddress);

    IDEXRouter public router;
    address public pair;

    DividendDistributor distributor;
    address public distributorAddress;

    bool public swapEnabled = true;
    uint256 private swapMinimumTokens = _totalSupply / 5000;

    bool public tradingEnabled = false;
    bool public vaultEnabled = true;

    bool inSwap;
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () Auth(msg.sender) {
        address _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WETH = router.WETH();
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);

        isDisabledExempt[msg.sender] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;

        _setAutomatedMarketMakerPair(pair, true);

        approve(_router, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(
        address spender
    ) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    function transfer(
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != _totalSupply) _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (inSwap) return _basicTransfer(sender, recipient, amount);

        require(tradingEnabled || isDisabledExempt[sender], "Trading is currently disabled");

        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[recipient] || recipient == routerAddress;

        if (!isSell && !_isFree[recipient]) require((_balances[recipient] + amount) < _maxWallet, "Max wallet has been triggered");

        if (isSell && amount >= minAmountToTriggerSwap) {
            if (shouldSwapBack()) swapBack();
        }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient balance");

        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;

        _balances[recipient] = _balances[recipient].add(amountReceived);

        if (!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }
        if (!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {}
        }

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        return true;
    }

    function shouldTakeFee(
        address sender,
        address recipient
    ) internal view returns (bool) {
        if (isFeeOnTransferEnabled) {
            return !isFeeExempt[sender] && !isFeeExempt[recipient];
        } else {
            address routerAddress = address(router);
            return ((automatedMarketMakerPairs[sender] || sender == routerAddress) || (automatedMarketMakerPairs[recipient] || recipient == routerAddress)) ? !isFeeExempt[sender] && !isFeeExempt[recipient] : false;
        }
    }

    function getTotalFee(
        bool selling
    ) public view returns (uint256) {
        return selling ? sellTotalFee : buyTotalFee;
    }

    function takeFee(
        address sender,
        address receiver,
        uint256 amount
    ) internal returns (uint256) {
        address routerAddress = address(router);
        bool isSell = automatedMarketMakerPairs[receiver] || receiver == routerAddress;

        uint256 totalFee = getTotalFee(isSell);
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);

        if (totalFee > 0) {
            if (isSell) {
                if (sellLiquidityFee > 0) {
                    _liquidityTokensToSwap += feeAmount * sellLiquidityFee / totalFee;
                }
                if (sellOperationsFee > 0) {
                    _operationsTokensToSwap += feeAmount * sellOperationsFee / totalFee;
                }
                if (sellReflectionFee > 0) {
                    _reflectionTokensToSwap += feeAmount * sellReflectionFee / totalFee;
                }
                if (sellTreasuryFee > 0) {
                    _treasuryTokensToSwap += feeAmount * sellTreasuryFee / totalFee;
                }
            } else {
                if (buyLiquidityFee > 0) {
                    _liquidityTokensToSwap += feeAmount * buyLiquidityFee / totalFee;
                }
                if (buyOperationsFee > 0) {
                    _operationsTokensToSwap += feeAmount * buyOperationsFee / totalFee;
                }
                if (buyReflectionFee > 0) {
                    _reflectionTokensToSwap += feeAmount * buyReflectionFee / totalFee;
                }
                if (buyTreasuryFee > 0) {
                    _treasuryTokensToSwap += feeAmount * buyTreasuryFee / totalFee;
                }
            }
        }

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return !automatedMarketMakerPairs[msg.sender] && !inSwap && swapEnabled && _balances[address(this)] >= swapMinimumTokens;
    }

    function setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) public onlyOwner {
        _setAutomatedMarketMakerPair(_pair, value);
    }

    function _setAutomatedMarketMakerPair(
        address _pair,
        bool value
    ) private {
        automatedMarketMakerPairs[_pair] = value;
        isDividendExempt[_pair] = value;
    }

    function swapBack() internal swapping {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_operationsTokensToSwap).add(_reflectionTokensToSwap).add(_treasuryTokensToSwap);
        
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwap = contractBalance.sub(tokensForLiquidity);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(amountToSwap, 0, path, address(this), block.timestamp);

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 amountETHLiquidity = amountETH.mul(_liquidityTokensToSwap).div(totalTokensToSwap).div(2);
        uint256 amountETHReflection = amountETH.mul(_reflectionTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHOperations = amountETH.mul(_operationsTokensToSwap).div(totalTokensToSwap);
        uint256 amountETHTreasury = amountETH.mul(_treasuryTokensToSwap).div(totalTokensToSwap);
        
        _liquidityTokensToSwap = 0;
        _operationsTokensToSwap = 0;
        _reflectionTokensToSwap = 0;
        _treasuryTokensToSwap = 0;

        if (amountETHReflection > 0) try distributor.deposit{value: amountETHReflection}() {} catch {}
        if (amountETHOperations > 0) {
            if (vaultEnabled) {
                try vault.sendToDevWallet{value: amountETHOperations}() {} catch {}
            } else {
                payable(operationsFeeReceiver).transfer(amountETHOperations);
            }
        }
        if (amountETHTreasury > 0) payable(treasuryFeeReceiver).transfer(amountETHTreasury);
        if (tokensForLiquidity > 0) router.addLiquidityETH{value: amountETHLiquidity}(address(this), tokensForLiquidity, 0, 0, autoLiquidityReceiver, block.timestamp);
    }

    function buyTokens(
        uint256 amount,
        address to
    ) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path, to, block.timestamp);
    }
    
    function sweep() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function changeWETH(
        address _WETH
    ) external onlyOwner {
        WETH = _WETH;
    }

    function changeRouterPairDistributor(
        address _router,
        bool _setWETH
    ) external onlyOwner {
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        if (_setWETH) {
            WETH = router.WETH();
        }
        distributor = new DividendDistributor(_router, msg.sender);
        distributorAddress = address(distributor);
    }

    function transferForeignToken(
        address _token,
        address _to
    ) external onlyOwner {
        require(_token != address(this), "Can't withdraw native tokens");
        IERC20(_token).transfer(_to, IERC20(_token).balanceOf(address(this)));
    }

    function setMaxWallet(
        uint256 amount
    ) external onlyOwner {
        _maxWallet = amount;
    }

    function setMinAmountToTriggerSwap(
        uint256 amount
    ) external onlyOwner {
        minAmountToTriggerSwap = amount;
    }

    function setIsFeeOnTransferEnabled(
        bool status
    ) external onlyOwner {
        isFeeOnTransferEnabled = status;
    }

    function setIsDividendExempt(
        address holder,
        bool exempt
    ) external onlyOwner {
        isDividendExempt[holder] = exempt;
        exempt ? distributor.setShare(holder, 0) : distributor.setShare(holder, _balances[holder]);
    }

    function checkIsDividendExempt(
        address holder
    ) public view returns (bool) {
        return isDividendExempt[holder];
    }

    function setIsDisabledExempt(
        address holder,
        bool exempt
    ) external onlyOwner {
        isDisabledExempt[holder] = exempt;
    }

    function checkIsDisabledExempt(
        address holder
    ) public view returns (bool) {
        return isDisabledExempt[holder];
    }

    function setIsFeeExempt(
        address holder,
        bool exempt
    ) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function checkIsFeeExempt(
        address holder
    ) public view returns (bool) {
        return isFeeExempt[holder];
    }

    function setFree(
        address holder,
        bool exempt
    ) public onlyOwner {
        _isFree[holder] = exempt;
    }

    function checkFree(
        address holder
    ) public view onlyOwner returns (bool) {
        return _isFree[holder];
    }

    function setFees(
        uint256 _buyLiquidityFee,
        uint256 _buyReflectionFee,
        uint256 _buyOperationsFee,
        uint256 _buyTreasuryFee,
        uint256 _sellLiquidityFee,
        uint256 _sellReflectionFee,
        uint256 _sellOperationsFee,
        uint256 _sellTreasuryFee,
        uint256 _feeDenominator
    ) external onlyOwner {
        buyLiquidityFee = _buyLiquidityFee;
        buyReflectionFee = _buyReflectionFee;
        buyOperationsFee = _buyOperationsFee;
        buyTreasuryFee = _buyTreasuryFee;
        buyTotalFee = _buyLiquidityFee.add(_buyReflectionFee).add(_buyOperationsFee).add(_buyTreasuryFee);

        sellLiquidityFee = _sellLiquidityFee;
        sellReflectionFee = _sellReflectionFee;
        sellOperationsFee = _sellOperationsFee;
        sellTreasuryFee = _sellTreasuryFee;
        sellTotalFee = _sellLiquidityFee.add(_sellReflectionFee).add(_sellOperationsFee).add(_sellTreasuryFee);

        feeDenominator = _feeDenominator;
    }

    function setFeeReceivers(
        address _autoLiquidityReceiver,
        address _operationsFeeReceiver,
        address _treasuryFeeReceiver
    ) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        operationsFeeReceiver = _operationsFeeReceiver;
        treasuryFeeReceiver = _treasuryFeeReceiver;
    }

    function changeVault(
        address _vaultAddress
    ) external onlyOwner {
        vaultAddress = _vaultAddress;
        vault = IVault(_vaultAddress);
    }

    function toggleVault(
        bool _enabled
    ) external onlyOwner {
        vaultEnabled = _enabled;
    }

    function toggleTrading(
        bool _enabled
    ) external onlyOwner {
        tradingEnabled = _enabled;
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _amount
    ) external onlyOwner {
        swapEnabled = _enabled;
        swapMinimumTokens = _amount;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }
    
    function changeRouterVersion(
        address _router
    ) external onlyOwner returns (address _pair) {
        IDEXRouter _uniswapV2Router = IDEXRouter(_router);
        _pair = IDEXFactory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());
        if (_pair == address(0)) _pair = IDEXFactory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        pair = _pair;
        router = _uniswapV2Router;
        _allowances[address(this)][address(router)] = _totalSupply;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"bool","name":"_setWETH","type":"bool"}],"name":"changeRouterPairDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vaultAddress","type":"address"}],"name":"changeVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_WETH","type":"address"}],"name":"changeWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIsDisabledExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIsDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"checkIsFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDisabledExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeOnTransferEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToTriggerSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"operationsFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_operationsFeeReceiver","type":"address"},{"internalType":"address","name":"_treasuryFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_buyOperationsFee","type":"uint256"},{"internalType":"uint256","name":"_buyTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"_sellOperationsFee","type":"uint256"},{"internalType":"uint256","name":"_sellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDisabledExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setIsFeeOnTransferEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinAmountToTriggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"toggleTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"toggleVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790915560028054821661dead179055600380549091169055620000506009600a620006a4565b6200006090633b9aca006200078f565b6004556200008060326004546200051d60201b62001db31790919060201c565b60055560006006819055600d805460ff19169055600f8190556101f46010819055601181905560128290556103e860135560fa6014556015919091556016556102ee6017556105dc601855612710601955601e80546001600160a01b0319908116731344974f45eff7b975ae85b69a7067be7f2d231d908117909255601f8054821633179055602080548216909217909155602180548216737618c6ed407ee083ddecbc013a33218b7453932f1790819055602280549092166001600160a01b03919091161790556026805460ff60a01b1916600160a01b1790556004546200016d906113889062000636565b6027556028805461ffff19166101001790553480156200018c57600080fd5b5060008054336001600160a01b03199182161790915560238054737a250d5630b4cf539739df2c5dacb4c659f2488d92168217908190556040805163c45a015560e01b815290516001600160a01b039092169163c45a015591600480820192602092909190829003018186803b1580156200020657600080fd5b505afa1580156200021b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002419190620005ea565b6001546040516364e329cb60e11b81526001600160a01b039283169263c9c65396926200027692911690309060040162000613565b602060405180830381600087803b1580156200029157600080fd5b505af1158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc9190620005ea565b602480546001600160a01b0319166001600160a01b039283161790556004805430600090815260086020908152604080832060238054881685529083529281902093909355905482516315ab88c960e31b8152925194169363ad5c46489383810193829003018186803b1580156200034357600080fd5b505afa15801562000358573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037e9190620005ea565b600160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508033604051620003b490620005dc565b620003c192919062000613565b604051809103906000f080158015620003de573d6000803e3d6000fd5b50602580546001600160a01b039283166001600160a01b0319918216179182905560268054821692841692909217909155336000818152600960209081526040808320805460ff199081166001908117909255600a845282852080548216831790556024805489168652600b909452828520805482168317905530855282852080548216831790556002548816855291909320805490911683179055601e8054909416909217909255546200049592169062000532565b620004a9816004546200057060201b60201c565b50602454600454620004c5916001600160a01b03169062000570565b506004543360008181526007602052604080822084905551919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200050e916200062d565b60405180910390a350620007c7565b60006200052b828462000636565b9392505050565b6001600160a01b039091166000908152600e60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620005cb9086906200062d565b60405180910390a350600192915050565b6121b18062005b1c83390190565b600060208284031215620005fc578081fd5b81516001600160a01b03811681146200052b578182fd5b6001600160a01b0392831681529116602082015260400190565b90815260200190565b6000826200065257634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116200066b57506200069b565b818704821115620006805762000680620007b1565b808616156200068e57918102915b9490941c9380026200065a565b94509492505050565b60006200052b60001960ff851684600082620006c3575060016200052b565b81620006d2575060006200052b565b8160018114620006eb5760028114620006f6576200072a565b60019150506200052b565b60ff8411156200070a576200070a620007b1565b6001841b915084821115620007235762000723620007b1565b506200052b565b5060208310610133831016604e8410600b841016171562000762575081810a838111156200075c576200075c620007b1565b6200052b565b62000771848484600162000657565b808604821115620007865762000786620007b1565b02949350505050565b6000816000190483118215151615620007ac57620007ac620007b1565b500290565b634e487b7160e01b600052601160045260246000fd5b61534580620007d76000396000f3fe608060405260043610620003df5760003560e01c80636ddd171311620001ff578063ad5c4648116200011b578063dd62ed3e11620000af578063f2fde38b1162000079578063f2fde38b1462000b0c578063f708a64f1462000b31578063f887ea401462000b56578063fbfa77cf1462000b6e57620003e7565b8063dd62ed3e1462000a78578063df20fd491462000a9d578063e0f8e2431462000ac2578063f1f3bca31462000ae757620003e7565b8063b62496f511620000f1578063b62496f514620009f1578063ca33e64c1462000a16578063cd806f431462000a2e578063d7c010321462000a5357620003e7565b8063ad5c4648146200098f578063add5df6614620009a7578063af06795a14620009cc57620003e7565b80639571a07d11620001935780639d64bf9311620001695780639d64bf931462000922578063a51af4c5146200093a578063a8aa1b311462000952578063a9059cbb146200096a57620003e7565b80639571a07d14620008c057806395d89b4114620008e55780639a7a23d614620008fd57620003e7565b80638366e79a11620001d55780638366e79a14620008535780638523db641462000878578063893d20e8146200089057806391950f3014620008a857620003e7565b80636ddd171314620007fe57806370a08231146200081657806382247ec0146200083b57620003e7565b806335faa41611620002fb5780634ada218b116200028f57806360733e8f116200025957806360733e8f146200076a57806360e232a9146200078f578063658d4b7f14620007b45780636d92e1a514620007d957620003e7565b80634ada218b14620006e3578063571ac8b014620006fb5780635881f3ef14620007205780635d0044ca146200074557620003e7565b80633b10e54011620002d15780633b10e540146200065c5780633f4218e01462000681578063430bf08a14620006a65780634355855a14620006be57620003e7565b806335faa41614620005fa578063379fad9a146200061257806338e99144146200063757620003e7565b806326560be711620003735780632af10fac11620003495780632af10fac146200057e5780632b112e4914620005965780632f54bf6e14620005ae578063313ce56714620005d357620003e7565b806326560be7146200050f57806326c081fc1462000534578063296020e7146200055957620003e7565b8063095ea7b311620003b5578063095ea7b3146200047757806315d61a82146200049c57806318160ddd14620004c357806323b872dd14620004ea57620003e7565b806303382cbb14620003ec57806306fdde03146200041c57806307c89fe8146200044357620003e7565b36620003e757005b600080fd5b348015620003f957600080fd5b506200040462000b86565b60405162000413919062002e7a565b60405180910390f35b3480156200042957600080fd5b506200043462000b95565b60405162000413919062002f07565b3480156200045057600080fd5b50620004686200046236600462002bec565b62000bbc565b60405162000413919062002efc565b3480156200048457600080fd5b50620004686200049636600462002d2f565b62000c10565b348015620004a957600080fd5b50620004c1620004bb36600462002dbb565b62000c7d565b005b348015620004d057600080fd5b50620004db62000cac565b60405162000413919062003022565b348015620004f757600080fd5b50620004686200050936600462002cb8565b62000cb2565b3480156200051c57600080fd5b50620004c16200052e36600462002d5d565b62000d7b565b3480156200054157600080fd5b50620004c16200055336600462002cfd565b62000db8565b3480156200056657600080fd5b50620004686200057836600462002bec565b62000e0d565b3480156200058b57600080fd5b506200040462000e22565b348015620005a357600080fd5b50620004db62000e31565b348015620005bb57600080fd5b5062000468620005cd36600462002bec565b62000e82565b348015620005e057600080fd5b50620005eb62000e96565b6040516200041391906200309d565b3480156200060757600080fd5b50620004c162000e9b565b3480156200061f57600080fd5b50620004c16200063136600462002d5d565b62000ef5565b3480156200064457600080fd5b50620004686200065636600462002bec565b62000f32565b3480156200066957600080fd5b50620004c16200067b36600462002d5d565b62000f50565b3480156200068e57600080fd5b5062000468620006a036600462002bec565b62000f94565b348015620006b357600080fd5b506200040462000fa9565b348015620006cb57600080fd5b5062000468620006dd36600462002bec565b62000fb8565b348015620006f057600080fd5b506200046862000fcd565b3480156200070857600080fd5b50620004686200071a36600462002bec565b62000fd6565b3480156200072d57600080fd5b50620004046200073f36600462002bec565b62000fe6565b3480156200075257600080fd5b50620004c16200076436600462002dbb565b6200135e565b3480156200077757600080fd5b50620004686200078936600462002bec565b6200138d565b3480156200079c57600080fd5b50620004c1620007ae36600462002bec565b620013ab565b348015620007c157600080fd5b50620004c1620007d336600462002cfd565b62001401565b348015620007e657600080fd5b5062000468620007f836600462002bec565b62001456565b3480156200080b57600080fd5b506200046862001474565b3480156200082357600080fd5b50620004db6200083536600462002bec565b62001484565b3480156200084857600080fd5b50620004db6200149f565b3480156200086057600080fd5b50620004c16200087236600462002c2a565b620014a5565b3480156200088557600080fd5b506200046862001601565b3480156200089d57600080fd5b50620004046200160f565b348015620008b557600080fd5b50620004686200161e565b348015620008cd57600080fd5b5062000468620008df36600462002bec565b62001627565b348015620008f257600080fd5b50620004346200163c565b3480156200090a57600080fd5b50620004c16200091c36600462002cfd565b6200165a565b3480156200092f57600080fd5b50620004db62001694565b3480156200094757600080fd5b50620004046200169a565b3480156200095f57600080fd5b5062000404620016a9565b3480156200097757600080fd5b50620004686200098936600462002d2f565b620016b8565b3480156200099c57600080fd5b5062000404620016c7565b348015620009b457600080fd5b50620004c1620009c636600462002e1b565b620016d6565b348015620009d957600080fd5b50620004c1620009eb36600462002cfd565b62001768565b348015620009fe57600080fd5b506200046862000a1036600462002bec565b620017bd565b34801562000a2357600080fd5b5062000404620017d2565b34801562000a3b57600080fd5b50620004c162000a4d36600462002cfd565b620017e1565b34801562000a6057600080fd5b50620004c162000a7236600462002c67565b62001a8d565b34801562000a8557600080fd5b50620004db62000a9736600462002c2a565b62001af6565b34801562000aaa57600080fd5b50620004c162000abc36600462002d9b565b62001b21565b34801562000acf57600080fd5b50620004c162000ae136600462002bec565b62001b6d565b34801562000af457600080fd5b50620004db62000b0636600462002d5d565b62001bb9565b34801562000b1957600080fd5b50620004c162000b2b36600462002bec565b62001bd2565b34801562000b3e57600080fd5b50620004c162000b5036600462002cfd565b62001c54565b34801562000b6357600080fd5b506200040462001d95565b34801562000b7b57600080fd5b506200040462001da4565b601f546001600160a01b031681565b60408051808201909152600d81526c476f696e6720746f205a65726f60981b602082015290565b600062000bc93362000e82565b62000bf15760405162461bcd60e51b815260040162000be89062002fcb565b60405180910390fd5b506001600160a01b03166000908152600c602052604090205460ff1690565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000c6b90869062003022565b60405180910390a35060015b92915050565b62000c883362000e82565b62000ca75760405162461bcd60e51b815260040162000be89062002fcb565b600655565b60045490565b6004546001600160a01b038416600090815260086020908152604080832033845290915281205490911462000d64576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b038716600090815260088252838120338252909152919091205462000d3f91849062001dc1565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b62000d7184848462001df0565b90505b9392505050565b62000d863362000e82565b62000da55760405162461bcd60e51b815260040162000be89062002fcb565b6028805460ff1916911515919091179055565b62000dc33362000e82565b62000de25760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b600c6020526000908152604090205460ff1681565b6020546001600160a01b031681565b60035460009062000e7d9062000e50906001600160a01b031662001484565b60025462000e769062000e6c906001600160a01b031662001484565b60045490620021a5565b90620021a5565b905090565b6000546001600160a01b0390811691161490565b600990565b62000ea63362000e82565b62000ec55760405162461bcd60e51b815260040162000be89062002fcb565b60405133904780156108fc02916000818181858888f1935050505015801562000ef2573d6000803e3d6000fd5b50565b62000f003362000e82565b62000f1f5760405162461bcd60e51b815260040162000be89062002fcb565b600d805460ff1916911515919091179055565b6001600160a01b031660009081526009602052604090205460ff1690565b62000f5b3362000e82565b62000f7a5760405162461bcd60e51b815260040162000be89062002fcb565b602880549115156101000261ff0019909216919091179055565b600a6020526000908152604090205460ff1681565b6021546001600160a01b031681565b600b6020526000908152604090205460ff1681565b60285460ff1681565b600062000c778260045462000c10565b600062000ff33362000e82565b620010125760405162461bcd60e51b815260040162000be89062002fcb565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200105157600080fd5b505afa15801562001066573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200108c919062002c0b565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620010d557600080fd5b505afa158015620010ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001110919062002c0b565b6040518363ffffffff1660e01b81526004016200112f92919062002e8e565b60206040518083038186803b1580156200114857600080fd5b505afa1580156200115d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001183919062002c0b565b91506001600160a01b0382166200130557806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620011ce57600080fd5b505afa158015620011e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001209919062002c0b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200125257600080fd5b505afa15801562001267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200128d919062002c0b565b6040518363ffffffff1660e01b8152600401620012ac92919062002e8e565b602060405180830381600087803b158015620012c757600080fd5b505af1158015620012dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001302919062002c0b565b91505b602480546001600160a01b038085166001600160a01b0319928316179092556023805493831693909116929092179182905560045430600090815260086020908152604080832095909416825293909352912055919050565b620013693362000e82565b620013885760405162461bcd60e51b815260040162000be89062002fcb565b600555565b6001600160a01b03166000908152600a602052604090205460ff1690565b620013b63362000e82565b620013d55760405162461bcd60e51b815260040162000be89062002fcb565b602180546001600160a01b039092166001600160a01b0319928316811790915560228054909216179055565b6200140c3362000e82565b6200142b5760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b03166000908152600b602052604090205460ff1690565b602654600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b60055481565b620014b03362000e82565b620014cf5760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b038216301415620014fb5760405162461bcd60e51b815260040162000be89062002f5d565b6040516370a0823160e01b81526001600160a01b0383169063a9059cbb90839083906370a08231906200153390309060040162002e7a565b60206040518083038186803b1580156200154c57600080fd5b505afa15801562001561573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001587919062002dd4565b6040518363ffffffff1660e01b8152600401620015a692919062002ea8565b602060405180830381600087803b158015620015c157600080fd5b505af1158015620015d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015fc919062002d7c565b505050565b602854610100900460ff1681565b6000546001600160a01b031690565b600d5460ff1681565b60096020526000908152604090205460ff1681565b6040805180820190915260048152635a45524f60e01b602082015290565b620016653362000e82565b620016845760405162461bcd60e51b815260040162000be89062002fcb565b620016908282620021b3565b5050565b60065481565b6026546001600160a01b031681565b6024546001600160a01b031681565b600062000d7433848462001df0565b6001546001600160a01b031681565b620016e13362000e82565b620017005760405162461bcd60e51b815260040162000be89062002fcb565b600f8990556010889055601187905560128690556200172e866200172789818d8d620021f1565b90620021f1565b601355601485905560158490556016839055601782905562001758826200172785818989620021f1565b6018556019555050505050505050565b620017733362000e82565b620017925760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600e6020526000908152604090205460ff1681565b601e546001600160a01b031681565b620017ec3362000e82565b6200180b5760405162461bcd60e51b815260040162000be89062002fcb565b602380546001600160a01b0319166001600160a01b0384811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b1580156200186857600080fd5b505afa1580156200187d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018a3919062002c0b565b6001546040516364e329cb60e11b81526001600160a01b039283169263c9c6539692620018d892911690309060040162002e8e565b602060405180830381600087803b158015620018f357600080fd5b505af115801562001908573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200192e919062002c0b565b602480546001600160a01b0319166001600160a01b0392831617905560045430600090815260086020908152604080832060235490951683529390529190912055801562001a2157602360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620019c557600080fd5b505afa158015620019da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a00919062002c0b565b600180546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001a319062002bde565b62001a3e92919062002e8e565b604051809103906000f08015801562001a5b573d6000803e3d6000fd5b50602580546001600160a01b03199081166001600160a01b039384161791829055602680549290931691161790555050565b62001a983362000e82565b62001ab75760405162461bcd60e51b815260040162000be89062002fcb565b601e80546001600160a01b039485166001600160a01b031991821617909155601f80549385169382169390931790925560208054919093169116179055565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b62001b2c3362000e82565b62001b4b5760405162461bcd60e51b815260040162000be89062002fcb565b60268054921515600160a01b0260ff60a01b1990931692909217909155602755565b62001b783362000e82565b62001b975760405162461bcd60e51b815260040162000be89062002fcb565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008162001bca5760135462000c77565b505060185490565b62001bdd3362000e82565b62001bfc5760405162461bcd60e51b815260040162000be89062002fcb565b600080546001600160a01b0319166001600160a01b0383161790556040517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639062001c4990839062002e7a565b60405180910390a150565b62001c5f3362000e82565b62001c7e5760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b0382166000908152600b60205260409020805460ff19168215151790558062001d28576025546001600160a01b0383811660009081526007602052604090819020549051630a5b654b60e11b815291909216916314b6ca969162001cee91869160040162002ea8565b600060405180830381600087803b15801562001d0957600080fd5b505af115801562001d1e573d6000803e3d6000fd5b5050505062001690565b602554604051630a5b654b60e11b81526001600160a01b03909116906314b6ca969062001d5d90859060009060040162002ea8565b600060405180830381600087803b15801562001d7857600080fd5b505af115801562001d8d573d6000803e3d6000fd5b505050505050565b6023546001600160a01b031681565b6022546001600160a01b031681565b600062000d748284620030c6565b6000818484111562001de85760405162461bcd60e51b815260040162000be8919062002f07565b505050900390565b60285460009062010000900460ff161562001e1a5762001e12848484620021ff565b905062000d74565b60285460ff168062001e4457506001600160a01b03841660009081526009602052604090205460ff165b62001e635760405162461bcd60e51b815260040162000be89062002feb565b6023546001600160a01b038481166000908152600e602052604081205491909216919060ff168062001ea65750816001600160a01b0316856001600160a01b0316145b90508015801562001ed057506001600160a01b0385166000908152600c602052604090205460ff16155b1562001f1f576005546001600160a01b03861660009081526007602052604090205462001eff908690620030ab565b1062001f1f5760405162461bcd60e51b815260040162000be89062002f94565b80801562001f2f57506006548410155b1562001f4f5762001f3f620022a6565b1562001f4f5762001f4f62002307565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091526001600160a01b03891660009081526007909152919091205462001fa391869062001dc1565b6001600160a01b03871660009081526007602052604081209190915562001fcb87876200278d565b62001fd7578462001fe4565b62001fe4878787620028c0565b6001600160a01b0387166000908152600760205260409020549091506200200c9082620021f1565b6001600160a01b03808816600090815260076020908152604080832094909455918a168152600b909152205460ff16620020b5576025546001600160a01b0388811660009081526007602052604090819020549051630a5b654b60e11b815291909216916314b6ca969162002086918b9160040162002ea8565b600060405180830381600087803b158015620020a157600080fd5b505af1925050508015620020b3575060015b505b6001600160a01b0386166000908152600b602052604090205460ff166200214b576025546001600160a01b0387811660009081526007602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200211c918a9160040162002ea8565b600060405180830381600087803b1580156200213757600080fd5b505af192505050801562002149575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162002190919062003022565b60405180910390a35060019695505050505050565b600062000d74828462003109565b6001600160a01b039091166000908152600e60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b600062000d748284620030ab565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526007909152918220546200225291849062001dc1565b6001600160a01b038086166000908152600760205260408082209390935590851681522054620022839083620021f1565b6001600160a01b0384166000908152600760205260409020555060019392505050565b336000908152600e602052604081205460ff16158015620022d0575060285462010000900460ff16155b8015620022e65750602654600160a01b900460ff165b801562000e7d57505060275430600090815260076020526040902054101590565b6028805462ff00001916620100001790556000620023253062001484565b9050600062002350601d5462001727601b5462001727601c54601a54620021f190919063ffffffff16565b905060006200236c6002601a5462001db390919063ffffffff16565b905060006200237c8483620021a5565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110620023c557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260018054835192169183919081106200240457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260235460405163791ac94760e01b81524792919091169063791ac94790620024509086906000908790309042906004016200302b565b600060405180830381600087803b1580156200246b57600080fd5b505af115801562002480573d6000803e3d6000fd5b5050505060006200249b8247620021a590919063ffffffff16565b90506000620024c86002620024c189620024c1601a548762002bd090919063ffffffff16565b9062001db3565b90506000620024e888620024c1601b548662002bd090919063ffffffff16565b905060006200250889620024c1601c548762002bd090919063ffffffff16565b90506000620025288a620024c1601d548862002bd090919063ffffffff16565b6000601a819055601c819055601b819055601d5590508215620025ab57602560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200259657600080fd5b505af193505050508015620025a9575060015b505b81156200266b57602854610100900460ff16156200262e57602260009054906101000a90046001600160a01b03166001600160a01b03166317f524e3836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200261457600080fd5b505af19350505050801562002627575060015b506200266b565b601f546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801562002669573d6000803e3d6000fd5b505b8015620026af576020546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015620026ad573d6000803e3d6000fd5b505b88156200277457602360009054906101000a90046001600160a01b03166001600160a01b031663f305d71985308c600080601e60009054906101000a90046001600160a01b0316426040518863ffffffff1660e01b81526004016200271a9695949392919062002ec1565b6060604051808303818588803b1580156200273457600080fd5b505af115801562002749573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062002770919062002ded565b5050505b50506028805462ff000019169055505050505050505050565b600d5460009060ff1615620027e7576001600160a01b0383166000908152600a602052604090205460ff16158015620027df57506001600160a01b0382166000908152600a602052604090205460ff16155b905062000c77565b6023546001600160a01b038481166000908152600e602052604090205491169060ff1680620028275750806001600160a01b0316846001600160a01b0316145b806200286757506001600160a01b0383166000908152600e602052604090205460ff1680620028675750806001600160a01b0316836001600160a01b0316145b62002874576000620028b7565b6001600160a01b0384166000908152600a602052604090205460ff16158015620028b757506001600160a01b0383166000908152600a602052604090205460ff16155b91505062000c77565b6023546001600160a01b038381166000908152600e602052604081205490929190911690829060ff1680620029065750816001600160a01b0316856001600160a01b0316145b90506000620029158262001bb9565b9050600062002935601954620024c1848962002bd090919063ffffffff16565b9050811562002b4357821562002a475760145415620029845781601454826200295f9190620030e7565b6200296b9190620030c6565b601a60008282546200297e9190620030ab565b90915550505b60165415620029c35781601654826200299e9190620030e7565b620029aa9190620030c6565b601c6000828254620029bd9190620030ab565b90915550505b6015541562002a02578160155482620029dd9190620030e7565b620029e99190620030c6565b601b6000828254620029fc9190620030ab565b90915550505b6017541562002a4157816017548262002a1c9190620030e7565b62002a289190620030c6565b601d600082825462002a3b9190620030ab565b90915550505b62002b43565b600f541562002a865781600f548262002a619190620030e7565b62002a6d9190620030c6565b601a600082825462002a809190620030ab565b90915550505b6011541562002ac557816011548262002aa09190620030e7565b62002aac9190620030c6565b601c600082825462002abf9190620030ab565b90915550505b6010541562002b0457816010548262002adf9190620030e7565b62002aeb9190620030c6565b601b600082825462002afe9190620030ab565b90915550505b6012541562002b4357816012548262002b1e9190620030e7565b62002b2a9190620030c6565b601d600082825462002b3d9190620030ab565b90915550505b3060009081526007602052604090205462002b5f9082620021f1565b30600081815260076020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002bb090859062003022565b60405180910390a362002bc48682620021a5565b98975050505050505050565b600062000d748284620030e7565b6121b1806200315f83390190565b60006020828403121562002bfe578081fd5b813562000d748162003139565b60006020828403121562002c1d578081fd5b815162000d748162003139565b6000806040838503121562002c3d578081fd5b823562002c4a8162003139565b9150602083013562002c5c8162003139565b809150509250929050565b60008060006060848603121562002c7c578081fd5b833562002c898162003139565b9250602084013562002c9b8162003139565b9150604084013562002cad8162003139565b809150509250925092565b60008060006060848603121562002ccd578283fd5b833562002cda8162003139565b9250602084013562002cec8162003139565b929592945050506040919091013590565b6000806040838503121562002d10578182fd5b823562002d1d8162003139565b9150602083013562002c5c816200314f565b6000806040838503121562002d42578182fd5b823562002d4f8162003139565b946020939093013593505050565b60006020828403121562002d6f578081fd5b813562000d74816200314f565b60006020828403121562002d8e578081fd5b815162000d74816200314f565b6000806040838503121562002dae578182fd5b823562002d4f816200314f565b60006020828403121562002dcd578081fd5b5035919050565b60006020828403121562002de6578081fd5b5051919050565b60008060006060848603121562002e02578283fd5b8351925060208401519150604084015190509250925092565b60008060008060008060008060006101208a8c03121562002e3a578485fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b8181101562002f355785810183015185820160400152820162002f17565b8181111562002f475783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b6020808252601d908201527f4d61782077616c6c657420686173206265656e20747269676765726564000000604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252601d908201527f54726164696e672069732063757272656e746c792064697361626c6564000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156200307c5784516001600160a01b03168352938301939183019160010162003055565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b60008219821115620030c157620030c162003123565b500190565b600082620030e257634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161562003104576200310462003123565b500290565b6000828210156200311e576200311e62003123565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811462000ef257600080fd5b801515811462000ef257600080fdfe6080604052600480546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556005805482169092179091556012805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006017553480156200007a57600080fd5b50604051620021b1380380620021b18339810160408190526200009d916200026c565b600080546001600160a01b0319166001600160a01b03838116919091179091558216620000df57737a250d5630b4cf539739df2c5dacb4c659f2488d620000e1565b815b600680546001600160a01b039283166001600160a01b03199182161790915560018054821633178155600280548316737f62ffc4730887561320d5bc5fd8651f739c207e908117909155600380549093161790915560125482166000908152600f6020526040808220805460ff1990811685179091557fdf82e8e0ca2e8ef371057fa5118f2005d1fe0db2f7f1913ccbb77b1c43aa57258054821685179055736b175474e89094c44da98b954eedeac495271d0f9092527f907804fb4f4f34039c621b1a41008798cef5775ce10837f2769fb81032e4d8388054909216909217905560048054915163095ea7b360e01b8152919092169163095ea7b391620001f09186916000199101620002cc565b602060405180830381600087803b1580156200020b57600080fd5b505af115801562000220573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002469190620002a3565b505050620002e5565b80516001600160a01b03811681146200026757600080fd5b919050565b600080604083850312156200027f578182fd5b6200028a836200024f565b91506200029a602084016200024f565b90509250929050565b600060208284031215620002b5578081fd5b81518015158114620002c5578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611ebc80620002f56000396000f3fe60806040526004361061026b5760003560e01c806383e8450011610144578063c238efd5116100b6578063e0bab4c41161007a578063e0bab4c414610706578063e0f8e2431461071b578063e2d2e2191461073b578063efca2eed14610750578063f2fde38b14610765578063f854a27f1461078557610272565b8063c238efd51461066f578063ca89b8991461068f578063ce7c2ac2146106af578063d0e30db0146106de578063d63a8e11146106e657610272565b8063929925db11610108578063929925db146105ba578063997664d7146105da578063a70bf8bb146105ef578063a995bb141461060f578063bcd259a81461062f578063c161357a1461064f57610272565b806383e8450014610525578063845610ee1461054557806387f681d81461056557806389a30271146105855780638e4241751461059a57610272565b80632bcf161c116101dd5780633a98ef39116101a15780633a98ef39146104885780635881f3ef1461049d578063610035a4146104bd57806363eabae9146104dd5780636c9382cd146104fd5780638366e79a1461050557610272565b80632bcf161c146103e65780632f54bf6e146104065780633041d503146104335780633333cfc31461045357806335faa4161461047357610272565b806314b6ca961161022f57806314b6ca961461032457806315f7e05e146103465780631b386a4214610366578063264fff5b146103865780632870e95d146103a657806328fd3198146103c657610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da5780630a25dea9146102fa57806311ce023d1461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b46565b6107a5565b6040516102a49190611c66565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b62565b6107c0565b6040516102a49190611dc0565b3480156102e657600080fd5b506102976102f5366004611b46565b6107dd565b34801561030657600080fd5b506102976107f8565b34801561031b57600080fd5b506102cd610807565b34801561033057600080fd5b5061034461033f366004611c07565b61080d565b005b34801561035257600080fd5b50610344610361366004611b46565b6109c5565b34801561037257600080fd5b506102cd610381366004611b62565b6109d2565b34801561039257600080fd5b506103446103a1366004611b46565b6109fd565b3480156103b257600080fd5b506103446103c1366004611b46565b610a4d565b3480156103d257600080fd5b506102cd6103e1366004611b46565b610aa1565b3480156103f257600080fd5b506102cd610401366004611b46565b610b2d565b34801561041257600080fd5b50610426610421366004611b46565b610b48565b6040516102a49190611c93565b34801561043f57600080fd5b5061034461044e366004611b46565b610b5c565b34801561045f57600080fd5b5061034461046e366004611bda565b610ba3565b34801561047f57600080fd5b50610344610bf3565b34801561049457600080fd5b506102cd610c44565b3480156104a957600080fd5b506103446104b8366004611b46565b610c4a565b3480156104c957600080fd5b506104266104d8366004611b46565b610c91565b3480156104e957600080fd5b506103446104f8366004611bda565b610caf565b610344610ce7565b34801561051157600080fd5b50610344610520366004611b62565b610d52565b34801561053157600080fd5b50610344610540366004611b62565b610e9a565b34801561055157600080fd5b50610344610560366004611b46565b610eed565b34801561057157600080fd5b50610344610580366004611b46565b610f34565b34801561059157600080fd5b50610297610f82565b3480156105a657600080fd5b506104266105b5366004611b62565b610f9a565b3480156105c657600080fd5b506104266105d5366004611b62565b610fc8565b3480156105e657600080fd5b506102cd610fe8565b3480156105fb57600080fd5b5061034461060a366004611b46565b610fee565b34801561061b57600080fd5b5061034461062a366004611b62565b611035565b34801561063b57600080fd5b5061034461064a366004611b62565b61108a565b34801561065b57600080fd5b5061034461066a366004611b9a565b6110db565b34801561067b57600080fd5b5061029761068a366004611b46565b611186565b34801561069b57600080fd5b506102cd6106aa366004611b46565b6111a4565b3480156106bb57600080fd5b506106cf6106ca366004611b46565b6111b6565b6040516102a493929190611dc9565b6103446111d7565b3480156106f257600080fd5b50610426610701366004611b46565b611227565b34801561071257600080fd5b5061029761123c565b34801561072757600080fd5b50610344610736366004611b46565b611254565b34801561074757600080fd5b506102cd61129b565b34801561075c57600080fd5b506102cd6112a1565b34801561077157600080fd5b50610344610780366004611b46565b6112a7565b34801561079157600080fd5b506104266107a0366004611b46565b611322565b600e602052600090815260409020546001600160a01b031681565b600b60209081526000928352604080842090915290825290205481565b6010602052600090815260409020546001600160a01b031681565b6012546001600160a01b031681565b60175481565b6001546001600160a01b031633148061083057506002546001600160a01b031633145b8061084557506003546001600160a01b031633145b61084e57600080fd5b6001600160a01b038216600090815260116020526040902054156108de576001600160a01b038083166000908152601060209081526040808320549093168252600f9052205460ff16156108c7576001600160a01b038083166000908152601060205260409020546108c291849116611337565b6108de565b6012546108de9083906001600160a01b0316611337565b60008111801561090457506001600160a01b038216600090815260116020526040902054155b15610917576109128261193e565b61094a565b8015801561093c57506001600160a01b03821660009081526011602052604090205415155b1561094a5761094a8261199f565b6001600160a01b03821660009081526011602052604090205460135461097b91839161097591611aec565b90611aff565b6013556001600160a01b03821660009081526011602052604090208190556109a281611b0b565b6001600160a01b0390921660009081526011602052604090206001019190915550565b6109cf3382611337565b50565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b610a0633610b48565b610a2b5760405162461bcd60e51b8152600401610a2290611da0565b60405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600f602052604090205460ff16610a7257600080fd5b33600090815260106020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260116020526040812054610ac657506000610b28565b6001600160a01b038216600090815260116020526040812054610ae890611b0b565b6001600160a01b038416600090815260116020526040902060010154909150808211610b1957600092505050610b28565b610b238282611aec565b925050505b919050565b6001600160a01b03166000908152600a602052604090205490565b6000546001600160a01b0390811691161490565b610b6533610b48565b610b815760405162461bcd60e51b8152600401610a2290611da0565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610bac33610b48565b610bc85760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b610bfc33610b48565b610c185760405162461bcd60e51b8152600401610a2290611da0565b60405133904780156108fc02916000818181858888f193505050501580156109cf573d6000803e3d6000fd5b60135481565b610c5333610b48565b610c6f5760405162461bcd60e51b8152600401610a2290611da0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600f602052604090205460ff1690565b336000908152600c602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610cf033610b48565b610d0c5760405162461bcd60e51b8152600401610a2290611da0565b3415610d50576014543490610d219082611aff565b601455601354601754610d4b91610d4291610d3c9085611b2e565b90611b3a565b60165490611aff565b601655505b565b610d5b33610b48565b610d775760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b038216301415610da05760405162461bcd60e51b8152600401610a2290611d07565b6040516370a0823160e01b81526001600160a01b0383169063a9059cbb90839083906370a0823190610dd6903090600401611c66565b60206040518083038186803b158015610dee57600080fd5b505afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190611c4e565b6040518363ffffffff1660e01b8152600401610e43929190611c7a565b602060405180830381600087803b158015610e5d57600080fd5b505af1158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e959190611c32565b505050565b610ea333610b48565b610ebf5760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b039182166000908152600e6020526040902080546001600160a01b03191691909216179055565b610ef633610b48565b610f125760405162461bcd60e51b8152600401610a2290611da0565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610f3d33610b48565b610f595760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b03166000908152600f60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b600c60209081526000928352604080842090915290825290205460ff1681565b60145481565b610ff733610b48565b6110135760405162461bcd60e51b8152600401610a2290611da0565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61103e33610b48565b61105a5760405162461bcd60e51b8152600401610a2290611da0565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610e4390849060001990600401611c7a565b6001600160a01b0382166000908152600c6020908152604080832033845290915290205460ff166110cd5760405162461bcd60e51b8152600401610a2290611d75565b6110d78282611337565b5050565b6110e433610b48565b6111005760405162461bcd60e51b8152600401610a2290611da0565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b39061112e9085908590600401611c7a565b602060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611c32565b50505050565b6001600160a01b039081166000908152600e60205260409020541690565b600a6020526000908152604090205481565b60116020526000908152604090208054600182015460029092015490919083565b6001546001600160a01b03163314806111fa57506002546001600160a01b031633145b8061120f57506003546001600160a01b031633145b61121857600080fd5b6014543490610d219082611aff565b600f6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61125d33610b48565b6112795760405162461bcd60e51b8152600401610a2290611da0565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60165481565b60155481565b6112b033610b48565b6112cc5760405162461bcd60e51b8152600401610a2290611da0565b600080546001600160a01b0319166001600160a01b0383161790556040517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390611317908390611c66565b60405180910390a150565b600d6020526000908152604090205460ff1681565b6001600160a01b0381166000908152600f602052604090205460ff1661136f5760405162461bcd60e51b8152600401610a2290611d3e565b6001600160a01b038216600090815260116020526040902054611391576110d7565b600061139c83610aa1565b90508015610e95576015546113b19082611aff565b6015556001600160a01b038316600090815260096020908152604080832042905560119091529020600201546113e79082611aff565b6001600160a01b038416600090815260116020526040902060028101919091555461141190611b0b565b6001600160a01b0380851660009081526011602052604090206001019190915560045483821691161415611500576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611475573d6000803e3d6000fd5b506001600160a01b0382166000908152600a60205260409020546114999082611aff565b6001600160a01b038084166000908152600a6020908152604080832094909455600b815283822092871682529190915220546114d59082611aff565b6001600160a01b038084166000908152600b6020908152604080832093881683529290522055610e95565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611531908890600401611c66565b60206040518083038186803b15801561154957600080fd5b505afa15801561155d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115819190611c4e565b6001600160a01b038581166000908152600e6020526040902054919250166116b257604080516002808252606082018352600092602083019080368337505060045482519293506001600160a01b0316918391506000906115f257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061163457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590869061167a9060009086908c904290600401611c9e565b6000604051808303818588803b15801561169357600080fd5b505af11580156116a7573d6000803e3d6000fd5b505050505050611811565b6040805160038082526080820190925260009160208201606080368337505060045482519293506001600160a01b03169183915060009061170357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600e909152604090205482519116908290600190811061175557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160028151811061179757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959086906117dd9060009086908c904290600401611c9e565b6000604051808303818588803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611840908990600401611c66565b60206040518083038186803b15801561185857600080fd5b505afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190611c4e565b90506118be61189f8284611aec565b6001600160a01b0387166000908152600a602052604090205490611aff565b6001600160a01b0386166000908152600a60205260409020556119106118e48284611aec565b6001600160a01b038088166000908152600b60209081526040808320938c168352929052205490611aff565b6001600160a01b038087166000908152600b60209081526040808320938b1683529290522055505050505050565b600780546001600160a01b039092166000818152600860205260408120849055600184018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b0319169091179055565b600780546119af90600190611e36565b815481106119cd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526008909252604090922054600780549290931692918110611a1957634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260089182905260408120546007805491939291611a6590600190611e36565b81548110611a8357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556007805480611ac757634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611af88284611e36565b9392505050565b6000611af88284611ddf565b6000611b28601754610d3c60165485611b2e90919063ffffffff16565b92915050565b6000611af88284611e17565b6000611af88284611df7565b600060208284031215611b57578081fd5b8135611af881611e63565b60008060408385031215611b74578081fd5b8235611b7f81611e63565b91506020830135611b8f81611e63565b809150509250929050565b600080600060608486031215611bae578081fd5b8335611bb981611e63565b92506020840135611bc981611e63565b929592945050506040919091013590565b60008060408385031215611bec578182fd5b8235611bf781611e63565b91506020830135611b8f81611e78565b60008060408385031215611c19578182fd5b8235611c2481611e63565b946020939093013593505050565b600060208284031215611c43578081fd5b8151611af881611e78565b600060208284031215611c5f578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611ce75784516001600160a01b031683529383019391830191600101611cc2565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611df257611df2611e4d565b500190565b600082611e1257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e3157611e31611e4d565b500290565b600082821015611e4857611e48611e4d565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109cf57600080fd5b80151581146109cf57600080fdfea26469706673582212202cf2c31eea525bfeb07fa875245bc6f8c9963876bcfd75fac0e2d1fee669cd1764736f6c63430008000033a2646970667358221220d155ef50f68039377c2eb85478e0a15fdbb944b5a5af93523a43ee1b384f026864736f6c634300080000336080604052600480546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556005805482169092179091556012805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006017553480156200007a57600080fd5b50604051620021b1380380620021b18339810160408190526200009d916200026c565b600080546001600160a01b0319166001600160a01b03838116919091179091558216620000df57737a250d5630b4cf539739df2c5dacb4c659f2488d620000e1565b815b600680546001600160a01b039283166001600160a01b03199182161790915560018054821633178155600280548316737f62ffc4730887561320d5bc5fd8651f739c207e908117909155600380549093161790915560125482166000908152600f6020526040808220805460ff1990811685179091557fdf82e8e0ca2e8ef371057fa5118f2005d1fe0db2f7f1913ccbb77b1c43aa57258054821685179055736b175474e89094c44da98b954eedeac495271d0f9092527f907804fb4f4f34039c621b1a41008798cef5775ce10837f2769fb81032e4d8388054909216909217905560048054915163095ea7b360e01b8152919092169163095ea7b391620001f09186916000199101620002cc565b602060405180830381600087803b1580156200020b57600080fd5b505af115801562000220573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002469190620002a3565b505050620002e5565b80516001600160a01b03811681146200026757600080fd5b919050565b600080604083850312156200027f578182fd5b6200028a836200024f565b91506200029a602084016200024f565b90509250929050565b600060208284031215620002b5578081fd5b81518015158114620002c5578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611ebc80620002f56000396000f3fe60806040526004361061026b5760003560e01c806383e8450011610144578063c238efd5116100b6578063e0bab4c41161007a578063e0bab4c414610706578063e0f8e2431461071b578063e2d2e2191461073b578063efca2eed14610750578063f2fde38b14610765578063f854a27f1461078557610272565b8063c238efd51461066f578063ca89b8991461068f578063ce7c2ac2146106af578063d0e30db0146106de578063d63a8e11146106e657610272565b8063929925db11610108578063929925db146105ba578063997664d7146105da578063a70bf8bb146105ef578063a995bb141461060f578063bcd259a81461062f578063c161357a1461064f57610272565b806383e8450014610525578063845610ee1461054557806387f681d81461056557806389a30271146105855780638e4241751461059a57610272565b80632bcf161c116101dd5780633a98ef39116101a15780633a98ef39146104885780635881f3ef1461049d578063610035a4146104bd57806363eabae9146104dd5780636c9382cd146104fd5780638366e79a1461050557610272565b80632bcf161c146103e65780632f54bf6e146104065780633041d503146104335780633333cfc31461045357806335faa4161461047357610272565b806314b6ca961161022f57806314b6ca961461032457806315f7e05e146103465780631b386a4214610366578063264fff5b146103865780632870e95d146103a657806328fd3198146103c657610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da5780630a25dea9146102fa57806311ce023d1461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b46565b6107a5565b6040516102a49190611c66565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b62565b6107c0565b6040516102a49190611dc0565b3480156102e657600080fd5b506102976102f5366004611b46565b6107dd565b34801561030657600080fd5b506102976107f8565b34801561031b57600080fd5b506102cd610807565b34801561033057600080fd5b5061034461033f366004611c07565b61080d565b005b34801561035257600080fd5b50610344610361366004611b46565b6109c5565b34801561037257600080fd5b506102cd610381366004611b62565b6109d2565b34801561039257600080fd5b506103446103a1366004611b46565b6109fd565b3480156103b257600080fd5b506103446103c1366004611b46565b610a4d565b3480156103d257600080fd5b506102cd6103e1366004611b46565b610aa1565b3480156103f257600080fd5b506102cd610401366004611b46565b610b2d565b34801561041257600080fd5b50610426610421366004611b46565b610b48565b6040516102a49190611c93565b34801561043f57600080fd5b5061034461044e366004611b46565b610b5c565b34801561045f57600080fd5b5061034461046e366004611bda565b610ba3565b34801561047f57600080fd5b50610344610bf3565b34801561049457600080fd5b506102cd610c44565b3480156104a957600080fd5b506103446104b8366004611b46565b610c4a565b3480156104c957600080fd5b506104266104d8366004611b46565b610c91565b3480156104e957600080fd5b506103446104f8366004611bda565b610caf565b610344610ce7565b34801561051157600080fd5b50610344610520366004611b62565b610d52565b34801561053157600080fd5b50610344610540366004611b62565b610e9a565b34801561055157600080fd5b50610344610560366004611b46565b610eed565b34801561057157600080fd5b50610344610580366004611b46565b610f34565b34801561059157600080fd5b50610297610f82565b3480156105a657600080fd5b506104266105b5366004611b62565b610f9a565b3480156105c657600080fd5b506104266105d5366004611b62565b610fc8565b3480156105e657600080fd5b506102cd610fe8565b3480156105fb57600080fd5b5061034461060a366004611b46565b610fee565b34801561061b57600080fd5b5061034461062a366004611b62565b611035565b34801561063b57600080fd5b5061034461064a366004611b62565b61108a565b34801561065b57600080fd5b5061034461066a366004611b9a565b6110db565b34801561067b57600080fd5b5061029761068a366004611b46565b611186565b34801561069b57600080fd5b506102cd6106aa366004611b46565b6111a4565b3480156106bb57600080fd5b506106cf6106ca366004611b46565b6111b6565b6040516102a493929190611dc9565b6103446111d7565b3480156106f257600080fd5b50610426610701366004611b46565b611227565b34801561071257600080fd5b5061029761123c565b34801561072757600080fd5b50610344610736366004611b46565b611254565b34801561074757600080fd5b506102cd61129b565b34801561075c57600080fd5b506102cd6112a1565b34801561077157600080fd5b50610344610780366004611b46565b6112a7565b34801561079157600080fd5b506104266107a0366004611b46565b611322565b600e602052600090815260409020546001600160a01b031681565b600b60209081526000928352604080842090915290825290205481565b6010602052600090815260409020546001600160a01b031681565b6012546001600160a01b031681565b60175481565b6001546001600160a01b031633148061083057506002546001600160a01b031633145b8061084557506003546001600160a01b031633145b61084e57600080fd5b6001600160a01b038216600090815260116020526040902054156108de576001600160a01b038083166000908152601060209081526040808320549093168252600f9052205460ff16156108c7576001600160a01b038083166000908152601060205260409020546108c291849116611337565b6108de565b6012546108de9083906001600160a01b0316611337565b60008111801561090457506001600160a01b038216600090815260116020526040902054155b15610917576109128261193e565b61094a565b8015801561093c57506001600160a01b03821660009081526011602052604090205415155b1561094a5761094a8261199f565b6001600160a01b03821660009081526011602052604090205460135461097b91839161097591611aec565b90611aff565b6013556001600160a01b03821660009081526011602052604090208190556109a281611b0b565b6001600160a01b0390921660009081526011602052604090206001019190915550565b6109cf3382611337565b50565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b610a0633610b48565b610a2b5760405162461bcd60e51b8152600401610a2290611da0565b60405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600f602052604090205460ff16610a7257600080fd5b33600090815260106020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260116020526040812054610ac657506000610b28565b6001600160a01b038216600090815260116020526040812054610ae890611b0b565b6001600160a01b038416600090815260116020526040902060010154909150808211610b1957600092505050610b28565b610b238282611aec565b925050505b919050565b6001600160a01b03166000908152600a602052604090205490565b6000546001600160a01b0390811691161490565b610b6533610b48565b610b815760405162461bcd60e51b8152600401610a2290611da0565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610bac33610b48565b610bc85760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b610bfc33610b48565b610c185760405162461bcd60e51b8152600401610a2290611da0565b60405133904780156108fc02916000818181858888f193505050501580156109cf573d6000803e3d6000fd5b60135481565b610c5333610b48565b610c6f5760405162461bcd60e51b8152600401610a2290611da0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600f602052604090205460ff1690565b336000908152600c602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610cf033610b48565b610d0c5760405162461bcd60e51b8152600401610a2290611da0565b3415610d50576014543490610d219082611aff565b601455601354601754610d4b91610d4291610d3c9085611b2e565b90611b3a565b60165490611aff565b601655505b565b610d5b33610b48565b610d775760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b038216301415610da05760405162461bcd60e51b8152600401610a2290611d07565b6040516370a0823160e01b81526001600160a01b0383169063a9059cbb90839083906370a0823190610dd6903090600401611c66565b60206040518083038186803b158015610dee57600080fd5b505afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190611c4e565b6040518363ffffffff1660e01b8152600401610e43929190611c7a565b602060405180830381600087803b158015610e5d57600080fd5b505af1158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e959190611c32565b505050565b610ea333610b48565b610ebf5760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b039182166000908152600e6020526040902080546001600160a01b03191691909216179055565b610ef633610b48565b610f125760405162461bcd60e51b8152600401610a2290611da0565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610f3d33610b48565b610f595760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b03166000908152600f60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b600c60209081526000928352604080842090915290825290205460ff1681565b60145481565b610ff733610b48565b6110135760405162461bcd60e51b8152600401610a2290611da0565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61103e33610b48565b61105a5760405162461bcd60e51b8152600401610a2290611da0565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610e4390849060001990600401611c7a565b6001600160a01b0382166000908152600c6020908152604080832033845290915290205460ff166110cd5760405162461bcd60e51b8152600401610a2290611d75565b6110d78282611337565b5050565b6110e433610b48565b6111005760405162461bcd60e51b8152600401610a2290611da0565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b39061112e9085908590600401611c7a565b602060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611c32565b50505050565b6001600160a01b039081166000908152600e60205260409020541690565b600a6020526000908152604090205481565b60116020526000908152604090208054600182015460029092015490919083565b6001546001600160a01b03163314806111fa57506002546001600160a01b031633145b8061120f57506003546001600160a01b031633145b61121857600080fd5b6014543490610d219082611aff565b600f6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61125d33610b48565b6112795760405162461bcd60e51b8152600401610a2290611da0565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60165481565b60155481565b6112b033610b48565b6112cc5760405162461bcd60e51b8152600401610a2290611da0565b600080546001600160a01b0319166001600160a01b0383161790556040517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390611317908390611c66565b60405180910390a150565b600d6020526000908152604090205460ff1681565b6001600160a01b0381166000908152600f602052604090205460ff1661136f5760405162461bcd60e51b8152600401610a2290611d3e565b6001600160a01b038216600090815260116020526040902054611391576110d7565b600061139c83610aa1565b90508015610e95576015546113b19082611aff565b6015556001600160a01b038316600090815260096020908152604080832042905560119091529020600201546113e79082611aff565b6001600160a01b038416600090815260116020526040902060028101919091555461141190611b0b565b6001600160a01b0380851660009081526011602052604090206001019190915560045483821691161415611500576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611475573d6000803e3d6000fd5b506001600160a01b0382166000908152600a60205260409020546114999082611aff565b6001600160a01b038084166000908152600a6020908152604080832094909455600b815283822092871682529190915220546114d59082611aff565b6001600160a01b038084166000908152600b6020908152604080832093881683529290522055610e95565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611531908890600401611c66565b60206040518083038186803b15801561154957600080fd5b505afa15801561155d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115819190611c4e565b6001600160a01b038581166000908152600e6020526040902054919250166116b257604080516002808252606082018352600092602083019080368337505060045482519293506001600160a01b0316918391506000906115f257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061163457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590869061167a9060009086908c904290600401611c9e565b6000604051808303818588803b15801561169357600080fd5b505af11580156116a7573d6000803e3d6000fd5b505050505050611811565b6040805160038082526080820190925260009160208201606080368337505060045482519293506001600160a01b03169183915060009061170357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600e909152604090205482519116908290600190811061175557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160028151811061179757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959086906117dd9060009086908c904290600401611c9e565b6000604051808303818588803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611840908990600401611c66565b60206040518083038186803b15801561185857600080fd5b505afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190611c4e565b90506118be61189f8284611aec565b6001600160a01b0387166000908152600a602052604090205490611aff565b6001600160a01b0386166000908152600a60205260409020556119106118e48284611aec565b6001600160a01b038088166000908152600b60209081526040808320938c168352929052205490611aff565b6001600160a01b038087166000908152600b60209081526040808320938b1683529290522055505050505050565b600780546001600160a01b039092166000818152600860205260408120849055600184018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b0319169091179055565b600780546119af90600190611e36565b815481106119cd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526008909252604090922054600780549290931692918110611a1957634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260089182905260408120546007805491939291611a6590600190611e36565b81548110611a8357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556007805480611ac757634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611af88284611e36565b9392505050565b6000611af88284611ddf565b6000611b28601754610d3c60165485611b2e90919063ffffffff16565b92915050565b6000611af88284611e17565b6000611af88284611df7565b600060208284031215611b57578081fd5b8135611af881611e63565b60008060408385031215611b74578081fd5b8235611b7f81611e63565b91506020830135611b8f81611e63565b809150509250929050565b600080600060608486031215611bae578081fd5b8335611bb981611e63565b92506020840135611bc981611e63565b929592945050506040919091013590565b60008060408385031215611bec578182fd5b8235611bf781611e63565b91506020830135611b8f81611e78565b60008060408385031215611c19578182fd5b8235611c2481611e63565b946020939093013593505050565b600060208284031215611c43578081fd5b8151611af881611e78565b600060208284031215611c5f578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611ce75784516001600160a01b031683529383019391830191600101611cc2565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611df257611df2611e4d565b500190565b600082611e1257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e3157611e31611e4d565b500290565b600082821015611e4857611e48611e4d565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109cf57600080fd5b80151581146109cf57600080fdfea26469706673582212202cf2c31eea525bfeb07fa875245bc6f8c9963876bcfd75fac0e2d1fee669cd1764736f6c63430008000033

Deployed Bytecode

0x608060405260043610620003df5760003560e01c80636ddd171311620001ff578063ad5c4648116200011b578063dd62ed3e11620000af578063f2fde38b1162000079578063f2fde38b1462000b0c578063f708a64f1462000b31578063f887ea401462000b56578063fbfa77cf1462000b6e57620003e7565b8063dd62ed3e1462000a78578063df20fd491462000a9d578063e0f8e2431462000ac2578063f1f3bca31462000ae757620003e7565b8063b62496f511620000f1578063b62496f514620009f1578063ca33e64c1462000a16578063cd806f431462000a2e578063d7c010321462000a5357620003e7565b8063ad5c4648146200098f578063add5df6614620009a7578063af06795a14620009cc57620003e7565b80639571a07d11620001935780639d64bf9311620001695780639d64bf931462000922578063a51af4c5146200093a578063a8aa1b311462000952578063a9059cbb146200096a57620003e7565b80639571a07d14620008c057806395d89b4114620008e55780639a7a23d614620008fd57620003e7565b80638366e79a11620001d55780638366e79a14620008535780638523db641462000878578063893d20e8146200089057806391950f3014620008a857620003e7565b80636ddd171314620007fe57806370a08231146200081657806382247ec0146200083b57620003e7565b806335faa41611620002fb5780634ada218b116200028f57806360733e8f116200025957806360733e8f146200076a57806360e232a9146200078f578063658d4b7f14620007b45780636d92e1a514620007d957620003e7565b80634ada218b14620006e3578063571ac8b014620006fb5780635881f3ef14620007205780635d0044ca146200074557620003e7565b80633b10e54011620002d15780633b10e540146200065c5780633f4218e01462000681578063430bf08a14620006a65780634355855a14620006be57620003e7565b806335faa41614620005fa578063379fad9a146200061257806338e99144146200063757620003e7565b806326560be711620003735780632af10fac11620003495780632af10fac146200057e5780632b112e4914620005965780632f54bf6e14620005ae578063313ce56714620005d357620003e7565b806326560be7146200050f57806326c081fc1462000534578063296020e7146200055957620003e7565b8063095ea7b311620003b5578063095ea7b3146200047757806315d61a82146200049c57806318160ddd14620004c357806323b872dd14620004ea57620003e7565b806303382cbb14620003ec57806306fdde03146200041c57806307c89fe8146200044357620003e7565b36620003e757005b600080fd5b348015620003f957600080fd5b506200040462000b86565b60405162000413919062002e7a565b60405180910390f35b3480156200042957600080fd5b506200043462000b95565b60405162000413919062002f07565b3480156200045057600080fd5b50620004686200046236600462002bec565b62000bbc565b60405162000413919062002efc565b3480156200048457600080fd5b50620004686200049636600462002d2f565b62000c10565b348015620004a957600080fd5b50620004c1620004bb36600462002dbb565b62000c7d565b005b348015620004d057600080fd5b50620004db62000cac565b60405162000413919062003022565b348015620004f757600080fd5b50620004686200050936600462002cb8565b62000cb2565b3480156200051c57600080fd5b50620004c16200052e36600462002d5d565b62000d7b565b3480156200054157600080fd5b50620004c16200055336600462002cfd565b62000db8565b3480156200056657600080fd5b50620004686200057836600462002bec565b62000e0d565b3480156200058b57600080fd5b506200040462000e22565b348015620005a357600080fd5b50620004db62000e31565b348015620005bb57600080fd5b5062000468620005cd36600462002bec565b62000e82565b348015620005e057600080fd5b50620005eb62000e96565b6040516200041391906200309d565b3480156200060757600080fd5b50620004c162000e9b565b3480156200061f57600080fd5b50620004c16200063136600462002d5d565b62000ef5565b3480156200064457600080fd5b50620004686200065636600462002bec565b62000f32565b3480156200066957600080fd5b50620004c16200067b36600462002d5d565b62000f50565b3480156200068e57600080fd5b5062000468620006a036600462002bec565b62000f94565b348015620006b357600080fd5b506200040462000fa9565b348015620006cb57600080fd5b5062000468620006dd36600462002bec565b62000fb8565b348015620006f057600080fd5b506200046862000fcd565b3480156200070857600080fd5b50620004686200071a36600462002bec565b62000fd6565b3480156200072d57600080fd5b50620004046200073f36600462002bec565b62000fe6565b3480156200075257600080fd5b50620004c16200076436600462002dbb565b6200135e565b3480156200077757600080fd5b50620004686200078936600462002bec565b6200138d565b3480156200079c57600080fd5b50620004c1620007ae36600462002bec565b620013ab565b348015620007c157600080fd5b50620004c1620007d336600462002cfd565b62001401565b348015620007e657600080fd5b5062000468620007f836600462002bec565b62001456565b3480156200080b57600080fd5b506200046862001474565b3480156200082357600080fd5b50620004db6200083536600462002bec565b62001484565b3480156200084857600080fd5b50620004db6200149f565b3480156200086057600080fd5b50620004c16200087236600462002c2a565b620014a5565b3480156200088557600080fd5b506200046862001601565b3480156200089d57600080fd5b50620004046200160f565b348015620008b557600080fd5b50620004686200161e565b348015620008cd57600080fd5b5062000468620008df36600462002bec565b62001627565b348015620008f257600080fd5b50620004346200163c565b3480156200090a57600080fd5b50620004c16200091c36600462002cfd565b6200165a565b3480156200092f57600080fd5b50620004db62001694565b3480156200094757600080fd5b50620004046200169a565b3480156200095f57600080fd5b5062000404620016a9565b3480156200097757600080fd5b50620004686200098936600462002d2f565b620016b8565b3480156200099c57600080fd5b5062000404620016c7565b348015620009b457600080fd5b50620004c1620009c636600462002e1b565b620016d6565b348015620009d957600080fd5b50620004c1620009eb36600462002cfd565b62001768565b348015620009fe57600080fd5b506200046862000a1036600462002bec565b620017bd565b34801562000a2357600080fd5b5062000404620017d2565b34801562000a3b57600080fd5b50620004c162000a4d36600462002cfd565b620017e1565b34801562000a6057600080fd5b50620004c162000a7236600462002c67565b62001a8d565b34801562000a8557600080fd5b50620004db62000a9736600462002c2a565b62001af6565b34801562000aaa57600080fd5b50620004c162000abc36600462002d9b565b62001b21565b34801562000acf57600080fd5b50620004c162000ae136600462002bec565b62001b6d565b34801562000af457600080fd5b50620004db62000b0636600462002d5d565b62001bb9565b34801562000b1957600080fd5b50620004c162000b2b36600462002bec565b62001bd2565b34801562000b3e57600080fd5b50620004c162000b5036600462002cfd565b62001c54565b34801562000b6357600080fd5b506200040462001d95565b34801562000b7b57600080fd5b506200040462001da4565b601f546001600160a01b031681565b60408051808201909152600d81526c476f696e6720746f205a65726f60981b602082015290565b600062000bc93362000e82565b62000bf15760405162461bcd60e51b815260040162000be89062002fcb565b60405180910390fd5b506001600160a01b03166000908152600c602052604090205460ff1690565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259062000c6b90869062003022565b60405180910390a35060015b92915050565b62000c883362000e82565b62000ca75760405162461bcd60e51b815260040162000be89062002fcb565b600655565b60045490565b6004546001600160a01b038416600090815260086020908152604080832033845290915281205490911462000d64576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b038716600090815260088252838120338252909152919091205462000d3f91849062001dc1565b6001600160a01b03851660009081526008602090815260408083203384529091529020555b62000d7184848462001df0565b90505b9392505050565b62000d863362000e82565b62000da55760405162461bcd60e51b815260040162000be89062002fcb565b6028805460ff1916911515919091179055565b62000dc33362000e82565b62000de25760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b600c6020526000908152604090205460ff1681565b6020546001600160a01b031681565b60035460009062000e7d9062000e50906001600160a01b031662001484565b60025462000e769062000e6c906001600160a01b031662001484565b60045490620021a5565b90620021a5565b905090565b6000546001600160a01b0390811691161490565b600990565b62000ea63362000e82565b62000ec55760405162461bcd60e51b815260040162000be89062002fcb565b60405133904780156108fc02916000818181858888f1935050505015801562000ef2573d6000803e3d6000fd5b50565b62000f003362000e82565b62000f1f5760405162461bcd60e51b815260040162000be89062002fcb565b600d805460ff1916911515919091179055565b6001600160a01b031660009081526009602052604090205460ff1690565b62000f5b3362000e82565b62000f7a5760405162461bcd60e51b815260040162000be89062002fcb565b602880549115156101000261ff0019909216919091179055565b600a6020526000908152604090205460ff1681565b6021546001600160a01b031681565b600b6020526000908152604090205460ff1681565b60285460ff1681565b600062000c778260045462000c10565b600062000ff33362000e82565b620010125760405162461bcd60e51b815260040162000be89062002fcb565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200105157600080fd5b505afa15801562001066573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200108c919062002c0b565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620010d557600080fd5b505afa158015620010ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001110919062002c0b565b6040518363ffffffff1660e01b81526004016200112f92919062002e8e565b60206040518083038186803b1580156200114857600080fd5b505afa1580156200115d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001183919062002c0b565b91506001600160a01b0382166200130557806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620011ce57600080fd5b505afa158015620011e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001209919062002c0b565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200125257600080fd5b505afa15801562001267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200128d919062002c0b565b6040518363ffffffff1660e01b8152600401620012ac92919062002e8e565b602060405180830381600087803b158015620012c757600080fd5b505af1158015620012dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001302919062002c0b565b91505b602480546001600160a01b038085166001600160a01b0319928316179092556023805493831693909116929092179182905560045430600090815260086020908152604080832095909416825293909352912055919050565b620013693362000e82565b620013885760405162461bcd60e51b815260040162000be89062002fcb565b600555565b6001600160a01b03166000908152600a602052604090205460ff1690565b620013b63362000e82565b620013d55760405162461bcd60e51b815260040162000be89062002fcb565b602180546001600160a01b039092166001600160a01b0319928316811790915560228054909216179055565b6200140c3362000e82565b6200142b5760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b03166000908152600b602052604090205460ff1690565b602654600160a01b900460ff1681565b6001600160a01b031660009081526007602052604090205490565b60055481565b620014b03362000e82565b620014cf5760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b038216301415620014fb5760405162461bcd60e51b815260040162000be89062002f5d565b6040516370a0823160e01b81526001600160a01b0383169063a9059cbb90839083906370a08231906200153390309060040162002e7a565b60206040518083038186803b1580156200154c57600080fd5b505afa15801562001561573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001587919062002dd4565b6040518363ffffffff1660e01b8152600401620015a692919062002ea8565b602060405180830381600087803b158015620015c157600080fd5b505af1158015620015d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015fc919062002d7c565b505050565b602854610100900460ff1681565b6000546001600160a01b031690565b600d5460ff1681565b60096020526000908152604090205460ff1681565b6040805180820190915260048152635a45524f60e01b602082015290565b620016653362000e82565b620016845760405162461bcd60e51b815260040162000be89062002fcb565b620016908282620021b3565b5050565b60065481565b6026546001600160a01b031681565b6024546001600160a01b031681565b600062000d7433848462001df0565b6001546001600160a01b031681565b620016e13362000e82565b620017005760405162461bcd60e51b815260040162000be89062002fcb565b600f8990556010889055601187905560128690556200172e866200172789818d8d620021f1565b90620021f1565b601355601485905560158490556016839055601782905562001758826200172785818989620021f1565b6018556019555050505050505050565b620017733362000e82565b620017925760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600e6020526000908152604090205460ff1681565b601e546001600160a01b031681565b620017ec3362000e82565b6200180b5760405162461bcd60e51b815260040162000be89062002fcb565b602380546001600160a01b0319166001600160a01b0384811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b1580156200186857600080fd5b505afa1580156200187d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018a3919062002c0b565b6001546040516364e329cb60e11b81526001600160a01b039283169263c9c6539692620018d892911690309060040162002e8e565b602060405180830381600087803b158015620018f357600080fd5b505af115801562001908573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200192e919062002c0b565b602480546001600160a01b0319166001600160a01b0392831617905560045430600090815260086020908152604080832060235490951683529390529190912055801562001a2157602360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620019c557600080fd5b505afa158015620019da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a00919062002c0b565b600180546001600160a01b0319166001600160a01b03929092169190911790555b813360405162001a319062002bde565b62001a3e92919062002e8e565b604051809103906000f08015801562001a5b573d6000803e3d6000fd5b50602580546001600160a01b03199081166001600160a01b039384161791829055602680549290931691161790555050565b62001a983362000e82565b62001ab75760405162461bcd60e51b815260040162000be89062002fcb565b601e80546001600160a01b039485166001600160a01b031991821617909155601f80549385169382169390931790925560208054919093169116179055565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b62001b2c3362000e82565b62001b4b5760405162461bcd60e51b815260040162000be89062002fcb565b60268054921515600160a01b0260ff60a01b1990931692909217909155602755565b62001b783362000e82565b62001b975760405162461bcd60e51b815260040162000be89062002fcb565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60008162001bca5760135462000c77565b505060185490565b62001bdd3362000e82565b62001bfc5760405162461bcd60e51b815260040162000be89062002fcb565b600080546001600160a01b0319166001600160a01b0383161790556040517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639062001c4990839062002e7a565b60405180910390a150565b62001c5f3362000e82565b62001c7e5760405162461bcd60e51b815260040162000be89062002fcb565b6001600160a01b0382166000908152600b60205260409020805460ff19168215151790558062001d28576025546001600160a01b0383811660009081526007602052604090819020549051630a5b654b60e11b815291909216916314b6ca969162001cee91869160040162002ea8565b600060405180830381600087803b15801562001d0957600080fd5b505af115801562001d1e573d6000803e3d6000fd5b5050505062001690565b602554604051630a5b654b60e11b81526001600160a01b03909116906314b6ca969062001d5d90859060009060040162002ea8565b600060405180830381600087803b15801562001d7857600080fd5b505af115801562001d8d573d6000803e3d6000fd5b505050505050565b6023546001600160a01b031681565b6022546001600160a01b031681565b600062000d748284620030c6565b6000818484111562001de85760405162461bcd60e51b815260040162000be8919062002f07565b505050900390565b60285460009062010000900460ff161562001e1a5762001e12848484620021ff565b905062000d74565b60285460ff168062001e4457506001600160a01b03841660009081526009602052604090205460ff165b62001e635760405162461bcd60e51b815260040162000be89062002feb565b6023546001600160a01b038481166000908152600e602052604081205491909216919060ff168062001ea65750816001600160a01b0316856001600160a01b0316145b90508015801562001ed057506001600160a01b0385166000908152600c602052604090205460ff16155b1562001f1f576005546001600160a01b03861660009081526007602052604090205462001eff908690620030ab565b1062001f1f5760405162461bcd60e51b815260040162000be89062002f94565b80801562001f2f57506006548410155b1562001f4f5762001f3f620022a6565b1562001f4f5762001f4f62002307565b6040805180820182526014815273496e73756666696369656e742062616c616e636560601b6020808301919091526001600160a01b03891660009081526007909152919091205462001fa391869062001dc1565b6001600160a01b03871660009081526007602052604081209190915562001fcb87876200278d565b62001fd7578462001fe4565b62001fe4878787620028c0565b6001600160a01b0387166000908152600760205260409020549091506200200c9082620021f1565b6001600160a01b03808816600090815260076020908152604080832094909455918a168152600b909152205460ff16620020b5576025546001600160a01b0388811660009081526007602052604090819020549051630a5b654b60e11b815291909216916314b6ca969162002086918b9160040162002ea8565b600060405180830381600087803b158015620020a157600080fd5b505af1925050508015620020b3575060015b505b6001600160a01b0386166000908152600b602052604090205460ff166200214b576025546001600160a01b0387811660009081526007602052604090819020549051630a5b654b60e11b815291909216916314b6ca96916200211c918a9160040162002ea8565b600060405180830381600087803b1580156200213757600080fd5b505af192505050801562002149575060015b505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162002190919062003022565b60405180910390a35060019695505050505050565b600062000d74828462003109565b6001600160a01b039091166000908152600e60209081526040808320805494151560ff199586168117909155600b9092529091208054909216179055565b600062000d748284620030ab565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526007909152918220546200225291849062001dc1565b6001600160a01b038086166000908152600760205260408082209390935590851681522054620022839083620021f1565b6001600160a01b0384166000908152600760205260409020555060019392505050565b336000908152600e602052604081205460ff16158015620022d0575060285462010000900460ff16155b8015620022e65750602654600160a01b900460ff165b801562000e7d57505060275430600090815260076020526040902054101590565b6028805462ff00001916620100001790556000620023253062001484565b9050600062002350601d5462001727601b5462001727601c54601a54620021f190919063ffffffff16565b905060006200236c6002601a5462001db390919063ffffffff16565b905060006200237c8483620021a5565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110620023c557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260018054835192169183919081106200240457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260235460405163791ac94760e01b81524792919091169063791ac94790620024509086906000908790309042906004016200302b565b600060405180830381600087803b1580156200246b57600080fd5b505af115801562002480573d6000803e3d6000fd5b5050505060006200249b8247620021a590919063ffffffff16565b90506000620024c86002620024c189620024c1601a548762002bd090919063ffffffff16565b9062001db3565b90506000620024e888620024c1601b548662002bd090919063ffffffff16565b905060006200250889620024c1601c548762002bd090919063ffffffff16565b90506000620025288a620024c1601d548862002bd090919063ffffffff16565b6000601a819055601c819055601b819055601d5590508215620025ab57602560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200259657600080fd5b505af193505050508015620025a9575060015b505b81156200266b57602854610100900460ff16156200262e57602260009054906101000a90046001600160a01b03166001600160a01b03166317f524e3836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200261457600080fd5b505af19350505050801562002627575060015b506200266b565b601f546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801562002669573d6000803e3d6000fd5b505b8015620026af576020546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015620026ad573d6000803e3d6000fd5b505b88156200277457602360009054906101000a90046001600160a01b03166001600160a01b031663f305d71985308c600080601e60009054906101000a90046001600160a01b0316426040518863ffffffff1660e01b81526004016200271a9695949392919062002ec1565b6060604051808303818588803b1580156200273457600080fd5b505af115801562002749573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062002770919062002ded565b5050505b50506028805462ff000019169055505050505050505050565b600d5460009060ff1615620027e7576001600160a01b0383166000908152600a602052604090205460ff16158015620027df57506001600160a01b0382166000908152600a602052604090205460ff16155b905062000c77565b6023546001600160a01b038481166000908152600e602052604090205491169060ff1680620028275750806001600160a01b0316846001600160a01b0316145b806200286757506001600160a01b0383166000908152600e602052604090205460ff1680620028675750806001600160a01b0316836001600160a01b0316145b62002874576000620028b7565b6001600160a01b0384166000908152600a602052604090205460ff16158015620028b757506001600160a01b0383166000908152600a602052604090205460ff16155b91505062000c77565b6023546001600160a01b038381166000908152600e602052604081205490929190911690829060ff1680620029065750816001600160a01b0316856001600160a01b0316145b90506000620029158262001bb9565b9050600062002935601954620024c1848962002bd090919063ffffffff16565b9050811562002b4357821562002a475760145415620029845781601454826200295f9190620030e7565b6200296b9190620030c6565b601a60008282546200297e9190620030ab565b90915550505b60165415620029c35781601654826200299e9190620030e7565b620029aa9190620030c6565b601c6000828254620029bd9190620030ab565b90915550505b6015541562002a02578160155482620029dd9190620030e7565b620029e99190620030c6565b601b6000828254620029fc9190620030ab565b90915550505b6017541562002a4157816017548262002a1c9190620030e7565b62002a289190620030c6565b601d600082825462002a3b9190620030ab565b90915550505b62002b43565b600f541562002a865781600f548262002a619190620030e7565b62002a6d9190620030c6565b601a600082825462002a809190620030ab565b90915550505b6011541562002ac557816011548262002aa09190620030e7565b62002aac9190620030c6565b601c600082825462002abf9190620030ab565b90915550505b6010541562002b0457816010548262002adf9190620030e7565b62002aeb9190620030c6565b601b600082825462002afe9190620030ab565b90915550505b6012541562002b4357816012548262002b1e9190620030e7565b62002b2a9190620030c6565b601d600082825462002b3d9190620030ab565b90915550505b3060009081526007602052604090205462002b5f9082620021f1565b30600081815260076020526040908190209290925590516001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062002bb090859062003022565b60405180910390a362002bc48682620021a5565b98975050505050505050565b600062000d748284620030e7565b6121b1806200315f83390190565b60006020828403121562002bfe578081fd5b813562000d748162003139565b60006020828403121562002c1d578081fd5b815162000d748162003139565b6000806040838503121562002c3d578081fd5b823562002c4a8162003139565b9150602083013562002c5c8162003139565b809150509250929050565b60008060006060848603121562002c7c578081fd5b833562002c898162003139565b9250602084013562002c9b8162003139565b9150604084013562002cad8162003139565b809150509250925092565b60008060006060848603121562002ccd578283fd5b833562002cda8162003139565b9250602084013562002cec8162003139565b929592945050506040919091013590565b6000806040838503121562002d10578182fd5b823562002d1d8162003139565b9150602083013562002c5c816200314f565b6000806040838503121562002d42578182fd5b823562002d4f8162003139565b946020939093013593505050565b60006020828403121562002d6f578081fd5b813562000d74816200314f565b60006020828403121562002d8e578081fd5b815162000d74816200314f565b6000806040838503121562002dae578182fd5b823562002d4f816200314f565b60006020828403121562002dcd578081fd5b5035919050565b60006020828403121562002de6578081fd5b5051919050565b60008060006060848603121562002e02578283fd5b8351925060208401519150604084015190509250925092565b60008060008060008060008060006101208a8c03121562002e3a578485fd5b505087359960208901359950604089013598606081013598506080810135975060a0810135965060c0810135955060e08101359450610100013592509050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b8181101562002f355785810183015185820160400152820162002f17565b8181111562002f475783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b6020808252601d908201527f4d61782077616c6c657420686173206265656e20747269676765726564000000604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252601d908201527f54726164696e672069732063757272656e746c792064697361626c6564000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156200307c5784516001600160a01b03168352938301939183019160010162003055565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b60008219821115620030c157620030c162003123565b500190565b600082620030e257634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161562003104576200310462003123565b500290565b6000828210156200311e576200311e62003123565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811462000ef257600080fd5b801515811462000ef257600080fdfe6080604052600480546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29081179092556005805482169092179091556012805490911673dac17f958d2ee523a2206206994597c13d831ec71790556ec097ce7bc90715b34b9f10000000006017553480156200007a57600080fd5b50604051620021b1380380620021b18339810160408190526200009d916200026c565b600080546001600160a01b0319166001600160a01b03838116919091179091558216620000df57737a250d5630b4cf539739df2c5dacb4c659f2488d620000e1565b815b600680546001600160a01b039283166001600160a01b03199182161790915560018054821633178155600280548316737f62ffc4730887561320d5bc5fd8651f739c207e908117909155600380549093161790915560125482166000908152600f6020526040808220805460ff1990811685179091557fdf82e8e0ca2e8ef371057fa5118f2005d1fe0db2f7f1913ccbb77b1c43aa57258054821685179055736b175474e89094c44da98b954eedeac495271d0f9092527f907804fb4f4f34039c621b1a41008798cef5775ce10837f2769fb81032e4d8388054909216909217905560048054915163095ea7b360e01b8152919092169163095ea7b391620001f09186916000199101620002cc565b602060405180830381600087803b1580156200020b57600080fd5b505af115801562000220573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002469190620002a3565b505050620002e5565b80516001600160a01b03811681146200026757600080fd5b919050565b600080604083850312156200027f578182fd5b6200028a836200024f565b91506200029a602084016200024f565b90509250929050565b600060208284031215620002b5578081fd5b81518015158114620002c5578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b611ebc80620002f56000396000f3fe60806040526004361061026b5760003560e01c806383e8450011610144578063c238efd5116100b6578063e0bab4c41161007a578063e0bab4c414610706578063e0f8e2431461071b578063e2d2e2191461073b578063efca2eed14610750578063f2fde38b14610765578063f854a27f1461078557610272565b8063c238efd51461066f578063ca89b8991461068f578063ce7c2ac2146106af578063d0e30db0146106de578063d63a8e11146106e657610272565b8063929925db11610108578063929925db146105ba578063997664d7146105da578063a70bf8bb146105ef578063a995bb141461060f578063bcd259a81461062f578063c161357a1461064f57610272565b806383e8450014610525578063845610ee1461054557806387f681d81461056557806389a30271146105855780638e4241751461059a57610272565b80632bcf161c116101dd5780633a98ef39116101a15780633a98ef39146104885780635881f3ef1461049d578063610035a4146104bd57806363eabae9146104dd5780636c9382cd146104fd5780638366e79a1461050557610272565b80632bcf161c146103e65780632f54bf6e146104065780633041d503146104335780633333cfc31461045357806335faa4161461047357610272565b806314b6ca961161022f57806314b6ca961461032457806315f7e05e146103465780631b386a4214610366578063264fff5b146103865780632870e95d146103a657806328fd3198146103c657610272565b806302c4aede146102775780630300f925146102ad578063061ad62a146102da5780630a25dea9146102fa57806311ce023d1461030f57610272565b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004611b46565b6107a5565b6040516102a49190611c66565b60405180910390f35b3480156102b957600080fd5b506102cd6102c8366004611b62565b6107c0565b6040516102a49190611dc0565b3480156102e657600080fd5b506102976102f5366004611b46565b6107dd565b34801561030657600080fd5b506102976107f8565b34801561031b57600080fd5b506102cd610807565b34801561033057600080fd5b5061034461033f366004611c07565b61080d565b005b34801561035257600080fd5b50610344610361366004611b46565b6109c5565b34801561037257600080fd5b506102cd610381366004611b62565b6109d2565b34801561039257600080fd5b506103446103a1366004611b46565b6109fd565b3480156103b257600080fd5b506103446103c1366004611b46565b610a4d565b3480156103d257600080fd5b506102cd6103e1366004611b46565b610aa1565b3480156103f257600080fd5b506102cd610401366004611b46565b610b2d565b34801561041257600080fd5b50610426610421366004611b46565b610b48565b6040516102a49190611c93565b34801561043f57600080fd5b5061034461044e366004611b46565b610b5c565b34801561045f57600080fd5b5061034461046e366004611bda565b610ba3565b34801561047f57600080fd5b50610344610bf3565b34801561049457600080fd5b506102cd610c44565b3480156104a957600080fd5b506103446104b8366004611b46565b610c4a565b3480156104c957600080fd5b506104266104d8366004611b46565b610c91565b3480156104e957600080fd5b506103446104f8366004611bda565b610caf565b610344610ce7565b34801561051157600080fd5b50610344610520366004611b62565b610d52565b34801561053157600080fd5b50610344610540366004611b62565b610e9a565b34801561055157600080fd5b50610344610560366004611b46565b610eed565b34801561057157600080fd5b50610344610580366004611b46565b610f34565b34801561059157600080fd5b50610297610f82565b3480156105a657600080fd5b506104266105b5366004611b62565b610f9a565b3480156105c657600080fd5b506104266105d5366004611b62565b610fc8565b3480156105e657600080fd5b506102cd610fe8565b3480156105fb57600080fd5b5061034461060a366004611b46565b610fee565b34801561061b57600080fd5b5061034461062a366004611b62565b611035565b34801561063b57600080fd5b5061034461064a366004611b62565b61108a565b34801561065b57600080fd5b5061034461066a366004611b9a565b6110db565b34801561067b57600080fd5b5061029761068a366004611b46565b611186565b34801561069b57600080fd5b506102cd6106aa366004611b46565b6111a4565b3480156106bb57600080fd5b506106cf6106ca366004611b46565b6111b6565b6040516102a493929190611dc9565b6103446111d7565b3480156106f257600080fd5b50610426610701366004611b46565b611227565b34801561071257600080fd5b5061029761123c565b34801561072757600080fd5b50610344610736366004611b46565b611254565b34801561074757600080fd5b506102cd61129b565b34801561075c57600080fd5b506102cd6112a1565b34801561077157600080fd5b50610344610780366004611b46565b6112a7565b34801561079157600080fd5b506104266107a0366004611b46565b611322565b600e602052600090815260409020546001600160a01b031681565b600b60209081526000928352604080842090915290825290205481565b6010602052600090815260409020546001600160a01b031681565b6012546001600160a01b031681565b60175481565b6001546001600160a01b031633148061083057506002546001600160a01b031633145b8061084557506003546001600160a01b031633145b61084e57600080fd5b6001600160a01b038216600090815260116020526040902054156108de576001600160a01b038083166000908152601060209081526040808320549093168252600f9052205460ff16156108c7576001600160a01b038083166000908152601060205260409020546108c291849116611337565b6108de565b6012546108de9083906001600160a01b0316611337565b60008111801561090457506001600160a01b038216600090815260116020526040902054155b15610917576109128261193e565b61094a565b8015801561093c57506001600160a01b03821660009081526011602052604090205415155b1561094a5761094a8261199f565b6001600160a01b03821660009081526011602052604090205460135461097b91839161097591611aec565b90611aff565b6013556001600160a01b03821660009081526011602052604090208190556109a281611b0b565b6001600160a01b0390921660009081526011602052604090206001019190915550565b6109cf3382611337565b50565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b610a0633610b48565b610a2b5760405162461bcd60e51b8152600401610a2290611da0565b60405180910390fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600f602052604090205460ff16610a7257600080fd5b33600090815260106020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260116020526040812054610ac657506000610b28565b6001600160a01b038216600090815260116020526040812054610ae890611b0b565b6001600160a01b038416600090815260116020526040902060010154909150808211610b1957600092505050610b28565b610b238282611aec565b925050505b919050565b6001600160a01b03166000908152600a602052604090205490565b6000546001600160a01b0390811691161490565b610b6533610b48565b610b815760405162461bcd60e51b8152600401610a2290611da0565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610bac33610b48565b610bc85760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b610bfc33610b48565b610c185760405162461bcd60e51b8152600401610a2290611da0565b60405133904780156108fc02916000818181858888f193505050501580156109cf573d6000803e3d6000fd5b60135481565b610c5333610b48565b610c6f5760405162461bcd60e51b8152600401610a2290611da0565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03166000908152600f602052604090205460ff1690565b336000908152600c602090815260408083206001600160a01b0395909516835293905291909120805460ff1916911515919091179055565b610cf033610b48565b610d0c5760405162461bcd60e51b8152600401610a2290611da0565b3415610d50576014543490610d219082611aff565b601455601354601754610d4b91610d4291610d3c9085611b2e565b90611b3a565b60165490611aff565b601655505b565b610d5b33610b48565b610d775760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b038216301415610da05760405162461bcd60e51b8152600401610a2290611d07565b6040516370a0823160e01b81526001600160a01b0383169063a9059cbb90839083906370a0823190610dd6903090600401611c66565b60206040518083038186803b158015610dee57600080fd5b505afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190611c4e565b6040518363ffffffff1660e01b8152600401610e43929190611c7a565b602060405180830381600087803b158015610e5d57600080fd5b505af1158015610e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e959190611c32565b505050565b610ea333610b48565b610ebf5760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b039182166000908152600e6020526040902080546001600160a01b03191691909216179055565b610ef633610b48565b610f125760405162461bcd60e51b8152600401610a2290611da0565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610f3d33610b48565b610f595760405162461bcd60e51b8152600401610a2290611da0565b6001600160a01b03166000908152600f60205260409020805460ff19811660ff90911615179055565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205460ff1690565b600c60209081526000928352604080842090915290825290205460ff1681565b60145481565b610ff733610b48565b6110135760405162461bcd60e51b8152600401610a2290611da0565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61103e33610b48565b61105a5760405162461bcd60e51b8152600401610a2290611da0565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610e4390849060001990600401611c7a565b6001600160a01b0382166000908152600c6020908152604080832033845290915290205460ff166110cd5760405162461bcd60e51b8152600401610a2290611d75565b6110d78282611337565b5050565b6110e433610b48565b6111005760405162461bcd60e51b8152600401610a2290611da0565b60405163095ea7b360e01b81526001600160a01b0384169063095ea7b39061112e9085908590600401611c7a565b602060405180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611c32565b50505050565b6001600160a01b039081166000908152600e60205260409020541690565b600a6020526000908152604090205481565b60116020526000908152604090208054600182015460029092015490919083565b6001546001600160a01b03163314806111fa57506002546001600160a01b031633145b8061120f57506003546001600160a01b031633145b61121857600080fd5b6014543490610d219082611aff565b600f6020526000908152604090205460ff1681565b736b175474e89094c44da98b954eedeac495271d0f81565b61125d33610b48565b6112795760405162461bcd60e51b8152600401610a2290611da0565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60165481565b60155481565b6112b033610b48565b6112cc5760405162461bcd60e51b8152600401610a2290611da0565b600080546001600160a01b0319166001600160a01b0383161790556040517f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390611317908390611c66565b60405180910390a150565b600d6020526000908152604090205460ff1681565b6001600160a01b0381166000908152600f602052604090205460ff1661136f5760405162461bcd60e51b8152600401610a2290611d3e565b6001600160a01b038216600090815260116020526040902054611391576110d7565b600061139c83610aa1565b90508015610e95576015546113b19082611aff565b6015556001600160a01b038316600090815260096020908152604080832042905560119091529020600201546113e79082611aff565b6001600160a01b038416600090815260116020526040902060028101919091555461141190611b0b565b6001600160a01b0380851660009081526011602052604090206001019190915560045483821691161415611500576040516001600160a01b0384169082156108fc029083906000818181858888f19350505050158015611475573d6000803e3d6000fd5b506001600160a01b0382166000908152600a60205260409020546114999082611aff565b6001600160a01b038084166000908152600a6020908152604080832094909455600b815283822092871682529190915220546114d59082611aff565b6001600160a01b038084166000908152600b6020908152604080832093881683529290522055610e95565b6040516370a0823160e01b815282906000906001600160a01b038316906370a0823190611531908890600401611c66565b60206040518083038186803b15801561154957600080fd5b505afa15801561155d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115819190611c4e565b6001600160a01b038581166000908152600e6020526040902054919250166116b257604080516002808252606082018352600092602083019080368337505060045482519293506001600160a01b0316918391506000906115f257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160018151811061163457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de9590869061167a9060009086908c904290600401611c9e565b6000604051808303818588803b15801561169357600080fd5b505af11580156116a7573d6000803e3d6000fd5b505050505050611811565b6040805160038082526080820190925260009160208201606080368337505060045482519293506001600160a01b03169183915060009061170357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091528682166000908152600e909152604090205482519116908290600190811061175557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848160028151811061179757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260065460405163b6f9de9560e01b815291169063b6f9de959086906117dd9060009086908c904290600401611c9e565b6000604051808303818588803b1580156117f657600080fd5b505af115801561180a573d6000803e3d6000fd5b5050505050505b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611840908990600401611c66565b60206040518083038186803b15801561185857600080fd5b505afa15801561186c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118909190611c4e565b90506118be61189f8284611aec565b6001600160a01b0387166000908152600a602052604090205490611aff565b6001600160a01b0386166000908152600a60205260409020556119106118e48284611aec565b6001600160a01b038088166000908152600b60209081526040808320938c168352929052205490611aff565b6001600160a01b038087166000908152600b60209081526040808320938b1683529290522055505050505050565b600780546001600160a01b039092166000818152600860205260408120849055600184018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b0319169091179055565b600780546119af90600190611e36565b815481106119cd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0384811684526008909252604090922054600780549290931692918110611a1957634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260089182905260408120546007805491939291611a6590600190611e36565b81548110611a8357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020556007805480611ac757634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000611af88284611e36565b9392505050565b6000611af88284611ddf565b6000611b28601754610d3c60165485611b2e90919063ffffffff16565b92915050565b6000611af88284611e17565b6000611af88284611df7565b600060208284031215611b57578081fd5b8135611af881611e63565b60008060408385031215611b74578081fd5b8235611b7f81611e63565b91506020830135611b8f81611e63565b809150509250929050565b600080600060608486031215611bae578081fd5b8335611bb981611e63565b92506020840135611bc981611e63565b929592945050506040919091013590565b60008060408385031215611bec578182fd5b8235611bf781611e63565b91506020830135611b8f81611e78565b60008060408385031215611c19578182fd5b8235611c2481611e63565b946020939093013593505050565b600060208284031215611c43578081fd5b8151611af881611e78565b600060208284031215611c5f578081fd5b5051919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b600060808201868352602060808185015281875180845260a0860191508289019350845b81811015611ce75784516001600160a01b031683529383019391830191600101611cc2565b50506001600160a01b039690961660408501525050506060015292915050565b6020808252601c908201527f43616e2774207769746864726177206e617469766520746f6b656e7300000000604082015260600190565b60208082526017908201527f496e76616c696420726577617264206164647265737321000000000000000000604082015260600190565b602080825260119082015270165bdd4818d85b89dd08191bc81d1a185d607a1b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b60008219821115611df257611df2611e4d565b500190565b600082611e1257634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611e3157611e31611e4d565b500290565b600082821015611e4857611e48611e4d565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109cf57600080fd5b80151581146109cf57600080fdfea26469706673582212202cf2c31eea525bfeb07fa875245bc6f8c9963876bcfd75fac0e2d1fee669cd1764736f6c63430008000033a2646970667358221220d155ef50f68039377c2eb85478e0a15fdbb944b5a5af93523a43ee1b384f026864736f6c63430008000033

Deployed Bytecode Sourcemap

15927:17575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17571:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19563:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30681:129::-;;;;;;;;;;-1:-1:-1;30681:129:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19985:241::-;;;;;;;;;;-1:-1:-1;19985:241:0;;;;;:::i;:::-;;:::i;29246:136::-;;;;;;;;;;-1:-1:-1;29246:136:0;;;;;:::i;:::-;;:::i;:::-;;19293:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20564:375::-;;;;;;;;;;-1:-1:-1;20564:375:0;;;;;:::i;:::-;;:::i;32487:117::-;;;;;;;;;;-1:-1:-1;32487:117:0;;;;;:::i;:::-;;:::i;30542:131::-;;;;;;;;;;-1:-1:-1;30542:131:0;;;;;:::i;:::-;;:::i;16767:40::-;;;;;;;;;;-1:-1:-1;16767:40:0;;;;;:::i;:::-;;:::i;17627:79::-;;;;;;;;;;;;;:::i;32804:142::-;;;;;;;;;;;;;:::i;3472:103::-;;;;;;;;;;-1:-1:-1;3472:103:0;;;;;:::i;:::-;;:::i;19387:80::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28122:106::-;;;;;;;;;;;;;:::i;29390:133::-;;;;;;;;;;-1:-1:-1;29390:133:0;;;;;:::i;:::-;;:::i;30104:140::-;;;;;;;;;;-1:-1:-1;30104:140:0;;;;;:::i;:::-;;:::i;32366:113::-;;;;;;;;;;-1:-1:-1;32366:113:0;;;;;:::i;:::-;;:::i;16660:44::-;;;;;;;;;;-1:-1:-1;16660:44:0;;;;;:::i;:::-;;:::i;17715:72::-;;;;;;;;;;;;;:::i;16711:49::-;;;;;;;;;;-1:-1:-1;16711:49:0;;;;;:::i;:::-;;:::i;18085:34::-;;;;;;;;;;;;;:::i;20234:133::-;;;;;;;;;;-1:-1:-1;20234:133:0;;;;;:::i;:::-;;:::i;32958:541::-;;;;;;;;;;-1:-1:-1;32958:541:0;;;;;:::i;:::-;;:::i;29127:111::-;;;;;;;;;;-1:-1:-1;29127:111:0;;;;;:::i;:::-;;:::i;30404:130::-;;;;;;;;;;-1:-1:-1;30404:130:0;;;;;:::i;:::-;;:::i;32192:166::-;;;;;;;;;;-1:-1:-1;32192:166:0;;;;;:::i;:::-;;:::i;30252:144::-;;;;;;;;;;-1:-1:-1;30252:144:0;;;;;:::i;:::-;;:::i;29794:140::-;;;;;;;;;;-1:-1:-1;29794:140:0;;;;;:::i;:::-;;:::i;17984:30::-;;;;;;;;;;;;;:::i;19733:105::-;;;;;;;;;;-1:-1:-1;19733:105:0;;;;;:::i;:::-;;:::i;16382:48::-;;;;;;;;;;;;;:::i;28853:266::-;;;;;;;;;;-1:-1:-1;28853:266:0;;;;;:::i;:::-;;:::i;18126:31::-;;;;;;;;;;;;;:::i;19649:78::-;;;;;;;;;;;;;:::i;16816:42::-;;;;;;;;;;;;;:::i;16604:49::-;;;;;;;;;;-1:-1:-1;16604:49:0;;;;;:::i;:::-;;:::i;19473:84::-;;;;;;;;;;;;;:::i;25404:167::-;;;;;;;;;;-1:-1:-1;25404:167:0;;;;;:::i;:::-;;:::i;16439:41::-;;;;;;;;;;;;;:::i;17942:33::-;;;;;;;;;;;;;:::i;17876:19::-;;;;;;;;;;;;;:::i;20375:181::-;;;;;;;;;;-1:-1:-1;20375:181:0;;;;;:::i;:::-;;:::i;15999:64::-;;;;;;;;;;;;;:::i;30818:1011::-;;;;;;;;;;-1:-1:-1;30818:1011:0;;;;;:::i;:::-;;:::i;29942:154::-;;;;;;;;;;-1:-1:-1;29942:154:0;;;;;:::i;:::-;;:::i;16867:58::-;;;;;;;;;;-1:-1:-1;16867:58:0;;;;;:::i;:::-;;:::i;17483:81::-;;;;;;;;;;;;;:::i;28345:500::-;;;;;;;;;;-1:-1:-1;28345:500:0;;;;;:::i;:::-;;:::i;31837:347::-;;;;;;;;;;-1:-1:-1;31837:347:0;;;;;:::i;:::-;;:::i;19844:133::-;;;;;;;;;;-1:-1:-1;19844:133:0;;;;;:::i;:::-;;:::i;32612:184::-;;;;;;;;;;-1:-1:-1;32612:184:0;;;;;:::i;:::-;;:::i;28236:101::-;;;;;;;;;;-1:-1:-1;28236:101:0;;;;;:::i;:::-;;:::i;23148:143::-;;;;;;;;;;-1:-1:-1;23148:143:0;;;;;:::i;:::-;;:::i;3581:136::-;;;;;;;;;;-1:-1:-1;3581:136:0;;;;;:::i;:::-;;:::i;29531:255::-;;;;;;;;;;-1:-1:-1;29531:255:0;;;;;:::i;:::-;;:::i;17845:24::-;;;;;;;;;;;;;:::i;17794:42::-;;;;;;;;;;;;;:::i;17571:49::-;;;-1:-1:-1;;;;;17571:49:0;;:::o;19563:80::-;19635:5;;;;;;;;;;;;-1:-1:-1;;;19635:5:0;;;;19563:80;:::o;30681:129::-;30763:4;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;;30787:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;::::0;30681:129::o;19985:241::-;20114:10;20085:4;20102:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20102:32:0;;;;;;;;;;:41;;;20159:37;20085:4;;20102:32;;20159:37;;;;20137:6;;20159:37;:::i;:::-;;;;;;;;-1:-1:-1;20214:4:0;19985:241;;;;;:::o;29246:136::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;29343:22:::1;:31:::0;29246:136::o;19293:88::-;19366:12;;19293:88;:::o;20564:375::-;20754:12;;-1:-1:-1;;;;;20719:19:0;;20698:4;20719:19;;;:11;:19;;;;;;;;20739:10;20719:31;;;;;;;;20698:4;;20719:47;20715:156;;20802:69;;;;;;;;;;;-1:-1:-1;;;20802:69:0;;;;;;;;-1:-1:-1;;;;;20802:19:0;;-1:-1:-1;20802:19:0;;;:11;:19;;;;;20822:10;20802:31;;;;;;;;;;:69;;20838:6;;20802:35;:69::i;:::-;-1:-1:-1;;;;;20768:19:0;;;;;;:11;:19;;;;;;;;20788:10;20768:31;;;;;;;:103;20715:156;20891:40;20905:6;20913:9;20924:6;20891:13;:40::i;:::-;20884:47;;20564:375;;;;;;:::o;32487:117::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;32571:14:::1;:25:::0;;-1:-1:-1;;32571:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32487:117::o;30542:131::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30641:15:0;;;::::1;;::::0;;;:7:::1;:15;::::0;;;;:24;;-1:-1:-1;;30641:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30542:131::o;16767:40::-;;;;;;;;;;;;;;;:::o;17627:79::-;;;-1:-1:-1;;;;;17627:79:0;;:::o;32804:142::-;32932:4;;32857:7;;32884:54;;32922:15;;-1:-1:-1;;;;;32932:4:0;32922:9;:15::i;:::-;32911:4;;32884:33;;32901:15;;-1:-1:-1;;;;;32911:4:0;32901:9;:15::i;:::-;32884:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;32877:61;;32804:142;:::o;3472:103::-;3527:4;3562:5;-1:-1:-1;;;;;3562:5:0;;;3551:16;;;;3472:103::o;19387:80::-;16312:1;19387:80;:::o;28122:106::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;28169:51:::1;::::0;28177:10:::1;::::0;28198:21:::1;28169:51:::0;::::1;;;::::0;::::1;::::0;;;28198:21;28177:10;28169:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28122:106::o:0;29390:133::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;29484:22:::1;:31:::0;;-1:-1:-1;;29484:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29390:133::o;30104:140::-;-1:-1:-1;;;;;30212:24:0;30188:4;30212:24;;;:16;:24;;;;;;;;;30104:140::o;32366:113::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;32448:12:::1;:23:::0;;;::::1;;;;-1:-1:-1::0;;32448:23:0;;::::1;::::0;;;::::1;::::0;;32366:113::o;16660:44::-;;;;;;;;;;;;;;;:::o;17715:72::-;;;-1:-1:-1;;;;;17715:72:0;;:::o;16711:49::-;;;;;;;;;;;;;;;:::o;18085:34::-;;;;;;:::o;20234:133::-;20305:4;20329:30;20337:7;20346:12;;20329:7;:30::i;32958:541::-;33048:13;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;33074:27:::1;33115:7;33074:49;;33154:16;-1:-1:-1::0;;;;;33154:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33142:47:0::1;;33198:4;33205:16;-1:-1:-1::0;;;;;33205:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33142:87;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33134:95:::0;-1:-1:-1;;;;;;33244:19:0;::::1;33240:123;;33285:16;-1:-1:-1::0;;;;;33285:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33273:50:0::1;;33332:4;33339:16;-1:-1:-1::0;;;;;33339:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33273:90;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33265:98;;33240:123;33374:4;:12:::0;;-1:-1:-1;;;;;33374:12:0;;::::1;-1:-1:-1::0;;;;;;33374:12:0;;::::1;;::::0;;;33397:6:::1;:25:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;33479:12:::1;::::0;33453:4:::1;33374;33433:26:::0;;;:11:::1;:26;::::0;;;;;;;33468:6;;;::::1;33433:43:::0;;;;;;;;:58;33381:5;32958:541;-1:-1:-1;32958:541:0:o;29127:111::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;29211:10:::1;:19:::0;29127:111::o;30404:130::-;-1:-1:-1;;;;;30507:19:0;30483:4;30507:19;;;:11;:19;;;;;;;;;30404:130::o;32192:166::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;32282:12:::1;:28:::0;;-1:-1:-1;;;;;32282:28:0;;::::1;-1:-1:-1::0;;;;;;32282:28:0;;::::1;::::0;::::1;::::0;;;32321:5:::1;:29:::0;;;;::::1;;::::0;;32192:166::o;30252:144::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30360:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;30360:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30252:144::o;29794:140::-;-1:-1:-1;;;;;29902:24:0;29878:4;29902:24;;;:16;:24;;;;;;;;;29794:140::o;17984:30::-;;;-1:-1:-1;;;17984:30:0;;;;;:::o;19733:105::-;-1:-1:-1;;;;;19817:18:0;19799:7;19817:18;;;:9;:18;;;;;;;19733:105::o;16382:48::-;;;;:::o;28853:266::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28975:23:0;::::1;28993:4;28975:23;;28967:64;;;;-1:-1:-1::0;;;28967:64:0::1;;;;;;;:::i;:::-;29071:39;::::0;-1:-1:-1;;;29071:39:0;;-1:-1:-1;;;;;29042:23:0;::::1;::::0;::::1;::::0;29066:3;;29042:23;;29071:24:::1;::::0;:39:::1;::::0;29104:4:::1;::::0;29071:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29042:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28853:266:::0;;:::o;18126:31::-;;;;;;;;;:::o;19649:78::-;19701:7;19719:5;-1:-1:-1;;;;;19719:5:0;19649:78;:::o;16816:42::-;;;;;;:::o;16604:49::-;;;;;;;;;;;;;;;:::o;19473:84::-;19547:7;;;;;;;;;;;;-1:-1:-1;;;19547:7:0;;;;19473:84;:::o;25404:167::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;25521:42:::1;25550:5;25557;25521:28;:42::i;:::-;25404:167:::0;;:::o;16439:41::-;;;;:::o;17942:33::-;;;-1:-1:-1;;;;;17942:33:0;;:::o;17876:19::-;;;-1:-1:-1;;;;;17876:19:0;;:::o;20375:181::-;20480:4;20504:44;20518:10;20530:9;20541:6;20504:13;:44::i;15999:64::-;;;-1:-1:-1;;;;;15999:64:0;;:::o;30818:1011::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;31192:15:::1;:34:::0;;;31237:16:::1;:36:::0;;;31284:16:::1;:36:::0;;;31331:14:::1;:32:::0;;;31388:83:::1;31348:15:::0;31388:62:::1;31303:17:::0;31388:62;31210:16;31256:17;31388:20:::1;:39::i;:::-;:43:::0;::::1;:62::i;:83::-;31374:11;:97:::0;31484:16:::1;:36:::0;;;31531:17:::1;:38:::0;;;31580:17:::1;:38:::0;;;31629:15:::1;:34:::0;;;31689:87:::1;31647:16:::0;31689:65:::1;31600:18:::0;31689:65;31503:17;31551:18;31689:21:::1;:41::i;:87::-;31674:12;:102:::0;31789:14:::1;:32:::0;-1:-1:-1;;;;;;;;30818:1011:0:o;29942:154::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30055:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;30055:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29942:154::o;16867:58::-;;;;;;;;;;;;;;;:::o;17483:81::-;;;-1:-1:-1;;;;;17483:81:0;;:::o;28345:500::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;28469:6:::1;:28:::0;;-1:-1:-1;;;;;;28469:28:0::1;-1:-1:-1::0;;;;;28469:28:0;;::::1;::::0;;;::::1;::::0;;;;28527:16:::1;::::0;;-1:-1:-1;;;28527:16:0;;;;:6;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:6;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28556:4;::::0;28515:61:::1;::::0;-1:-1:-1;;;28515:61:0;;-1:-1:-1;;;;;28515:40:0;;::::1;::::0;::::1;::::0;:61:::1;::::0;28556:4;::::1;::::0;28570::::1;::::0;28515:61:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28508:4;:68:::0;;-1:-1:-1;;;;;;28508:68:0::1;-1:-1:-1::0;;;;;28508:68:0;;::::1;;::::0;;28633:12:::1;::::0;28607:4:::1;-1:-1:-1::0;28587:26:0;;;:11:::1;:26;::::0;;;;;;;28622:6:::1;::::0;;;::::1;28587:43:::0;;;;;;;;;:58;28656:61;::::1;;;28692:6;;;;;;;;;-1:-1:-1::0;;;;;28692:6:0::1;-1:-1:-1::0;;;;;28692:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28685:4;:20:::0;;-1:-1:-1;;;;;;28685:20:0::1;-1:-1:-1::0;;;;;28685:20:0;;;::::1;::::0;;;::::1;::::0;;28656:61:::1;28765:7;28774:10;28741:44;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;28727:11:0::1;:58:::0;;-1:-1:-1;;;;;;28727:58:0;;::::1;-1:-1:-1::0;;;;;28727:58:0;;::::1;;::::0;;;;28796:18:::1;:41:::0;;28825:11;;;::::1;28796:41:::0;::::1;;::::0;;-1:-1:-1;;28345:500:0:o;31837:347::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;32020:21:::1;:46:::0;;-1:-1:-1;;;;;32020:46:0;;::::1;-1:-1:-1::0;;;;;;32020:46:0;;::::1;;::::0;;;32077:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;32134:19:::1;:42:::0;;;;;::::1;::::0;::::1;;::::0;;31837:347::o;19844:133::-;-1:-1:-1;;;;;19946:19:0;;;19928:7;19946:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;19844:133::o;32612:184::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;32728:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;32728:22:0::1;-1:-1:-1::0;;;;32728:22:0;;::::1;::::0;;;::::1;::::0;;;32761:17:::1;:27:::0;32612:184::o;28236:101::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;28317:4:::1;:12:::0;;-1:-1:-1;;;;;;28317:12:0::1;-1:-1:-1::0;;;;;28317:12:0;;;::::1;::::0;;;::::1;::::0;;28236:101::o;23148:143::-;23220:7;23247;:36;;23272:11;;23247:36;;;-1:-1:-1;;23257:12:0;;;23148:143::o;3581:136::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;3657:5:::1;:11:::0;;-1:-1:-1;;;;;;3657:11:0::1;-1:-1:-1::0;;;;;3657:11:0;::::1;;::::0;;3684:25:::1;::::0;::::1;::::0;::::1;::::0;3657:11;;3684:25:::1;:::i;:::-;;;;;;;;3581:136:::0;:::o;29531:255::-;3425:19;3433:10;3425:7;:19::i;:::-;3417:38;;;;-1:-1:-1;;;3417:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29644:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29644:33:0::1;::::0;::::1;;;::::0;;;29688:90:::1;;29731:11;::::0;-1:-1:-1;;;;;29760:17:0;;::::1;29731:11;29760:17:::0;;;:9:::1;:17;::::0;;;;;;;29731:47;;-1:-1:-1;;;29731:47:0;;:11;;;::::1;::::0;:20:::1;::::0;:47:::1;::::0;29752:6;;29731:47:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29688:90;;;29697:11;::::0;:31:::1;::::0;-1:-1:-1;;;29697:31:0;;-1:-1:-1;;;;;29697:11:0;;::::1;::::0;:20:::1;::::0;:31:::1;::::0;29718:6;;29697:11:::1;::::0;:31:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29531:255:::0;;:::o;17845:24::-;;;-1:-1:-1;;;;;17845:24:0;;:::o;17794:42::-;;;-1:-1:-1;;;;;17794:42:0;;:::o;1502:98::-;1560:7;1587:5;1591:1;1587;:5;:::i;1710:206::-;1796:7;1857:12;1849:6;;;;1841:29;;;;-1:-1:-1;;;1841:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1892:5:0;;;1710:206::o;20947:1337::-;21094:6;;21073:4;;21094:6;;;;;21090:60;;;21109:41;21124:6;21132:9;21143:6;21109:14;:41::i;:::-;21102:48;;;;21090:60;21171:14;;;;;:42;;-1:-1:-1;;;;;;21189:24:0;;;;;;:16;:24;;;;;;;;21171:42;21163:84;;;;-1:-1:-1;;;21163:84:0;;;;;;;:::i;:::-;21292:6;;-1:-1:-1;;;;;21324:36:0;;;21260:21;21324:36;;;:25;:36;;;;;;21292:6;;;;;21260:21;21324:36;;;:66;;;21377:13;-1:-1:-1;;;;;21364:26:0;:9;-1:-1:-1;;;;;21364:26:0;;21324:66;21310:80;;21408:6;21407:7;:30;;;;-1:-1:-1;;;;;;21419:18:0;;;;;;:7;:18;;;;;;;;21418:19;21407:30;21403:122;;;21481:10;;-1:-1:-1;;;;;21448:20:0;;;;;;:9;:20;;;;;;:29;;21471:6;;21448:29;:::i;:::-;21447:44;21439:86;;;;-1:-1:-1;;;21439:86:0;;;;;;;:::i;:::-;21542:6;:42;;;;;21562:22;;21552:6;:32;;21542:42;21538:107;;;21605:16;:14;:16::i;:::-;21601:32;;;21623:10;:8;:10::i;:::-;21677:53;;;;;;;;;;;-1:-1:-1;;;21677:53:0;;;;;;;;-1:-1:-1;;;;;21677:17:0;;-1:-1:-1;21677:17:0;;;:9;:17;;;;;;;;:53;;21699:6;;21677:21;:53::i;:::-;-1:-1:-1;;;;;21657:17:0;;;;;;:9;:17;;;;;:73;;;;21768:32;21667:6;21790:9;21768:13;:32::i;:::-;:78;;21840:6;21768:78;;;21803:34;21811:6;21819:9;21830:6;21803:7;:34::i;:::-;-1:-1:-1;;;;;21882:20:0;;;;;;:9;:20;;;;;;21743:103;;-1:-1:-1;21882:40:0;;21743:103;21882:24;:40::i;:::-;-1:-1:-1;;;;;21859:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;21940:24;;;;;:16;:24;;;;;;;21935:120;;21985:11;;-1:-1:-1;;;;;22014:17:0;;;21985:11;22014:17;;;:9;:17;;;;;;;;21985:47;;-1:-1:-1;;;21985:47:0;;:11;;;;;:20;;:47;;22006:6;;21985:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21981:63;;-1:-1:-1;;;;;22070:27:0;;;;;;:16;:27;;;;;;;;22065:129;;22118:11;;-1:-1:-1;;;;;22150:20:0;;;22118:11;22150:20;;;:9;:20;;;;;;;;22118:53;;-1:-1:-1;;;22118:53:0;;:11;;;;;:20;;:53;;22139:9;;22118:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22114:69;;22228:9;-1:-1:-1;;;;;22211:43:0;22220:6;-1:-1:-1;;;;;22211:43:0;;22239:14;22211:43;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;22272:4:0;;20947:1337;-1:-1:-1;;;;;;20947:1337:0:o;1294:98::-;1352:7;1379:5;1383:1;1379;:5;:::i;25579:199::-;-1:-1:-1;;;;;25688:32:0;;;;;;;:25;:32;;;;;;;;:40;;;;;-1:-1:-1;;25688:40:0;;;;;;;;25739:16;:23;;;;;;:31;;;;;;;;25579:199::o;1190:98::-;1248:7;1275:5;1279:1;1275;:5;:::i;22292:313::-;22456:53;;;;;;;;;;;-1:-1:-1;;;22456:53:0;;;;;;;;-1:-1:-1;;;;;22456:17:0;;22419:4;22456:17;;;:9;:17;;;;;;;:53;;22478:6;;22456:21;:53::i;:::-;-1:-1:-1;;;;;22436:17:0;;;;;;;:9;:17;;;;;;:73;;;;22543:20;;;;;;;:32;;22568:6;22543:24;:32::i;:::-;-1:-1:-1;;;;;22520:20:0;;;;;;:9;:20;;;;;:55;-1:-1:-1;22593:4:0;22292:313;;;;;:::o;25202:194::-;25302:10;25251:4;25276:37;;;:25;:37;;;;;;;;25275:38;:49;;;;-1:-1:-1;25318:6:0;;;;;;;25317:7;25275:49;:64;;;;-1:-1:-1;25328:11:0;;-1:-1:-1;;;25328:11:0;;;;25275:64;:113;;;;-1:-1:-1;;25371:17:0;;25361:4;25343:24;;;;:9;:24;;;;;;:45;;;25202:194::o;25786:1995::-;18215:6;:13;;-1:-1:-1;;18215:13:0;;;;;;25861:24:::1;25879:4;25861:9;:24::i;:::-;25835:50;;25896:25;25924:107;26009:21;;25924:80;25980:23;;25924:51;25951:23;;25924:22;;:26;;:51;;;;:::i;:107::-;25896:135;;26052:26;26081:29;26108:1;26081:22;;:26;;:29;;;;:::i;:::-;26052:58:::0;-1:-1:-1;26121:20:0::1;26144:39;:15:::0;26052:58;26144:19:::1;:39::i;:::-;26220:16;::::0;;26234:1:::1;26220:16:::0;;;;;::::1;::::0;;26121:62;;-1:-1:-1;26196:21:0::1;::::0;26220:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26220:16:0::1;26196:40;;26265:4;26247;26252:1;26247:7;;;;;;-1:-1:-1::0;;;26247:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;26247:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26291:4:::1;::::0;;26281:7;;26291:4;::::1;::::0;26281;;26291;26281:7;::::1;;;-1:-1:-1::0;;;26281:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;26281:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;26364:6:::1;::::0;:112:::1;::::0;-1:-1:-1;;;26364:112:0;;26330:21:::1;::::0;26364:6;;;::::1;::::0;:57:::1;::::0;:112:::1;::::0;26422:12;;26306:21:::1;::::0;26439:4;;26453::::1;::::0;26460:15:::1;::::0;26364:112:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26489:17;26509:40;26535:13;26509:21;:25;;:40;;;;:::i;:::-;26489:60;;26562:26;26591:67;26656:1;26591:60;26633:17;26591:37;26605:22;;26591:9;:13;;:37;;;;:::i;:::-;:41:::0;::::1;:60::i;:67::-;26562:96;;26669:27;26699:61;26742:17;26699:38;26713:23;;26699:9;:13;;:38;;;;:::i;:61::-;26669:91;;26771:27;26801:61;26844:17;26801:38;26815:23;;26801:9;:13;;:38;;;;:::i;:61::-;26771:91;;26873:25;26901:59;26942:17;26901:36;26915:21;;26901:9;:13;;:36;;;;:::i;:59::-;27006:1;26981:22;:26:::0;;;27018:23:::1;:27:::0;;;27056:23:::1;:27:::0;;;27094:21:::1;:25:::0;26873:87;-1:-1:-1;27136:23:0;;27132:94:::1;;27165:11;;;;;;;;;-1:-1:-1::0;;;;;27165:11:0::1;-1:-1:-1::0;;;;;27165:19:0::1;;27192;27165:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;27161:65:::0;::::1;27240:23:::0;;27236:275:::1;;27284:12;::::0;::::1;::::0;::::1;;;27280:220;;;27321:5;;;;;;;;;-1:-1:-1::0;;;;;27321:5:0::1;-1:-1:-1::0;;;;;27321:21:0::1;;27350:19;27321:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;27317:67:::0;27280:220:::1;;;27432:21;::::0;27424:60:::1;::::0;-1:-1:-1;;;;;27432:21:0;;::::1;::::0;27424:60;::::1;;;::::0;27464:19;;27432:21:::1;27424:60:::0;27432:21;27424:60;27464:19;27432:21;27424:60;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27280:220;27525:21:::0;;27521:83:::1;;27556:19;::::0;27548:56:::1;::::0;-1:-1:-1;;;;;27556:19:0;;::::1;::::0;27548:56;::::1;;;::::0;27586:17;;27556:19:::1;27548:56:::0;27556:19;27548:56;27586:17;27556:19;27548:56;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;27521:83;27619:22:::0;;27615:158:::1;;27643:6;;;;;;;;;-1:-1:-1::0;;;;;27643:6:0::1;-1:-1:-1::0;;;;;27643:22:0::1;;27673:18;27701:4;27708:18;27728:1;27731::::0;27734:21:::1;;;;;;;;;-1:-1:-1::0;;;;;27734:21:0::1;27757:15;27643:130;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27615:158;-1:-1:-1::0;;18251:6:0;:14;;-1:-1:-1;;18251:14:0;;;-1:-1:-1;;;;;;;;;25786:1995:0:o;22613:527::-;22740:22;;22719:4;;22740:22;;22736:397;;;-1:-1:-1;;;;;22787:19:0;;;;;;:11;:19;;;;;;;;22786:20;:47;;;;-1:-1:-1;;;;;;22811:22:0;;;;;;:11;:22;;;;;;;;22810:23;22786:47;22779:54;;;;22736:397;22898:6;;-1:-1:-1;;;;;22929:33:0;;;22866:21;22929:33;;;:25;:33;;;;;;22898:6;;;22929:33;;;:60;;;22976:13;-1:-1:-1;;;;;22966:23:0;:6;-1:-1:-1;;;;;22966:23:0;;22929:60;22928:134;;;-1:-1:-1;;;;;;22995:36:0;;;;;;:25;:36;;;;;;;;;:66;;;23048:13;-1:-1:-1;;;;;23035:26:0;:9;-1:-1:-1;;;;;23035:26:0;;22995:66;22927:194;;23116:5;22927:194;;;-1:-1:-1;;;;;23067:19:0;;;;;;:11;:19;;;;;;;;23066:20;:47;;;;-1:-1:-1;;;;;;23091:22:0;;;;;;:11;:22;;;;;;;;23090:23;23066:47;22920:201;;;;;23299:1895;23470:6;;-1:-1:-1;;;;;23502:35:0;;;23418:7;23502:35;;;:25;:35;;;;;;23418:7;;23470:6;;;;;23418:7;;23502:35;;;:64;;;23553:13;-1:-1:-1;;;;;23541:25:0;:8;-1:-1:-1;;;;;23541:25:0;;23502:64;23488:78;;23579:16;23598:19;23610:6;23598:11;:19::i;:::-;23579:38;;23628:17;23648:40;23673:14;;23648:20;23659:8;23648:6;:10;;:20;;;;:::i;:40::-;23628:60;-1:-1:-1;23705:12:0;;23701:1308;;23738:6;23734:1264;;;23769:16;;:20;23765:134;;23871:8;23852:16;;23840:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;23814:22;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;23765:134:0;23921:17;;:21;23917:137;;24026:8;24006:17;;23994:9;:29;;;;:::i;:::-;:40;;;;:::i;:::-;23967:23;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;23917:137:0;24076:17;;:21;24072:137;;24181:8;24161:17;;24149:9;:29;;;;:::i;:::-;:40;;;;:::i;:::-;24122:23;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;24072:137:0;24231:15;;:19;24227:131;;24330:8;24312:15;;24300:9;:27;;;;:::i;:::-;:38;;;;:::i;:::-;24275:21;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;24227:131:0;23734:1264;;;24402:15;;:19;24398:132;;24502:8;24484:15;;24472:9;:27;;;;:::i;:::-;:38;;;;:::i;:::-;24446:22;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;24398:132:0;24552:16;;:20;24548:135;;24655:8;24636:16;;24624:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;24597:23;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;24548:135:0;24705:16;;:20;24701:135;;24808:8;24789:16;;24777:9;:28;;;;:::i;:::-;:39;;;;:::i;:::-;24750:23;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;24701:135:0;24858:14;;:18;24854:129;;24955:8;24938:14;;24926:9;:26;;;;:::i;:::-;:37;;;;:::i;:::-;24901:21;;:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;24854:129:0;25066:4;25048:24;;;;:9;:24;;;;;;:39;;25077:9;25048:28;:39::i;:::-;25039:4;25021:24;;;;:9;:24;;;;;;;:66;;;;25103:42;;-1:-1:-1;;;;;25103:42:0;;;;;;;25135:9;;25103:42;:::i;:::-;;;;;;;;25165:21;:6;25176:9;25165:10;:21::i;:::-;25158:28;23299:1895;-1:-1:-1;;;;;;;;23299:1895:0:o;1398:98::-;1456:7;1483:5;1487:1;1483;:5;:::i;-1:-1:-1:-;;;;;;;;:::o;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;818:402::-;;;947:2;935:9;926:7;922:23;918:32;915:2;;;968:6;960;953:22;915:2;1012:9;999:23;1031:33;1058:5;1031:33;:::i;:::-;1083:5;-1:-1:-1;1140:2:1;1125:18;;1112:32;1153:35;1112:32;1153:35;:::i;:::-;1207:7;1197:17;;;905:315;;;;;:::o;1225:545::-;;;;1371:2;1359:9;1350:7;1346:23;1342:32;1339:2;;;1392:6;1384;1377:22;1339:2;1436:9;1423:23;1455:33;1482:5;1455:33;:::i;:::-;1507:5;-1:-1:-1;1564:2:1;1549:18;;1536:32;1577:35;1536:32;1577:35;:::i;:::-;1631:7;-1:-1:-1;1690:2:1;1675:18;;1662:32;1703:35;1662:32;1703:35;:::i;:::-;1757:7;1747:17;;;1329:441;;;;;:::o;1775:470::-;;;;1921:2;1909:9;1900:7;1896:23;1892:32;1889:2;;;1942:6;1934;1927:22;1889:2;1986:9;1973:23;2005:33;2032:5;2005:33;:::i;:::-;2057:5;-1:-1:-1;2114:2:1;2099:18;;2086:32;2127:35;2086:32;2127:35;:::i;:::-;1879:366;;2181:7;;-1:-1:-1;;;2235:2:1;2220:18;;;;2207:32;;1879:366::o;2250:396::-;;;2376:2;2364:9;2355:7;2351:23;2347:32;2344:2;;;2397:6;2389;2382:22;2344:2;2441:9;2428:23;2460:33;2487:5;2460:33;:::i;:::-;2512:5;-1:-1:-1;2569:2:1;2554:18;;2541:32;2582;2541;2582;:::i;2651:327::-;;;2780:2;2768:9;2759:7;2755:23;2751:32;2748:2;;;2801:6;2793;2786:22;2748:2;2845:9;2832:23;2864:33;2891:5;2864:33;:::i;:::-;2916:5;2968:2;2953:18;;;;2940:32;;-1:-1:-1;;;2738:240:1:o;2983:253::-;;3092:2;3080:9;3071:7;3067:23;3063:32;3060:2;;;3113:6;3105;3098:22;3060:2;3157:9;3144:23;3176:30;3200:5;3176:30;:::i;3241:257::-;;3361:2;3349:9;3340:7;3336:23;3332:32;3329:2;;;3382:6;3374;3367:22;3329:2;3419:9;3413:16;3438:30;3462:5;3438:30;:::i;3503:321::-;;;3629:2;3617:9;3608:7;3604:23;3600:32;3597:2;;;3650:6;3642;3635:22;3597:2;3694:9;3681:23;3713:30;3737:5;3713:30;:::i;3829:190::-;;3941:2;3929:9;3920:7;3916:23;3912:32;3909:2;;;3962:6;3954;3947:22;3909:2;-1:-1:-1;3990:23:1;;3899:120;-1:-1:-1;3899:120:1:o;4024:194::-;;4147:2;4135:9;4126:7;4122:23;4118:32;4115:2;;;4168:6;4160;4153:22;4115:2;-1:-1:-1;4196:16:1;;4105:113;-1:-1:-1;4105:113:1:o;4223:316::-;;;;4380:2;4368:9;4359:7;4355:23;4351:32;4348:2;;;4401:6;4393;4386:22;4348:2;4435:9;4429:16;4419:26;;4485:2;4474:9;4470:18;4464:25;4454:35;;4529:2;4518:9;4514:18;4508:25;4498:35;;4338:201;;;;;:::o;4544:740::-;;;;;;;;;;4792:3;4780:9;4771:7;4767:23;4763:33;4760:2;;;4814:6;4806;4799:22;4760:2;-1:-1:-1;;4842:23:1;;;4912:2;4897:18;;4884:32;;-1:-1:-1;4963:2:1;4948:18;;4935:32;;5014:2;4999:18;;4986:32;;-1:-1:-1;5065:3:1;5050:19;;5037:33;;-1:-1:-1;5117:3:1;5102:19;;5089:33;;-1:-1:-1;5169:3:1;5154:19;;5141:33;;-1:-1:-1;5221:3:1;5206:19;;5193:33;;-1:-1:-1;5273:3:1;5258:19;5245:33;;-1:-1:-1;4750:534:1;-1:-1:-1;4750:534:1:o;5289:203::-;-1:-1:-1;;;;;5453:32:1;;;;5435:51;;5423:2;5408:18;;5390:102::o;5713:304::-;-1:-1:-1;;;;;5943:15:1;;;5925:34;;5995:15;;5990:2;5975:18;;5968:43;5875:2;5860:18;;5842:175::o;6022:282::-;-1:-1:-1;;;;;6222:32:1;;;;6204:51;;6286:2;6271:18;;6264:34;6192:2;6177:18;;6159:145::o;6588:607::-;-1:-1:-1;;;;;6947:15:1;;;6929:34;;6994:2;6979:18;;6972:34;;;;7037:2;7022:18;;7015:34;;;;7080:2;7065:18;;7058:34;;;;7129:15;;;7123:3;7108:19;;7101:44;6909:3;7161:19;;7154:35;;;;6878:3;6863:19;;6845:350::o;7200:187::-;7365:14;;7358:22;7340:41;;7328:2;7313:18;;7295:92::o;7840:603::-;;7981:2;8010;7999:9;7992:21;8042:6;8036:13;8085:6;8080:2;8069:9;8065:18;8058:34;8110:4;8123:140;8137:6;8134:1;8131:13;8123:140;;;8232:14;;;8228:23;;8222:30;8198:17;;;8217:2;8194:26;8187:66;8152:10;;8123:140;;;8281:6;8278:1;8275:13;8272:2;;;8351:4;8346:2;8337:6;8326:9;8322:22;8318:31;8311:45;8272:2;-1:-1:-1;8427:2:1;8406:15;-1:-1:-1;;8402:29:1;8387:45;;;;8434:2;8383:54;;7961:482;-1:-1:-1;;;7961:482:1:o;8448:352::-;8650:2;8632:21;;;8689:2;8669:18;;;8662:30;8728;8723:2;8708:18;;8701:58;8791:2;8776:18;;8622:178::o;8805:353::-;9007:2;8989:21;;;9046:2;9026:18;;;9019:30;9085:31;9080:2;9065:18;;9058:59;9149:2;9134:18;;8979:179::o;9163:329::-;9365:2;9347:21;;;9404:1;9384:18;;;9377:29;-1:-1:-1;;;9437:2:1;9422:18;;9415:36;9483:2;9468:18;;9337:155::o;9497:353::-;9699:2;9681:21;;;9738:2;9718:18;;;9711:30;9777:31;9772:2;9757:18;;9750:59;9841:2;9826:18;;9671:179::o;9855:177::-;10001:25;;;9989:2;9974:18;;9956:76::o;10037:983::-;;10347:3;10336:9;10332:19;10378:6;10367:9;10360:25;10404:2;10442:6;10437:2;10426:9;10422:18;10415:34;10485:3;10480:2;10469:9;10465:18;10458:31;10509:6;10544;10538:13;10575:6;10567;10560:22;10613:3;10602:9;10598:19;10591:26;;10652:2;10644:6;10640:15;10626:29;;10673:4;10686:195;10700:6;10697:1;10694:13;10686:195;;;10765:13;;-1:-1:-1;;;;;10761:39:1;10749:52;;10856:15;;;;10821:12;;;;10797:1;10715:9;10686:195;;;-1:-1:-1;;;;;;;10937:32:1;;;;10932:2;10917:18;;10910:60;-1:-1:-1;;;11001:3:1;10986:19;10979:35;10898:3;10308:712;-1:-1:-1;;;10308:712:1:o;11025:184::-;11197:4;11185:17;;;;11167:36;;11155:2;11140:18;;11122:87::o;11214:128::-;;11285:1;11281:6;11278:1;11275:13;11272:2;;;11291:18;;:::i;:::-;-1:-1:-1;11327:9:1;;11262:80::o;11347:217::-;;11413:1;11403:2;;-1:-1:-1;;;11438:31:1;;11492:4;11489:1;11482:15;11520:4;11445:1;11510:15;11403:2;-1:-1:-1;11549:9:1;;11393:171::o;11569:168::-;;11675:1;11671;11667:6;11663:14;11660:1;11657:21;11652:1;11645:9;11638:17;11634:45;11631:2;;;11682:18;;:::i;:::-;-1:-1:-1;11722:9:1;;11621:116::o;11742:125::-;;11810:1;11807;11804:8;11801:2;;;11815:18;;:::i;:::-;-1:-1:-1;11852:9:1;;11791:76::o;11872:127::-;11933:10;11928:3;11924:20;11921:1;11914:31;11964:4;11961:1;11954:15;11988:4;11985:1;11978:15;12004:133;-1:-1:-1;;;;;12081:31:1;;12071:42;;12061:2;;12127:1;12124;12117:12;12142:120;12230:5;12223:13;12216:21;12209:5;12206:32;12196:2;;12252:1;12249;12242:12

Swarm Source

ipfs://2cf2c31eea525bfeb07fa875245bc6f8c9963876bcfd75fac0e2d1fee669cd17

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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