ETH Price: $3,378.15 (-1.92%)
Gas: 2 Gwei

Contract

0xf74D2Fbb83554d085c4Ff1231B228D267772ADf9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Transfer198591142024-05-13 5:50:1146 days ago1715579411IN
0xf74D2Fbb...67772ADf9
0 ETH0.001394853.50586824
Transfer198537122024-05-12 11:42:2347 days ago1715514143IN
0xf74D2Fbb...67772ADf9
0 ETH0.000969573.372591
Withdraw196473962024-04-13 14:59:1176 days ago1713020351IN
0xf74D2Fbb...67772ADf9
0 ETH0.00273815.15870068
Approve190325062024-01-18 8:17:47162 days ago1705565867IN
0xf74D2Fbb...67772ADf9
0 ETH0.0008471934.23836798
Transfer189012162023-12-30 22:10:47180 days ago1703974247IN
0xf74D2Fbb...67772ADf9
0 ETH0.0035261413.47066921
Approve186570602023-11-26 16:33:47215 days ago1701016427IN
0xf74D2Fbb...67772ADf9
0 ETH0.0016997836.34806966
Approve186003572023-11-18 17:58:47223 days ago1700330327IN
0xf74D2Fbb...67772ADf9
0 ETH0.0010251721.77140021
Approve185585932023-11-12 21:44:11228 days ago1699825451IN
0xf74D2Fbb...67772ADf9
0 ETH0.0007311829.5498644
Approve185193032023-11-07 9:53:11234 days ago1699350791IN
0xf74D2Fbb...67772ADf9
0 ETH0.0011791425.18256814
Approve185192852023-11-07 9:49:23234 days ago1699350563IN
0xf74D2Fbb...67772ADf9
0 ETH0.0010180921.77081964
Approve183551452023-10-15 10:20:59257 days ago1697365259IN
0xf74D2Fbb...67772ADf9
0 ETH0.0002445.18857299
Approve183013742023-10-07 21:44:35264 days ago1696715075IN
0xf74D2Fbb...67772ADf9
0 ETH0.000328366.98237576
Approve182077702023-09-24 19:34:23278 days ago1695584063IN
0xf74D2Fbb...67772ADf9
0 ETH0.0006645314.11260617
Approve179915732023-08-25 12:01:11308 days ago1692964871IN
0xf74D2Fbb...67772ADf9
0 ETH0.0008853318.9367384
Approve178018082023-07-29 22:55:11334 days ago1690671311IN
0xf74D2Fbb...67772ADf9
0 ETH0.0007873526.65020162
Approve177939802023-07-28 20:38:11336 days ago1690576691IN
0xf74D2Fbb...67772ADf9
0 ETH0.0017856838.2046487
Approve176800242023-07-12 21:03:11352 days ago1689195791IN
0xf74D2Fbb...67772ADf9
0 ETH0.0011257823.93863111
Approve175684612023-06-27 4:53:23367 days ago1687841603IN
0xf74D2Fbb...67772ADf9
0 ETH0.0005962712.67908887
Approve174602932023-06-12 0:02:35382 days ago1686528155IN
0xf74D2Fbb...67772ADf9
0 ETH0.0007399815.73505901
Approve174579662023-06-11 16:10:11383 days ago1686499811IN
0xf74D2Fbb...67772ADf9
0 ETH0.0006613726.72883809
Approve173283382023-05-24 10:05:11401 days ago1684922711IN
0xf74D2Fbb...67772ADf9
0 ETH0.0018440239.1612457
Approve171576622023-04-30 8:25:35425 days ago1682843135IN
0xf74D2Fbb...67772ADf9
0 ETH0.0016550535.19296291
Approve170929722023-04-21 6:25:11434 days ago1682058311IN
0xf74D2Fbb...67772ADf9
0 ETH0.0018014638.30621491
Approve170828622023-04-19 19:57:59436 days ago1681934279IN
0xf74D2Fbb...67772ADf9
0 ETH0.0042836791.60196391
Approve170638212023-04-17 3:22:23438 days ago1681701743IN
0xf74D2Fbb...67772ADf9
0 ETH0.0008082930.22336188
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
179034972023-08-13 4:17:23320 days ago1691900243
0xf74D2Fbb...67772ADf9
0.00677084 ETH
179034972023-08-13 4:17:23320 days ago1691900243
0xf74D2Fbb...67772ADf9
0.00216667 ETH
179034972023-08-13 4:17:23320 days ago1691900243
0xf74D2Fbb...67772ADf9
0.0024375 ETH
179034972023-08-13 4:17:23320 days ago1691900243
0xf74D2Fbb...67772ADf9
0.00216667 ETH
179034972023-08-13 4:17:23320 days ago1691900243
0xf74D2Fbb...67772ADf9
0.01354169 ETH
174677852023-06-13 1:21:59381 days ago1686619319
0xf74D2Fbb...67772ADf9
0.00558388 ETH
174677852023-06-13 1:21:59381 days ago1686619319
0xf74D2Fbb...67772ADf9
0.00178684 ETH
174677852023-06-13 1:21:59381 days ago1686619319
0xf74D2Fbb...67772ADf9
0.00201019 ETH
174677852023-06-13 1:21:59381 days ago1686619319
0xf74D2Fbb...67772ADf9
0.00178684 ETH
174677852023-06-13 1:21:59381 days ago1686619319
0xf74D2Fbb...67772ADf9
0.01116776 ETH
172428312023-05-12 8:04:47413 days ago1683878687
0xf74D2Fbb...67772ADf9
0.00654916 ETH
172428312023-05-12 8:04:47413 days ago1683878687
0xf74D2Fbb...67772ADf9
0.00209573 ETH
172428312023-05-12 8:04:47413 days ago1683878687
0xf74D2Fbb...67772ADf9
0.00235769 ETH
172428312023-05-12 8:04:47413 days ago1683878687
0xf74D2Fbb...67772ADf9
0.00209573 ETH
172428312023-05-12 8:04:47413 days ago1683878687
0xf74D2Fbb...67772ADf9
0.01309833 ETH
170828672023-04-19 19:58:59436 days ago1681934339
0xf74D2Fbb...67772ADf9
0.00589161 ETH
170828672023-04-19 19:58:59436 days ago1681934339
0xf74D2Fbb...67772ADf9
0.00188531 ETH
170828672023-04-19 19:58:59436 days ago1681934339
0xf74D2Fbb...67772ADf9
0.00212098 ETH
170828672023-04-19 19:58:59436 days ago1681934339
0xf74D2Fbb...67772ADf9
0.00188531 ETH
170828672023-04-19 19:58:59436 days ago1681934339
0xf74D2Fbb...67772ADf9
0.01178322 ETH
169379612023-03-30 5:23:47456 days ago1680153827
0xf74D2Fbb...67772ADf9
0.01354604 ETH
169379612023-03-30 5:23:47456 days ago1680153827
0xf74D2Fbb...67772ADf9
0.00433473 ETH
169379612023-03-30 5:23:47456 days ago1680153827
0xf74D2Fbb...67772ADf9
0.00487657 ETH
169379612023-03-30 5:23:47456 days ago1680153827
0xf74D2Fbb...67772ADf9
0.00433473 ETH
169379612023-03-30 5:23:47456 days ago1680153827
0xf74D2Fbb...67772ADf9
0.02709208 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VaultOfSatoshi

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : 1_Storage.sol
// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.13;

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * ERC20 standard interface.
 */
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;
    }

    /**
     * Function modifier to require caller to be contract deployer
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!Owner");
        _;
    }

    /**
     * Check if address is 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);
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

interface IBCDividends {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit() external payable;

    function process(uint256 gas) external;

    function withdraw(address shareholder) external;

    function removeStuckDividends() external;
}

contract BCDividends is IBCDividends {
    using SafeMath for uint256;
    address _token;

    address public BC;

    IDEXRouter router;

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

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

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

    uint256 public minPeriod = 30 minutes;
    uint256 public minDistribution = 0 * (10**9);

    uint256 public currentIndex;
    bool initialized;

    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

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

    constructor() {
        _token = msg.sender;
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        BC = 0xe03B2642A5111aD0EFc0cbCe766498c2dd562Ae9;
    }

    receive() external payable {
        deposit();
    }

    function removeStuckDividends() external onlyToken {
        uint256 balance = IERC20(BC).balanceOf(address(this));

        IERC20(BC).transfer(
            address(0x7aF0964f4aE3213630464b318d4eb4459140f6b4),
            balance
        );
    }

    function setDistributionCriteria(
        uint256 newMinPeriod,
        uint256 newMinDistribution
    ) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount)
        external
        override
        onlyToken
    {
        if (shares[shareholder].amount > 0) {
            distributeDividend(shareholder);
        }

        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() public payable override {
        uint256 balanceBefore = IERC20(BC).balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(BC);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: msg.value
        }(0, path, address(this), block.timestamp);

        uint256 amount = IERC20(BC).balanceOf(address(this)).sub(
            balanceBefore
        );
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(
            dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)
        );
    }

    function process(uint256 gas) external override {
        uint256 shareholderCount = shareholders.length;

        if (shareholderCount == 0) {
            return;
        }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }

            if (shouldDistribute(shareholders[currentIndex])) {
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) public view returns (bool) {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            IERC20(BC).transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function withdraw(address shareholder) external override onlyToken {
        distributeDividend(shareholder);
    }

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

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

    address public BC = 0xe03B2642A5111aD0EFc0cbCe766498c2dd562Ae9; //BC COIN

    string private constant _name = "Vault of Satoshi";
    string private constant _symbol = "VOS";
    uint8 private constant _decimals = 18;

    uint256 private _totalSupply = 210000000 * (10**_decimals);

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

    address private WETH;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isDividendExempt;

    uint256 public buyFee = 20;
    uint256 public sellFee = 30;

    uint256 public toReflections = 10;
    uint256 public toBurn = 10;
    uint256 public toTreasury = 40;
    uint256 public toMarketing = 40;

    uint256 public allocationSum = 100;

    IDEXRouter public router;
    address public pair;
    address public factory;
    address private tokenOwner;

    address public devWallet;
    address public treasuryWallet;
    address public marketingWallet;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingOpen = false;

    BCDividends public BCDividend;
    uint256 public BCDividendsGas = 0;

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    uint256 public maxTx = _totalSupply.div(250);
    uint256 public maxWallet = _totalSupply.div(250);
    uint256 public swapThreshold = _totalSupply.div(1000);

    constructor(address _owner) Auth(_owner) {
        devWallet = payable(_owner);
        marketingWallet = payable(_owner);
        treasuryWallet = payable(_owner);

        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        WETH = router.WETH();

        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));

        _allowances[address(this)][address(router)] = type(uint256).max;

        BCDividend = new BCDividends();

        isFeeExempt[_owner] = true;
        isFeeExempt[devWallet] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        isTxLimitExempt[_owner] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[devWallet] = true;

        _balances[_owner] = _totalSupply;

        emit Transfer(address(0), _owner, _totalSupply);
    }

    receive() external payable {}

    function satoshi() external onlyOwner {
        require(!tradingOpen, "Behave.");

        maxTx = 1_950_000 * (10**_decimals);
        maxWallet = 4_200_000 * (10**_decimals);
    }

    //once enabled, cannot be reversed
    function enableTrading() external onlyOwner {
        tradingOpen = true;
    }

    function changeTotalFees(uint256 newBuyFee, uint256 newSellFee)
        external
        onlyOwner
    {
        buyFee = newBuyFee;
        sellFee = newSellFee;

        require(buyFee <= 20, "too high");
        require(sellFee <= 20, "too high");
    }

    function changeFeeAllocation(
        uint256 newTreasuryFee,
        uint256 newMarketingFee,
        uint256 newBurnFee,
        uint256 newReflectionsFee
    ) external onlyOwner {
        toReflections = newReflectionsFee;
        toMarketing = newMarketingFee;
        toTreasury = newTreasuryFee;
        toBurn = newBurnFee;
    }

    function changeTxLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= maxTx, "Can not lower max tx");
        maxTx = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= maxWallet, "Can not lower max wallet");
        maxWallet = newLimit;
    }

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

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

    function setDevWallet(address payable newDevWallet) external onlyOwner {
        devWallet = payable(newDevWallet);
    }

    function setMarketingWallet(address payable newMarketingWallet) external onlyOwner {
        marketingWallet = payable(newMarketingWallet);
    }

    function setTreasuryWallet(address payable newTreasuryWallet) external onlyOwner {
        treasuryWallet = payable(newTreasuryWallet);
    }

    function setOwnerWallet(address payable newOwnerWallet) external onlyOwner {
        tokenOwner = newOwnerWallet;
    }

    function changeSwapBackSettings(
        bool enableSwapBack,
        uint256 newSwapBackLimit
    ) external onlyOwner {
        swapAndLiquifyEnabled = enableSwapBack;
        swapThreshold = newSwapBackLimit;
    }

    function setDistributionCriteria(
        uint256 newMinPeriod,
        uint256 newMinDistribution
    ) external onlyOwner {
        BCDividend.setDistributionCriteria(newMinPeriod, newMinDistribution);
    }

    function _setIsDividendExempt(address holder, bool exempt) internal {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if (exempt) {
            BCDividend.setShare(holder, 0);
        } else {
            BCDividend.setShare(holder, _balances[holder]);
        }
    }

    function setIsDividendExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        _setIsDividendExempt(holder, exempt);
    }

    function changeBCGas(uint256 newGas) external onlyOwner {
        BCDividendsGas = newGas;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    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, type(uint256).max);
    }

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

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

        return _transfer(sender, recipient, amount);
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        if (sender != owner && recipient != owner)
            require(tradingOpen, "hold ur horses big guy."); //transfers disabled before tradingActive

        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        }

        require(amount <= maxTx || isTxLimitExempt[sender], "tx");

        if (!isTxLimitExempt[recipient]) {
            require(_balances[recipient].add(amount) <= maxWallet, "wallet");
        }

        if (
            msg.sender != pair &&
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            _balances[address(this)] >= swapThreshold
        ) {
            swapBack();
        }

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

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient]
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if (!isDividendExempt[sender]) {
            try BCDividend.setShare(sender, _balances[sender]) {} catch {}
        }

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

        emit Transfer(sender, recipient, finalAmount);
        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);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeApplicable = pair == recipient ? sellFee : buyFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

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

        return amount.sub(feeAmount);
    }

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

        approve(address(this), tokenAmount);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function burnBC(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(BC);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(0, path, DEAD, block.timestamp);
    }

    function swapBack() internal lockTheSwap {
        swapTokensForEth(_balances[address(this)]);

        uint256 totalEthBalance = address(this).balance;

        uint256 ethForBurn = totalEthBalance.mul(toBurn).div(100);
        burnBC(ethForBurn);

        uint256 ethForMarketing = totalEthBalance.mul(toMarketing).div(100);
        payable(marketingWallet).transfer(ethForMarketing);

        uint256 ethForReflections = totalEthBalance.mul(toReflections).div(100);
        try BCDividend.deposit{value: ethForReflections}() {} catch {}

        payable(treasuryWallet).transfer(address(this).balance);
    }

    function manualSwapBack() external onlyOwner {
        swapBack();
    }

    function clearStuckEth() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            payable(devWallet).transfer(contractETHBalance);
        }
    }

    function manualProcessGas(uint256 manualGas) external onlyOwner {
        BCDividend.process(manualGas);
    }

    function checkPendingReflections(address shareholder)
        external
        view
        returns (uint256)
    {
        return BCDividend.getUnpaidEarnings(shareholder);
    }

    function withdraw() external {
        BCDividend.withdraw(msg.sender);
    }

    function removeStuckDividends() external onlyOwner {
        BCDividend.removeStuckDividends();
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"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":"BC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BCDividend","outputs":[{"internalType":"contract BCDividends","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BCDividendsGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allocationSum","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGas","type":"uint256"}],"name":"changeBCGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newBurnFee","type":"uint256"},{"internalType":"uint256","name":"newReflectionsFee","type":"uint256"}],"name":"changeFeeAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyFee","type":"uint256"},{"internalType":"uint256","name":"newSellFee","type":"uint256"}],"name":"changeTotalFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"checkPendingReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","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":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"manualGas","type":"uint256"}],"name":"manualProcessGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeStuckDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"satoshi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"setDistributionCriteria","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 payable","name":"newMarketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newTreasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"toBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273e03b2642a5111ad0efc0cbce766498c2dd562ae9600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000069919062000dc6565b630c8458806200007a919062000e17565b60025561dead600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506014600c55601e600d55600a600e55600a600f556028601055602860115560646012556001601960156101000a81548160ff0219169083151502179055506000601960166101000a81548160ff0219169083151502179055506000601b556200017d60fa60025462000b6460201b620023521790919060201c565b601c556200019d60fa60025462000b6460201b620023521790919060201c565b601d55620001be6103e860025462000b6460201b620023521790919060201c565b601e55348015620001ce57600080fd5b5060405162007de438038062007de48339818101604052810190620001f4919062000ee2565b80806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e2919062000ee2565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b6919062000ee2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200051492919062000f25565b6020604051808303816000875af115801562000534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055a919062000ee2565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506040516200066b9062000c1e565b604051809103906000f08015801562000688573d6000803e3d6000fd5b50601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600254600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60025460405162000b55919062000f63565b60405180910390a350620010af565b600062000bae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000bb660201b60201c565b905092915050565b6000808311829062000c00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf7919062001024565b60405180910390fd5b506000838562000c11919062001077565b9050809150509392505050565b61221e8062005bc683390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cba5780860481111562000c925762000c9162000c2c565b5b600185161562000ca25780820291505b808102905062000cb28562000c5b565b945062000c72565b94509492505050565b60008262000cd5576001905062000da8565b8162000ce5576000905062000da8565b816001811462000cfe576002811462000d095762000d3f565b600191505062000da8565b60ff84111562000d1e5762000d1d62000c2c565b5b8360020a91508482111562000d385762000d3762000c2c565b5b5062000da8565b5060208310610133831016604e8410600b841016171562000d795782820a90508381111562000d735762000d7262000c2c565b5b62000da8565b62000d88848484600162000c68565b9250905081840481111562000da25762000da162000c2c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000dd38262000daf565b915062000de08362000db9565b925062000e0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cc3565b905092915050565b600062000e248262000daf565b915062000e318362000daf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e6d5762000e6c62000c2c565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000eaa8262000e7d565b9050919050565b62000ebc8162000e9d565b811462000ec857600080fd5b50565b60008151905062000edc8162000eb1565b92915050565b60006020828403121562000efb5762000efa62000e78565b5b600062000f0b8482850162000ecb565b91505092915050565b62000f1f8162000e9d565b82525050565b600060408201905062000f3c600083018562000f14565b62000f4b602083018462000f14565b9392505050565b62000f5d8162000daf565b82525050565b600060208201905062000f7a600083018462000f52565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000fbc57808201518184015260208101905062000f9f565b8381111562000fcc576000848401525b50505050565b6000601f19601f8301169050919050565b600062000ff08262000f80565b62000ffc818562000f8b565b93506200100e81856020860162000f9c565b620010198162000fd2565b840191505092915050565b6000602082019050818103600083015262001040818462000fe3565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010848262000daf565b9150620010918362000daf565b925082620010a457620010a362001048565b5b828204905092915050565b614b0780620010bf6000396000f3fe60806040526004361061039b5760003560e01c806375f0a874116101dc578063a9059cbb11610102578063dd62ed3e116100a0578063f887ea401161006f578063f887ea4014610d3f578063f8b45b0514610d6a578063fabe628314610d95578063ffb54a9914610dbe576103a2565b8063dd62ed3e14610c99578063dfbfbc6b14610cd6578063f2fde38b14610ced578063f708a64f14610d16576103a2565b8063caa5581b116100dc578063caa5581b14610c03578063ce4ef10e14610c2e578063d1bbd71414610c45578063d920334e14610c70576103a2565b8063a9059cbb14610b72578063bb542ef014610baf578063c45a015514610bd8576103a2565b8063893d20e81161017a57806395d89b411161014957806395d89b4114610aca578063a3a2e89e14610af5578063a8602fea14610b1e578063a8aa1b3114610b47576103a2565b8063893d20e814610a205780638a8c523c14610a4b5780638b42507f14610a625780638ea5220f14610a9f576103a2565b80637db1342c116101b65780637db1342c1461098e57806380e060bc146109b757806381934031146109e057806389291a8f14610a09576103a2565b806375f0a874146108fb57806377359aa7146109265780637990016914610963576103a2565b80633ccfd60b116102c15780634a74bb021161025f57806366eb37851161022e57806366eb37851461085157806370a08231146108685780637437681e146108a557806375df1305146108d0576103a2565b80634a74bb02146107955780635253c589146107c0578063571ac8b0146107eb5780635d098b3814610828576103a2565b80634355855a1161029b5780634355855a146106d757806345434377146107145780634626402b1461073f578063470624021461076a576103a2565b80633ccfd60b1461065a5780633dab5269146106715780633f4218e01461069a576103a2565b806323b872dd116103395780632d48e896116103085780632d48e896146105a05780632f54bf6e146105c957806330ca34ee14610606578063313ce5671461062f576103a2565b806323b872dd146104e2578063246ea64e1461051f5780632b112e491461054a5780632b14ca5614610575576103a2565b8063095ea7b311610375578063095ea7b3146104285780630b7309231461046557806318160ddd1461048e5780631f53ac02146104b9576103a2565b80630445b667146103a757806306fdde03146103d25780630853ad9c146103fd576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610de9565b6040516103c99190613a9b565b60405180910390f35b3480156103de57600080fd5b506103e7610def565b6040516103f49190613b4f565b60405180910390f35b34801561040957600080fd5b50610412610e2c565b60405161041f9190613bf0565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190613c7a565b610e52565b60405161045c9190613cd5565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190613cf0565b610f44565b005b34801561049a57600080fd5b506104a3610fae565b6040516104b09190613a9b565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190613d95565b610fb8565b005b3480156104ee57600080fd5b5061050960048036038101906105049190613dc2565b611044565b6040516105169190613cd5565b60405180910390f35b34801561052b57600080fd5b50610534611244565b6040516105419190613a9b565b60405180910390f35b34801561055657600080fd5b5061055f61124a565b60405161056c9190613a9b565b60405180910390f35b34801561058157600080fd5b5061058a6112cc565b6040516105979190613a9b565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613e15565b6112d2565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190613e55565b6113ad565b6040516105fd9190613cd5565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190613e15565b611406565b005b34801561063b57600080fd5b506106446114ec565b6040516106519190613e9e565b60405180910390f35b34801561066657600080fd5b5061066f6114f5565b005b34801561067d57600080fd5b5061069860048036038101906106939190613ee5565b611584565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613e55565b6115f1565b6040516106ce9190613cd5565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613e55565b611611565b60405161070b9190613cd5565b60405180910390f35b34801561072057600080fd5b50610729611631565b6040516107369190613a9b565b60405180910390f35b34801561074b57600080fd5b50610754611637565b6040516107619190613f34565b60405180910390f35b34801561077657600080fd5b5061077f61165d565b60405161078c9190613a9b565b60405180910390f35b3480156107a157600080fd5b506107aa611663565b6040516107b79190613cd5565b60405180910390f35b3480156107cc57600080fd5b506107d5611676565b6040516107e29190613a9b565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190613e55565b61167c565b60405161081f9190613cd5565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190613d95565b6116af565b005b34801561085d57600080fd5b5061086661173b565b005b34801561087457600080fd5b5061088f600480360381019061088a9190613e55565b61178d565b60405161089c9190613a9b565b60405180910390f35b3480156108b157600080fd5b506108ba6117d6565b6040516108c79190613a9b565b60405180910390f35b3480156108dc57600080fd5b506108e56117dc565b6040516108f29190613a9b565b60405180910390f35b34801561090757600080fd5b506109106117e2565b60405161091d9190613f34565b60405180910390f35b34801561093257600080fd5b5061094d60048036038101906109489190613e55565b611808565b60405161095a9190613a9b565b60405180910390f35b34801561096f57600080fd5b506109786118ad565b6040516109859190613a9b565b60405180910390f35b34801561099a57600080fd5b506109b560048036038101906109b09190613f4f565b6118b3565b005b3480156109c357600080fd5b506109de60048036038101906109d99190613f4f565b61194a565b005b3480156109ec57600080fd5b50610a076004803603810190610a029190613f4f565b61199c565b005b348015610a1557600080fd5b50610a1e611a74565b005b348015610a2c57600080fd5b50610a35611b37565b604051610a429190613f34565b60405180910390f35b348015610a5757600080fd5b50610a60611b60565b005b348015610a6e57600080fd5b50610a896004803603810190610a849190613e55565b611bc5565b604051610a969190613cd5565b60405180910390f35b348015610aab57600080fd5b50610ab4611be5565b604051610ac19190613f34565b60405180910390f35b348015610ad657600080fd5b50610adf611c0b565b604051610aec9190613b4f565b60405180910390f35b348015610b0157600080fd5b50610b1c6004803603810190610b179190613f7c565b611c48565b005b348015610b2a57600080fd5b50610b456004803603810190610b409190613d95565b611ceb565b005b348015610b5357600080fd5b50610b5c611d77565b604051610b699190613f34565b60405180910390f35b348015610b7e57600080fd5b50610b996004803603810190610b949190613c7a565b611d9d565b604051610ba69190613cd5565b60405180910390f35b348015610bbb57600080fd5b50610bd66004803603810190610bd19190613d95565b611db2565b005b348015610be457600080fd5b50610bed611e3e565b604051610bfa9190613f34565b60405180910390f35b348015610c0f57600080fd5b50610c18611e64565b604051610c259190613a9b565b60405180910390f35b348015610c3a57600080fd5b50610c43611e6a565b005b348015610c5157600080fd5b50610c5a611f48565b604051610c679190613f34565b60405180910390f35b348015610c7c57600080fd5b50610c976004803603810190610c929190613f4f565b611f6e565b005b348015610ca557600080fd5b50610cc06004803603810190610cbb9190613fbc565b612005565b604051610ccd9190613a9b565b60405180910390f35b348015610ce257600080fd5b50610ceb61208c565b005b348015610cf957600080fd5b50610d146004803603810190610d0f9190613d95565b612158565b005b348015610d2257600080fd5b50610d3d6004803603810190610d389190613f7c565b61221a565b005b348015610d4b57600080fd5b50610d54612270565b604051610d61919061402f565b60405180910390f35b348015610d7657600080fd5b50610d7f612296565b604051610d8c9190613a9b565b60405180910390f35b348015610da157600080fd5b50610dbc6004803603810190610db79190613f7c565b61229c565b005b348015610dca57600080fd5b50610dd361233f565b604051610de09190613cd5565b60405180910390f35b601e5481565b60606040518060400160405280601081526020017f5661756c74206f66205361746f73686900000000000000000000000000000000815250905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f329190613a9b565b60405180910390a36001905092915050565b610f4d336113ad565b610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390614096565b60405180910390fd5b80600e81905550826011819055508360108190555081600f8190555050505050565b6000600254905090565b610fc1336113ad565b611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff790614096565b60405180910390fd5b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611230576111af826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61123b848484612400565b90509392505050565b600f5481565b60006112c761127a600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661178d565b6112b96112a8600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661178d565b600254612c4b90919063ffffffff16565b612c4b90919063ffffffff16565b905090565b600d5481565b6112db336113ad565b61131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016113779291906140b6565b600060405180830381600087803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b61140f336113ad565b61144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590614096565b60405180910390fd5b81600c8190555080600d819055506014600c5411156114a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114999061412b565b60405180910390fd5b6014600d5411156114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df9061412b565b60405180910390fd5b5050565b60006012905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9336040518263ffffffff1660e01b81526004016115509190613f34565b600060405180830381600087803b15801561156a57600080fd5b505af115801561157e573d6000803e3d6000fd5b50505050565b61158d336113ad565b6115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390614096565b60405180910390fd5b81601960156101000a81548160ff02191690831515021790555080601e819055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60125481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b601960159054906101000a900460ff1681565b601b5481565b60006116a8827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610e52565b9050919050565b6116b8336113ad565b6116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ee90614096565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611744336113ad565b611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90614096565b60405180910390fd5b61178b612c95565b565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601c5481565b60115481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b81526004016118659190613f34565b602060405180830381865afa158015611882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a69190614160565b9050919050565b60105481565b6118bc336113ad565b6118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f290614096565b60405180910390fd5b601d54811015611940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611937906141d9565b60405180910390fd5b80601d8190555050565b611953336113ad565b611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614096565b60405180910390fd5b80601b8190555050565b6119a5336113ad565b6119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db90614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479826040518263ffffffff1660e01b8152600401611a3f9190613a9b565b600060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b5050505050565b611a7d336113ad565b611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390614096565b60405180910390fd5b60004790506000811115611b3457601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b32573d6000803e3d6000fd5b505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b69336113ad565b611ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9f90614096565b60405180910390fd5b6001601960166101000a81548160ff021916908315150217905550565b600a6020528060005260406000206000915054906101000a900460ff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600381526020017f564f530000000000000000000000000000000000000000000000000000000000815250905090565b611c51336113ad565b611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8790614096565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611cf4336113ad565b611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90614096565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611daa338484612400565b905092915050565b611dbb336113ad565b611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190614096565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b611e73336113ad565b611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea990614096565b60405180910390fd5b601960169054906101000a900460ff1615611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990614245565b60405180910390fd5b6012600a611f1091906143c7565b621dc130611f1e9190614412565b601c819055506012600a611f3291906143c7565b62401640611f409190614412565b601d81905550565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f77336113ad565b611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614096565b60405180910390fd5b601c54811015611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff2906144b8565b60405180910390fd5b80601c8190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612095336113ad565b6120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dfbfbc6b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b50505050565b612161336113ad565b6121a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219790614096565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161220f91906144f9565b60405180910390a150565b612223336113ad565b612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990614096565b60405180910390fd5b61226c8282612efa565b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6122a5336113ad565b6122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90614096565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601960169054906101000a900460ff1681565b600061239483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613152565b905092915050565b60008383111582906123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db9190613b4f565b60405180910390fd5b50600083856123f39190614514565b9050809150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156124ab575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561250057601960169054906101000a900460ff166124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f690614594565b60405180910390fd5b5b601960149054906101000a900460ff1615612527576125208484846131b5565b9050612c44565b601c54821115806125815750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b790614600565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126a857601d5461266683600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b11156126a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269e9061466c565b60405180910390fd5b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156127135750601960149054906101000a900460ff16155b801561272b5750601960159054906101000a900460ff165b80156127785750601e54600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561278657612785612c95565b5b61280f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128f85750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612902578261290e565b61290d8585856133e6565b5b905061296281600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612abf57601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a9292919061468c565b600060405180830381600087803b158015612aac57600080fd5b505af1925050508015612abd575060015b505b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bd957601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612bac92919061468c565b600060405180830381600087803b158015612bc657600080fd5b505af1925050508015612bd7575060015b505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c369190613a9b565b60405180910390a360019150505b9392505050565b6000612c8d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061239c565b905092915050565b6001601960146101000a81548160ff021916908315150217905550612cf8600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358e565b60004790506000612d276064612d19600f54856137af90919063ffffffff16565b61235290919063ffffffff16565b9050612d3281613829565b6000612d5c6064612d4e601154866137af90919063ffffffff16565b61235290919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612dc6573d6000803e3d6000fd5b506000612df16064612de3600e54876137af90919063ffffffff16565b61235290919063ffffffff16565b9050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5d57600080fd5b505af193505050508015612e6f575060015b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612ed8573d6000803e3d6000fd5b50505050506000601960146101000a81548160ff021916908315150217905550565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f845750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612f8d57600080fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561307f57601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016130489291906146f0565b600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b5050505061314e565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161311b92919061468c565b600060405180830381600087803b15801561313557600080fd5b505af1158015613149573d6000803e3d6000fd5b505050505b5050565b60008083118290613199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131909190613b4f565b60405180910390fd5b50600083856131a89190614748565b9050809150509392505050565b6000613240826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132d582600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133759190613a9b565b60405180910390a3600190509392505050565b60008082846133979190614779565b9050838110156133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d39061481b565b60405180910390fd5b8091505092915050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461344657600c5461344a565b600d545b90506000613474606461346684876137af90919063ffffffff16565b61235290919063ffffffff16565b90506134c881600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135689190613a9b565b60405180910390a36135838185612c4b90919063ffffffff16565b925050509392505050565b6000600267ffffffffffffffff8111156135ab576135aa61483b565b5b6040519080825280602002602001820160405280156135d95781602001602082028036833780820191505090505b50905030816000815181106135f1576135f061486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136bc91906148ae565b816001815181106136d0576136cf61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137143083610e52565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613779959493929190614999565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050505050565b60008083036137c15760009050613823565b600082846137cf9190614412565b90508284826137de9190614748565b1461381e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381590614a65565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156138465761384561483b565b5b6040519080825280602002602001820160405280156138745781602001602082028036833780820191505090505b509050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390891906148ae565b8160008151811061391c5761391b61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061398d5761398c61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613a4c9493929190614a85565b6000604051808303818588803b158015613a6557600080fd5b505af1158015613a79573d6000803e3d6000fd5b50505050505050565b6000819050919050565b613a9581613a82565b82525050565b6000602082019050613ab06000830184613a8c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613af0578082015181840152602081019050613ad5565b83811115613aff576000848401525b50505050565b6000601f19601f8301169050919050565b6000613b2182613ab6565b613b2b8185613ac1565b9350613b3b818560208601613ad2565b613b4481613b05565b840191505092915050565b60006020820190508181036000830152613b698184613b16565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613bb6613bb1613bac84613b71565b613b91565b613b71565b9050919050565b6000613bc882613b9b565b9050919050565b6000613bda82613bbd565b9050919050565b613bea81613bcf565b82525050565b6000602082019050613c056000830184613be1565b92915050565b600080fd5b6000613c1b82613b71565b9050919050565b613c2b81613c10565b8114613c3657600080fd5b50565b600081359050613c4881613c22565b92915050565b613c5781613a82565b8114613c6257600080fd5b50565b600081359050613c7481613c4e565b92915050565b60008060408385031215613c9157613c90613c0b565b5b6000613c9f85828601613c39565b9250506020613cb085828601613c65565b9150509250929050565b60008115159050919050565b613ccf81613cba565b82525050565b6000602082019050613cea6000830184613cc6565b92915050565b60008060008060808587031215613d0a57613d09613c0b565b5b6000613d1887828801613c65565b9450506020613d2987828801613c65565b9350506040613d3a87828801613c65565b9250506060613d4b87828801613c65565b91505092959194509250565b6000613d6282613b71565b9050919050565b613d7281613d57565b8114613d7d57600080fd5b50565b600081359050613d8f81613d69565b92915050565b600060208284031215613dab57613daa613c0b565b5b6000613db984828501613d80565b91505092915050565b600080600060608486031215613ddb57613dda613c0b565b5b6000613de986828701613c39565b9350506020613dfa86828701613c39565b9250506040613e0b86828701613c65565b9150509250925092565b60008060408385031215613e2c57613e2b613c0b565b5b6000613e3a85828601613c65565b9250506020613e4b85828601613c65565b9150509250929050565b600060208284031215613e6b57613e6a613c0b565b5b6000613e7984828501613c39565b91505092915050565b600060ff82169050919050565b613e9881613e82565b82525050565b6000602082019050613eb36000830184613e8f565b92915050565b613ec281613cba565b8114613ecd57600080fd5b50565b600081359050613edf81613eb9565b92915050565b60008060408385031215613efc57613efb613c0b565b5b6000613f0a85828601613ed0565b9250506020613f1b85828601613c65565b9150509250929050565b613f2e81613c10565b82525050565b6000602082019050613f496000830184613f25565b92915050565b600060208284031215613f6557613f64613c0b565b5b6000613f7384828501613c65565b91505092915050565b60008060408385031215613f9357613f92613c0b565b5b6000613fa185828601613c39565b9250506020613fb285828601613ed0565b9150509250929050565b60008060408385031215613fd357613fd2613c0b565b5b6000613fe185828601613c39565b9250506020613ff285828601613c39565b9150509250929050565b600061400782613b9b565b9050919050565b600061401982613ffc565b9050919050565b6140298161400e565b82525050565b60006020820190506140446000830184614020565b92915050565b7f214f776e65720000000000000000000000000000000000000000000000000000600082015250565b6000614080600683613ac1565b915061408b8261404a565b602082019050919050565b600060208201905081810360008301526140af81614073565b9050919050565b60006040820190506140cb6000830185613a8c565b6140d86020830184613a8c565b9392505050565b7f746f6f2068696768000000000000000000000000000000000000000000000000600082015250565b6000614115600883613ac1565b9150614120826140df565b602082019050919050565b6000602082019050818103600083015261414481614108565b9050919050565b60008151905061415a81613c4e565b92915050565b60006020828403121561417657614175613c0b565b5b60006141848482850161414b565b91505092915050565b7f43616e206e6f74206c6f776572206d61782077616c6c65740000000000000000600082015250565b60006141c3601883613ac1565b91506141ce8261418d565b602082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b7f4265686176652e00000000000000000000000000000000000000000000000000600082015250565b600061422f600783613ac1565b915061423a826141f9565b602082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156142eb578086048111156142c7576142c6614265565b5b60018516156142d65780820291505b80810290506142e485614294565b94506142ab565b94509492505050565b60008261430457600190506143c0565b8161431257600090506143c0565b8160018114614328576002811461433257614361565b60019150506143c0565b60ff84111561434457614343614265565b5b8360020a91508482111561435b5761435a614265565b5b506143c0565b5060208310610133831016604e8410600b84101617156143965782820a90508381111561439157614390614265565b5b6143c0565b6143a384848460016142a1565b925090508184048111156143ba576143b9614265565b5b81810290505b9392505050565b60006143d282613a82565b91506143dd83613e82565b925061440a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142f4565b905092915050565b600061441d82613a82565b915061442883613a82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561446157614460614265565b5b828202905092915050565b7f43616e206e6f74206c6f776572206d6178207478000000000000000000000000600082015250565b60006144a2601483613ac1565b91506144ad8261446c565b602082019050919050565b600060208201905081810360008301526144d181614495565b9050919050565b60006144e382613ffc565b9050919050565b6144f3816144d8565b82525050565b600060208201905061450e60008301846144ea565b92915050565b600061451f82613a82565b915061452a83613a82565b92508282101561453d5761453c614265565b5b828203905092915050565b7f686f6c6420757220686f7273657320626967206775792e000000000000000000600082015250565b600061457e601783613ac1565b915061458982614548565b602082019050919050565b600060208201905081810360008301526145ad81614571565b9050919050565b7f7478000000000000000000000000000000000000000000000000000000000000600082015250565b60006145ea600283613ac1565b91506145f5826145b4565b602082019050919050565b60006020820190508181036000830152614619816145dd565b9050919050565b7f77616c6c65740000000000000000000000000000000000000000000000000000600082015250565b6000614656600683613ac1565b915061466182614620565b602082019050919050565b6000602082019050818103600083015261468581614649565b9050919050565b60006040820190506146a16000830185613f25565b6146ae6020830184613a8c565b9392505050565b6000819050919050565b60006146da6146d56146d0846146b5565b613b91565b613a82565b9050919050565b6146ea816146bf565b82525050565b60006040820190506147056000830185613f25565b61471260208301846146e1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061475382613a82565b915061475e83613a82565b92508261476e5761476d614719565b5b828204905092915050565b600061478482613a82565b915061478f83613a82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147c4576147c3614265565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614805601b83613ac1565b9150614810826147cf565b602082019050919050565b60006020820190508181036000830152614834816147f8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148a881613c22565b92915050565b6000602082840312156148c4576148c3613c0b565b5b60006148d284828501614899565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61491081613c10565b82525050565b60006149228383614907565b60208301905092915050565b6000602082019050919050565b6000614946826148db565b61495081856148e6565b935061495b836148f7565b8060005b8381101561498c5781516149738882614916565b975061497e8361492e565b92505060018101905061495f565b5085935050505092915050565b600060a0820190506149ae6000830188613a8c565b6149bb60208301876146e1565b81810360408301526149cd818661493b565b90506149dc6060830185613f25565b6149e96080830184613a8c565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a4f602183613ac1565b9150614a5a826149f3565b604082019050919050565b60006020820190508181036000830152614a7e81614a42565b9050919050565b6000608082019050614a9a60008301876146e1565b8181036020830152614aac818661493b565b9050614abb6040830185613f25565b614ac86060830184613a8c565b9594505050505056fea26469706673582212208665c4f42ebff3555476cb6dcecf0a1d4b92c68828cb9f2ec67e5f7e95da160d64736f6c634300080d003360806040526ec097ce7bc90715b34b9f1000000000600b55610708600c556000600d5534801561002e57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e03b2642a5111ad0efc0cbce766498c2dd562ae9600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120f6806101286000396000f3fe60806040526004361061010d5760003560e01c8063997664d711610095578063dfbfbc6b11610064578063dfbfbc6b14610361578063e2d2e21914610378578063efca2eed146103a3578063ffb2c479146103ce578063ffd49c84146103f75761011c565b8063997664d7146102c2578063ce7c2ac2146102ed578063d0e30db01461032c578063d1bbd714146103365761011c565b80632d48e896116100dc5780632d48e896146101dd5780633a98ef39146102065780634fab0ae81461023157806351cff8d91461025c5780638c21cd52146102855761011c565b806311ce023d1461012157806314b6ca961461014c57806326987b601461017557806328fd3198146101a05761011c565b3661011c5761011a610422565b005b600080fd5b34801561012d57600080fd5b5061013661080a565b604051610143919061184f565b60405180910390f35b34801561015857600080fd5b50610173600480360381019061016e91906118f9565b610810565b005b34801561018157600080fd5b5061018a610acf565b604051610197919061184f565b60405180910390f35b3480156101ac57600080fd5b506101c760048036038101906101c29190611939565b610ad5565b6040516101d4919061184f565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611966565b610bee565b005b34801561021257600080fd5b5061021b610c58565b604051610228919061184f565b60405180910390f35b34801561023d57600080fd5b50610246610c5e565b604051610253919061184f565b60405180910390f35b34801561026857600080fd5b50610283600480360381019061027e9190611939565b610c64565b005b34801561029157600080fd5b506102ac60048036038101906102a79190611939565b610cc8565b6040516102b991906119c1565b60405180910390f35b3480156102ce57600080fd5b506102d7610d35565b6040516102e4919061184f565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190611939565b610d3b565b604051610323939291906119dc565b60405180910390f35b610334610422565b005b34801561034257600080fd5b5061034b610d65565b6040516103589190611a22565b60405180910390f35b34801561036d57600080fd5b50610376610d8b565b005b34801561038457600080fd5b5061038d610f3b565b60405161039a919061184f565b60405180910390f35b3480156103af57600080fd5b506103b8610f41565b6040516103c5919061184f565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190611a3d565b610f47565b005b34801561040357600080fd5b5061040c611082565b604051610419919061184f565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161047f9190611a22565b602060405180830381865afa15801561049c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c09190611a7f565b90506000600267ffffffffffffffff8111156104df576104de611aac565b5b60405190808252806020026020018201604052801561050d5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190611af0565b816000815181106105b5576105b4611b1d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061062657610625611b1d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b81526004016106c39493929190611c4f565b6000604051808303818588803b1580156106dc57600080fd5b505af11580156106f0573d6000803e3d6000fd5b505050505060006107a583600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107569190611a22565b602060405180830381865afa158015610773573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107979190611a7f565b61108890919063ffffffff16565b90506107bc816008546110d290919063ffffffff16565b6008819055506107ff6107ee6007546107e084600b5461113090919063ffffffff16565b6111aa90919063ffffffff16565b600a546110d290919063ffffffff16565b600a81905550505050565b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461086857600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156108bd576108bc826111f4565b5b60008111801561090f57506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156109225761091d82611487565b610984565b60008114801561097457506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156109835761098282611536565b5b5b6109ed816109df600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460075461108890919063ffffffff16565b6110d290919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610a85600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461173d565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600e5481565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610b295760009050610be9565b6000610b76600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461173d565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050808211610bd157600092505050610be9565b610be4818361108890919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c4657600080fd5b81600c8190555080600d819055505050565b60075481565b600d5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cbc57600080fd5b610cc5816111f4565b50565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d189190611cca565b108015610d2e5750600d54610d2c83610ad5565b115b9050919050565b60085481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610de357600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e409190611a22565b602060405180830381865afa158015610e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e819190611a7f565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb737af0964f4ae3213630464b318d4eb4459140f6b4836040518363ffffffff1660e01b8152600401610ef4929190611d20565b6020604051808303816000875af1158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190611d75565b5050565b600a5481565b60095481565b6000600380549050905060008103610f5f575061107f565b60008060005a90505b8482108015610f7657508383105b1561107a5783600e5410610f8d576000600e819055505b610fd66003600e5481548110610fa657610fa5611b1d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610cc8565b15611025576110246003600e5481548110610ff457610ff3611b1d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166111f4565b5b61104a61103b5a8361108890919063ffffffff16565b836110d290919063ffffffff16565b91505a9050600e600081548092919061106290611da2565b9190505550828061107290611da2565b935050610f68565b505050505b50565b600c5481565b60006110ca83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061176f565b905092915050565b60008082846110e19190611cca565b905083811015611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90611e47565b60405180910390fd5b8091505092915050565b600080830361114257600090506111a4565b600082846111509190611e67565b905082848261115f9190611ef0565b1461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690611f93565b60405180910390fd5b809150505b92915050565b60006111ec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506117d3565b905092915050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154031561148457600061124a82610ad5565b905060008111156114825761126a816009546110d290919063ffffffff16565b600981905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016112cd929190611d20565b6020604051808303816000875af11580156112ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113109190611d75565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113aa81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546110d290919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061143b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461173d565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6003600160038054905061154a9190611fb3565b8154811061155b5761155a611b1d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106115d9576115d8611b1d565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460046000600360016003805490506116799190611fb3565b8154811061168a57611689611b1d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600380548061170557611704611fe7565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b6000611768600b5461175a600a548561113090919063ffffffff16565b6111aa90919063ffffffff16565b9050919050565b60008383111582906117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae919061209e565b60405180910390fd5b50600083856117c69190611fb3565b9050809150509392505050565b6000808311829061181a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611811919061209e565b60405180910390fd5b50600083856118299190611ef0565b9050809150509392505050565b6000819050919050565b61184981611836565b82525050565b60006020820190506118646000830184611840565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061189a8261186f565b9050919050565b6118aa8161188f565b81146118b557600080fd5b50565b6000813590506118c7816118a1565b92915050565b6118d681611836565b81146118e157600080fd5b50565b6000813590506118f3816118cd565b92915050565b600080604083850312156119105761190f61186a565b5b600061191e858286016118b8565b925050602061192f858286016118e4565b9150509250929050565b60006020828403121561194f5761194e61186a565b5b600061195d848285016118b8565b91505092915050565b6000806040838503121561197d5761197c61186a565b5b600061198b858286016118e4565b925050602061199c858286016118e4565b9150509250929050565b60008115159050919050565b6119bb816119a6565b82525050565b60006020820190506119d660008301846119b2565b92915050565b60006060820190506119f16000830186611840565b6119fe6020830185611840565b611a0b6040830184611840565b949350505050565b611a1c8161188f565b82525050565b6000602082019050611a376000830184611a13565b92915050565b600060208284031215611a5357611a5261186a565b5b6000611a61848285016118e4565b91505092915050565b600081519050611a79816118cd565b92915050565b600060208284031215611a9557611a9461186a565b5b6000611aa384828501611a6a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050611aea816118a1565b92915050565b600060208284031215611b0657611b0561186a565b5b6000611b1484828501611adb565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b6000611b7b611b76611b7184611b4c565b611b56565b611836565b9050919050565b611b8b81611b60565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611bc68161188f565b82525050565b6000611bd88383611bbd565b60208301905092915050565b6000602082019050919050565b6000611bfc82611b91565b611c068185611b9c565b9350611c1183611bad565b8060005b83811015611c42578151611c298882611bcc565b9750611c3483611be4565b925050600181019050611c15565b5085935050505092915050565b6000608082019050611c646000830187611b82565b8181036020830152611c768186611bf1565b9050611c856040830185611a13565b611c926060830184611840565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611cd582611836565b9150611ce083611836565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d1557611d14611c9b565b5b828201905092915050565b6000604082019050611d356000830185611a13565b611d426020830184611840565b9392505050565b611d52816119a6565b8114611d5d57600080fd5b50565b600081519050611d6f81611d49565b92915050565b600060208284031215611d8b57611d8a61186a565b5b6000611d9984828501611d60565b91505092915050565b6000611dad82611836565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ddf57611dde611c9b565b5b600182019050919050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611e31601b83611dea565b9150611e3c82611dfb565b602082019050919050565b60006020820190508181036000830152611e6081611e24565b9050919050565b6000611e7282611836565b9150611e7d83611836565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611eb657611eb5611c9b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611efb82611836565b9150611f0683611836565b925082611f1657611f15611ec1565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f7d602183611dea565b9150611f8882611f21565b604082019050919050565b60006020820190508181036000830152611fac81611f70565b9050919050565b6000611fbe82611836565b9150611fc983611836565b925082821015611fdc57611fdb611c9b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b60005b8381101561203f578082015181840152602081019050612024565b8381111561204e576000848401525b50505050565b6000601f19601f8301169050919050565b600061207082612016565b61207a8185611dea565b935061208a818560208601612021565b61209381612054565b840191505092915050565b600060208201905081810360008301526120b88184612065565b90509291505056fea2646970667358221220e840a3b723a1d31962a71aedcbc328249c77d55aadd8ef6ab7462a597b42b2e364736f6c634300080d00330000000000000000000000007af0964f4ae3213630464b318d4eb4459140f6b4

Deployed Bytecode

0x60806040526004361061039b5760003560e01c806375f0a874116101dc578063a9059cbb11610102578063dd62ed3e116100a0578063f887ea401161006f578063f887ea4014610d3f578063f8b45b0514610d6a578063fabe628314610d95578063ffb54a9914610dbe576103a2565b8063dd62ed3e14610c99578063dfbfbc6b14610cd6578063f2fde38b14610ced578063f708a64f14610d16576103a2565b8063caa5581b116100dc578063caa5581b14610c03578063ce4ef10e14610c2e578063d1bbd71414610c45578063d920334e14610c70576103a2565b8063a9059cbb14610b72578063bb542ef014610baf578063c45a015514610bd8576103a2565b8063893d20e81161017a57806395d89b411161014957806395d89b4114610aca578063a3a2e89e14610af5578063a8602fea14610b1e578063a8aa1b3114610b47576103a2565b8063893d20e814610a205780638a8c523c14610a4b5780638b42507f14610a625780638ea5220f14610a9f576103a2565b80637db1342c116101b65780637db1342c1461098e57806380e060bc146109b757806381934031146109e057806389291a8f14610a09576103a2565b806375f0a874146108fb57806377359aa7146109265780637990016914610963576103a2565b80633ccfd60b116102c15780634a74bb021161025f57806366eb37851161022e57806366eb37851461085157806370a08231146108685780637437681e146108a557806375df1305146108d0576103a2565b80634a74bb02146107955780635253c589146107c0578063571ac8b0146107eb5780635d098b3814610828576103a2565b80634355855a1161029b5780634355855a146106d757806345434377146107145780634626402b1461073f578063470624021461076a576103a2565b80633ccfd60b1461065a5780633dab5269146106715780633f4218e01461069a576103a2565b806323b872dd116103395780632d48e896116103085780632d48e896146105a05780632f54bf6e146105c957806330ca34ee14610606578063313ce5671461062f576103a2565b806323b872dd146104e2578063246ea64e1461051f5780632b112e491461054a5780632b14ca5614610575576103a2565b8063095ea7b311610375578063095ea7b3146104285780630b7309231461046557806318160ddd1461048e5780631f53ac02146104b9576103a2565b80630445b667146103a757806306fdde03146103d25780630853ad9c146103fd576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610de9565b6040516103c99190613a9b565b60405180910390f35b3480156103de57600080fd5b506103e7610def565b6040516103f49190613b4f565b60405180910390f35b34801561040957600080fd5b50610412610e2c565b60405161041f9190613bf0565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190613c7a565b610e52565b60405161045c9190613cd5565b60405180910390f35b34801561047157600080fd5b5061048c60048036038101906104879190613cf0565b610f44565b005b34801561049a57600080fd5b506104a3610fae565b6040516104b09190613a9b565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190613d95565b610fb8565b005b3480156104ee57600080fd5b5061050960048036038101906105049190613dc2565b611044565b6040516105169190613cd5565b60405180910390f35b34801561052b57600080fd5b50610534611244565b6040516105419190613a9b565b60405180910390f35b34801561055657600080fd5b5061055f61124a565b60405161056c9190613a9b565b60405180910390f35b34801561058157600080fd5b5061058a6112cc565b6040516105979190613a9b565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c29190613e15565b6112d2565b005b3480156105d557600080fd5b506105f060048036038101906105eb9190613e55565b6113ad565b6040516105fd9190613cd5565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190613e15565b611406565b005b34801561063b57600080fd5b506106446114ec565b6040516106519190613e9e565b60405180910390f35b34801561066657600080fd5b5061066f6114f5565b005b34801561067d57600080fd5b5061069860048036038101906106939190613ee5565b611584565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613e55565b6115f1565b6040516106ce9190613cd5565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613e55565b611611565b60405161070b9190613cd5565b60405180910390f35b34801561072057600080fd5b50610729611631565b6040516107369190613a9b565b60405180910390f35b34801561074b57600080fd5b50610754611637565b6040516107619190613f34565b60405180910390f35b34801561077657600080fd5b5061077f61165d565b60405161078c9190613a9b565b60405180910390f35b3480156107a157600080fd5b506107aa611663565b6040516107b79190613cd5565b60405180910390f35b3480156107cc57600080fd5b506107d5611676565b6040516107e29190613a9b565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190613e55565b61167c565b60405161081f9190613cd5565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190613d95565b6116af565b005b34801561085d57600080fd5b5061086661173b565b005b34801561087457600080fd5b5061088f600480360381019061088a9190613e55565b61178d565b60405161089c9190613a9b565b60405180910390f35b3480156108b157600080fd5b506108ba6117d6565b6040516108c79190613a9b565b60405180910390f35b3480156108dc57600080fd5b506108e56117dc565b6040516108f29190613a9b565b60405180910390f35b34801561090757600080fd5b506109106117e2565b60405161091d9190613f34565b60405180910390f35b34801561093257600080fd5b5061094d60048036038101906109489190613e55565b611808565b60405161095a9190613a9b565b60405180910390f35b34801561096f57600080fd5b506109786118ad565b6040516109859190613a9b565b60405180910390f35b34801561099a57600080fd5b506109b560048036038101906109b09190613f4f565b6118b3565b005b3480156109c357600080fd5b506109de60048036038101906109d99190613f4f565b61194a565b005b3480156109ec57600080fd5b50610a076004803603810190610a029190613f4f565b61199c565b005b348015610a1557600080fd5b50610a1e611a74565b005b348015610a2c57600080fd5b50610a35611b37565b604051610a429190613f34565b60405180910390f35b348015610a5757600080fd5b50610a60611b60565b005b348015610a6e57600080fd5b50610a896004803603810190610a849190613e55565b611bc5565b604051610a969190613cd5565b60405180910390f35b348015610aab57600080fd5b50610ab4611be5565b604051610ac19190613f34565b60405180910390f35b348015610ad657600080fd5b50610adf611c0b565b604051610aec9190613b4f565b60405180910390f35b348015610b0157600080fd5b50610b1c6004803603810190610b179190613f7c565b611c48565b005b348015610b2a57600080fd5b50610b456004803603810190610b409190613d95565b611ceb565b005b348015610b5357600080fd5b50610b5c611d77565b604051610b699190613f34565b60405180910390f35b348015610b7e57600080fd5b50610b996004803603810190610b949190613c7a565b611d9d565b604051610ba69190613cd5565b60405180910390f35b348015610bbb57600080fd5b50610bd66004803603810190610bd19190613d95565b611db2565b005b348015610be457600080fd5b50610bed611e3e565b604051610bfa9190613f34565b60405180910390f35b348015610c0f57600080fd5b50610c18611e64565b604051610c259190613a9b565b60405180910390f35b348015610c3a57600080fd5b50610c43611e6a565b005b348015610c5157600080fd5b50610c5a611f48565b604051610c679190613f34565b60405180910390f35b348015610c7c57600080fd5b50610c976004803603810190610c929190613f4f565b611f6e565b005b348015610ca557600080fd5b50610cc06004803603810190610cbb9190613fbc565b612005565b604051610ccd9190613a9b565b60405180910390f35b348015610ce257600080fd5b50610ceb61208c565b005b348015610cf957600080fd5b50610d146004803603810190610d0f9190613d95565b612158565b005b348015610d2257600080fd5b50610d3d6004803603810190610d389190613f7c565b61221a565b005b348015610d4b57600080fd5b50610d54612270565b604051610d61919061402f565b60405180910390f35b348015610d7657600080fd5b50610d7f612296565b604051610d8c9190613a9b565b60405180910390f35b348015610da157600080fd5b50610dbc6004803603810190610db79190613f7c565b61229c565b005b348015610dca57600080fd5b50610dd361233f565b604051610de09190613cd5565b60405180910390f35b601e5481565b60606040518060400160405280601081526020017f5661756c74206f66205361746f73686900000000000000000000000000000000815250905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f329190613a9b565b60405180910390a36001905092915050565b610f4d336113ad565b610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390614096565b60405180910390fd5b80600e81905550826011819055508360108190555081600f8190555050505050565b6000600254905090565b610fc1336113ad565b611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff790614096565b60405180910390fd5b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611230576111af826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61123b848484612400565b90509392505050565b600f5481565b60006112c761127a600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661178d565b6112b96112a8600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661178d565b600254612c4b90919063ffffffff16565b612c4b90919063ffffffff16565b905090565b600d5481565b6112db336113ad565b61131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016113779291906140b6565b600060405180830381600087803b15801561139157600080fd5b505af11580156113a5573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b61140f336113ad565b61144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590614096565b60405180910390fd5b81600c8190555080600d819055506014600c5411156114a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114999061412b565b60405180910390fd5b6014600d5411156114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df9061412b565b60405180910390fd5b5050565b60006012905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166351cff8d9336040518263ffffffff1660e01b81526004016115509190613f34565b600060405180830381600087803b15801561156a57600080fd5b505af115801561157e573d6000803e3d6000fd5b50505050565b61158d336113ad565b6115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390614096565b60405180910390fd5b81601960156101000a81548160ff02191690831515021790555080601e819055505050565b60096020528060005260406000206000915054906101000a900460ff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b60125481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b601960159054906101000a900460ff1681565b601b5481565b60006116a8827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610e52565b9050919050565b6116b8336113ad565b6116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ee90614096565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611744336113ad565b611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90614096565b60405180910390fd5b61178b612c95565b565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601c5481565b60115481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b81526004016118659190613f34565b602060405180830381865afa158015611882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a69190614160565b9050919050565b60105481565b6118bc336113ad565b6118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f290614096565b60405180910390fd5b601d54811015611940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611937906141d9565b60405180910390fd5b80601d8190555050565b611953336113ad565b611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614096565b60405180910390fd5b80601b8190555050565b6119a5336113ad565b6119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db90614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479826040518263ffffffff1660e01b8152600401611a3f9190613a9b565b600060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b5050505050565b611a7d336113ad565b611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab390614096565b60405180910390fd5b60004790506000811115611b3457601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b32573d6000803e3d6000fd5b505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b69336113ad565b611ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9f90614096565b60405180910390fd5b6001601960166101000a81548160ff021916908315150217905550565b600a6020528060005260406000206000915054906101000a900460ff1681565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600381526020017f564f530000000000000000000000000000000000000000000000000000000000815250905090565b611c51336113ad565b611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8790614096565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611cf4336113ad565b611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a90614096565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611daa338484612400565b905092915050565b611dbb336113ad565b611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190614096565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b611e73336113ad565b611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea990614096565b60405180910390fd5b601960169054906101000a900460ff1615611f02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef990614245565b60405180910390fd5b6012600a611f1091906143c7565b621dc130611f1e9190614412565b601c819055506012600a611f3291906143c7565b62401640611f409190614412565b601d81905550565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f77336113ad565b611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614096565b60405180910390fd5b601c54811015611ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff2906144b8565b60405180910390fd5b80601c8190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612095336113ad565b6120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90614096565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dfbfbc6b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561213e57600080fd5b505af1158015612152573d6000803e3d6000fd5b50505050565b612161336113ad565b6121a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219790614096565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161220f91906144f9565b60405180910390a150565b612223336113ad565b612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225990614096565b60405180910390fd5b61226c8282612efa565b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d5481565b6122a5336113ad565b6122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90614096565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601960169054906101000a900460ff1681565b600061239483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613152565b905092915050565b60008383111582906123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db9190613b4f565b60405180910390fd5b50600083856123f39190614514565b9050809150509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156124ab575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561250057601960169054906101000a900460ff166124ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f690614594565b60405180910390fd5b5b601960149054906101000a900460ff1615612527576125208484846131b5565b9050612c44565b601c54821115806125815750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6125c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b790614600565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126a857601d5461266683600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b11156126a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269e9061466c565b60405180910390fd5b5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156127135750601960149054906101000a900460ff16155b801561272b5750601960159054906101000a900460ff165b80156127785750601e54600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561278657612785612c95565b5b61280f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128f85750600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612902578261290e565b61290d8585856133e6565b5b905061296281600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612abf57601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a9292919061468c565b600060405180830381600087803b158015612aac57600080fd5b505af1925050508015612abd575060015b505b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bd957601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612bac92919061468c565b600060405180830381600087803b158015612bc657600080fd5b505af1925050508015612bd7575060015b505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c369190613a9b565b60405180910390a360019150505b9392505050565b6000612c8d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061239c565b905092915050565b6001601960146101000a81548160ff021916908315150217905550612cf8600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461358e565b60004790506000612d276064612d19600f54856137af90919063ffffffff16565b61235290919063ffffffff16565b9050612d3281613829565b6000612d5c6064612d4e601154866137af90919063ffffffff16565b61235290919063ffffffff16565b9050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612dc6573d6000803e3d6000fd5b506000612df16064612de3600e54876137af90919063ffffffff16565b61235290919063ffffffff16565b9050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e5d57600080fd5b505af193505050508015612e6f575060015b50601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612ed8573d6000803e3d6000fd5b50505050506000601960146101000a81548160ff021916908315150217905550565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f845750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612f8d57600080fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561307f57601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016130489291906146f0565b600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b5050505061314e565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161311b92919061468c565b600060405180830381600087803b15801561313557600080fd5b505af1158015613149573d6000803e3d6000fd5b505050505b5050565b60008083118290613199576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131909190613b4f565b60405180910390fd5b50600083856131a89190614748565b9050809150509392505050565b6000613240826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461239c9092919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132d582600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133759190613a9b565b60405180910390a3600190509392505050565b60008082846133979190614779565b9050838110156133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d39061481b565b60405180910390fd5b8091505092915050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461344657600c5461344a565b600d545b90506000613474606461346684876137af90919063ffffffff16565b61235290919063ffffffff16565b90506134c881600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338890919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135689190613a9b565b60405180910390a36135838185612c4b90919063ffffffff16565b925050509392505050565b6000600267ffffffffffffffff8111156135ab576135aa61483b565b5b6040519080825280602002602001820160405280156135d95781602001602082028036833780820191505090505b50905030816000815181106135f1576135f061486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136bc91906148ae565b816001815181106136d0576136cf61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137143083610e52565b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613779959493929190614999565b600060405180830381600087803b15801561379357600080fd5b505af11580156137a7573d6000803e3d6000fd5b505050505050565b60008083036137c15760009050613823565b600082846137cf9190614412565b90508284826137de9190614748565b1461381e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381590614a65565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156138465761384561483b565b5b6040519080825280602002602001820160405280156138745781602001602082028036833780820191505090505b509050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390891906148ae565b8160008151811061391c5761391b61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061398d5761398c61486a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401613a4c9493929190614a85565b6000604051808303818588803b158015613a6557600080fd5b505af1158015613a79573d6000803e3d6000fd5b50505050505050565b6000819050919050565b613a9581613a82565b82525050565b6000602082019050613ab06000830184613a8c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613af0578082015181840152602081019050613ad5565b83811115613aff576000848401525b50505050565b6000601f19601f8301169050919050565b6000613b2182613ab6565b613b2b8185613ac1565b9350613b3b818560208601613ad2565b613b4481613b05565b840191505092915050565b60006020820190508181036000830152613b698184613b16565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613bb6613bb1613bac84613b71565b613b91565b613b71565b9050919050565b6000613bc882613b9b565b9050919050565b6000613bda82613bbd565b9050919050565b613bea81613bcf565b82525050565b6000602082019050613c056000830184613be1565b92915050565b600080fd5b6000613c1b82613b71565b9050919050565b613c2b81613c10565b8114613c3657600080fd5b50565b600081359050613c4881613c22565b92915050565b613c5781613a82565b8114613c6257600080fd5b50565b600081359050613c7481613c4e565b92915050565b60008060408385031215613c9157613c90613c0b565b5b6000613c9f85828601613c39565b9250506020613cb085828601613c65565b9150509250929050565b60008115159050919050565b613ccf81613cba565b82525050565b6000602082019050613cea6000830184613cc6565b92915050565b60008060008060808587031215613d0a57613d09613c0b565b5b6000613d1887828801613c65565b9450506020613d2987828801613c65565b9350506040613d3a87828801613c65565b9250506060613d4b87828801613c65565b91505092959194509250565b6000613d6282613b71565b9050919050565b613d7281613d57565b8114613d7d57600080fd5b50565b600081359050613d8f81613d69565b92915050565b600060208284031215613dab57613daa613c0b565b5b6000613db984828501613d80565b91505092915050565b600080600060608486031215613ddb57613dda613c0b565b5b6000613de986828701613c39565b9350506020613dfa86828701613c39565b9250506040613e0b86828701613c65565b9150509250925092565b60008060408385031215613e2c57613e2b613c0b565b5b6000613e3a85828601613c65565b9250506020613e4b85828601613c65565b9150509250929050565b600060208284031215613e6b57613e6a613c0b565b5b6000613e7984828501613c39565b91505092915050565b600060ff82169050919050565b613e9881613e82565b82525050565b6000602082019050613eb36000830184613e8f565b92915050565b613ec281613cba565b8114613ecd57600080fd5b50565b600081359050613edf81613eb9565b92915050565b60008060408385031215613efc57613efb613c0b565b5b6000613f0a85828601613ed0565b9250506020613f1b85828601613c65565b9150509250929050565b613f2e81613c10565b82525050565b6000602082019050613f496000830184613f25565b92915050565b600060208284031215613f6557613f64613c0b565b5b6000613f7384828501613c65565b91505092915050565b60008060408385031215613f9357613f92613c0b565b5b6000613fa185828601613c39565b9250506020613fb285828601613ed0565b9150509250929050565b60008060408385031215613fd357613fd2613c0b565b5b6000613fe185828601613c39565b9250506020613ff285828601613c39565b9150509250929050565b600061400782613b9b565b9050919050565b600061401982613ffc565b9050919050565b6140298161400e565b82525050565b60006020820190506140446000830184614020565b92915050565b7f214f776e65720000000000000000000000000000000000000000000000000000600082015250565b6000614080600683613ac1565b915061408b8261404a565b602082019050919050565b600060208201905081810360008301526140af81614073565b9050919050565b60006040820190506140cb6000830185613a8c565b6140d86020830184613a8c565b9392505050565b7f746f6f2068696768000000000000000000000000000000000000000000000000600082015250565b6000614115600883613ac1565b9150614120826140df565b602082019050919050565b6000602082019050818103600083015261414481614108565b9050919050565b60008151905061415a81613c4e565b92915050565b60006020828403121561417657614175613c0b565b5b60006141848482850161414b565b91505092915050565b7f43616e206e6f74206c6f776572206d61782077616c6c65740000000000000000600082015250565b60006141c3601883613ac1565b91506141ce8261418d565b602082019050919050565b600060208201905081810360008301526141f2816141b6565b9050919050565b7f4265686176652e00000000000000000000000000000000000000000000000000600082015250565b600061422f600783613ac1565b915061423a826141f9565b602082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156142eb578086048111156142c7576142c6614265565b5b60018516156142d65780820291505b80810290506142e485614294565b94506142ab565b94509492505050565b60008261430457600190506143c0565b8161431257600090506143c0565b8160018114614328576002811461433257614361565b60019150506143c0565b60ff84111561434457614343614265565b5b8360020a91508482111561435b5761435a614265565b5b506143c0565b5060208310610133831016604e8410600b84101617156143965782820a90508381111561439157614390614265565b5b6143c0565b6143a384848460016142a1565b925090508184048111156143ba576143b9614265565b5b81810290505b9392505050565b60006143d282613a82565b91506143dd83613e82565b925061440a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142f4565b905092915050565b600061441d82613a82565b915061442883613a82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561446157614460614265565b5b828202905092915050565b7f43616e206e6f74206c6f776572206d6178207478000000000000000000000000600082015250565b60006144a2601483613ac1565b91506144ad8261446c565b602082019050919050565b600060208201905081810360008301526144d181614495565b9050919050565b60006144e382613ffc565b9050919050565b6144f3816144d8565b82525050565b600060208201905061450e60008301846144ea565b92915050565b600061451f82613a82565b915061452a83613a82565b92508282101561453d5761453c614265565b5b828203905092915050565b7f686f6c6420757220686f7273657320626967206775792e000000000000000000600082015250565b600061457e601783613ac1565b915061458982614548565b602082019050919050565b600060208201905081810360008301526145ad81614571565b9050919050565b7f7478000000000000000000000000000000000000000000000000000000000000600082015250565b60006145ea600283613ac1565b91506145f5826145b4565b602082019050919050565b60006020820190508181036000830152614619816145dd565b9050919050565b7f77616c6c65740000000000000000000000000000000000000000000000000000600082015250565b6000614656600683613ac1565b915061466182614620565b602082019050919050565b6000602082019050818103600083015261468581614649565b9050919050565b60006040820190506146a16000830185613f25565b6146ae6020830184613a8c565b9392505050565b6000819050919050565b60006146da6146d56146d0846146b5565b613b91565b613a82565b9050919050565b6146ea816146bf565b82525050565b60006040820190506147056000830185613f25565b61471260208301846146e1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061475382613a82565b915061475e83613a82565b92508261476e5761476d614719565b5b828204905092915050565b600061478482613a82565b915061478f83613a82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147c4576147c3614265565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614805601b83613ac1565b9150614810826147cf565b602082019050919050565b60006020820190508181036000830152614834816147f8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148a881613c22565b92915050565b6000602082840312156148c4576148c3613c0b565b5b60006148d284828501614899565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61491081613c10565b82525050565b60006149228383614907565b60208301905092915050565b6000602082019050919050565b6000614946826148db565b61495081856148e6565b935061495b836148f7565b8060005b8381101561498c5781516149738882614916565b975061497e8361492e565b92505060018101905061495f565b5085935050505092915050565b600060a0820190506149ae6000830188613a8c565b6149bb60208301876146e1565b81810360408301526149cd818661493b565b90506149dc6060830185613f25565b6149e96080830184613a8c565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a4f602183613ac1565b9150614a5a826149f3565b604082019050919050565b60006020820190508181036000830152614a7e81614a42565b9050919050565b6000608082019050614a9a60008301876146e1565b8181036020830152614aac818661493b565b9050614abb6040830185613f25565b614ac86060830184613a8c565b9594505050505056fea26469706673582212208665c4f42ebff3555476cb6dcecf0a1d4b92c68828cb9f2ec67e5f7e95da160d64736f6c634300080d0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007af0964f4ae3213630464b318d4eb4459140f6b4

-----Decoded View---------------
Arg [0] : _owner (address): 0x7aF0964f4aE3213630464b318d4eb4459140f6b4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007af0964f4ae3213630464b318d4eb4459140f6b4


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.