Contract 0xea88e8f7df4dabf87a4c9abe23b386459bd01bc9 10

 

Contract Overview

SafeSurge: SAFESURGE Token
Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa0db8e970818189df3d437322ed1bb65e018af888fb75903dc0e1113ca80db0fWithdraw Tax Bal...1826502292024-02-20 11:17:354 days 5 hrs agoSafeSurge: Deployer IN  SafeSurge: SAFESURGE Token0 ETH0.00004067 0.1
0x60449940c4ea5920bbf0225b70a1256b01bd3d3b0b8e8ac1fb2e78c7a1c3ef4cApprove Max1826461182024-02-20 11:00:154 days 6 hrs ago0x45b9ee4f4eaa7df7afadcecef77d3c80fe75154d IN  SafeSurge: SAFESURGE Token0 ETH0.000059930.1
0x731e56255c27c402e7ecdaf94559c984102e15f18b81c25c17999b415173a55aTransfer1826441902024-02-20 10:52:014 days 6 hrs agoSafeSurge: Deployer IN  SafeSurge: SAFESURGE Token0 ETH0.00007322 0.1
0x92af170acf07d6dca41edb1e16d16b935e0fa182188589b40d800cc61ff8c2d8_sell1139166412023-07-22 21:11:57216 days 19 hrs ago0xe380395da6ccbb14a8998af583b6f4aa7e594a8f IN  SafeSurge: SAFESURGE Token0 ETH0.00006581 0.1
0x1448c1ff89254e021f82e20263037c02c2252983de4d5f3342dd2762cf5f9f60Approve Max1138984172023-07-22 19:51:42216 days 21 hrs ago0xa393069ab06fca37c60948252377baf9d2d2202c IN  SafeSurge: SAFESURGE Token0 ETH0.00003005 0.1
0x7315dfe6b3c4d50c3da2239d0c54875214b9f2c992fd98db5fa89c3573127b9b_sell963108562023-05-31 10:19:58269 days 6 hrs ago0x099d316fade8ce0213932c85917063288380deec IN  SafeSurge: SAFESURGE Token0 ETH0.00009576 0.1
0x738a19eca80e003815272cf3eabd8e46ba4ac2e1ae77f9aaf29fbc6b66e25cea_sell963107872023-05-31 10:19:41269 days 6 hrs ago0x099d316fade8ce0213932c85917063288380deec IN  SafeSurge: SAFESURGE Token0 ETH0.00009576 0.1
0x8fce8651a585d58298adb0743cf52b7981cf278fc43246faa0f5f301296998d1_sell961311862023-05-30 21:43:29269 days 19 hrs ago0xa5491936ea5c52d6ce20094815260b2d93ebdad6 IN  SafeSurge: SAFESURGE Token0 ETH0.000102380.1
0x50f8864a8ae5095bf9e14dd4345665401b7441fa1b52b6872b0b000024254aba_sell961263612023-05-30 21:23:13269 days 19 hrs ago0x4e1b604061a0773da90d8be7cfce19fefef82ba3 IN  SafeSurge: SAFESURGE Token0 ETH0.000107940.1
0xb7b05fa818a74f42d66a048f51cfeb4e457e7a50de330358ab4e2f9620830d65_sell919566892023-05-18 13:21:32282 days 3 hrs ago0x084df3d66a46ad38bc7e55eaf226a89f16a42412 IN  SafeSurge: SAFESURGE Token0 ETH0.00013169 0.1
0x07339516bdbe7d5350483e0d2362ec82e8ddd88511add0a08708af468186d800_sell919556372023-05-18 13:17:06282 days 3 hrs ago0xd0401bd90d40663d1f502e66cf23830c838804a9 IN  SafeSurge: SAFESURGE Token0 ETH0.00013169 0.1
0xc76dd2407c28aca8c005faeae6afee545c9016aca87ad8f1c98480a19b83b24eApprove Max885494052023-05-08 10:51:06292 days 6 hrs ago0xe403d5cf50b55a041d806c18a5c64a4900d1f0a8 IN  SafeSurge: SAFESURGE Token0 ETH0.00013217 0.1
0x7e382e183060443ce0dd32bd3539829d43a826b8ceb0deb57a90a3e1560d7507_sell883465562023-05-07 20:16:22292 days 20 hrs ago0x7b0d4f6588a57e826079f5070e9e966fd1ca41d4 IN  SafeSurge: SAFESURGE Token0 ETH0.00028318 0.1
0xdb791523cda5cb7bd3701c6612222600cc28614ff899cfe902062c7f3c4541b8_sell877206502023-05-06 0:29:20294 days 16 hrs ago0xdc38be7d021459c5590eb308943f701cc5251db4 IN  SafeSurge: SAFESURGE Token0 ETH0.000252720.1
0x617912b34f9fc977f541b5b94219fe6b8bc125431fa1eab387326be9f0702510Approve Max876925022023-05-05 22:30:37294 days 18 hrs ago0x457b14935e77ede474b7dc245fe3db0e56b4005f IN  SafeSurge: SAFESURGE Token0 ETH0.00022375 0.1
0xb016d604263d6a91a2def2abece9322877aa462a6847120b0229fe6540620fd1_sell847966302023-04-27 10:11:00303 days 6 hrs ago0xd4d51ddcabb77159143cbc836c9bbc38374ed4ca IN  SafeSurge: SAFESURGE Token0 ETH0.00011205 0.1
0xf37cecd2d515c7534d8d99a9399d72a1a46757fd908760ab0d99a1e56c43a3b7_sell836244542023-04-23 23:53:49306 days 17 hrs ago0x0bb85abcd43554628787366d15fd9a885c730ce4 IN  SafeSurge: SAFESURGE Token0 ETH0.00011815 0.1
0xf6ddd01b32ce754c8ccdbc4a062cc264a56fa560131a5298c7de8abddec96f4d_sell833919522023-04-23 7:31:31307 days 9 hrs ago0xb4198faba1ddbc0bfb79ab3d59b516fc2af9eb42 IN  SafeSurge: SAFESURGE Token0 ETH0.00010137 0.1
0xaa8a7a0b99c8aa005137d980d6fe53a88fecdc0820b17f7550b10476ca862230_sell829740632023-04-22 2:31:17308 days 14 hrs ago0x770e76b4c201974390abf23ca3b91a9bd71fa556 IN  SafeSurge: SAFESURGE Token0 ETH0.00009711 0.1
0x3c43e90c97db42feaf0669ab34951a70ba00efc9900d40f605318aea05e3be41_sell829550552023-04-22 1:09:12308 days 15 hrs ago0xdc38be7d021459c5590eb308943f701cc5251db4 IN  SafeSurge: SAFESURGE Token0 ETH0.000095870.1
0x438d1d519e02d537d7cafa86401852cb1ad20bf4ba6fba89231b0a5cb74bc7b5Approve Max829336052023-04-21 23:34:30308 days 17 hrs ago0xe8dff9fcc5d1d5d066c0ad80905fabe1587ee7ec IN  SafeSurge: SAFESURGE Token0 ETH0.00005738 0.1
0x37cc48ef06a413841d74d266da17c1be8d3ca5a8977246fcbabfb1c9fe2344d9_buy827803732023-04-21 12:43:50309 days 4 hrs ago0xa393069ab06fca37c60948252377baf9d2d2202c IN  SafeSurge: SAFESURGE Token0 ETH0.00010852 0.1
0xeb3e313fbfaf340451ed467eb0ad90cfed3b5ac6c57cf79812ea87d6a98caa85Transfer824842152023-04-20 16:04:36310 days 59 mins ago0xdea75f0dc629f84ad6d9583d8f1bdcea9f26e79f IN  SafeSurge: SAFESURGE Token0 ETH0.000228391.67612
0x0987b9063b4b2ec84b56d2388b75469d85a11c3cfbea5ae8fb96a7eed87112da_buy818486712023-04-18 19:45:09311 days 21 hrs ago0x0bb85abcd43554628787366d15fd9a885c730ce4 IN  SafeSurge: SAFESURGE Token0 ETH0.00016889 0.1
0x7c9fea98d61dbc5ca0789dfaaf40609ea26f3a1915dfa8d25782264569723c53_buy818480262023-04-18 19:42:23311 days 21 hrs ago0xdc38be7d021459c5590eb308943f701cc5251db4 IN  SafeSurge: SAFESURGE Token0 ETH0.000166970.1
[ Download CSV Export 

OVERVIEW

Safesurge is the first SRG20 project launched on the Surge Protocol. Tokens are stored whithinm our cotract not in a deployer wallet, so 100% safe for investors. Building a safe and new era in crypto on the surge protocol.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SAFESURGE

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-04-05
*/

//SPDX-License-Identifier: MIT

//safesurge

pragma solidity 0.8.17;

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

    function decimals() external view returns (uint8);
}

interface ISRG {
    function calculatePrice() external view returns (uint256);

    function getBNBPrice() external view returns (uint256);
}

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

contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

contract SAFESURGE is IERC20, Context, Ownable, ReentrancyGuard {
    event Bought(
        address indexed from,
        address indexed to,
        uint256 tokens,
        uint256 beans,
        uint256 dollarBuy
    );
    event Sold(
        address indexed from,
        address indexed to,
        uint256 tokens,
        uint256 beans,
        uint256 dollarSell
    );
    event FeesMulChanged(uint256 newBuyMul, uint256 newSellMul);
    event StablePairChanged(address newStablePair, address newStableToken);
    event MaxBagChanged(uint256 newMaxBag);

    // token data
    string private constant _name = "SAFESURGE";
    string private constant _symbol = "SAFESURGE";
    uint8 private constant _decimals = 9;
    uint256 private constant _DECMULTIPLIER = 10**_decimals;

    //SRG pair data
    address private constant SRG = 0x31aD8255CB8E428E8B0f6Ab6a6f44804642720aF; //change this according to chain
    ISRG private constant SRGI = ISRG(SRG); //interface to interact with SRG
    IERC20 private constant SRGIE = IERC20(SRG); //interace to interact with SRG

    uint256 private _srgDecimals = SRGIE.decimals();

    // Total Supply
    uint256 public constant _totalSupply = 10**8 * _DECMULTIPLIER;

    // balances
    mapping(address => uint256) public _balances;
    mapping(address => mapping(address => uint256)) internal _allowances;

    //Fees
    mapping(address => bool) public isFeeExempt;
    uint256 public sellMul = 96;
    uint256 public buyMul = 96;
    uint256 public constant DIVISOR = 100;

    //Max bag requirements
    mapping(address => bool) public isTxLimitExempt;
    uint256 public maxBag = _totalSupply / 50;

    //Tax collection
    uint256 public taxBalance = 0;

    //Tax wallets
    address public teamWallet = 0x1E43881d582B5f9a7FDDc38Ed842FC653e3b054c;
    address public treasuryWallet = 0x45b9EE4F4eaa7df7afaDcECEf77D3C80fe75154D;

    // Tax Split
    uint256 public teamShare = 50;
    uint256 public treasuryShare = 50;
    uint256 public constant SHAREDIVISOR = 100;

    //Known Wallets
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    //trading parameters
    uint256 public liquidity = 15**5 * 10**_srgDecimals;
    uint256 public liqConst = liquidity * _totalSupply;
    uint256 public constant TRADE_OPEN_TIME = 1673866156;

    //volume trackers
    mapping(address => uint256) public indVol;
    mapping(uint256 => uint256) public tVol;
    uint256 public totalVolume = 0;

    //candlestick data
    uint256 public constant PADDING = 10**18;
    uint256 public totalTx;
    mapping(uint256 => uint256) public txTimeStamp;

    struct candleStick {
        uint256 time;
        uint256 open;
        uint256 close;
        uint256 high;
        uint256 low;
    }

    mapping(uint256 => candleStick) public candleStickData;

    //Frontrun Guard
    mapping(address => uint256) private _lastBuyBlock;

    // initialize supply
    constructor() {
        _balances[address(this)] = _totalSupply;

        isFeeExempt[msg.sender] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[address(0)] = true;
        //burn to be added here if needed

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

    function totalSupply() external pure override returns (uint256) {
        return _totalSupply;
    }

    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 name() public pure returns (string memory) {
        return _name;
    }

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

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        require(spender != address(0), "SRG20: approve to the zero address");
        require(
            msg.sender != address(0),
            "SRG20: approve from the zero address"
        );

        _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 getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - _balances[DEAD];
    }

    function changeWalletLimit(uint256 newLimit) external onlyOwner {
        require(
            newLimit >= _totalSupply / 100,
            "New wallet limit should be at least 1% of total supply"
        );
        maxBag = newLimit;
        emit MaxBagChanged(newLimit);
    }

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

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

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

    /** TransferFrom Function */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        address spender = msg.sender;
        //check allowance requirement
        _spendAllowance(sender, spender, amount);
        return _transferFrom(sender, recipient, amount);
    }

    /** Internal Transfer */
    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        // make standard checks
        require(
            recipient != address(0) && recipient != address(this),
            "transfer to the zero address or CA"
        );
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            isTxLimitExempt[recipient] ||
                _balances[recipient] + amount <= maxBag,
            "Max wallet exceeded!"
        );

        // subtract from sender
        _balances[sender] = _balances[sender] - amount;

        // give amount to receiver
        _balances[recipient] = _balances[recipient] + amount;

        // Transfer Event
        emit Transfer(sender, recipient, amount);
        return true;
    }

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

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

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = _allowances[owner][spender];
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "SRG20: insufficient allowance"
            );

            unchecked {
                // decrease allowance
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /** Purchases SURGE Tokens and Deposits Them in Sender's Address*/
    function _buy(
        uint256 buyAmount,
        uint256 minTokenOut,
        uint256 deadline
    ) public nonReentrant returns (bool) {
        // deadline requirement
        require(deadline >= block.timestamp, "Deadline EXPIRED");

        // Frontrun Guard
        _lastBuyBlock[msg.sender] = block.number;

        // liquidity is set
        require(liquidity > 0, "The token has no liquidity");

        // check if trading is open
        require(
            block.timestamp >= TRADE_OPEN_TIME,
            "Trading is not Open"
        );

        //remove the buy tax
        uint256 srgAmount = isFeeExempt[msg.sender]
            ? buyAmount
            : (buyAmount * buyMul) / DIVISOR;

        // how much they should purchase?
        uint256 tokensToSend = _balances[address(this)] -
            (liqConst / (srgAmount + liquidity));

        //revert for max bag
        require(
            _balances[msg.sender] + tokensToSend <= maxBag ||
                isTxLimitExempt[msg.sender],
            "Max wallet exceeded"
        );

        // revert if under 1
        require(tokensToSend > 1, "SRG20: Must Buy more than 1 decimal");

        // revert for slippage
        require(tokensToSend >= minTokenOut, "INSUFFICIENT OUTPUT AMOUNT");
        
        // transfer the SRG from the msg.sender to the CA
        bool s = SRGIE.transferFrom(msg.sender, address(this), buyAmount);

        require(s, "transfer of SRG failed!");

        // transfer the tokens from CA to the buyer
        buy(msg.sender, tokensToSend);

        //update available tax to extract and Liquidity
        uint256 taxAmount = buyAmount - srgAmount;
        taxBalance = taxBalance + taxAmount;
        liquidity = liquidity + srgAmount;

        //update volume
        uint256 cTime = block.timestamp;
        uint256 dollarBuy = buyAmount * getSRGPrice();
        totalVolume += dollarBuy;
        indVol[msg.sender] += dollarBuy;
        tVol[cTime] += dollarBuy;

        //update candleStickData
        totalTx += 1;
        txTimeStamp[totalTx] = cTime;
        uint256 cPrice = calculatePrice() * getSRGPrice();
        candleStickData[cTime].time = cTime;
        if (candleStickData[cTime].open == 0) {
            if (totalTx == 1) {
                candleStickData[cTime].open =
                    ((liquidity - srgAmount) / (_totalSupply)) *
                    getSRGPrice();
            } else {
                candleStickData[cTime].open = candleStickData[
                    txTimeStamp[totalTx - 1]
                ].close;
            }
        }
        candleStickData[cTime].close = cPrice;

        if (
            candleStickData[cTime].high < cPrice ||
            candleStickData[cTime].high == 0
        ) {
            candleStickData[cTime].high = cPrice;
        }

        if (
            candleStickData[cTime].low > cPrice ||
            candleStickData[cTime].low == 0
        ) {
            candleStickData[cTime].low = cPrice;
        }

        //emit transfer and buy events
        emit Transfer(address(this), msg.sender, tokensToSend);
        emit Bought(
            msg.sender,
            address(this),
            tokensToSend,
            buyAmount,
            srgAmount * getSRGPrice()
        );
        return true;
    }

    /** Sends Tokens to the buyer Address */
    function buy(address receiver, uint256 amount) internal {
        _balances[receiver] = _balances[receiver] + amount;
        _balances[address(this)] = _balances[address(this)] - amount;
    }

    /** Sells SURGE Tokens And Deposits the BNB into Seller's Address */
    function _sell(
        uint256 tokenAmount,
        uint256 deadline,
        uint256 minBNBOut
    ) public nonReentrant returns (bool) {
        // deadline requirement
        require(deadline >= block.timestamp, "Deadline EXPIRED");

        //Frontrun Guard
        require(
            _lastBuyBlock[msg.sender] != block.number,
            "Buying and selling in the same block is not allowed!"
        );

        address seller = msg.sender;

        // make sure seller has this balance
        require(
            _balances[seller] >= tokenAmount,
            "cannot sell above token amount"
        );

        // get how much beans are the tokens worth
        uint256 amountSRG = liquidity -
            (liqConst / (_balances[address(this)] + tokenAmount));
        uint256 amountTax = (amountSRG * (DIVISOR - sellMul)) / DIVISOR;
        uint256 SRGtoSend = amountSRG - amountTax;

        //slippage revert
        require(amountSRG >= minBNBOut, "INSUFFICIENT OUTPUT AMOUNT");

        // send SRG to Seller

        bool successful = isFeeExempt[msg.sender]
            ? SRGIE.transfer(msg.sender, amountSRG)
            : SRGIE.transfer(msg.sender, SRGtoSend);
        require(successful, "SRG transfer failed");

        // subtract full amount from sender
        _balances[seller] = _balances[seller] - tokenAmount;

        //add tax allowance to be withdrawn and remove from liq the amount of beans taken by the seller
        taxBalance = isFeeExempt[msg.sender]
            ? taxBalance
            : taxBalance + amountTax;
        liquidity = liquidity - amountSRG;

        // add tokens back into the contract
        _balances[address(this)] = _balances[address(this)] + tokenAmount;

        //update volume
        uint256 cTime = block.timestamp;
        uint256 dollarSell = amountSRG * getSRGPrice();
        totalVolume += dollarSell;
        indVol[msg.sender] += dollarSell;
        tVol[cTime] += dollarSell;

        //update candleStickData
        totalTx += 1;
        txTimeStamp[totalTx] = cTime;
        uint256 cPrice = calculatePrice() * getSRGPrice();
        candleStickData[cTime].time = cTime;
        if (candleStickData[cTime].open == 0) {
            candleStickData[cTime].open = candleStickData[
                txTimeStamp[totalTx - 1]
            ].close;
        }
        candleStickData[cTime].close = cPrice;

        if (
            candleStickData[cTime].high < cPrice ||
            candleStickData[cTime].high == 0
        ) {
            candleStickData[cTime].high = cPrice;
        }

        if (
            candleStickData[cTime].low > cPrice ||
            candleStickData[cTime].low == 0
        ) {
            candleStickData[cTime].low = cPrice;
        }

        // emit transfer and sell events
        emit Transfer(seller, address(this), tokenAmount);
        if (isFeeExempt[msg.sender]) {
            emit Sold(
                address(this),
                msg.sender,
                tokenAmount,
                amountSRG,
                dollarSell
            );
        } else {
            emit Sold(
                address(this),
                msg.sender,
                tokenAmount,
                SRGtoSend,
                SRGtoSend * getSRGPrice()
            );
        }
        return true;
    }

    /** Amount of liquidity in Contract */
    function getLiquidity() public view returns (uint256) {
        return liquidity;
    }

    /** Returns the value of your holdings before the sell fee */
    function getValueOfHoldings(address holder) public view returns (uint256) {
        return
            ((_balances[holder] * liquidity) / _balances[address(this)]) *
            getSRGPrice();
    }

    function changeFees(uint256 newBuyMul, uint256 newSellMul)
        external
        onlyOwner
    {
        require(
            newBuyMul >= 90 &&
                newSellMul >= 90 &&
                newBuyMul <= 100 &&
                newSellMul <= 100,
            "Fees are too high"
        );

        buyMul = newBuyMul;
        sellMul = newSellMul;

        emit FeesMulChanged(newBuyMul, newSellMul);
    }

    function changeTaxDistribution(
        uint256 newteamShare,
        uint256 newtreasuryShare
    ) external onlyOwner {
        require(
            newteamShare + newtreasuryShare == SHAREDIVISOR,
            "Sum of shares must be 100"
        );

        teamShare = newteamShare;
        treasuryShare = newtreasuryShare;
    }

    function changeFeeReceivers(
        address newTeamWallet,
        address newTreasuryWallet
    ) external onlyOwner {
        require(
            newTeamWallet != address(0) && newTreasuryWallet != address(0),
            "New wallets must not be the ZERO address"
        );

        teamWallet = newTeamWallet;
        treasuryWallet = newTreasuryWallet;
    }

    function withdrawTaxBalance() external nonReentrant onlyOwner {
        bool temp1 = SRGIE.transfer(
            teamWallet,
            (taxBalance * teamShare) / SHAREDIVISOR
        );
        bool temp2 = SRGIE.transfer(
            treasuryWallet,
            (taxBalance * treasuryShare) / SHAREDIVISOR
        );
        assert(temp1 && temp2);
        taxBalance = 0;
    }

    function getTokenAmountOut(uint256 amountSRGIn)
        external
        view
        returns (uint256)
    {
        uint256 amountAfter = liqConst / (liquidity - amountSRGIn);
        uint256 amountBefore = liqConst / liquidity;
        return amountAfter - amountBefore;
    }

    function getsrgAmountOut(uint256 amountIn) public view returns (uint256) {
        uint256 srgBefore = liqConst / _balances[address(this)];
        uint256 srgAfter = liqConst / (_balances[address(this)] + amountIn);
        return srgBefore - srgAfter;
    }

    function addLiquidity(uint256 amountSRGLiq) external onlyOwner {
        uint256 tokensToAdd = (_balances[address(this)] * amountSRGLiq) /
            liquidity;
        require(_balances[msg.sender] >= tokensToAdd, "Not enough tokens!");

        bool sLiq = SRGIE.transfer(address(this), amountSRGLiq);
        require(sLiq, "SRG transfer was unsuccesful!");

        uint256 oldLiq = liquidity;
        liquidity = liquidity + amountSRGLiq;
        _balances[address(this)] += tokensToAdd;
        _balances[msg.sender] -= tokensToAdd;
        liqConst = (liqConst * liquidity) / oldLiq;

        emit Transfer(msg.sender, address(this), tokensToAdd);
    }

    function getMarketCap() external view returns (uint256) {
        return (getCirculatingSupply() * calculatePrice() * getSRGPrice());
    }

    // calculate price based on pair SRG price
    function getSRGPrice() public view returns (uint256) {
        return (SRGI.calculatePrice() * SRGI.getBNBPrice()); // return amount of token0 needed to buy token1
    }

    // Returns the Current Price of the Token in SRG
    function calculatePrice() public view returns (uint256) {
        require(liquidity > 0, "No Liquidity");
        return liquidity * PADDING / _balances[address(this)];
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"beans","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dollarBuy","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newBuyMul","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellMul","type":"uint256"}],"name":"FeesMulChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxBag","type":"uint256"}],"name":"MaxBagChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"beans","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"dollarSell","type":"uint256"}],"name":"Sold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newStablePair","type":"address"},{"indexed":false,"internalType":"address","name":"newStableToken","type":"address"}],"name":"StablePairChanged","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":"DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PADDING","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHAREDIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRADE_OPEN_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint256","name":"minTokenOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"_buy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"minBNBOut","type":"uint256"}],"name":"_sell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountSRGLiq","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","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":"buyMul","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"candleStickData","outputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"open","type":"uint256"},{"internalType":"uint256","name":"close","type":"uint256"},{"internalType":"uint256","name":"high","type":"uint256"},{"internalType":"uint256","name":"low","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newTeamWallet","type":"address"},{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyMul","type":"uint256"},{"internalType":"uint256","name":"newSellMul","type":"uint256"}],"name":"changeFees","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":"uint256","name":"newteamShare","type":"uint256"},{"internalType":"uint256","name":"newtreasuryShare","type":"uint256"}],"name":"changeTaxDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSRGPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountSRGIn","type":"uint256"}],"name":"getTokenAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"getValueOfHoldings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getsrgAmountOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"indVol","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqConst","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBag","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMul","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tVol","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"txTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawTaxBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604081905263313ce56760e01b81527331ad8255cb8e428e8b0f6ab6a6f44804642720af9063313ce56790608490602090600481865afa1580156200004a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000709190620002ca565b60ff16600255606060068190556007556032620000906009600a6200040b565b620000a0906305f5e1006200041c565b620000ac919062000436565b6009556000600a908155600b80546001600160a01b0319908116731e43881d582b5f9a7fddc38ed842fc653e3b054c17909155600c80549091167345b9ee4f4eaa7df7afadcecef77d3c80fe75154d1790556032600d819055600e55600254620001169162000459565b6200012590620b964f6200041c565b600f55620001366009600a6200040b565b62000146906305f5e1006200041c565b600f546200015591906200041c565b60105560006013553480156200016a57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055620001be6009600a6200040b565b620001ce906305f5e1006200041c565b30600081815260036020908152604080832094909455338252600581528382208054600160ff1991821681179092556008909252848320805483168217905583835293822080548216851790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548216851790558180527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909116909317909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002a36009600a6200040b565b620002b3906305f5e1006200041c565b60405190815260200160405180910390a362000467565b600060208284031215620002dd57600080fd5b815160ff81168114620002ef57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200034d578160001904821115620003315762000331620002f6565b808516156200033f57918102915b93841c939080029062000311565b509250929050565b600082620003665750600162000405565b81620003755750600062000405565b81600181146200038e57600281146200039957620003b9565b600191505062000405565b60ff841115620003ad57620003ad620002f6565b50506001821b62000405565b5060208310610133831016604e8410600b8410161715620003de575081810a62000405565b620003ea83836200030c565b8060001904821115620004015762000401620002f6565b0290505b92915050565b6000620002ef60ff84168362000355565b8082028115828204841417620004055762000405620002f6565b6000826200045457634e487b7160e01b600052601260045260246000fd5b500490565b6000620002ef838362000355565b612b0380620004776000396000f3fe608060405234801561001057600080fd5b506004361061035d5760003560e01c80637220cf39116101d3578063aa98e16311610104578063e8f620b1116100a2578063f4034e4b1161007c578063f4034e4b1461074b578063f7a62fe91461075e578063fabe62831461077e578063fea2de431461079157600080fd5b8063e8f620b114610726578063ea6ef2fe1461072f578063f2fde38b1461073857600080fd5b8063d348b409116100de578063d348b409146106cd578063d937e60d146106d5578063dd62ed3e146106e4578063e0cfcc951461071d57600080fd5b8063aa98e163146106a9578063b1b65246146106b2578063b37659a4146106ba57600080fd5b80639cbd09ac11610171578063a13cef3a1161014b578063a13cef3a1461060b578063a3a2e89e1461061e578063a8fb66b414610631578063a9059cbb1461069657600080fd5b80639cbd09ac146105d95780639d755026146105f9578063a0e571a21461060257600080fd5b80638b42507f116101ad5780638b42507f1461059d5780638da5cb5b146105c057806390825c28146105d157806395d89b411461036257600080fd5b80637220cf39146105785780637796ff37146105815780637db1342c1461058a57600080fd5b80633410fe6e116102ad578063599270441161024b5780636ebcf607116102255780636ebcf6071461051457806370a082311461053457806371073b381461055d578063715018a61461057057600080fd5b806359927044146104f85780635f81a57c1461050b57806362ff2e9a1461045457600080fd5b80634626402b116102875780634626402b1461048757806349ce234c146104b257806351c6590a146104d2578063571ac8b0146104e557600080fd5b80633410fe6e146104545780633eaaf86b1461045c5780633f4218e01461046457600080fd5b80631f02a29c1161031a57806323b872dd116102f457806323b872dd1461041f57806325b15556146104325780632b112e491461043d578063313ce5671461044557600080fd5b80631f02a29c146103e65780631f2c80f1146103f957806321ecff5b1461040c57600080fd5b806306fdde03146103625780630910a51014610396578063095ea7b3146103a857806318160ddd146103cb5780631a686502146103d35780631d6bdb5b146103dc575b600080fd5b604080518082018252600981526853414645535552474560b81b6020820152905161038d91906126c0565b60405180910390f35b600f545b60405190815260200161038d565b6103bb6103b636600461272a565b6107a4565b604051901515815260200161038d565b61039a6108ca565b61039a600f5481565b6103e46108eb565b005b61039a6103f4366004612754565b610ad6565b6103e461040736600461276f565b610b23565b6103e461041a3660046127a2565b610bf8565b6103bb61042d3660046127c4565b610cd5565b61039a6363c52bac81565b61039a610cf7565b6040516009815260200161038d565b61039a606481565b61039a610d4a565b6103bb610472366004612754565b60056020526000908152604090205460ff1681565b600c5461049a906001600160a01b031681565b6040516001600160a01b03909116815260200161038d565b61039a6104c0366004612800565b60126020526000908152604090205481565b6103e46104e0366004612800565b610d67565b6103bb6104f3366004612754565b610f82565b600b5461049a906001600160a01b031681565b61039a60135481565b61039a610522366004612754565b60036020526000908152604090205481565b61039a610542366004612754565b6001600160a01b031660009081526003602052604090205490565b61039a61056b366004612800565b610f90565b6103e4610fd6565b61039a60145481565b61039a600e5481565b6103e4610598366004612800565b61104a565b6103bb6105ab366004612754565b60086020526000908152604090205460ff1681565b6000546001600160a01b031661049a565b61039a611143565b61039a6105e7366004612754565b60116020526000908152604090205481565b61039a60065481565b61039a60075481565b61039a610619366004612800565b611171565b6103e461062c36600461282a565b6111bb565b61066e61063f366004612800565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a00161038d565b6103bb6106a436600461272a565b611210565b61039a600a5481565b61039a611224565b6103bb6106c8366004612861565b611312565b61039a6119da565b61039a670de0b6b3a764000081565b61039a6106f236600461276f565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61039a60095481565b61039a60105481565b61039a600d5481565b6103e4610746366004612754565b611a4c565b6103e46107593660046127a2565b611b36565b61039a61076c366004612800565b60156020526000908152604090205481565b6103e461078c36600461282a565b611bc4565b6103bb61079f366004612861565b611c19565b60006001600160a01b03831661080c5760405162461bcd60e51b815260206004820152602260248201527f53524732303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084015b60405180910390fd5b336108655760405162461bcd60e51b8152602060048201526024808201527f53524732303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610803565b3360008181526004602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b60006108d86009600a612987565b6108e6906305f5e100612996565b905090565b60026001540361090d5760405162461bcd60e51b8152600401610803906129ad565b60026001556000546001600160a01b0316331461093c5760405162461bcd60e51b8152600401610803906129e4565b600b54600d54600a546000927331ad8255cb8e428e8b0f6ab6a6f44804642720af9263a9059cbb926001600160a01b039092169160649161097c91612996565b6109869190612a19565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156109d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f59190612a3b565b600c54600e54600a549293506000927331ad8255cb8e428e8b0f6ab6a6f44804642720af9263a9059cbb926001600160a01b0390911691606491610a3891612996565b610a429190612a19565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab19190612a3b565b9050818015610abd5750805b610ac957610ac9612a58565b50506000600a5560018055565b6000610ae0611224565b3060009081526003602052604080822054600f546001600160a01b03871684529190922054610b0f9190612996565b610b199190612a19565b6108c49190612996565b6000546001600160a01b03163314610b4d5760405162461bcd60e51b8152600401610803906129e4565b6001600160a01b03821615801590610b6d57506001600160a01b03811615155b610bca5760405162461bcd60e51b815260206004820152602860248201527f4e65772077616c6c657473206d757374206e6f7420626520746865205a45524f604482015267206164647265737360c01b6064820152608401610803565b600b80546001600160a01b039384166001600160a01b031991821617909155600c8054929093169116179055565b6000546001600160a01b03163314610c225760405162461bcd60e51b8152600401610803906129e4565b605a8210158015610c345750605a8110155b8015610c41575060648211155b8015610c4e575060648111155b610c8e5760405162461bcd60e51b815260206004820152601160248201527008ccacae640c2e4ca40e8dede40d0d2ced607b1b6044820152606401610803565b6007829055600681905560408051838152602081018390527fc19ebd395193e8ddaaeda048fb5cb09d4e2dbebcce719174166029a409387856910160405180910390a15050565b600033610ce3858285612292565b610cee858585612324565b95945050505050565b61dead600090815260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c54610d326009600a612987565b610d40906305f5e100612996565b6108e69190612a6e565b610d566009600a612987565b610d64906305f5e100612996565b81565b6000546001600160a01b03163314610d915760405162461bcd60e51b8152600401610803906129e4565b600f5430600090815260036020526040812054909190610db2908490612996565b610dbc9190612a19565b33600090815260036020526040902054909150811115610e135760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f75676820746f6b656e732160701b6044820152606401610803565b60405163a9059cbb60e01b8152306004820152602481018390526000907331ad8255cb8e428e8b0f6ab6a6f44804642720af9063a9059cbb906044016020604051808303816000875af1158015610e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e929190612a3b565b905080610ee15760405162461bcd60e51b815260206004820152601d60248201527f535247207472616e736665722077617320756e73756363657366756c210000006044820152606401610803565b600f54610eee8482612a81565b600f553060009081526003602052604081208054859290610f10908490612a81565b90915550503360009081526003602052604081208054859290610f34908490612a6e565b9091555050600f546010548291610f4a91612996565b610f549190612a19565b60105560405183815230903390600080516020612aae8339815191529060200160405180910390a350505050565b60006108c4826000196107a4565b60008082600f54610fa19190612a6e565b601054610fae9190612a19565b90506000600f54601054610fc29190612a19565b9050610fce8183612a6e565b949350505050565b6000546001600160a01b031633146110005760405162461bcd60e51b8152600401610803906129e4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110745760405162461bcd60e51b8152600401610803906129e4565b60646110826009600a612987565b611090906305f5e100612996565b61109a9190612a19565b8110156111085760405162461bcd60e51b815260206004820152603660248201527f4e65772077616c6c6574206c696d69742073686f756c64206265206174206c65604482015275617374203125206f6620746f74616c20737570706c7960501b6064820152608401610803565b60098190556040518181527fb579b5ff4decd3791f679ec8d72f16128df08aa3f346b425480a0135d2e8bf759060200160405180910390a150565b600061114d611224565b6111556119da565b61115d610cf7565b6111679190612996565b6108e69190612996565b30600090815260036020526040812054601054829161118f91612a19565b30600090815260036020526040812054919250906111ae908590612a81565b601054610fc29190612a19565b6000546001600160a01b031633146111e55760405162461bcd60e51b8152600401610803906129e4565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b600061121d338484612324565b9392505050565b60007331ad8255cb8e428e8b0f6ab6a6f44804642720af6001600160a01b031663f2220c9e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c9190612a94565b7331ad8255cb8e428e8b0f6ab6a6f44804642720af6001600160a01b031663d348b4096040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190612a94565b60006002600154036113365760405162461bcd60e51b8152600401610803906129ad565b60026001554283101561137e5760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b99481156141254915160821b6044820152606401610803565b336000908152601760205260409020544390036113fa5760405162461bcd60e51b815260206004820152603460248201527f427579696e6720616e642073656c6c696e6720696e207468652073616d6520626044820152736c6f636b206973206e6f7420616c6c6f7765642160601b6064820152608401610803565b336000818152600360205260409020548511156114595760405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f742073656c6c2061626f766520746f6b656e20616d6f756e7400006044820152606401610803565b30600090815260036020526040812054611474908790612a81565b6010546114819190612a19565b600f5461148e9190612a6e565b90506000606460065460646114a39190612a6e565b6114ad9084612996565b6114b79190612a19565b905060006114c58284612a6e565b9050858310156115175760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e54204f555450555420414d4f554e540000000000006044820152606401610803565b3360009081526005602052604081205460ff166115af5760405163a9059cbb60e01b8152336004820152602481018390527331ad8255cb8e428e8b0f6ab6a6f44804642720af9063a9059cbb906044016020604051808303816000875af1158015611586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115aa9190612a3b565b61162b565b60405163a9059cbb60e01b8152336004820152602481018590527331ad8255cb8e428e8b0f6ab6a6f44804642720af9063a9059cbb906044016020604051808303816000875af1158015611607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162b9190612a3b565b9050806116705760405162461bcd60e51b815260206004820152601360248201527214d491c81d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610803565b6001600160a01b038516600090815260036020526040902054611694908a90612a6e565b6001600160a01b03861660009081526003602090815260408083209390935533825260059052205460ff166116d65782600a546116d19190612a81565b6116da565b600a545b600a55600f546116eb908590612a6e565b600f5530600090815260036020526040902054611709908a90612a81565b306000908152600360205260408120919091554290611726611224565b6117309087612996565b905080601360008282546117449190612a81565b90915550503360009081526011602052604081208054839290611768908490612a81565b90915550506000828152601260205260408120805483929061178b908490612a81565b925050819055506001601460008282546117a59190612a81565b909155505060145460009081526015602052604081208390556117c6611224565b6117ce6119da565b6117d89190612996565b60008481526016602052604081208581556001015491925003611848576016600060156000600160145461180c9190612a6e565b81526020019081526020016000205481526020019081526020016000206002015460166000858152602001908152602001600020600101819055505b6000838152601660205260409020600281018290556003015481118061187d5750600083815260166020526040902060030154155b156118975760008381526016602052604090206003018190555b6000838152601660205260409020600401548110806118c55750600083815260166020526040902060040154155b156118df5760008381526016602052604090206004018190555b6040518c815230906001600160a01b038a1690600080516020612aae8339815191529060200160405180910390a33360009081526005602052604090205460ff161561196f57604080518d815260208101899052908101839052339030907f9be8a5ca22b7e6e81f04b5879f0248227bb770114291bd47dfaee4c3a82ad60e9060600160405180910390a36119c5565b33307f9be8a5ca22b7e6e81f04b5879f0248227bb770114291bd47dfaee4c3a82ad60e8e8861199c611224565b6119a6908b612996565b6040805193845260208401929092529082015260600160405180910390a35b505060018080559a9950505050505050505050565b600080600f5411611a1c5760405162461bcd60e51b815260206004820152600c60248201526b4e6f204c697175696469747960a01b6044820152606401610803565b30600090815260036020526040902054600f54611a4290670de0b6b3a764000090612996565b6108e69190612a19565b6000546001600160a01b03163314611a765760405162461bcd60e51b8152600401610803906129e4565b6001600160a01b038116611adb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610803565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b605760405162461bcd60e51b8152600401610803906129e4565b6064611b6c8284612a81565b14611bb95760405162461bcd60e51b815260206004820152601960248201527f53756d206f6620736861726573206d75737420626520313030000000000000006044820152606401610803565b600d91909155600e55565b6000546001600160a01b03163314611bee5760405162461bcd60e51b8152600401610803906129e4565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000600260015403611c3d5760405162461bcd60e51b8152600401610803906129ad565b600260015542821015611c855760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b99481156141254915160821b6044820152606401610803565b336000908152601760205260409020439055600f54611ce65760405162461bcd60e51b815260206004820152601a60248201527f54686520746f6b656e20686173206e6f206c69717569646974790000000000006044820152606401610803565b6363c52bac421015611d305760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1027b832b760691b6044820152606401610803565b3360009081526005602052604081205460ff16611d6657606460075486611d579190612996565b611d619190612a19565b611d68565b845b90506000600f5482611d7a9190612a81565b601054611d879190612a19565b30600090815260036020526040902054611da19190612a6e565b6009543360009081526003602052604090205491925090611dc3908390612a81565b111580611ddf57503360009081526008602052604090205460ff165b611e215760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610803565b60018111611e7d5760405162461bcd60e51b815260206004820152602360248201527f53524732303a204d75737420427579206d6f7265207468616e203120646563696044820152621b585b60ea1b6064820152608401610803565b84811015611ecd5760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e54204f555450555420414d4f554e540000000000006044820152606401610803565b6040516323b872dd60e01b8152336004820152306024820152604481018790526000907331ad8255cb8e428e8b0f6ab6a6f44804642720af906323b872dd906064016020604051808303816000875af1158015611f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f529190612a3b565b905080611fa15760405162461bcd60e51b815260206004820152601760248201527f7472616e73666572206f6620535247206661696c6564210000000000000000006044820152606401610803565b611fab3383612537565b6000611fb78489612a6e565b905080600a54611fc79190612a81565b600a55600f54611fd8908590612a81565b600f55426000611fe6611224565b611ff0908b612996565b905080601360008282546120049190612a81565b90915550503360009081526011602052604081208054839290612028908490612a81565b90915550506000828152601260205260408120805483929061204b908490612a81565b925050819055506001601460008282546120659190612a81565b90915550506014546000908152601560205260408120839055612086611224565b61208e6119da565b6120989190612996565b6000848152601660205260408120858155600101549192500361216d5760145460010361211a576120c7611224565b6120d36009600a612987565b6120e1906305f5e100612996565b88600f546120ef9190612a6e565b6120f99190612a19565b6121039190612996565b60008481526016602052604090206001015561216d565b601660006015600060016014546121319190612a6e565b81526020019081526020016000205481526020019081526020016000206002015460166000858152602001908152602001600020600101819055505b600083815260166020526040902060028101829055600301548111806121a25750600083815260166020526040902060030154155b156121bc5760008381526016602052604090206003018190555b6000838152601660205260409020600401548110806121ea5750600083815260166020526040902060040154155b156122045760008381526016602052604090206004018190555b60405186815233903090600080516020612aae8339815191529060200160405180910390a330337f7ce543d1780f3bdc3dac42da06c95da802653cd1b212b8d74ec3e3c33ad7095c888e612256611224565b612260908d612996565b6040805193845260208401929092529082015260600160405180910390a3505060018080559998505050505050505050565b6001600160a01b03808416600090815260046020908152604080832093861683529290522054600019811461231e57818110156123115760405162461bcd60e51b815260206004820152601d60248201527f53524732303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610803565b61231e848484840361259c565b50505050565b60006001600160a01b0383161580159061234757506001600160a01b0383163014155b61239e5760405162461bcd60e51b815260206004820152602260248201527f7472616e7366657220746f20746865207a65726f2061646472657373206f7220604482015261434160f01b6064820152608401610803565b600082116124005760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610803565b6001600160a01b03831660009081526008602052604090205460ff168061244c57506009546001600160a01b038416600090815260036020526040902054612449908490612a81565b11155b61248f5760405162461bcd60e51b81526020600482015260146024820152734d61782077616c6c65742065786365656465642160601b6044820152606401610803565b6001600160a01b0384166000908152600360205260409020546124b3908390612a6e565b6001600160a01b0380861660009081526003602052604080822093909355908516815220546124e3908390612a81565b6001600160a01b038085166000818152600360205260409081902093909355915190861690600080516020612aae833981519152906125259086815260200190565b60405180910390a35060019392505050565b6001600160a01b03821660009081526003602052604090205461255b908290612a81565b6001600160a01b038316600090815260036020526040808220929092553081522054612588908290612a6e565b306000908152600360205260409020555050565b6001600160a01b0383166125fe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610803565b6001600160a01b03821661265f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610803565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600060208083528351808285015260005b818110156126ed578581018301518582016040015282016126d1565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461272557600080fd5b919050565b6000806040838503121561273d57600080fd5b6127468361270e565b946020939093013593505050565b60006020828403121561276657600080fd5b61121d8261270e565b6000806040838503121561278257600080fd5b61278b8361270e565b91506127996020840161270e565b90509250929050565b600080604083850312156127b557600080fd5b50508035926020909101359150565b6000806000606084860312156127d957600080fd5b6127e28461270e565b92506127f06020850161270e565b9150604084013590509250925092565b60006020828403121561281257600080fd5b5035919050565b801515811461282757600080fd5b50565b6000806040838503121561283d57600080fd5b6128468361270e565b9150602083013561285681612819565b809150509250929050565b60008060006060848603121561287657600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156128de5781600019048211156128c4576128c461288d565b808516156128d157918102915b93841c93908002906128a8565b509250929050565b6000826128f5575060016108c4565b81612902575060006108c4565b816001811461291857600281146129225761293e565b60019150506108c4565b60ff8411156129335761293361288d565b50506001821b6108c4565b5060208310610133831016604e8410600b8410161715612961575081810a6108c4565b61296b83836128a3565b806000190482111561297f5761297f61288d565b029392505050565b600061121d60ff8416836128e6565b80820281158282048414176108c4576108c461288d565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082612a3657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a4d57600080fd5b815161121d81612819565b634e487b7160e01b600052600160045260246000fd5b818103818111156108c4576108c461288d565b808201808211156108c4576108c461288d565b600060208284031215612aa657600080fd5b505191905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a3ce749c6ae7dc414b5c63c3948687ceee6095236ccc9b6aee813f249d0ee1c464736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061035d5760003560e01c80637220cf39116101d3578063aa98e16311610104578063e8f620b1116100a2578063f4034e4b1161007c578063f4034e4b1461074b578063f7a62fe91461075e578063fabe62831461077e578063fea2de431461079157600080fd5b8063e8f620b114610726578063ea6ef2fe1461072f578063f2fde38b1461073857600080fd5b8063d348b409116100de578063d348b409146106cd578063d937e60d146106d5578063dd62ed3e146106e4578063e0cfcc951461071d57600080fd5b8063aa98e163146106a9578063b1b65246146106b2578063b37659a4146106ba57600080fd5b80639cbd09ac11610171578063a13cef3a1161014b578063a13cef3a1461060b578063a3a2e89e1461061e578063a8fb66b414610631578063a9059cbb1461069657600080fd5b80639cbd09ac146105d95780639d755026146105f9578063a0e571a21461060257600080fd5b80638b42507f116101ad5780638b42507f1461059d5780638da5cb5b146105c057806390825c28146105d157806395d89b411461036257600080fd5b80637220cf39146105785780637796ff37146105815780637db1342c1461058a57600080fd5b80633410fe6e116102ad578063599270441161024b5780636ebcf607116102255780636ebcf6071461051457806370a082311461053457806371073b381461055d578063715018a61461057057600080fd5b806359927044146104f85780635f81a57c1461050b57806362ff2e9a1461045457600080fd5b80634626402b116102875780634626402b1461048757806349ce234c146104b257806351c6590a146104d2578063571ac8b0146104e557600080fd5b80633410fe6e146104545780633eaaf86b1461045c5780633f4218e01461046457600080fd5b80631f02a29c1161031a57806323b872dd116102f457806323b872dd1461041f57806325b15556146104325780632b112e491461043d578063313ce5671461044557600080fd5b80631f02a29c146103e65780631f2c80f1146103f957806321ecff5b1461040c57600080fd5b806306fdde03146103625780630910a51014610396578063095ea7b3146103a857806318160ddd146103cb5780631a686502146103d35780631d6bdb5b146103dc575b600080fd5b604080518082018252600981526853414645535552474560b81b6020820152905161038d91906126c0565b60405180910390f35b600f545b60405190815260200161038d565b6103bb6103b636600461272a565b6107a4565b604051901515815260200161038d565b61039a6108ca565b61039a600f5481565b6103e46108eb565b005b61039a6103f4366004612754565b610ad6565b6103e461040736600461276f565b610b23565b6103e461041a3660046127a2565b610bf8565b6103bb61042d3660046127c4565b610cd5565b61039a6363c52bac81565b61039a610cf7565b6040516009815260200161038d565b61039a606481565b61039a610d4a565b6103bb610472366004612754565b60056020526000908152604090205460ff1681565b600c5461049a906001600160a01b031681565b6040516001600160a01b03909116815260200161038d565b61039a6104c0366004612800565b60126020526000908152604090205481565b6103e46104e0366004612800565b610d67565b6103bb6104f3366004612754565b610f82565b600b5461049a906001600160a01b031681565b61039a60135481565b61039a610522366004612754565b60036020526000908152604090205481565b61039a610542366004612754565b6001600160a01b031660009081526003602052604090205490565b61039a61056b366004612800565b610f90565b6103e4610fd6565b61039a60145481565b61039a600e5481565b6103e4610598366004612800565b61104a565b6103bb6105ab366004612754565b60086020526000908152604090205460ff1681565b6000546001600160a01b031661049a565b61039a611143565b61039a6105e7366004612754565b60116020526000908152604090205481565b61039a60065481565b61039a60075481565b61039a610619366004612800565b611171565b6103e461062c36600461282a565b6111bb565b61066e61063f366004612800565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a00161038d565b6103bb6106a436600461272a565b611210565b61039a600a5481565b61039a611224565b6103bb6106c8366004612861565b611312565b61039a6119da565b61039a670de0b6b3a764000081565b61039a6106f236600461276f565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61039a60095481565b61039a60105481565b61039a600d5481565b6103e4610746366004612754565b611a4c565b6103e46107593660046127a2565b611b36565b61039a61076c366004612800565b60156020526000908152604090205481565b6103e461078c36600461282a565b611bc4565b6103bb61079f366004612861565b611c19565b60006001600160a01b03831661080c5760405162461bcd60e51b815260206004820152602260248201527f53524732303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084015b60405180910390fd5b336108655760405162461bcd60e51b8152602060048201526024808201527f53524732303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610803565b3360008181526004602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b60006108d86009600a612987565b6108e6906305f5e100612996565b905090565b60026001540361090d5760405162461bcd60e51b8152600401610803906129ad565b60026001556000546001600160a01b0316331461093c5760405162461bcd60e51b8152600401610803906129e4565b600b54600d54600a546000927331ad8255cb8e428e8b0f6ab6a6f44804642720af9263a9059cbb926001600160a01b039092169160649161097c91612996565b6109869190612a19565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156109d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f59190612a3b565b600c54600e54600a549293506000927331ad8255cb8e428e8b0f6ab6a6f44804642720af9263a9059cbb926001600160a01b0390911691606491610a3891612996565b610a429190612a19565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab19190612a3b565b9050818015610abd5750805b610ac957610ac9612a58565b50506000600a5560018055565b6000610ae0611224565b3060009081526003602052604080822054600f546001600160a01b03871684529190922054610b0f9190612996565b610b199190612a19565b6108c49190612996565b6000546001600160a01b03163314610b4d5760405162461bcd60e51b8152600401610803906129e4565b6001600160a01b03821615801590610b6d57506001600160a01b03811615155b610bca5760405162461bcd60e51b815260206004820152602860248201527f4e65772077616c6c657473206d757374206e6f7420626520746865205a45524f604482015267206164647265737360c01b6064820152608401610803565b600b80546001600160a01b039384166001600160a01b031991821617909155600c8054929093169116179055565b6000546001600160a01b03163314610c225760405162461bcd60e51b8152600401610803906129e4565b605a8210158015610c345750605a8110155b8015610c41575060648211155b8015610c4e575060648111155b610c8e5760405162461bcd60e51b815260206004820152601160248201527008ccacae640c2e4ca40e8dede40d0d2ced607b1b6044820152606401610803565b6007829055600681905560408051838152602081018390527fc19ebd395193e8ddaaeda048fb5cb09d4e2dbebcce719174166029a409387856910160405180910390a15050565b600033610ce3858285612292565b610cee858585612324565b95945050505050565b61dead600090815260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c54610d326009600a612987565b610d40906305f5e100612996565b6108e69190612a6e565b610d566009600a612987565b610d64906305f5e100612996565b81565b6000546001600160a01b03163314610d915760405162461bcd60e51b8152600401610803906129e4565b600f5430600090815260036020526040812054909190610db2908490612996565b610dbc9190612a19565b33600090815260036020526040902054909150811115610e135760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f75676820746f6b656e732160701b6044820152606401610803565b60405163a9059cbb60e01b8152306004820152602481018390526000907331ad8255cb8e428e8b0f6ab6a6f44804642720af9063a9059cbb906044016020604051808303816000875af1158015610e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e929190612a3b565b905080610ee15760405162461bcd60e51b815260206004820152601d60248201527f535247207472616e736665722077617320756e73756363657366756c210000006044820152606401610803565b600f54610eee8482612a81565b600f553060009081526003602052604081208054859290610f10908490612a81565b90915550503360009081526003602052604081208054859290610f34908490612a6e565b9091555050600f546010548291610f4a91612996565b610f549190612a19565b60105560405183815230903390600080516020612aae8339815191529060200160405180910390a350505050565b60006108c4826000196107a4565b60008082600f54610fa19190612a6e565b601054610fae9190612a19565b90506000600f54601054610fc29190612a19565b9050610fce8183612a6e565b949350505050565b6000546001600160a01b031633146110005760405162461bcd60e51b8152600401610803906129e4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110745760405162461bcd60e51b8152600401610803906129e4565b60646110826009600a612987565b611090906305f5e100612996565b61109a9190612a19565b8110156111085760405162461bcd60e51b815260206004820152603660248201527f4e65772077616c6c6574206c696d69742073686f756c64206265206174206c65604482015275617374203125206f6620746f74616c20737570706c7960501b6064820152608401610803565b60098190556040518181527fb579b5ff4decd3791f679ec8d72f16128df08aa3f346b425480a0135d2e8bf759060200160405180910390a150565b600061114d611224565b6111556119da565b61115d610cf7565b6111679190612996565b6108e69190612996565b30600090815260036020526040812054601054829161118f91612a19565b30600090815260036020526040812054919250906111ae908590612a81565b601054610fc29190612a19565b6000546001600160a01b031633146111e55760405162461bcd60e51b8152600401610803906129e4565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b600061121d338484612324565b9392505050565b60007331ad8255cb8e428e8b0f6ab6a6f44804642720af6001600160a01b031663f2220c9e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129c9190612a94565b7331ad8255cb8e428e8b0f6ab6a6f44804642720af6001600160a01b031663d348b4096040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190612a94565b60006002600154036113365760405162461bcd60e51b8152600401610803906129ad565b60026001554283101561137e5760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b99481156141254915160821b6044820152606401610803565b336000908152601760205260409020544390036113fa5760405162461bcd60e51b815260206004820152603460248201527f427579696e6720616e642073656c6c696e6720696e207468652073616d6520626044820152736c6f636b206973206e6f7420616c6c6f7765642160601b6064820152608401610803565b336000818152600360205260409020548511156114595760405162461bcd60e51b815260206004820152601e60248201527f63616e6e6f742073656c6c2061626f766520746f6b656e20616d6f756e7400006044820152606401610803565b30600090815260036020526040812054611474908790612a81565b6010546114819190612a19565b600f5461148e9190612a6e565b90506000606460065460646114a39190612a6e565b6114ad9084612996565b6114b79190612a19565b905060006114c58284612a6e565b9050858310156115175760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e54204f555450555420414d4f554e540000000000006044820152606401610803565b3360009081526005602052604081205460ff166115af5760405163a9059cbb60e01b8152336004820152602481018390527331ad8255cb8e428e8b0f6ab6a6f44804642720af9063a9059cbb906044016020604051808303816000875af1158015611586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115aa9190612a3b565b61162b565b60405163a9059cbb60e01b8152336004820152602481018590527331ad8255cb8e428e8b0f6ab6a6f44804642720af9063a9059cbb906044016020604051808303816000875af1158015611607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162b9190612a3b565b9050806116705760405162461bcd60e51b815260206004820152601360248201527214d491c81d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610803565b6001600160a01b038516600090815260036020526040902054611694908a90612a6e565b6001600160a01b03861660009081526003602090815260408083209390935533825260059052205460ff166116d65782600a546116d19190612a81565b6116da565b600a545b600a55600f546116eb908590612a6e565b600f5530600090815260036020526040902054611709908a90612a81565b306000908152600360205260408120919091554290611726611224565b6117309087612996565b905080601360008282546117449190612a81565b90915550503360009081526011602052604081208054839290611768908490612a81565b90915550506000828152601260205260408120805483929061178b908490612a81565b925050819055506001601460008282546117a59190612a81565b909155505060145460009081526015602052604081208390556117c6611224565b6117ce6119da565b6117d89190612996565b60008481526016602052604081208581556001015491925003611848576016600060156000600160145461180c9190612a6e565b81526020019081526020016000205481526020019081526020016000206002015460166000858152602001908152602001600020600101819055505b6000838152601660205260409020600281018290556003015481118061187d5750600083815260166020526040902060030154155b156118975760008381526016602052604090206003018190555b6000838152601660205260409020600401548110806118c55750600083815260166020526040902060040154155b156118df5760008381526016602052604090206004018190555b6040518c815230906001600160a01b038a1690600080516020612aae8339815191529060200160405180910390a33360009081526005602052604090205460ff161561196f57604080518d815260208101899052908101839052339030907f9be8a5ca22b7e6e81f04b5879f0248227bb770114291bd47dfaee4c3a82ad60e9060600160405180910390a36119c5565b33307f9be8a5ca22b7e6e81f04b5879f0248227bb770114291bd47dfaee4c3a82ad60e8e8861199c611224565b6119a6908b612996565b6040805193845260208401929092529082015260600160405180910390a35b505060018080559a9950505050505050505050565b600080600f5411611a1c5760405162461bcd60e51b815260206004820152600c60248201526b4e6f204c697175696469747960a01b6044820152606401610803565b30600090815260036020526040902054600f54611a4290670de0b6b3a764000090612996565b6108e69190612a19565b6000546001600160a01b03163314611a765760405162461bcd60e51b8152600401610803906129e4565b6001600160a01b038116611adb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610803565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b605760405162461bcd60e51b8152600401610803906129e4565b6064611b6c8284612a81565b14611bb95760405162461bcd60e51b815260206004820152601960248201527f53756d206f6620736861726573206d75737420626520313030000000000000006044820152606401610803565b600d91909155600e55565b6000546001600160a01b03163314611bee5760405162461bcd60e51b8152600401610803906129e4565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000600260015403611c3d5760405162461bcd60e51b8152600401610803906129ad565b600260015542821015611c855760405162461bcd60e51b815260206004820152601060248201526f111958591b1a5b99481156141254915160821b6044820152606401610803565b336000908152601760205260409020439055600f54611ce65760405162461bcd60e51b815260206004820152601a60248201527f54686520746f6b656e20686173206e6f206c69717569646974790000000000006044820152606401610803565b6363c52bac421015611d305760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1027b832b760691b6044820152606401610803565b3360009081526005602052604081205460ff16611d6657606460075486611d579190612996565b611d619190612a19565b611d68565b845b90506000600f5482611d7a9190612a81565b601054611d879190612a19565b30600090815260036020526040902054611da19190612a6e565b6009543360009081526003602052604090205491925090611dc3908390612a81565b111580611ddf57503360009081526008602052604090205460ff165b611e215760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610803565b60018111611e7d5760405162461bcd60e51b815260206004820152602360248201527f53524732303a204d75737420427579206d6f7265207468616e203120646563696044820152621b585b60ea1b6064820152608401610803565b84811015611ecd5760405162461bcd60e51b815260206004820152601a60248201527f494e53554646494349454e54204f555450555420414d4f554e540000000000006044820152606401610803565b6040516323b872dd60e01b8152336004820152306024820152604481018790526000907331ad8255cb8e428e8b0f6ab6a6f44804642720af906323b872dd906064016020604051808303816000875af1158015611f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f529190612a3b565b905080611fa15760405162461bcd60e51b815260206004820152601760248201527f7472616e73666572206f6620535247206661696c6564210000000000000000006044820152606401610803565b611fab3383612537565b6000611fb78489612a6e565b905080600a54611fc79190612a81565b600a55600f54611fd8908590612a81565b600f55426000611fe6611224565b611ff0908b612996565b905080601360008282546120049190612a81565b90915550503360009081526011602052604081208054839290612028908490612a81565b90915550506000828152601260205260408120805483929061204b908490612a81565b925050819055506001601460008282546120659190612a81565b90915550506014546000908152601560205260408120839055612086611224565b61208e6119da565b6120989190612996565b6000848152601660205260408120858155600101549192500361216d5760145460010361211a576120c7611224565b6120d36009600a612987565b6120e1906305f5e100612996565b88600f546120ef9190612a6e565b6120f99190612a19565b6121039190612996565b60008481526016602052604090206001015561216d565b601660006015600060016014546121319190612a6e565b81526020019081526020016000205481526020019081526020016000206002015460166000858152602001908152602001600020600101819055505b600083815260166020526040902060028101829055600301548111806121a25750600083815260166020526040902060030154155b156121bc5760008381526016602052604090206003018190555b6000838152601660205260409020600401548110806121ea5750600083815260166020526040902060040154155b156122045760008381526016602052604090206004018190555b60405186815233903090600080516020612aae8339815191529060200160405180910390a330337f7ce543d1780f3bdc3dac42da06c95da802653cd1b212b8d74ec3e3c33ad7095c888e612256611224565b612260908d612996565b6040805193845260208401929092529082015260600160405180910390a3505060018080559998505050505050505050565b6001600160a01b03808416600090815260046020908152604080832093861683529290522054600019811461231e57818110156123115760405162461bcd60e51b815260206004820152601d60248201527f53524732303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610803565b61231e848484840361259c565b50505050565b60006001600160a01b0383161580159061234757506001600160a01b0383163014155b61239e5760405162461bcd60e51b815260206004820152602260248201527f7472616e7366657220746f20746865207a65726f2061646472657373206f7220604482015261434160f01b6064820152608401610803565b600082116124005760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610803565b6001600160a01b03831660009081526008602052604090205460ff168061244c57506009546001600160a01b038416600090815260036020526040902054612449908490612a81565b11155b61248f5760405162461bcd60e51b81526020600482015260146024820152734d61782077616c6c65742065786365656465642160601b6044820152606401610803565b6001600160a01b0384166000908152600360205260409020546124b3908390612a6e565b6001600160a01b0380861660009081526003602052604080822093909355908516815220546124e3908390612a81565b6001600160a01b038085166000818152600360205260409081902093909355915190861690600080516020612aae833981519152906125259086815260200190565b60405180910390a35060019392505050565b6001600160a01b03821660009081526003602052604090205461255b908290612a81565b6001600160a01b038316600090815260036020526040808220929092553081522054612588908290612a6e565b306000908152600360205260409020555050565b6001600160a01b0383166125fe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610803565b6001600160a01b03821661265f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610803565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600060208083528351808285015260005b818110156126ed578581018301518582016040015282016126d1565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461272557600080fd5b919050565b6000806040838503121561273d57600080fd5b6127468361270e565b946020939093013593505050565b60006020828403121561276657600080fd5b61121d8261270e565b6000806040838503121561278257600080fd5b61278b8361270e565b91506127996020840161270e565b90509250929050565b600080604083850312156127b557600080fd5b50508035926020909101359150565b6000806000606084860312156127d957600080fd5b6127e28461270e565b92506127f06020850161270e565b9150604084013590509250925092565b60006020828403121561281257600080fd5b5035919050565b801515811461282757600080fd5b50565b6000806040838503121561283d57600080fd5b6128468361270e565b9150602083013561285681612819565b809150509250929050565b60008060006060848603121561287657600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156128de5781600019048211156128c4576128c461288d565b808516156128d157918102915b93841c93908002906128a8565b509250929050565b6000826128f5575060016108c4565b81612902575060006108c4565b816001811461291857600281146129225761293e565b60019150506108c4565b60ff8411156129335761293361288d565b50506001821b6108c4565b5060208310610133831016604e8410600b8410161715612961575081810a6108c4565b61296b83836128a3565b806000190482111561297f5761297f61288d565b029392505050565b600061121d60ff8416836128e6565b80820281158282048414176108c4576108c461288d565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082612a3657634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612a4d57600080fd5b815161121d81612819565b634e487b7160e01b600052600160045260246000fd5b818103818111156108c4576108c461288d565b808201808211156108c4576108c461288d565b600060208284031215612aa657600080fd5b505191905056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a3ce749c6ae7dc414b5c63c3948687ceee6095236ccc9b6aee813f249d0ee1c464736f6c63430008110033

Deployed ByteCode Sourcemap

2658:19398:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6532:83;6602:5;;;;;;;;;;;-1:-1:-1;;;6602:5:0;;;;6532:83;;;;6602:5;6532:83;:::i;:::-;;;;;;;;18247:89;18319:9;;18247:89;;;713:25:1;;;701:2;686:18;18247:89:0;567:177:1;6809:450:0;;;;;;:::i;:::-;;:::i;:::-;;;1351:14:1;;1344:22;1326:41;;1314:2;1299:18;6809:450:0;1186:187:1;6099:102:0;;;:::i;4881:51::-;;;;;;19797:392;;;:::i;:::-;;18411:202;;;;;;:::i;:::-;;:::i;19412:377::-;;;;;;:::i;:::-;;:::i;18621:431::-;;;;;;:::i;:::-;;:::i;8366:335::-;;;;;;:::i;:::-;;:::i;4996:52::-;;5038:10;4996:52;;7397:118;;;:::i;6718:83::-;;;3400:1;2562:36:1;;2550:2;2535:18;6718:83:0;2420:184:1;4189:37:0;;4223:3;4189:37;;3845:61;;;:::i;4072:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4523:74;;;;;-1:-1:-1;;;;;4523:74:0;;;;;;-1:-1:-1;;;;;2773:32:1;;;2755:51;;2743:2;2728:18;4523:74:0;2609:203:1;5128:39:0;;;;;;:::i;:::-;;;;;;;;;;;;;;20763:675;;;;;;:::i;:::-;;:::i;7267:122::-;;;;;;:::i;:::-;;:::i;4446:70::-;;;;;-1:-1:-1;;;;;4446:70:0;;;5174:30;;;;;;3932:44;;;;;;:::i;:::-;;;;;;;;;;;;;;6209:119;;;;;;:::i;:::-;-1:-1:-1;;;;;6302:18:0;6275:7;6302:18;;;:9;:18;;;;;;;6209:119;20197:287;;;;;;:::i;:::-;;:::i;2214:148::-;;;:::i;5284:22::-;;;;;;4660:33;;;;;;7523:284;;;;;;:::i;:::-;;:::i;4263:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2000:79;2038:7;2065:6;-1:-1:-1;;;;;2065:6:0;2000:79;;21446:141;;;:::i;5080:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;4122:27;;;;;;4156:26;;;;;;20492:263;;;;;;:::i;:::-;;:::i;7815:122::-;;;;;;:::i;:::-;;:::i;5518:54::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3704:25:1;;;3760:2;3745:18;;3738:34;;;;3788:18;;;3781:34;;;;3846:2;3831:18;;3824:34;3889:3;3874:19;;3867:35;3691:3;3676:19;5518:54:0;3445:463:1;8136:188:0;;;;;;:::i;:::-;;:::i;4389:29::-;;;;;;21643:171;;;:::i;14783:3412::-;;;;;;:::i;:::-;;:::i;21876:177::-;;;:::i;5237:40::-;;5271:6;5237:40;;6336:188;;;;;;:::i;:::-;-1:-1:-1;;;;;6488:19:0;;;6456:7;6488:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;6336:188;4317:41;;;;;;4939:50;;;;;;4624:29;;;;;;2370:281;;;;;;:::i;:::-;;:::i;19060:344::-;;;;;;:::i;:::-;;:::i;5313:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;7945:153;;;;;;:::i;:::-;;:::i;11061:3390::-;;;;;;:::i;:::-;;:::i;6809:450::-;6911:4;-1:-1:-1;;;;;6941:21:0;;6933:68;;;;-1:-1:-1;;;6933:68:0;;4436:2:1;6933:68:0;;;4418:21:1;4475:2;4455:18;;;4448:30;4514:34;4494:18;;;4487:62;-1:-1:-1;;;4565:18:1;;;4558:32;4607:19;;6933:68:0;;;;;;;;;7034:10;7012:110;;;;-1:-1:-1;;;7012:110:0;;4839:2:1;7012:110:0;;;4821:21:1;4878:2;4858:18;;;4851:30;4917:34;4897:18;;;4890:62;-1:-1:-1;;;4968:18:1;;;4961:34;5012:19;;7012:110:0;4637:400:1;7012:110:0;7147:10;7135:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;7135:32:0;;;;;;;;;;;;:41;;;7192:37;713:25:1;;;7135:32:0;;7147:10;7192:37;;686:18:1;7192:37:0;;;;;;;-1:-1:-1;7247:4:0;6809:450;;;;;:::o;6099:102::-;6154:7;3450:13;3400:1;3450:2;:13;:::i;:::-;3884:22;;:5;:22;:::i;:::-;6174:19;;6099:102;:::o;19797:392::-;201:1;347:7;;:19;339:63;;;;-1:-1:-1;;;339:63:0;;;;;;;:::i;:::-;201:1;413:7;:18;2127:6:::1;::::0;-1:-1:-1;;;;;2127:6:0::1;1630:10:::0;2127:22:::1;2119:67;;;;-1:-1:-1::0;;;2119:67:0::1;;;;;;;:::i;:::-;19912:10:::2;::::0;19951:9:::2;::::0;19938:10:::2;::::0;19870::::2;::::0;3524:42:::2;::::0;19883:14:::2;::::0;-1:-1:-1;;;;;19912:10:0;;::::2;::::0;4739:3:::2;::::0;19938:22:::2;::::0;::::2;:::i;:::-;19937:39;;;;:::i;:::-;19883:104;::::0;-1:-1:-1;;;;;;19883:104:0::2;::::0;;;;;;-1:-1:-1;;;;;7865:32:1;;;19883:104:0::2;::::0;::::2;7847:51:1::0;7914:18;;;7907:34;7820:18;;19883:104:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20040:14;::::0;20083:13:::2;::::0;20070:10:::2;::::0;19870:117;;-1:-1:-1;19998:10:0::2;::::0;3524:42:::2;::::0;20011:14:::2;::::0;-1:-1:-1;;;;;20040:14:0;;::::2;::::0;4739:3:::2;::::0;20070:26:::2;::::0;::::2;:::i;:::-;20069:43;;;;:::i;:::-;20011:112;::::0;-1:-1:-1;;;;;;20011:112:0::2;::::0;;;;;;-1:-1:-1;;;;;7865:32:1;;;20011:112:0::2;::::0;::::2;7847:51:1::0;7914:18;;;7907:34;7820:18;;20011:112:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19998:125;;20141:5;:14;;;;;20150:5;20141:14;20134:22;;;;:::i;:::-;-1:-1:-1::0;;20180:1:0::2;20167:10;:14:::0;157:1;454:22;;19797:392::o;18411:202::-;18476:7;18592:13;:11;:13::i;:::-;18569:4;18551:24;;;;:9;:24;;;;;;;18538:9;;-1:-1:-1;;;;;18518:17:0;;;;;;;;;:29;;18538:9;18518:29;:::i;:::-;18517:58;;;;:::i;:::-;18516:89;;;;:::i;19412:377::-;2127:6;;-1:-1:-1;;;;;2127:6:0;1630:10;2127:22;2119:67;;;;-1:-1:-1;;;2119:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19567:27:0;::::1;::::0;;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;19598:31:0;::::1;::::0;::::1;19567:62;19545:152;;;::::0;-1:-1:-1;;;19545:152:0;;8536:2:1;19545:152:0::1;::::0;::::1;8518:21:1::0;8575:2;8555:18;;;8548:30;8614:34;8594:18;;;8587:62;-1:-1:-1;;;8665:18:1;;;8658:38;8713:19;;19545:152:0::1;8334:404:1::0;19545:152:0::1;19710:10;:26:::0;;-1:-1:-1;;;;;19710:26:0;;::::1;-1:-1:-1::0;;;;;;19710:26:0;;::::1;;::::0;;;19747:14:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;19412:377::o;18621:431::-;2127:6;;-1:-1:-1;;;;;2127:6:0;1630:10;2127:22;2119:67;;;;-1:-1:-1;;;2119:67:0;;;;;;;:::i;:::-;18768:2:::1;18755:9;:15;;:52;;;;;18805:2;18791:10;:16;;18755:52;:89;;;;;18841:3;18828:9;:16;;18755:89;:127;;;;;18879:3;18865:10;:17;;18755:127;18733:194;;;::::0;-1:-1:-1;;;18733:194:0;;8945:2:1;18733:194:0::1;::::0;::::1;8927:21:1::0;8984:2;8964:18;;;8957:30;-1:-1:-1;;;9003:18:1;;;8996:47;9060:18;;18733:194:0::1;8743:341:1::0;18733:194:0::1;18940:6;:18:::0;;;18969:7:::1;:20:::0;;;19007:37:::1;::::0;;9263:25:1;;;9319:2;9304:18;;9297:34;;;19007:37:0::1;::::0;9236:18:1;19007:37:0::1;;;;;;;18621:431:::0;;:::o;8366:335::-;8500:4;8535:10;8595:40;8611:6;8535:10;8628:6;8595:15;:40::i;:::-;8653;8667:6;8675:9;8686:6;8653:13;:40::i;:::-;8646:47;8366:335;-1:-1:-1;;;;;8366:335:0:o;7397:118::-;4804:42;7450:7;7492:15;;;:9;:15;;;;3450:13;3400:1;3450:2;:13;:::i;:::-;3884:22;;:5;:22;:::i;:::-;7477:30;;;;:::i;3845:61::-;3450:13;3400:1;3450:2;:13;:::i;:::-;3884:22;;:5;:22;:::i;:::-;3845:61;:::o;20763:675::-;2127:6;;-1:-1:-1;;;;;2127:6:0;1630:10;2127:22;2119:67;;;;-1:-1:-1;;;2119:67:0;;;;;;;:::i;:::-;20916:9:::1;::::0;20878:4:::1;20837:19;20860:24:::0;;;:9:::1;:24;::::0;;;;;20837:19;;20916:9;20860:39:::1;::::0;20887:12;;20860:39:::1;:::i;:::-;20859:66;;;;:::i;:::-;20954:10;20944:21;::::0;;;:9:::1;:21;::::0;;;;;20837:88;;-1:-1:-1;20944:36:0;-1:-1:-1;20944:36:0::1;20936:67;;;::::0;-1:-1:-1;;;20936:67:0;;9677:2:1;20936:67:0::1;::::0;::::1;9659:21:1::0;9716:2;9696:18;;;9689:30;-1:-1:-1;;;9735:18:1;;;9728:48;9793:18;;20936:67:0::1;9475:342:1::0;20936:67:0::1;21028:43;::::0;-1:-1:-1;;;21028:43:0;;21051:4:::1;21028:43;::::0;::::1;7847:51:1::0;7914:18;;;7907:34;;;21016:9:0::1;::::0;3524:42:::1;::::0;21028:14:::1;::::0;7820:18:1;;21028:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21016:55;;21090:4;21082:46;;;::::0;-1:-1:-1;;;21082:46:0;;10024:2:1;21082:46:0::1;::::0;::::1;10006:21:1::0;10063:2;10043:18;;;10036:30;10102:31;10082:18;;;10075:59;10151:18;;21082:46:0::1;9822:353:1::0;21082:46:0::1;21158:9;::::0;21190:24:::1;21202:12:::0;21158:9;21190:24:::1;:::i;:::-;21178:9;:36:::0;21243:4:::1;21225:24;::::0;;;:9:::1;:24;::::0;;;;:39;;21253:11;;21225:24;:39:::1;::::0;21253:11;;21225:39:::1;:::i;:::-;::::0;;;-1:-1:-1;;21285:10:0::1;21275:21;::::0;;;:9:::1;:21;::::0;;;;:36;;21300:11;;21275:21;:36:::1;::::0;21300:11;;21275:36:::1;:::i;:::-;::::0;;;-1:-1:-1;;21345:9:0::1;::::0;21334:8:::1;::::0;21358:6;;21334:20:::1;::::0;::::1;:::i;:::-;21333:31;;;;:::i;:::-;21322:8;:42:::0;21382:48:::1;::::0;713:25:1;;;21411:4:0::1;::::0;21391:10:::1;::::0;-1:-1:-1;;;;;;;;;;;21382:48:0;701:2:1;686:18;21382:48:0::1;;;;;;;20826:612;;;20763:675:::0;:::o;7267:122::-;7322:4;7346:35;7354:7;-1:-1:-1;;7346:7:0;:35::i;20197:287::-;20295:7;20320:19;20366:11;20354:9;;:23;;;;:::i;:::-;20342:8;;:36;;;;:::i;:::-;20320:58;;20389:20;20423:9;;20412:8;;:20;;;;:::i;:::-;20389:43;-1:-1:-1;20450:26:0;20389:43;20450:11;:26;:::i;:::-;20443:33;20197:287;-1:-1:-1;;;;20197:287:0:o;2214:148::-;2127:6;;-1:-1:-1;;;;;2127:6:0;1630:10;2127:22;2119:67;;;;-1:-1:-1;;;2119:67:0;;;;;;;:::i;:::-;2321:1:::1;2305:6:::0;;2284:40:::1;::::0;-1:-1:-1;;;;;2305:6:0;;::::1;::::0;2284:40:::1;::::0;2321:1;;2284:40:::1;2352:1;2335:19:::0;;-1:-1:-1;;;;;;2335:19:0::1;::::0;;2214:148::o;7523:284::-;2127:6;;-1:-1:-1;;;;;2127:6:0;1630:10;2127:22;2119:67;;;;-1:-1:-1;;;2119:67:0;;;;;;;:::i;:::-;7647:3:::1;3450:13;3400:1;3450:2;:13;:::i;:::-;3884:22;::::0;:5:::1;:22;:::i;:::-;7632:18;;;;:::i;:::-;7620:8;:30;;7598:134;;;::::0;-1:-1:-1;;;7598:134:0;;10512:2:1;7598:134:0::1;::::0;::::1;10494:21:1::0;10551:2;10531:18;;;10524:30;10590:34;10570:18;;;10563:62;-1:-1:-1;;;10641:18:1;;;10634:52;10703:19;;7598:134:0::1;10310:418:1::0;7598:134:0::1;7743:6;:17:::0;;;7776:23:::1;::::0;713:25:1;;;7776:23:0::1;::::0;701:2:1;686:18;7776:23:0::1;;;;;;;7523:284:::0;:::o;21446:141::-;21493:7;21565:13;:11;:13::i;:::-;21546:16;:14;:16::i;:::-;21521:22;:20;:22::i;:::-;:41;;;;:::i;:::-;:57;;;;:::i;20492:263::-;20625:4;20556:7;20607:24;;;:9;:24;;;;;;20596:8;;20556:7;;20596:35;;;:::i;:::-;20691:4;20642:16;20673:24;;;:9;:24;;;;;;20576:55;;-1:-1:-1;20642:16:0;20673:35;;20700:8;;20673:35;:::i;:::-;20661:8;;:48;;;;:::i;7815:122::-;2127:6;;-1:-1:-1;;;;;2127:6:0;1630:10;2127:22;2119:67;;;;-1:-1:-1;;;2119:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7901:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;7901:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;7815:122::o;8136:188::-;8243:4;8272:44;8286:10;8298:9;8309:6;8272:13;:44::i;:::-;8265:51;8136:188;-1:-1:-1;;;8136:188:0:o;21643:171::-;21687:7;3524:42;-1:-1:-1;;;;;21739:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3524:42;-1:-1:-1;;;;;21715:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14783:3412::-;14919:4;201:1;347:7;;:19;339:63;;;;-1:-1:-1;;;339:63:0;;;;;;;:::i;:::-;201:1;413:7;:18;14989:15:::1;14977:27:::0;::::1;;14969:56;;;::::0;-1:-1:-1;;;14969:56:0;;11124:2:1;14969:56:0::1;::::0;::::1;11106:21:1::0;11163:2;11143:18;;;11136:30;-1:-1:-1;;;11182:18:1;;;11175:46;11238:18;;14969:56:0::1;10922:340:1::0;14969:56:0::1;15100:10;15086:25;::::0;;;:13:::1;:25;::::0;;;;;15115:12:::1;15086:41:::0;;15064:143:::1;;;::::0;-1:-1:-1;;;15064:143:0;;11469:2:1;15064:143:0::1;::::0;::::1;11451:21:1::0;11508:2;11488:18;;;11481:30;11547:34;11527:18;;;11520:62;-1:-1:-1;;;11598:18:1;;;11591:50;11658:19;;15064:143:0::1;11267:416:1::0;15064:143:0::1;15237:10;15220:14;15328:17:::0;;;:9:::1;:17;::::0;;;;;:32;-1:-1:-1;15328:32:0::1;15306:112;;;::::0;-1:-1:-1;;;15306:112:0;;11890:2:1;15306:112:0::1;::::0;::::1;11872:21:1::0;11929:2;11909:18;;;11902:30;11968:32;11948:18;;;11941:60;12018:18;;15306:112:0::1;11688:354:1::0;15306:112:0::1;15559:4;15483:17;15541:24:::0;;;:9:::1;:24;::::0;;;;;:38:::1;::::0;15568:11;;15541:38:::1;:::i;:::-;15529:8;;:51;;;;:::i;:::-;15503:9;;:78;;;;:::i;:::-;15483:98;;15592:17;4223:3;15636:7;;4223:3;15626:17;;;;:::i;:::-;15613:31;::::0;:9;:31:::1;:::i;:::-;15612:43;;;;:::i;:::-;15592:63:::0;-1:-1:-1;15666:17:0::1;15686:21;15592:63:::0;15686:9;:21:::1;:::i;:::-;15666:41;;15768:9;15755;:22;;15747:61;;;::::0;-1:-1:-1;;;15747:61:0;;12249:2:1;15747:61:0::1;::::0;::::1;12231:21:1::0;12288:2;12268:18;;;12261:30;12327:28;12307:18;;;12300:56;12373:18;;15747:61:0::1;12047:350:1::0;15747:61:0::1;15884:10;15854:15;15872:23:::0;;;:11:::1;:23;::::0;;;;;::::1;;:129;;15964:37;::::0;-1:-1:-1;;;15964:37:0;;15979:10:::1;15964:37;::::0;::::1;7847:51:1::0;7914:18;;;7907:34;;;3524:42:0::1;::::0;15964:14:::1;::::0;7820:18:1;;15964:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15872:129;;;15911:37;::::0;-1:-1:-1;;;15911:37:0;;15926:10:::1;15911:37;::::0;::::1;7847:51:1::0;7914:18;;;7907:34;;;3524:42:0::1;::::0;15911:14:::1;::::0;7820:18:1;;15911:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15854:147;;16020:10;16012:42;;;::::0;-1:-1:-1;;;16012:42:0;;12604:2:1;16012:42:0::1;::::0;::::1;12586:21:1::0;12643:2;12623:18;;;12616:30;-1:-1:-1;;;12662:18:1;;;12655:49;12721:18;;16012:42:0::1;12402:343:1::0;16012:42:0::1;-1:-1:-1::0;;;;;16132:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;;:31:::1;::::0;16152:11;;16132:31:::1;:::i;:::-;-1:-1:-1::0;;;;;16112:17:0;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;:51;;;;16306:10:::1;16294:23:::0;;:11:::1;:23:::0;;;;::::1;;:87;;16372:9;16359:10;;:22;;;;:::i;:::-;16294:87;;;16333:10;;16294:87;16281:10;:100:::0;16404:9:::1;::::0;:21:::1;::::0;16416:9;;16404:21:::1;:::i;:::-;16392:9;:33:::0;16529:4:::1;16511:24;::::0;;;:9:::1;:24;::::0;;;;;:38:::1;::::0;16538:11;;16511:38:::1;:::i;:::-;16502:4;16484:24;::::0;;;:9:::1;:24;::::0;;;;:65;;;;16603:15:::1;::::0;16662:13:::1;:11;:13::i;:::-;16650:25;::::0;:9;:25:::1;:::i;:::-;16629:46;;16701:10;16686:11;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;16729:10:0::1;16722:18;::::0;;;:6:::1;:18;::::0;;;;:32;;16744:10;;16722:18;:32:::1;::::0;16744:10;;16722:32:::1;:::i;:::-;::::0;;;-1:-1:-1;;16765:11:0::1;::::0;;;:4:::1;:11;::::0;;;;:25;;16780:10;;16765:11;:25:::1;::::0;16780:10;;16765:25:::1;:::i;:::-;;;;;;;;16848:1;16837:7;;:12;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;16872:7:0::1;::::0;16860:20:::1;::::0;;;:11:::1;:20;::::0;;;;:28;;;16935:13:::1;:11;:13::i;:::-;16916:16;:14;:16::i;:::-;:32;;;;:::i;:::-;16959:22;::::0;;;:15:::1;:22;::::0;;;;:35;;;17009:27:::1;;::::0;16899:49;;-1:-1:-1;17009:32:0;17005:174:::1;;17088:15;:73;17122:11;:24;17144:1;17134:7;;:11;;;;:::i;:::-;17122:24;;;;;;;;;;;;17088:73;;;;;;;;;;;:79;;;17058:15;:22;17074:5;17058:22;;;;;;;;;;;:27;;:109;;;;17005:174;17189:22;::::0;;;:15:::1;:22;::::0;;;;:28:::1;::::0;::::1;:37:::0;;;17257:27:::1;;::::0;:36;-1:-1:-1;17257:36:0;:85:::1;;-1:-1:-1::0;17310:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:27:::1;;::::0;:32;17257:85:::1;17239:178;;;17369:22;::::0;;;:15:::1;:22;::::0;;;;:27:::1;;:36:::0;;;17239:178:::1;17447:22;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;::::0;:35;-1:-1:-1;17447:35:0;:83:::1;;-1:-1:-1::0;17499:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;::::0;:31;17447:83:::1;17429:175;;;17557:22;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;:35:::0;;;17429:175:::1;17663:44;::::0;713:25:1;;;17688:4:0::1;::::0;-1:-1:-1;;;;;17663:44:0;::::1;::::0;-1:-1:-1;;;;;;;;;;;17663:44:0;701:2:1;686:18;17663:44:0::1;;;;;;;17734:10;17722:23;::::0;;;:11:::1;:23;::::0;;;;;::::1;;17718:448;;;17767:167;::::0;;12952:25:1;;;13008:2;12993:18;;12986:34;;;13036:18;;;13029:34;;;17822:10:0::1;::::0;17798:4:::1;::::0;17767:167:::1;::::0;12940:2:1;12925:18;17767:167:0::1;;;;;;;17718:448;;;18027:10;18003:4;17972:182;18056:11:::0;18086:9;18126:13:::1;:11;:13::i;:::-;18114:25;::::0;:9;:25:::1;:::i;:::-;17972:182;::::0;;12952:25:1;;;13008:2;12993:18;;12986:34;;;;13036:18;;;13029:34;12940:2;12925:18;17972:182:0::1;;;;;;;17718:448;-1:-1:-1::0;;18183:4:0::1;454:22:::0;;;18183:4;14783:3412;-1:-1:-1;;;;;;;;;;14783:3412:0:o;21876:177::-;21923:7;21963:1;21951:9;;:13;21943:38;;;;-1:-1:-1;;;21943:38:0;;13276:2:1;21943:38:0;;;13258:21:1;13315:2;13295:18;;;13288:30;-1:-1:-1;;;13334:18:1;;;13327:42;13386:18;;21943:38:0;13074:336:1;21943:38:0;22039:4;22021:24;;;;:9;:24;;;;;;21999:9;;:19;;5271:6;;21999:19;:::i;:::-;:46;;;;:::i;2370:281::-;2127:6;;-1:-1:-1;;;;;2127:6:0;1630:10;2127:22;2119:67;;;;-1:-1:-1;;;2119:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2473:22:0;::::1;2451:110;;;::::0;-1:-1:-1;;;2451:110:0;;13617:2:1;2451:110:0::1;::::0;::::1;13599:21:1::0;13656:2;13636:18;;;13629:30;13695:34;13675:18;;;13668:62;-1:-1:-1;;;13746:18:1;;;13739:36;13792:19;;2451:110:0::1;13415:402:1::0;2451:110:0::1;2598:6;::::0;;2577:38:::1;::::0;-1:-1:-1;;;;;2577:38:0;;::::1;::::0;2598:6;::::1;::::0;2577:38:::1;::::0;::::1;2626:6;:17:::0;;-1:-1:-1;;;;;;2626:17:0::1;-1:-1:-1::0;;;;;2626:17:0;;;::::1;::::0;;;::::1;::::0;;2370:281::o;19060:344::-;2127:6;;-1:-1:-1;;;;;2127:6:0;1630:10;2127:22;2119:67;;;;-1:-1:-1;;;2119:67:0;;;;;;;:::i;:::-;4739:3:::1;19216:31;19231:16:::0;19216:12;:31:::1;:::i;:::-;:47;19194:122;;;::::0;-1:-1:-1;;;19194:122:0;;14024:2:1;19194:122:0::1;::::0;::::1;14006:21:1::0;14063:2;14043:18;;;14036:30;14102:27;14082:18;;;14075:55;14147:18;;19194:122:0::1;13822:349:1::0;19194:122:0::1;19329:9;:24:::0;;;;19364:13:::1;:32:::0;19060:344::o;7945:153::-;2127:6;;-1:-1:-1;;;;;2127:6:0;1630:10;2127:22;2119:67;;;;-1:-1:-1;;;2119:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8058:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;8058:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;7945:153::o;11061:3390::-;11196:4;201:1;347:7;;:19;339:63;;;;-1:-1:-1;;;339:63:0;;;;;;;:::i;:::-;201:1;413:7;:18;11266:15:::1;11254:27:::0;::::1;;11246:56;;;::::0;-1:-1:-1;;;11246:56:0;;11124:2:1;11246:56:0::1;::::0;::::1;11106:21:1::0;11163:2;11143:18;;;11136:30;-1:-1:-1;;;11182:18:1;;;11175:46;11238:18;;11246:56:0::1;10922:340:1::0;11246:56:0::1;11356:10;11342:25;::::0;;;:13:::1;:25;::::0;;;;11370:12:::1;11342:40:::0;;11432:9:::1;::::0;11424:52:::1;;;::::0;-1:-1:-1;;;11424:52:0;;14378:2:1;11424:52:0::1;::::0;::::1;14360:21:1::0;14417:2;14397:18;;;14390:30;14456:28;14436:18;;;14429:56;14502:18;;11424:52:0::1;14176:350:1::0;11424:52:0::1;5038:10;11548:15;:34;;11526:103;;;::::0;-1:-1:-1;;;11526:103:0;;14733:2:1;11526:103:0::1;::::0;::::1;14715:21:1::0;14772:2;14752:18;;;14745:30;-1:-1:-1;;;14791:18:1;;;14784:49;14850:18;;11526:103:0::1;14531:343:1::0;11526:103:0::1;11704:10;11672:17;11692:23:::0;;;:11:::1;:23;::::0;;;;;::::1;;:94;;4223:3;11769:6;;11757:9;:18;;;;:::i;:::-;11756:30;;;;:::i;:::-;11692:94;;;11731:9;11692:94;11672:114;;11842:20;11930:9;;11918;:21;;;;:::i;:::-;11906:8;;:34;;;;:::i;:::-;11883:4;11865:24;::::0;;;:9:::1;:24;::::0;;;;;:76:::1;::::0;;::::1;:::i;:::-;12046:6;::::0;12016:10:::1;12006:21;::::0;;;:9:::1;:21;::::0;;;;;11842:99;;-1:-1:-1;12046:6:0;12006:36:::1;::::0;11842:99;;12006:36:::1;:::i;:::-;:46;;:94;;;-1:-1:-1::0;12089:10:0::1;12073:27;::::0;;;:15:::1;:27;::::0;;;;;::::1;;12006:94;11984:163;;;::::0;-1:-1:-1;;;11984:163:0;;15081:2:1;11984:163:0::1;::::0;::::1;15063:21:1::0;15120:2;15100:18;;;15093:30;-1:-1:-1;;;15139:18:1;;;15132:49;15198:18;;11984:163:0::1;14879:343:1::0;11984:163:0::1;12213:1;12198:12;:16;12190:64;;;::::0;-1:-1:-1;;;12190:64:0;;15429:2:1;12190:64:0::1;::::0;::::1;15411:21:1::0;15468:2;15448:18;;;15441:30;15507:34;15487:18;;;15480:62;-1:-1:-1;;;15558:18:1;;;15551:33;15601:19;;12190:64:0::1;15227:399:1::0;12190:64:0::1;12323:11;12307:12;:27;;12299:66;;;::::0;-1:-1:-1;;;12299:66:0;;12249:2:1;12299:66:0::1;::::0;::::1;12231:21:1::0;12288:2;12268:18;;;12261:30;12327:28;12307:18;;;12300:56;12373:18;;12299:66:0::1;12047:350:1::0;12299:66:0::1;12454:56;::::0;-1:-1:-1;;;12454:56:0;;12473:10:::1;12454:56;::::0;::::1;15871:34:1::0;12493:4:0::1;15921:18:1::0;;;15914:43;15973:18;;;15966:34;;;12445:6:0::1;::::0;3524:42:::1;::::0;12454:18:::1;::::0;15806::1;;12454:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12445:65;;12531:1;12523:37;;;::::0;-1:-1:-1;;;12523:37:0;;16213:2:1;12523:37:0::1;::::0;::::1;16195:21:1::0;16252:2;16232:18;;;16225:30;16291:25;16271:18;;;16264:53;16334:18;;12523:37:0::1;16011:347:1::0;12523:37:0::1;12626:29;12630:10;12642:12;12626:3;:29::i;:::-;12725:17;12745:21;12757:9:::0;12745;:21:::1;:::i;:::-;12725:41;;12803:9;12790:10;;:22;;;;:::i;:::-;12777:10;:35:::0;12835:9:::1;::::0;:21:::1;::::0;12847:9;;12835:21:::1;:::i;:::-;12823:9;:33:::0;12910:15:::1;12894:13;12968;:11;:13::i;:::-;12956:25;::::0;:9;:25:::1;:::i;:::-;12936:45;;13007:9;12992:11;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;13034:10:0::1;13027:18;::::0;;;:6:::1;:18;::::0;;;;:31;;13049:9;;13027:18;:31:::1;::::0;13049:9;;13027:31:::1;:::i;:::-;::::0;;;-1:-1:-1;;13069:11:0::1;::::0;;;:4:::1;:11;::::0;;;;:24;;13084:9;;13069:11;:24:::1;::::0;13084:9;;13069:24:::1;:::i;:::-;;;;;;;;13151:1;13140:7;;:12;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;13175:7:0::1;::::0;13163:20:::1;::::0;;;:11:::1;:20;::::0;;;;:28;;;13238:13:::1;:11;:13::i;:::-;13219:16;:14;:16::i;:::-;:32;;;;:::i;:::-;13262:22;::::0;;;:15:::1;:22;::::0;;;;:35;;;13312:27:::1;;::::0;13202:49;;-1:-1:-1;13312:32:0;13308:405:::1;;13365:7;;13376:1;13365:12:::0;13361:341:::1;;13515:13;:11;:13::i;:::-;3450;3400:1;3450:2;:13;:::i;:::-;3884:22;::::0;:5:::1;:22;:::i;:::-;13463:9;13451;;:21;;;;:::i;:::-;13450:40;;;;:::i;:::-;13449:79;;;;:::i;:::-;13398:22;::::0;;;:15:::1;:22;::::0;;;;:27:::1;;:130:::0;13361:341:::1;;;13599:15;:81;13637:11;:24;13659:1;13649:7;;:11;;;;:::i;:::-;13637:24;;;;;;;;;;;;13599:81;;;;;;;;;;;:87;;;13569:15;:22;13585:5;13569:22;;;;;;;;;;;:27;;:117;;;;13361:341;13723:22;::::0;;;:15:::1;:22;::::0;;;;:28:::1;::::0;::::1;:37:::0;;;13791:27:::1;;::::0;:36;-1:-1:-1;13791:36:0;:85:::1;;-1:-1:-1::0;13844:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:27:::1;;::::0;:32;13791:85:::1;13773:178;;;13903:22;::::0;;;:15:::1;:22;::::0;;;;:27:::1;;:36:::0;;;13773:178:::1;13981:22;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;::::0;:35;-1:-1:-1;13981:35:0;:83:::1;;-1:-1:-1::0;14033:22:0::1;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;::::0;:31;13981:83:::1;13963:175;;;14091:22;::::0;;;:15:::1;:22;::::0;;;;:26:::1;;:35:::0;;;13963:175:::1;14195:49;::::0;713:25:1;;;14219:10:0::1;::::0;14212:4:::1;::::0;-1:-1:-1;;;;;;;;;;;14195:49:0;701:2:1;686:18;14195:49:0::1;;;;;;;14314:4;14281:10;14260:161;14334:12:::0;14361:9;14397:13:::1;:11;:13::i;:::-;14385:25;::::0;:9;:25:::1;:::i;:::-;14260:161;::::0;;12952:25:1;;;13008:2;12993:18;;12986:34;;;;13036:18;;;13029:34;12940:2;12925:18;14260:161:0::1;;;;;;;-1:-1:-1::0;;14439:4:0::1;454:22:::0;;;14439:4;11061:3390;-1:-1:-1;;;;;;;;;11061:3390:0:o;10048:545::-;-1:-1:-1;;;;;10210:18:0;;;10183:24;10210:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;10252:37:0;;10248:338;;10352:6;10332:16;:26;;10306:117;;;;-1:-1:-1;;;10306:117:0;;16565:2:1;10306:117:0;;;16547:21:1;16604:2;16584:18;;;16577:30;16643:31;16623:18;;;16616:59;16692:18;;10306:117:0;16363:353:1;10306:117:0;10508:51;10517:5;10524:7;10552:6;10533:16;:25;10508:8;:51::i;:::-;10172:421;10048:545;;;:::o;8739:858::-;8865:4;-1:-1:-1;;;;;8937:23:0;;;;;;:53;;-1:-1:-1;;;;;;8964:26:0;;8985:4;8964:26;;8937:53;8915:137;;;;-1:-1:-1;;;8915:137:0;;16923:2:1;8915:137:0;;;16905:21:1;16962:2;16942:18;;;16935:30;17001:34;16981:18;;;16974:62;-1:-1:-1;;;17052:18:1;;;17045:32;17094:19;;8915:137:0;16721:398:1;8915:137:0;9080:1;9071:6;:10;9063:64;;;;-1:-1:-1;;;9063:64:0;;17326:2:1;9063:64:0;;;17308:21:1;17365:2;17345:18;;;17338:30;17404:34;17384:18;;;17377:62;-1:-1:-1;;;17455:18:1;;;17448:39;17504:19;;9063:64:0;17124:405:1;9063:64:0;-1:-1:-1;;;;;9160:26:0;;;;;;:15;:26;;;;;;;;;:86;;-1:-1:-1;9240:6:0;;-1:-1:-1;;;;;9207:20:0;;;;;;:9;:20;;;;;;:29;;9230:6;;9207:29;:::i;:::-;:39;;9160:86;9138:156;;;;-1:-1:-1;;;9138:156:0;;17736:2:1;9138:156:0;;;17718:21:1;17775:2;17755:18;;;17748:30;-1:-1:-1;;;17794:18:1;;;17787:50;17854:18;;9138:156:0;17534:344:1;9138:156:0;-1:-1:-1;;;;;9360:17:0;;;;;;:9;:17;;;;;;:26;;9380:6;;9360:26;:::i;:::-;-1:-1:-1;;;;;9340:17:0;;;;;;;:9;:17;;;;;;:46;;;;9458:20;;;;;;;:29;;9481:6;;9458:29;:::i;:::-;-1:-1:-1;;;;;9435:20:0;;;;;;;:9;:20;;;;;;;:52;;;;9532:35;;;;;;-1:-1:-1;;;;;;;;;;;9532:35:0;;;9560:6;713:25:1;;701:2;686:18;;567:177;9532:35:0;;;;;;;;-1:-1:-1;9585:4:0;8739:858;;;;;:::o;14505:196::-;-1:-1:-1;;;;;14594:19:0;;;;;;:9;:19;;;;;;:28;;14616:6;;14594:28;:::i;:::-;-1:-1:-1;;;;;14572:19:0;;;;;;:9;:19;;;;;;:50;;;;14678:4;14660:24;;;;:33;;14687:6;;14660:33;:::i;:::-;14651:4;14633:24;;;;:9;:24;;;;;:60;-1:-1:-1;;14505:196:0:o;10601:380::-;-1:-1:-1;;;;;10737:19:0;;10729:68;;;;-1:-1:-1;;;10729:68:0;;18085:2:1;10729:68:0;;;18067:21:1;18124:2;18104:18;;;18097:30;18163:34;18143:18;;;18136:62;-1:-1:-1;;;18214:18:1;;;18207:34;18258:19;;10729:68:0;17883:400:1;10729:68:0;-1:-1:-1;;;;;10816:21:0;;10808:68;;;;-1:-1:-1;;;10808:68:0;;18490:2:1;10808:68:0;;;18472:21:1;18529:2;18509:18;;;18502:30;18568:34;18548:18;;;18541:62;-1:-1:-1;;;18619:18:1;;;18612:32;18661:19;;10808:68:0;18288:398:1;10808:68:0;-1:-1:-1;;;;;10889:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10941:32;;713:25:1;;;10941:32:0;;686:18:1;10941:32:0;;;;;;;10601:380;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:173::-;817:20;;-1:-1:-1;;;;;866:31:1;;856:42;;846:70;;912:1;909;902:12;846:70;749:173;;;:::o;927:254::-;995:6;1003;1056:2;1044:9;1035:7;1031:23;1027:32;1024:52;;;1072:1;1069;1062:12;1024:52;1095:29;1114:9;1095:29;:::i;:::-;1085:39;1171:2;1156:18;;;;1143:32;;-1:-1:-1;;;927:254:1:o;1378:186::-;1437:6;1490:2;1478:9;1469:7;1465:23;1461:32;1458:52;;;1506:1;1503;1496:12;1458:52;1529:29;1548:9;1529:29;:::i;1569:260::-;1637:6;1645;1698:2;1686:9;1677:7;1673:23;1669:32;1666:52;;;1714:1;1711;1704:12;1666:52;1737:29;1756:9;1737:29;:::i;:::-;1727:39;;1785:38;1819:2;1808:9;1804:18;1785:38;:::i;:::-;1775:48;;1569:260;;;;;:::o;1834:248::-;1902:6;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;-1:-1:-1;;2002:23:1;;;2072:2;2057:18;;;2044:32;;-1:-1:-1;1834:248:1:o;2087:328::-;2164:6;2172;2180;2233:2;2221:9;2212:7;2208:23;2204:32;2201:52;;;2249:1;2246;2239:12;2201:52;2272:29;2291:9;2272:29;:::i;:::-;2262:39;;2320:38;2354:2;2343:9;2339:18;2320:38;:::i;:::-;2310:48;;2405:2;2394:9;2390:18;2377:32;2367:42;;2087:328;;;;;:::o;2817:180::-;2876:6;2929:2;2917:9;2908:7;2904:23;2900:32;2897:52;;;2945:1;2942;2935:12;2897:52;-1:-1:-1;2968:23:1;;2817:180;-1:-1:-1;2817:180:1:o;3002:118::-;3088:5;3081:13;3074:21;3067:5;3064:32;3054:60;;3110:1;3107;3100:12;3054:60;3002:118;:::o;3125:315::-;3190:6;3198;3251:2;3239:9;3230:7;3226:23;3222:32;3219:52;;;3267:1;3264;3257:12;3219:52;3290:29;3309:9;3290:29;:::i;:::-;3280:39;;3369:2;3358:9;3354:18;3341:32;3382:28;3404:5;3382:28;:::i;:::-;3429:5;3419:15;;;3125:315;;;;;:::o;3913:316::-;3990:6;3998;4006;4059:2;4047:9;4038:7;4034:23;4030:32;4027:52;;;4075:1;4072;4065:12;4027:52;-1:-1:-1;;4098:23:1;;;4168:2;4153:18;;4140:32;;-1:-1:-1;4219:2:1;4204:18;;;4191:32;;3913:316;-1:-1:-1;3913:316:1:o;5042:127::-;5103:10;5098:3;5094:20;5091:1;5084:31;5134:4;5131:1;5124:15;5158:4;5155:1;5148:15;5174:422;5263:1;5306:5;5263:1;5320:270;5341:7;5331:8;5328:21;5320:270;;;5400:4;5396:1;5392:6;5388:17;5382:4;5379:27;5376:53;;;5409:18;;:::i;:::-;5459:7;5449:8;5445:22;5442:55;;;5479:16;;;;5442:55;5558:22;;;;5518:15;;;;5320:270;;;5324:3;5174:422;;;;;:::o;5601:806::-;5650:5;5680:8;5670:80;;-1:-1:-1;5721:1:1;5735:5;;5670:80;5769:4;5759:76;;-1:-1:-1;5806:1:1;5820:5;;5759:76;5851:4;5869:1;5864:59;;;;5937:1;5932:130;;;;5844:218;;5864:59;5894:1;5885:10;;5908:5;;;5932:130;5969:3;5959:8;5956:17;5953:43;;;5976:18;;:::i;:::-;-1:-1:-1;;6032:1:1;6018:16;;6047:5;;5844:218;;6146:2;6136:8;6133:16;6127:3;6121:4;6118:13;6114:36;6108:2;6098:8;6095:16;6090:2;6084:4;6081:12;6077:35;6074:77;6071:159;;;-1:-1:-1;6183:19:1;;;6215:5;;6071:159;6262:34;6287:8;6281:4;6262:34;:::i;:::-;6332:6;6328:1;6324:6;6320:19;6311:7;6308:32;6305:58;;;6343:18;;:::i;:::-;6381:20;;5601:806;-1:-1:-1;;;5601:806:1:o;6412:140::-;6470:5;6499:47;6540:4;6530:8;6526:19;6520:4;6499:47;:::i;6557:168::-;6630:9;;;6661;;6678:15;;;6672:22;;6658:37;6648:71;;6699:18;;:::i;6730:355::-;6932:2;6914:21;;;6971:2;6951:18;;;6944:30;7010:33;7005:2;6990:18;;6983:61;7076:2;7061:18;;6730:355::o;7090:356::-;7292:2;7274:21;;;7311:18;;;7304:30;7370:34;7365:2;7350:18;;7343:62;7437:2;7422:18;;7090:356::o;7451:217::-;7491:1;7517;7507:132;;7561:10;7556:3;7552:20;7549:1;7542:31;7596:4;7593:1;7586:15;7624:4;7621:1;7614:15;7507:132;-1:-1:-1;7653:9:1;;7451:217::o;7952:245::-;8019:6;8072:2;8060:9;8051:7;8047:23;8043:32;8040:52;;;8088:1;8085;8078:12;8040:52;8120:9;8114:16;8139:28;8161:5;8139:28;:::i;8202:127::-;8263:10;8258:3;8254:20;8251:1;8244:31;8294:4;8291:1;8284:15;8318:4;8315:1;8308:15;9342:128;9409:9;;;9430:11;;;9427:37;;;9444:18;;:::i;10180:125::-;10245:9;;;10266:10;;;10263:36;;;10279:18;;:::i;10733:184::-;10803:6;10856:2;10844:9;10835:7;10831:23;10827:32;10824:52;;;10872:1;10869;10862:12;10824:52;-1:-1:-1;10895:16:1;;10733:184;-1:-1:-1;10733:184:1:o

Metadata Hash

a3ce749c6ae7dc414b5c63c3948687ceee6095236ccc9b6aee813f249d0ee1c4
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.