ETH Price: $3,346.06 (-0.62%)
Gas: 4 Gwei

Contract

0x1533719Ad0549D6ed647Bc15337228E89Ae1b680
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer199107072024-05-20 11:01:5970 days ago1716202919IN
0x1533719A...89Ae1b680
0 ETH0.00130618.5168342
Approve187710522023-12-12 15:39:23230 days ago1702395563IN
0x1533719A...89Ae1b680
0 ETH0.0014729960.90261477
Approve187279772023-12-06 14:48:11236 days ago1701874091IN
0x1533719A...89Ae1b680
0 ETH0.001521862.76517563
Approve186833122023-11-30 8:44:11242 days ago1701333851IN
0x1533719A...89Ae1b680
0 ETH0.0007446830.71352232
Approve183221302023-10-10 19:25:47293 days ago1696965947IN
0x1533719A...89Ae1b680
0 ETH0.0005311411.4298037
Approve182892882023-10-06 5:10:47298 days ago1696569047IN
0x1533719A...89Ae1b680
0 ETH0.000258325.55900908
Approve182467572023-09-30 6:32:59304 days ago1696055579IN
0x1533719A...89Ae1b680
0 ETH0.000382548.26420241
Approve182449942023-09-30 0:38:23304 days ago1696034303IN
0x1533719A...89Ae1b680
0 ETH0.000360947.79748646
Approve182449562023-09-30 0:30:47304 days ago1696033847IN
0x1533719A...89Ae1b680
0 ETH0.000157186.48281149
Approve182449032023-09-30 0:19:59304 days ago1696033199IN
0x1533719A...89Ae1b680
0 ETH0.000391378.45478612
Approve182369582023-09-28 21:37:11305 days ago1695937031IN
0x1533719A...89Ae1b680
0 ETH0.0006181113.35310427
Approve182159682023-09-25 23:05:47308 days ago1695683147IN
0x1533719A...89Ae1b680
0 ETH0.000342547.3713605
Approve182009212023-09-23 20:32:47310 days ago1695501167IN
0x1533719A...89Ae1b680
0 ETH0.000328517.06934151
Approve181915022023-09-22 12:52:35311 days ago1695387155IN
0x1533719A...89Ae1b680
0 ETH0.0006004412.92119259
Approve181914952023-09-22 12:51:11311 days ago1695387071IN
0x1533719A...89Ae1b680
0 ETH0.0004893910.53135011
Approve181857982023-09-21 17:40:59312 days ago1695318059IN
0x1533719A...89Ae1b680
0 ETH0.0004848910.49411289
Approve181844842023-09-21 13:15:23312 days ago1695302123IN
0x1533719A...89Ae1b680
0 ETH0.0005129911.1023424
Approve181819902023-09-21 4:50:59313 days ago1695271859IN
0x1533719A...89Ae1b680
0 ETH0.000384878.28231109
Approve181798662023-09-20 21:44:11313 days ago1695246251IN
0x1533719A...89Ae1b680
0 ETH0.0004231314.53760272
Approve181781542023-09-20 16:00:11313 days ago1695225611IN
0x1533719A...89Ae1b680
0 ETH0.0004002913.75302193
Approve181776852023-09-20 14:26:11313 days ago1695219971IN
0x1533719A...89Ae1b680
0 ETH0.0006972215.08957192
Approve181769142023-09-20 11:50:35313 days ago1695210635IN
0x1533719A...89Ae1b680
0 ETH0.000659414.17157947
Approve181734482023-09-20 0:11:23314 days ago1695168683IN
0x1533719A...89Ae1b680
0 ETH0.000207298.54956049
Approve181730592023-09-19 22:52:59314 days ago1695163979IN
0x1533719A...89Ae1b680
0 ETH0.00044049.47716917
Approve181659462023-09-18 22:58:11315 days ago1695077891IN
0x1533719A...89Ae1b680
0 ETH0.0003377511.60433592
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
180878472023-09-07 23:31:47326 days ago1694129507
0x1533719A...89Ae1b680
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AWM

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-08
*/

/*

REWARDS SO SIMPLELE AN AUTIST CAN HANDLELE IT! 

Twitter: https://twitter.com/AutistWealthMgt
TG: https://t.me/AWM_Portal
Website: http://www.autistwealthmanagement.com/

*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.17;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

}

interface InterfaceLP {
    function sync() external;
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

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

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

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

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

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

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(msg.sender == _owner, "Not owner");
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract AWM is ERC20Detailed, Ownable {

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

    uint256 public rewardYield = 315920639267394;
    uint256 public rewardYieldDenominator = 100000000000000000;

    uint256 public rebaseFrequency = 1 days / 12; // 7200 seconds - every 2 hours
    uint256 public nextRebase;
    bool public autoRebase = true;

    uint256 public timeBetweenRebaseReduction = 15 days;
    uint256 public rebaseReductionAmount = 3; // 30% reduction
    uint256 public lastReduction;

    uint256 public maxTxnAmount;
    uint256 public maxWallet;

    mapping(address => bool) _isFeeExempt;
    address[] public _makerPairs;
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 public constant MAX_FEE_RATE = 5;
    uint256 public constant MAX_REBASE_FREQUENCY = 7200;
    uint256 public constant MIN_REBASE_FREQUENCY = 7200;
    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = type(uint256).max;
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 6_942_000 * 10**DECIMALS;
    uint256 private constant TOTAL_GONS = type(uint256).max - (type(uint256).max % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant MAX_SUPPLY = 69_420_000 * 10**DECIMALS; 

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event RemovedLimits();

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

    address public marketingAddress;
    address public treasuryAddress;
    address public PAIREDTOKEN;

    IDEXRouter public immutable router;
    address public pair;

    TokenHandler public tokenHandler;

     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public liquidityFee = 0;
    uint256 public marketingFee = 3;
    uint256 public treasuryFee = 2;
    uint256 public totalFee = liquidityFee + marketingFee + treasuryFee;
    uint256 public feeDenominator = 100;
    
    bool public limitsInEffect = true;

    bool inSwap;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }
    
    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    uint256 private gonSwapThreshold = (TOTAL_GONS / 100000 * 25);

    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    constructor() ERC20Detailed(block.chainid==1 ? "Autist Wealth Management" : "AWM", block.chainid==1 ? "AWM" : "AWM", 18) {
    //constructor() ERC20Detailed(block.chainid==1 ? "Autist Wealth Management" : "AWM", block.chainid==1 ? "AWM" : "AWM", 18) {
        address dexAddress;
        address pairedTokenAddress;
        if(block.chainid == 1){
            dexAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
            pairedTokenAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; //WETH
        } else {
            revert("Chain not configured");
        }

        marketingAddress = address(0xa773aC8751AE7F4b9B5D4393Ce3204fDA32346ef); //Marketing
        treasuryAddress = address(0x40bF1fd3578Bc4F8BadD3cbCbD419027E8614073); //Treasury

        nextRebase = block.timestamp + rebaseFrequency;
        
        PAIREDTOKEN = pairedTokenAddress;

        router = IDEXRouter(dexAddress);

        tokenHandler = new TokenHandler();

        _allowedFragments[address(this)][address(router)] = ~uint256(0);
        _allowedFragments[address(msg.sender)][address(router)] = ~uint256(0);
        _allowedFragments[address(this)][address(this)] = ~uint256(0);

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[msg.sender] = TOTAL_GONS / 100 * 95;
        _gonBalances[treasuryAddress] += TOTAL_GONS - _gonBalances[msg.sender];
        _gonsPerFragment = TOTAL_GONS/(_totalSupply);

        maxTxnAmount = _totalSupply * 1 / 100; // 1% max txn
        maxWallet = _totalSupply * 1 / 100; // 1% max wallet
        
        _isFeeExempt[address(this)] = true;
        _isFeeExempt[address(msg.sender)] = true;
        _isFeeExempt[address(dexAddress)] = true;
        _isFeeExempt[address(0xdead)] = true;

        emit Transfer(address(0x0), msg.sender, balanceOf(msg.sender));
        emit Transfer(address(0x0), treasuryAddress, balanceOf(treasuryAddress));  
    }

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

    function allowance(address owner_, address spender) external view override returns (uint256){
        return _allowedFragments[owner_][spender];
    }

    function balanceOf(address who) public view override returns (uint256) {
        return _gonBalances[who]/(_gonsPerFragment);
    }

    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isFeeExempt[_addr];
    }

    function checkSwapThreshold() external view returns (uint256) {
        return gonSwapThreshold/(_gonsPerFragment);
    }

    function shouldRebase() public view returns (bool) {
        return nextRebase <= block.timestamp;
    }

    function shouldTakeFee(address from, address to) internal view returns (bool) {
        if(_isFeeExempt[from] || _isFeeExempt[to]){
            return false;
        } else {
            return (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]);
        }
    }

    function shouldSwapBack() internal view returns (bool) {
        return
        !inSwap &&
        swapEnabled &&
        totalFee > 0 &&
        _gonBalances[address(this)] >= gonSwapThreshold;
    }

    function manualSync() public {
        for(uint i = 0; i < _makerPairs.length; i++){
            try InterfaceLP(_makerPairs[i]).sync(){} catch {}
        }
    }

    function transfer(address to, uint256 value) external override validRecipient(to) returns (bool){
        _transferFrom(msg.sender, to, value);
        return true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        emit RemovedLimits();
    }

    // alter the paired token so bots can't prep for new path (hypothetically)
    function alterToken(address newToken) external onlyOwner {
        require(newToken != address(0), "Zero address");
        require(!tradingActive, "trading already active");
        pair = IDEXFactory(router.factory()).createPair(address(this), newToken);
        _allowedFragments[address(this)][pair] = ~uint256(0);
        setAutomatedMarketMakerPair(pair, true);
        PAIREDTOKEN = newToken;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {

        if(!tradingActive){
            require(_isFeeExempt[sender] || _isFeeExempt[recipient], "Trading is paused");
        }

        if(limitsInEffect){
            if (!_isFeeExempt[sender] && !_isFeeExempt[recipient]){

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (recipient != address(router) && !automatedMarketMakerPairs[recipient]){
                        require(_holderLastTransferBlock[tx.origin] + 2 < block.number && _holderLastTransferBlock[recipient] + 2 < block.number, "_transfer:: Transfer Delay enabled.  Try again later.");
                        _holderLastTransferBlock[tx.origin] = block.number;
                        _holderLastTransferBlock[recipient] = block.number;
                    }
                }
                //when buy
                if (automatedMarketMakerPairs[sender]) {
                    require(amount <= maxTxnAmount, "Buy transfer amount exceeds the max buy.");
                }
                if (!automatedMarketMakerPairs[recipient]){
                    require(balanceOf(recipient) + amount <= maxWallet, "Max Wallet Exceeded");
                }
            }
        }

        if(!_isFeeExempt[sender] && !_isFeeExempt[recipient] && shouldSwapBack() && !automatedMarketMakerPairs[sender]){
            inSwap = true;
            swapBack();
            inSwap = false;
        }

        if(autoRebase && !automatedMarketMakerPairs[sender] && !inSwap && shouldRebase() && !_isFeeExempt[recipient] && !_isFeeExempt[sender]){
            rebase();
        }

        uint256 gonAmount = amount*(_gonsPerFragment);

        _gonBalances[sender] = _gonBalances[sender]-(gonAmount);

        uint256 gonAmountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, gonAmount) : gonAmount;
        _gonBalances[recipient] = _gonBalances[recipient]+(gonAmountReceived);

        emit Transfer(sender, recipient, gonAmountReceived/(_gonsPerFragment));

        return true;
    }

    function transferFrom(address from, address to,  uint256 value) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != MAX_UINT256) {
            require(_allowedFragments[from][msg.sender] >= value,"Insufficient Allowance");
            _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender]-(value);
        }
        _transferFrom(from, to, value);
        return true;
    }

    
    function swapBack() public {

        uint256 contractBalance = balanceOf(address(this));

        if(contractBalance > gonSwapThreshold/(_gonsPerFragment) * 20){
            contractBalance = gonSwapThreshold/(_gonsPerFragment) * 20;
        }

        uint256 tokensForLiquidity = contractBalance * liquidityFee / totalFee;

        if(tokensForLiquidity > 0 && contractBalance >= tokensForLiquidity){
            _transferFrom(address(this), pair, tokensForLiquidity);
            manualSync();
            contractBalance -= tokensForLiquidity;
            tokensForLiquidity = 0;
        }
        
        swapTokensForPAIREDTOKEN(contractBalance);

        tokenHandler.sendTokenToOwner(address(PAIREDTOKEN));
        
        uint256 pairedTokenBalance = IERC20(PAIREDTOKEN).balanceOf(address(this));

        uint256 pairedTokenForTreasury = pairedTokenBalance * treasuryFee / (treasuryFee + marketingFee);

        if(pairedTokenForTreasury > 0){
            IERC20(PAIREDTOKEN).transfer(treasuryAddress, pairedTokenForTreasury);
        }

        if(IERC20(PAIREDTOKEN).balanceOf(address(this)) > 0){
            IERC20(PAIREDTOKEN).transfer(marketingAddress, IERC20(PAIREDTOKEN).balanceOf(address(this)));
        }
    }

    function swapTokensForPAIREDTOKEN(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(PAIREDTOKEN);

        // make the swap
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount
            path,
            address(tokenHandler),
            block.timestamp
        );
    }

    function takeFee(address sender, uint256 gonAmount) internal returns (uint256){

        uint256 feeAmount = gonAmount*(totalFee)/(feeDenominator);

        _gonBalances[address(this)] = _gonBalances[address(this)]+(feeAmount);
        emit Transfer(sender, address(this), feeAmount/(_gonsPerFragment));

        return gonAmount-(feeAmount);
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool){
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue-(
                subtractedValue
            );
        }
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool){
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][
        spender
        ]+(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

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

    function getSupplyDeltaOnNextRebase() external view returns (uint256){
        return (_totalSupply*rewardYield)/rewardYieldDenominator;
    }

    function rebase() private returns (uint256) {
        uint256 epoch = block.timestamp;

        if(lastReduction + timeBetweenRebaseReduction <= block.timestamp){
            rewardYield -= rewardYield * rebaseReductionAmount / 10;
            lastReduction = block.timestamp;
        }

        uint256 supplyDelta = (_totalSupply*rewardYield)/rewardYieldDenominator;
        
        nextRebase = nextRebase + rebaseFrequency;

        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }

        _totalSupply = _totalSupply+supplyDelta;

        if (_totalSupply > MAX_SUPPLY) {
            _totalSupply = MAX_SUPPLY;
        }

        _gonsPerFragment = TOTAL_GONS/(_totalSupply);

        manualSync();

        emit LogRebase(epoch, _totalSupply);
        return _totalSupply;
    }

    function manualRebase() external {
        require(!inSwap, "Try again");
        require(shouldRebase(), "Not in time");
        rebase();
    }
    
    function setAutomatedMarketMakerPair(address _pair, bool _value) public onlyOwner {
        require(automatedMarketMakerPairs[_pair] != _value, "Value already set");

        automatedMarketMakerPairs[_pair] = _value;

        if(_value){
            _makerPairs.push(_pair);
        } else {
            require(_makerPairs.length > 1, "Required 1 pair");
            for (uint256 i = 0; i < _makerPairs.length; i++) {
                if (_makerPairs[i] == _pair) {
                    _makerPairs[i] = _makerPairs[_makerPairs.length - 1];
                    _makerPairs.pop();
                    break;
                }
            }
        }

        emit SetAutomatedMarketMakerPair(_pair, _value);
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading already active");
        tradingActive = true;
        nextRebase = block.timestamp + rebaseFrequency;
        lastReduction = block.timestamp;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
    }

    function setFeeExempt(address _addr, bool _value) external onlyOwner {
        require(_isFeeExempt[_addr] != _value, "Not changed");
        _isFeeExempt[_addr] = _value;
    }

    function setFeeReceivers(address _marketingReceiver, address _treasuryReceiver) external onlyOwner {
        require(_marketingReceiver != address(0) && _treasuryReceiver != address(0), "zero address");
        treasuryAddress = _treasuryReceiver;
        marketingAddress = _marketingReceiver;
    }

    function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _treasuryFee) external onlyOwner {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        treasuryFee = _treasuryFee;
        totalFee = liquidityFee + marketingFee + treasuryFee;
        require(totalFee <= MAX_FEE_RATE, "Fees set too high");
    }

    function rescueToken(address tokenAddress, uint256 tokens, address destination) external onlyOwner returns (bool success){
        require(tokenAddress != address(this), "Cannot take native tokens");
        return ERC20Detailed(tokenAddress).transfer(destination, tokens);
    }

    function setNextRebase(uint256 _nextRebase) external onlyOwner {
        require(_nextRebase > block.timestamp, "Must set rebase in the future");
        nextRebase = _nextRebase;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"MAX_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_REBASE_FREQUENCY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_REBASE_FREQUENCY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAIREDTOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_makerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"alterToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSupplyDeltaOnNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastReduction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseReductionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"destination","type":"address"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardYieldDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeBetweenRebaseReduction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenHandler","outputs":[{"internalType":"contract TokenHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a06040526002805461ffff60a81b1916600160b01b17815566011f54017b1242600390815567016345785d8a0000600455611c206005556007805460ff1990811660019081179092556213c6806008556009839055601080546001600160a01b031990811661dead1790915560118054909116905560188054909116909117905560006019819055601a829055601b8390556200009e91906200066e565b620000aa91906200066e565b601c556064601d55601e805460ff19166001179055620186a0620000d16012600a62000781565b620000e0906269ed3062000796565b620000ee90600019620007c6565b620000fc90600019620007dd565b620001089190620007f3565b6200011590601962000796565b6021553480156200012557600080fd5b504660011462000151576040518060400160405280600381526020016241574d60e81b81525062000188565b6040518060400160405280601881526020017f417574697374205765616c7468204d616e6167656d656e7400000000000000008152505b46600114620001b3576040518060400160405280600381526020016241574d60e81b815250620001d0565b6040518060400160405280600381526020016241574d60e81b8152505b60126000620001e08482620008af565b506001620001ef8382620008af565b506002805460ff929092166001600160a81b031990921691909117610100330217905550600090508046600103620002545750737a250d5630b4cf539739df2c5dacb4c659f2488d905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2620002a0565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e66696775726564000000000000000000000000604482015260640160405180910390fd5b601280546001600160a01b031990811673a773ac8751ae7f4b9b5d4393ce3204fda32346ef17909155601380549091167340bf1fd3578bc4f8badd3cbcbd419027e8614073179055600554620002f790426200066e565b600655601480546001600160a01b0319166001600160a01b038381169190911790915582166080526040516200032d906200064a565b604051809103906000f0801580156200034a573d6000803e3d6000fd5b50601680546001600160a01b0319166001600160a01b03928316179055306000818152602360208181526040808420608051909616808552868352818520600019908190553386529383528185209085528252808420839055938352939093522055620003ba6012600a62000781565b620003c9906269ed3062000796565b601f556064620003dc6012600a62000781565b620003eb906269ed3062000796565b620003f990600019620007c6565b6200040790600019620007dd565b620004139190620007f3565b6200042090605f62000796565b336000908152602260205260409020819055620004406012600a62000781565b6200044f906269ed3062000796565b6200045d90600019620007c6565b6200046b90600019620007dd565b620004779190620007dd565b6013546001600160a01b031660009081526022602052604081208054909190620004a39084906200066e565b9091555050601f54620004b96012600a62000781565b620004c8906269ed3062000796565b620004d690600019620007c6565b620004e490600019620007dd565b620004f09190620007f3565b602055601f546064906200050690600162000796565b620005129190620007f3565b600b55601f546064906200052890600162000796565b620005349190620007f3565b600c55306000908152600d60205260408082208054600160ff1991821681179092553380855283852080548316841790556001600160a01b0387168552928420805482168317905561dead84527fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a805490911690911790559060008051602062003826833981519152620005c8836200061b565b60405190815260200160405180910390a36013546001600160a01b031660006000805160206200382683398151915262000602836200061b565b60405190815260200160405180910390a350506200097b565b602080546001600160a01b038316600090815260229092526040822054620006449190620007f3565b92915050565b61044580620033e183390190565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000644576200064462000658565b600181815b80851115620006c5578160001904821115620006a957620006a962000658565b80851615620006b757918102915b93841c939080029062000689565b509250929050565b600082620006de5750600162000644565b81620006ed5750600062000644565b8160018114620007065760028114620007115762000731565b600191505062000644565b60ff84111562000725576200072562000658565b50506001821b62000644565b5060208310610133831016604e8410600b841016171562000756575081810a62000644565b62000762838362000684565b806000190482111562000779576200077962000658565b029392505050565b60006200078f8383620006cd565b9392505050565b808202811582820484141762000644576200064462000658565b634e487b7160e01b600052601260045260246000fd5b600082620007d857620007d8620007b0565b500690565b8181038181111562000644576200064462000658565b600082620008055762000805620007b0565b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200083557607f821691505b6020821081036200085657634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008aa57600081815260208120601f850160051c81016020861015620008855750805b601f850160051c820191505b81811015620008a65782815560010162000891565b5050505b505050565b81516001600160401b03811115620008cb57620008cb6200080a565b620008e381620008dc845462000820565b846200085c565b602080601f8311600181146200091b5760008415620009025750858301515b600019600386901b1c1916600185901b178555620008a6565b600085815260208120601f198616915b828110156200094c578886015182559484019460019091019084016200092b565b50858210156200096b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051612a35620009ac6000396000818161076301528181610b0d01528181611bf801526122ae0152612a356000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c806392f6576e116101f4578063c4d59f6a1161011a578063d6737a6e116100ad578063f2fde38b1161007c578063f2fde38b1461074b578063f887ea401461075e578063f8a67a6214610785578063f8b45b051461079857600080fd5b8063d6737a6e146106ee578063d7832b1114610701578063dd62ed3e1461070a578063e884f2601461074357600080fd5b8063cec10c11116100e9578063cec10c111461069d578063cf46f24c146106b0578063cf909970146106b9578063d4399790146106c257600080fd5b8063c4d59f6a146105c3578063c5f956af14610674578063c876d0b914610687578063cc32d1761461069457600080fd5b8063a4b45c0011610192578063aa77022311610161578063aa7702231461062b578063b62496f514610634578063bbc0c74214610657578063bc7e68a31461066b57600080fd5b8063a4b45c00146105df578063a5ece941146105f2578063a8aa1b3114610605578063a9059cbb1461061857600080fd5b80639a7a23d6116101ce5780639a7a23d61461059d5780639ae7372d146105b05780639cd84e88146105c3578063a457c2d7146105cc57600080fd5b806392f6576e1461058457806395d89b411461058c57806398118cb41461059457600080fd5b806361a9d1b1116102d9578063715018a6116102775780638a8c523c116102465780638a8c523c146105465780638da5cb5b1461054e5780638ebfc796146105645780639079f9321461057757600080fd5b8063715018a614610525578063751039fc1461052d578063753d02a11461053557806389375abf1461053d57600080fd5b80636b67c4df116102b35780636b67c4df146104ed5780636d351d1a146104f65780636ddd1713146104fe57806370a082311461051257600080fd5b806361a9d1b1146104d257806363eab10a146104da5780636ac5eeee146104e557600080fd5b806323b872dd116103515780633970124c116103205780633970124c14610495578063444c74fe146104a85780634a62bb65146104bd5780635f7468f3146104ca57600080fd5b806323b872dd146104515780632f75695c14610464578063313ce5671461046d578063395093511461048257600080fd5b8063180b0d7e1161038d578063180b0d7e1461040c57806318160ddd146104155780631b3d6e871461041d5780631df4ccfc1461044857600080fd5b806306fdde03146103b4578063095ea7b3146103d25780630af08314146103f5575b600080fd5b6103bc6107a1565b6040516103c99190612528565b60405180910390f35b6103e56103e036600461258b565b610833565b60405190151581526020016103c9565b6103fe60035481565b6040519081526020016103c9565b6103fe601d5481565b601f546103fe565b601654610430906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b6103fe601c5481565b6103e561045f3660046125b7565b6108a0565b6103fe60095481565b60025460405160ff90911681526020016103c9565b6103e561049036600461258b565b6109be565b601454610430906001600160a01b031681565b6104bb6104b63660046125f8565b610a44565b005b601e546103e59060ff1681565b6103fe610c6c565b6104bb610c90565b6006544210156103e5565b6104bb610d1f565b6103fe601a5481565b6103fe6110bc565b6002546103e590600160b01b900460ff1681565b6103fe6105203660046125f8565b6110ce565b6104bb6110f5565b6104bb611173565b6104bb6111d7565b6103fe60055481565b6104bb611266565b60025461010090046001600160a01b0316610430565b6104bb61057236600461262a565b611311565b6007546103e59060ff1681565b6103fe600581565b6103bc6113c9565b6103fe60195481565b6104bb6105ab36600461262a565b6113d8565b6104bb6105be366004612663565b611672565b6103fe611c2081565b6103e56105da36600461258b565b6116f5565b6104bb6105ed36600461267c565b6117dc565b601254610430906001600160a01b031681565b601554610430906001600160a01b031681565b6103e561062636600461258b565b611897565b6103fe600a5481565b6103e56106423660046125f8565b600f6020526000908152604090205460ff1681565b6002546103e590600160a81b900460ff1681565b6103fe60065481565b601354610430906001600160a01b031681565b6018546103e59060ff1681565b6103fe601b5481565b6104bb6106ab3660046126aa565b6118c3565b6103fe600b5481565b6103fe60085481565b6103e56106d03660046125f8565b6001600160a01b03166000908152600d602052604090205460ff1690565b6104306106fc366004612663565b611964565b6103fe60045481565b6103fe61071836600461267c565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b6104bb61198e565b6104bb6107593660046125f8565b6119c9565b6104307f000000000000000000000000000000000000000000000000000000000000000081565b6103e56107933660046126d6565b611a01565b6103fe600c5481565b6060600080546107b090612718565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90612718565b80156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b5050505050905090565b3360008181526023602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088e9086815260200190565b60405180910390a35060015b92915050565b6000826001600160a01b0381166108b657600080fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054600019146109a7576001600160a01b03851660009081526023602090815260408083203384529091529020548311156109535760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064015b60405180910390fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054610982908490612768565b6001600160a01b03861660009081526023602090815260408083203384529091529020555b6109b2858585611b06565b50600195945050505050565b3360009081526023602090815260408083206001600160a01b03861684529091528120546109ed90839061277b565b3360008181526023602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161088e565b60025461010090046001600160a01b03163314610a735760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b038116610ab85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161094a565b600254600160a81b900460ff1615610b0b5760405162461bcd60e51b815260206004820152601660248201527574726164696e6720616c72656164792061637469766560501b604482015260640161094a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d91906127b1565b6040516364e329cb60e11b81523060048201526001600160a01b038381166024830152919091169063c9c65396906044016020604051808303816000875af1158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0191906127b1565b601580546001600160a01b0319166001600160a01b03928316908117825530600090815260236020908152604080832093835292905220600019905554610c4a911660016113d8565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000600454600354601f54610c8191906127ce565b610c8b91906127fb565b905090565b601e54610100900460ff1615610cd45760405162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015260640161094a565b600654421015610d145760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015260640161094a565b610d1c61207c565b50565b6000610d2a306110ce565b9050602054602154610d3c91906127fb565b610d479060146127ce565b811115610d6c57602054602154610d5e91906127fb565b610d699060146127ce565b90505b6000601c5460195483610d7f91906127ce565b610d8991906127fb565b9050600081118015610d9b5750808210155b15610dd257601554610db89030906001600160a01b031683611b06565b50610dc16111d7565b610dcb8183612768565b9150600090505b610ddb82612220565b6016546014546040516304fa881160e21b81526001600160a01b0391821660048201529116906313ea204490602401600060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b50506014546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab919061280f565b90506000601a54601b54610ebf919061277b565b601b54610ecc90846127ce565b610ed691906127fb565b90508015610f595760145460135460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190612828565b505b6014546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc6919061280f565b11156110b6576014546012546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa158015611021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611045919061280f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190612828565b505b50505050565b6000602054602154610c8b91906127fb565b602080546001600160a01b03831660009081526022909252604082205461089a91906127fb565b60025461010090046001600160a01b031633146111245760405162461bcd60e51b815260040161094a9061278e565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60025461010090046001600160a01b031633146111a25760405162461bcd60e51b815260040161094a9061278e565b601e805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b60005b600e54811015610d1c57600e81815481106111f7576111f7612845565b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b15801561124257600080fd5b505af1925050508015611253575060015b508061125e8161285b565b9150506111da565b60025461010090046001600160a01b031633146112955760405162461bcd60e51b815260040161094a9061278e565b600254600160a81b900460ff16156112e85760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b604482015260640161094a565b6002805460ff60a81b1916600160a81b179055600554611308904261277b565b60065542600a55565b60025461010090046001600160a01b031633146113405760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600d602052604090205481151560ff90911615150361139e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015260640161094a565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6060600180546107b090612718565b60025461010090046001600160a01b031633146114075760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600f602052604090205481151560ff90911615150361146b5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640161094a565b6001600160a01b0382166000908152600f60205260409020805460ff191682158015919091179091556114e857600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b038416179055611636565b600e5460011061152c5760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015260640161094a565b60005b600e5481101561163457826001600160a01b0316600e828154811061155657611556612845565b6000918252602090912001546001600160a01b03160361162257600e805461158090600190612768565b8154811061159057611590612845565b600091825260209091200154600e80546001600160a01b0390921691839081106115bc576115bc612845565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600e8054806115fb576115fb612874565b600082815260209020810160001990810180546001600160a01b0319169055019055611634565b8061162c8161285b565b91505061152f565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b031633146116a15760405162461bcd60e51b815260040161094a9061278e565b4281116116f05760405162461bcd60e51b815260206004820152601d60248201527f4d757374207365742072656261736520696e2074686520667574757265000000604482015260640161094a565b600655565b3360009081526023602090815260408083206001600160a01b0386168452909152812054808310611749573360009081526023602090815260408083206001600160a01b0388168452909152812055611778565b6117538382612768565b3360009081526023602090815260408083206001600160a01b03891684529091529020555b3360008181526023602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b60025461010090046001600160a01b0316331461180b5760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382161580159061182b57506001600160a01b03811615155b6118665760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640161094a565b601380546001600160a01b039283166001600160a01b03199182161790915560128054939092169216919091179055565b6000826001600160a01b0381166118ad57600080fd5b6118b8338585611b06565b506001949350505050565b60025461010090046001600160a01b031633146118f25760405162461bcd60e51b815260040161094a9061278e565b6019839055601a829055601b8190558061190c838561277b565b611916919061277b565b601c8190556005101561195f5760405162461bcd60e51b815260206004820152601160248201527008ccacae640e6cae840e8dede40d0d2ced607b1b604482015260640161094a565b505050565b600e818154811061197457600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b031633146119bd5760405162461bcd60e51b815260040161094a9061278e565b6018805460ff19169055565b60025461010090046001600160a01b031633146119f85760405162461bcd60e51b815260040161094a9061278e565b610d1c81612324565b60025460009061010090046001600160a01b03163314611a335760405162461bcd60e51b815260040161094a9061278e565b306001600160a01b03851603611a8b5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742074616b65206e617469766520746f6b656e7300000000000000604482015260640161094a565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820185905285169063a9059cbb906044016020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190612828565b949350505050565b600254600090600160a81b900460ff16611b99576001600160a01b0384166000908152600d602052604090205460ff1680611b5957506001600160a01b0383166000908152600d602052604090205460ff165b611b995760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc81c185d5cd959607a1b604482015260640161094a565b601e5460ff1615611e31576001600160a01b0384166000908152600d602052604090205460ff16158015611be657506001600160a01b0383166000908152600d602052604090205460ff16155b15611e315760185460ff1615611d32577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614158015611c5157506001600160a01b0383166000908152600f602052604090205460ff16155b15611d3257326000908152601760205260409020544390611c7390600261277b565b108015611ca357506001600160a01b0383166000908152601760205260409020544390611ca190600261277b565b105b611d0d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606482015260840161094a565b3260009081526017602052604080822043908190556001600160a01b03861683529120555b6001600160a01b0384166000908152600f602052604090205460ff1615611db657600b54821115611db65760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161094a565b6001600160a01b0383166000908152600f602052604090205460ff16611e3157600c5482611de3856110ce565b611ded919061277b565b1115611e315760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b604482015260640161094a565b6001600160a01b0384166000908152600d602052604090205460ff16158015611e7357506001600160a01b0383166000908152600d602052604090205460ff16155b8015611e825750611e8261239e565b8015611ea757506001600160a01b0384166000908152600f602052604090205460ff16155b15611ecf57601e805461ff001916610100179055611ec3610d1f565b601e805461ff00191690555b60075460ff168015611efa57506001600160a01b0384166000908152600f602052604090205460ff16155b8015611f0e5750601e54610100900460ff16155b8015611f1c57506006544210155b8015611f4157506001600160a01b0383166000908152600d602052604090205460ff16155b8015611f6657506001600160a01b0384166000908152600d602052604090205460ff16155b15611f7557611f7361207c565b505b600060205483611f8591906127ce565b6001600160a01b038616600090815260226020526040902054909150611fac908290612768565b6001600160a01b038616600090815260226020526040812091909155611fd286866123f0565b611fdc5781611fe6565b611fe68683612482565b6001600160a01b03861660009081526022602052604090205490915061200d90829061277b565b6001600160a01b038087166000818152602260209081526040909120939093559154908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061205f90856127fb565b60405190815260200160405180910390a350600195945050505050565b600854600a54600091429182916120929161277b565b116120ce57600a6009546003546120a991906127ce565b6120b391906127fb565b600360008282546120c49190612768565b909155505042600a555b6000600454600354601f546120e391906127ce565b6120ed91906127fb565b90506005546006546120ff919061277b565b600655600081900361215157817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b60405180910390a2601f549250505090565b80601f5461215f919061277b565b601f5561216e6012600a61296e565b61217c9063042343e06127ce565b601f5411156121a3576121916012600a61296e565b61219f9063042343e06127ce565b601f555b601f546121b26012600a61296e565b6121bf906269ed306127ce565b6121cb9060001961297a565b6121d790600019612768565b6121e191906127fb565b6020556121ec6111d7565b817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061225557612255612845565b6001600160a01b03928316602091820292909201015260145482519116908290600190811061228657612286612845565b6001600160a01b039283166020918202929092010152601654604051635c11d79560e01b81527f0000000000000000000000000000000000000000000000000000000000000000831692635c11d795926122ee9287926000928892911690429060040161298e565b600060405180830381600087803b15801561230857600080fd5b505af115801561231c573d6000803e3d6000fd5b505050505050565b6001600160a01b03811661233757600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b601e54600090610100900460ff161580156123c25750600254600160b01b900460ff165b80156123d057506000601c54115b8015610c8b57505060215430600090815260226020526040902054101590565b6001600160a01b0382166000908152600d602052604081205460ff168061242f57506001600160a01b0382166000908152600d602052604090205460ff165b1561243c5750600061089a565b6001600160a01b0383166000908152600f602052604090205460ff168061247b57506001600160a01b0382166000908152600f602052604090205460ff165b905061089a565b600080601d54601c548461249691906127ce565b6124a091906127fb565b306000908152602260205260409020549091506124be90829061277b565b3060008181526022602090815260409091209290925590546001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061250d90856127fb565b60405190815260200160405180910390a3611afe8184612768565b600060208083528351808285015260005b8181101561255557858101830151858201604001528201612539565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1c57600080fd5b6000806040838503121561259e57600080fd5b82356125a981612576565b946020939093013593505050565b6000806000606084860312156125cc57600080fd5b83356125d781612576565b925060208401356125e781612576565b929592945050506040919091013590565b60006020828403121561260a57600080fd5b813561261581612576565b9392505050565b8015158114610d1c57600080fd5b6000806040838503121561263d57600080fd5b823561264881612576565b915060208301356126588161261c565b809150509250929050565b60006020828403121561267557600080fd5b5035919050565b6000806040838503121561268f57600080fd5b823561269a81612576565b9150602083013561265881612576565b6000806000606084860312156126bf57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156126eb57600080fd5b83356126f681612576565b925060208401359150604084013561270d81612576565b809150509250925092565b600181811c9082168061272c57607f821691505b60208210810361274c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089a5761089a612752565b8082018082111561089a5761089a612752565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000602082840312156127c357600080fd5b815161261581612576565b808202811582820484141761089a5761089a612752565b634e487b7160e01b600052601260045260246000fd5b60008261280a5761280a6127e5565b500490565b60006020828403121561282157600080fd5b5051919050565b60006020828403121561283a57600080fd5b81516126158161261c565b634e487b7160e01b600052603260045260246000fd5b60006001820161286d5761286d612752565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181815b808511156128c55781600019048211156128ab576128ab612752565b808516156128b857918102915b93841c939080029061288f565b509250929050565b6000826128dc5750600161089a565b816128e95750600061089a565b81600181146128ff576002811461290957612925565b600191505061089a565b60ff84111561291a5761291a612752565b50506001821b61089a565b5060208310610133831016604e8410600b8410161715612948575081810a61089a565b612952838361288a565b806000190482111561296657612966612752565b029392505050565b600061261583836128cd565b600082612989576129896127e5565b500690565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129de5784516001600160a01b0316835293830193918301916001016129b9565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122095b2fac2c11fbbff7d8758932cfc56adfb9b6480f22e0bbf047a595ed8f8c98564736f6c63430008110033608060405234801561001057600080fd5b50600080546001600160a01b03191633179055610413806100326000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806313ea204414610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b1461008d575b600080fd5b61006461005f36600461034f565b6100a0565b005b610064610241565b600054604080516001600160a01b039092168252519081900360200190f35b61006461009b36600461034f565b6102b3565b6000546001600160a01b031633146100d35760405162461bcd60e51b81526004016100ca9061037f565b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561011a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061013e91906103a2565b111561023e57806001600160a01b031663a9059cbb6101656000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156101a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101cd91906103a2565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c91906103bb565b505b50565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526004016100ca9061037f565b600080546040516001600160a01b03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a2600080546001600160a01b0319169055565b6000546001600160a01b031633146102dd5760405162461bcd60e51b81526004016100ca9061037f565b61023e816001600160a01b0381166102f457600080fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006020828403121561036157600080fd5b81356001600160a01b038116811461037857600080fd5b9392505050565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000602082840312156103b457600080fd5b5051919050565b6000602082840312156103cd57600080fd5b8151801515811461037857600080fdfea2646970667358221220399a7f69f0f71e3b311e1fbc4547db673f957a702e0d21ebd7ee9b22de0f665c64736f6c63430008110033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103af5760003560e01c806392f6576e116101f4578063c4d59f6a1161011a578063d6737a6e116100ad578063f2fde38b1161007c578063f2fde38b1461074b578063f887ea401461075e578063f8a67a6214610785578063f8b45b051461079857600080fd5b8063d6737a6e146106ee578063d7832b1114610701578063dd62ed3e1461070a578063e884f2601461074357600080fd5b8063cec10c11116100e9578063cec10c111461069d578063cf46f24c146106b0578063cf909970146106b9578063d4399790146106c257600080fd5b8063c4d59f6a146105c3578063c5f956af14610674578063c876d0b914610687578063cc32d1761461069457600080fd5b8063a4b45c0011610192578063aa77022311610161578063aa7702231461062b578063b62496f514610634578063bbc0c74214610657578063bc7e68a31461066b57600080fd5b8063a4b45c00146105df578063a5ece941146105f2578063a8aa1b3114610605578063a9059cbb1461061857600080fd5b80639a7a23d6116101ce5780639a7a23d61461059d5780639ae7372d146105b05780639cd84e88146105c3578063a457c2d7146105cc57600080fd5b806392f6576e1461058457806395d89b411461058c57806398118cb41461059457600080fd5b806361a9d1b1116102d9578063715018a6116102775780638a8c523c116102465780638a8c523c146105465780638da5cb5b1461054e5780638ebfc796146105645780639079f9321461057757600080fd5b8063715018a614610525578063751039fc1461052d578063753d02a11461053557806389375abf1461053d57600080fd5b80636b67c4df116102b35780636b67c4df146104ed5780636d351d1a146104f65780636ddd1713146104fe57806370a082311461051257600080fd5b806361a9d1b1146104d257806363eab10a146104da5780636ac5eeee146104e557600080fd5b806323b872dd116103515780633970124c116103205780633970124c14610495578063444c74fe146104a85780634a62bb65146104bd5780635f7468f3146104ca57600080fd5b806323b872dd146104515780632f75695c14610464578063313ce5671461046d578063395093511461048257600080fd5b8063180b0d7e1161038d578063180b0d7e1461040c57806318160ddd146104155780631b3d6e871461041d5780631df4ccfc1461044857600080fd5b806306fdde03146103b4578063095ea7b3146103d25780630af08314146103f5575b600080fd5b6103bc6107a1565b6040516103c99190612528565b60405180910390f35b6103e56103e036600461258b565b610833565b60405190151581526020016103c9565b6103fe60035481565b6040519081526020016103c9565b6103fe601d5481565b601f546103fe565b601654610430906001600160a01b031681565b6040516001600160a01b0390911681526020016103c9565b6103fe601c5481565b6103e561045f3660046125b7565b6108a0565b6103fe60095481565b60025460405160ff90911681526020016103c9565b6103e561049036600461258b565b6109be565b601454610430906001600160a01b031681565b6104bb6104b63660046125f8565b610a44565b005b601e546103e59060ff1681565b6103fe610c6c565b6104bb610c90565b6006544210156103e5565b6104bb610d1f565b6103fe601a5481565b6103fe6110bc565b6002546103e590600160b01b900460ff1681565b6103fe6105203660046125f8565b6110ce565b6104bb6110f5565b6104bb611173565b6104bb6111d7565b6103fe60055481565b6104bb611266565b60025461010090046001600160a01b0316610430565b6104bb61057236600461262a565b611311565b6007546103e59060ff1681565b6103fe600581565b6103bc6113c9565b6103fe60195481565b6104bb6105ab36600461262a565b6113d8565b6104bb6105be366004612663565b611672565b6103fe611c2081565b6103e56105da36600461258b565b6116f5565b6104bb6105ed36600461267c565b6117dc565b601254610430906001600160a01b031681565b601554610430906001600160a01b031681565b6103e561062636600461258b565b611897565b6103fe600a5481565b6103e56106423660046125f8565b600f6020526000908152604090205460ff1681565b6002546103e590600160a81b900460ff1681565b6103fe60065481565b601354610430906001600160a01b031681565b6018546103e59060ff1681565b6103fe601b5481565b6104bb6106ab3660046126aa565b6118c3565b6103fe600b5481565b6103fe60085481565b6103e56106d03660046125f8565b6001600160a01b03166000908152600d602052604090205460ff1690565b6104306106fc366004612663565b611964565b6103fe60045481565b6103fe61071836600461267c565b6001600160a01b03918216600090815260236020908152604080832093909416825291909152205490565b6104bb61198e565b6104bb6107593660046125f8565b6119c9565b6104307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6103e56107933660046126d6565b611a01565b6103fe600c5481565b6060600080546107b090612718565b80601f01602080910402602001604051908101604052809291908181526020018280546107dc90612718565b80156108295780601f106107fe57610100808354040283529160200191610829565b820191906000526020600020905b81548152906001019060200180831161080c57829003601f168201915b5050505050905090565b3360008181526023602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061088e9086815260200190565b60405180910390a35060015b92915050565b6000826001600160a01b0381166108b657600080fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054600019146109a7576001600160a01b03851660009081526023602090815260408083203384529091529020548311156109535760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b60448201526064015b60405180910390fd5b6001600160a01b0385166000908152602360209081526040808320338452909152902054610982908490612768565b6001600160a01b03861660009081526023602090815260408083203384529091529020555b6109b2858585611b06565b50600195945050505050565b3360009081526023602090815260408083206001600160a01b03861684529091528120546109ed90839061277b565b3360008181526023602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161088e565b60025461010090046001600160a01b03163314610a735760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b038116610ab85760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161094a565b600254600160a81b900460ff1615610b0b5760405162461bcd60e51b815260206004820152601660248201527574726164696e6720616c72656164792061637469766560501b604482015260640161094a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8d91906127b1565b6040516364e329cb60e11b81523060048201526001600160a01b038381166024830152919091169063c9c65396906044016020604051808303816000875af1158015610bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0191906127b1565b601580546001600160a01b0319166001600160a01b03928316908117825530600090815260236020908152604080832093835292905220600019905554610c4a911660016113d8565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b6000600454600354601f54610c8191906127ce565b610c8b91906127fb565b905090565b601e54610100900460ff1615610cd45760405162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015260640161094a565b600654421015610d145760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015260640161094a565b610d1c61207c565b50565b6000610d2a306110ce565b9050602054602154610d3c91906127fb565b610d479060146127ce565b811115610d6c57602054602154610d5e91906127fb565b610d699060146127ce565b90505b6000601c5460195483610d7f91906127ce565b610d8991906127fb565b9050600081118015610d9b5750808210155b15610dd257601554610db89030906001600160a01b031683611b06565b50610dc16111d7565b610dcb8183612768565b9150600090505b610ddb82612220565b6016546014546040516304fa881160e21b81526001600160a01b0391821660048201529116906313ea204490602401600060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b50506014546040516370a0823160e01b8152306004820152600093506001600160a01b0390911691506370a0823190602401602060405180830381865afa158015610e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eab919061280f565b90506000601a54601b54610ebf919061277b565b601b54610ecc90846127ce565b610ed691906127fb565b90508015610f595760145460135460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190612828565b505b6014546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610fa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc6919061280f565b11156110b6576014546012546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa158015611021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611045919061280f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b49190612828565b505b50505050565b6000602054602154610c8b91906127fb565b602080546001600160a01b03831660009081526022909252604082205461089a91906127fb565b60025461010090046001600160a01b031633146111245760405162461bcd60e51b815260040161094a9061278e565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60025461010090046001600160a01b031633146111a25760405162461bcd60e51b815260040161094a9061278e565b601e805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b60005b600e54811015610d1c57600e81815481106111f7576111f7612845565b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b15801561124257600080fd5b505af1925050508015611253575060015b508061125e8161285b565b9150506111da565b60025461010090046001600160a01b031633146112955760405162461bcd60e51b815260040161094a9061278e565b600254600160a81b900460ff16156112e85760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b604482015260640161094a565b6002805460ff60a81b1916600160a81b179055600554611308904261277b565b60065542600a55565b60025461010090046001600160a01b031633146113405760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600d602052604090205481151560ff90911615150361139e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015260640161094a565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6060600180546107b090612718565b60025461010090046001600160a01b031633146114075760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382166000908152600f602052604090205481151560ff90911615150361146b5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640161094a565b6001600160a01b0382166000908152600f60205260409020805460ff191682158015919091179091556114e857600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b038416179055611636565b600e5460011061152c5760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015260640161094a565b60005b600e5481101561163457826001600160a01b0316600e828154811061155657611556612845565b6000918252602090912001546001600160a01b03160361162257600e805461158090600190612768565b8154811061159057611590612845565b600091825260209091200154600e80546001600160a01b0390921691839081106115bc576115bc612845565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600e8054806115fb576115fb612874565b600082815260209020810160001990810180546001600160a01b0319169055019055611634565b8061162c8161285b565b91505061152f565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b031633146116a15760405162461bcd60e51b815260040161094a9061278e565b4281116116f05760405162461bcd60e51b815260206004820152601d60248201527f4d757374207365742072656261736520696e2074686520667574757265000000604482015260640161094a565b600655565b3360009081526023602090815260408083206001600160a01b0386168452909152812054808310611749573360009081526023602090815260408083206001600160a01b0388168452909152812055611778565b6117538382612768565b3360009081526023602090815260408083206001600160a01b03891684529091529020555b3360008181526023602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b60025461010090046001600160a01b0316331461180b5760405162461bcd60e51b815260040161094a9061278e565b6001600160a01b0382161580159061182b57506001600160a01b03811615155b6118665760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b604482015260640161094a565b601380546001600160a01b039283166001600160a01b03199182161790915560128054939092169216919091179055565b6000826001600160a01b0381166118ad57600080fd5b6118b8338585611b06565b506001949350505050565b60025461010090046001600160a01b031633146118f25760405162461bcd60e51b815260040161094a9061278e565b6019839055601a829055601b8190558061190c838561277b565b611916919061277b565b601c8190556005101561195f5760405162461bcd60e51b815260206004820152601160248201527008ccacae640e6cae840e8dede40d0d2ced607b1b604482015260640161094a565b505050565b600e818154811061197457600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b031633146119bd5760405162461bcd60e51b815260040161094a9061278e565b6018805460ff19169055565b60025461010090046001600160a01b031633146119f85760405162461bcd60e51b815260040161094a9061278e565b610d1c81612324565b60025460009061010090046001600160a01b03163314611a335760405162461bcd60e51b815260040161094a9061278e565b306001600160a01b03851603611a8b5760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742074616b65206e617469766520746f6b656e7300000000000000604482015260640161094a565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820185905285169063a9059cbb906044016020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe9190612828565b949350505050565b600254600090600160a81b900460ff16611b99576001600160a01b0384166000908152600d602052604090205460ff1680611b5957506001600160a01b0383166000908152600d602052604090205460ff165b611b995760405162461bcd60e51b8152602060048201526011602482015270151c98591a5b99c81a5cc81c185d5cd959607a1b604482015260640161094a565b601e5460ff1615611e31576001600160a01b0384166000908152600d602052604090205460ff16158015611be657506001600160a01b0383166000908152600d602052604090205460ff16155b15611e315760185460ff1615611d32577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614158015611c5157506001600160a01b0383166000908152600f602052604090205460ff16155b15611d3257326000908152601760205260409020544390611c7390600261277b565b108015611ca357506001600160a01b0383166000908152601760205260409020544390611ca190600261277b565b105b611d0d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b606482015260840161094a565b3260009081526017602052604080822043908190556001600160a01b03861683529120555b6001600160a01b0384166000908152600f602052604090205460ff1615611db657600b54821115611db65760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b606482015260840161094a565b6001600160a01b0383166000908152600f602052604090205460ff16611e3157600c5482611de3856110ce565b611ded919061277b565b1115611e315760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b604482015260640161094a565b6001600160a01b0384166000908152600d602052604090205460ff16158015611e7357506001600160a01b0383166000908152600d602052604090205460ff16155b8015611e825750611e8261239e565b8015611ea757506001600160a01b0384166000908152600f602052604090205460ff16155b15611ecf57601e805461ff001916610100179055611ec3610d1f565b601e805461ff00191690555b60075460ff168015611efa57506001600160a01b0384166000908152600f602052604090205460ff16155b8015611f0e5750601e54610100900460ff16155b8015611f1c57506006544210155b8015611f4157506001600160a01b0383166000908152600d602052604090205460ff16155b8015611f6657506001600160a01b0384166000908152600d602052604090205460ff16155b15611f7557611f7361207c565b505b600060205483611f8591906127ce565b6001600160a01b038616600090815260226020526040902054909150611fac908290612768565b6001600160a01b038616600090815260226020526040812091909155611fd286866123f0565b611fdc5781611fe6565b611fe68683612482565b6001600160a01b03861660009081526022602052604090205490915061200d90829061277b565b6001600160a01b038087166000818152602260209081526040909120939093559154908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061205f90856127fb565b60405190815260200160405180910390a350600195945050505050565b600854600a54600091429182916120929161277b565b116120ce57600a6009546003546120a991906127ce565b6120b391906127fb565b600360008282546120c49190612768565b909155505042600a555b6000600454600354601f546120e391906127ce565b6120ed91906127fb565b90506005546006546120ff919061277b565b600655600081900361215157817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b60405180910390a2601f549250505090565b80601f5461215f919061277b565b601f5561216e6012600a61296e565b61217c9063042343e06127ce565b601f5411156121a3576121916012600a61296e565b61219f9063042343e06127ce565b601f555b601f546121b26012600a61296e565b6121bf906269ed306127ce565b6121cb9060001961297a565b6121d790600019612768565b6121e191906127fb565b6020556121ec6111d7565b817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601f5460405161213f91815260200190565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061225557612255612845565b6001600160a01b03928316602091820292909201015260145482519116908290600190811061228657612286612845565b6001600160a01b039283166020918202929092010152601654604051635c11d79560e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d831692635c11d795926122ee9287926000928892911690429060040161298e565b600060405180830381600087803b15801561230857600080fd5b505af115801561231c573d6000803e3d6000fd5b505050505050565b6001600160a01b03811661233757600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b601e54600090610100900460ff161580156123c25750600254600160b01b900460ff165b80156123d057506000601c54115b8015610c8b57505060215430600090815260226020526040902054101590565b6001600160a01b0382166000908152600d602052604081205460ff168061242f57506001600160a01b0382166000908152600d602052604090205460ff165b1561243c5750600061089a565b6001600160a01b0383166000908152600f602052604090205460ff168061247b57506001600160a01b0382166000908152600f602052604090205460ff165b905061089a565b600080601d54601c548461249691906127ce565b6124a091906127fb565b306000908152602260205260409020549091506124be90829061277b565b3060008181526022602090815260409091209290925590546001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061250d90856127fb565b60405190815260200160405180910390a3611afe8184612768565b600060208083528351808285015260005b8181101561255557858101830151858201604001528201612539565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1c57600080fd5b6000806040838503121561259e57600080fd5b82356125a981612576565b946020939093013593505050565b6000806000606084860312156125cc57600080fd5b83356125d781612576565b925060208401356125e781612576565b929592945050506040919091013590565b60006020828403121561260a57600080fd5b813561261581612576565b9392505050565b8015158114610d1c57600080fd5b6000806040838503121561263d57600080fd5b823561264881612576565b915060208301356126588161261c565b809150509250929050565b60006020828403121561267557600080fd5b5035919050565b6000806040838503121561268f57600080fd5b823561269a81612576565b9150602083013561265881612576565b6000806000606084860312156126bf57600080fd5b505081359360208301359350604090920135919050565b6000806000606084860312156126eb57600080fd5b83356126f681612576565b925060208401359150604084013561270d81612576565b809150509250925092565b600181811c9082168061272c57607f821691505b60208210810361274c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089a5761089a612752565b8082018082111561089a5761089a612752565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6000602082840312156127c357600080fd5b815161261581612576565b808202811582820484141761089a5761089a612752565b634e487b7160e01b600052601260045260246000fd5b60008261280a5761280a6127e5565b500490565b60006020828403121561282157600080fd5b5051919050565b60006020828403121561283a57600080fd5b81516126158161261c565b634e487b7160e01b600052603260045260246000fd5b60006001820161286d5761286d612752565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181815b808511156128c55781600019048211156128ab576128ab612752565b808516156128b857918102915b93841c939080029061288f565b509250929050565b6000826128dc5750600161089a565b816128e95750600061089a565b81600181146128ff576002811461290957612925565b600191505061089a565b60ff84111561291a5761291a612752565b50506001821b61089a565b5060208310610133831016604e8410600b8410161715612948575081810a61089a565b612952838361288a565b806000190482111561296657612966612752565b029392505050565b600061261583836128cd565b600082612989576129896127e5565b500690565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129de5784516001600160a01b0316835293830193918301916001016129b9565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122095b2fac2c11fbbff7d8758932cfc56adfb9b6480f22e0bbf047a595ed8f8c98564736f6c63430008110033

Deployed Bytecode Sourcemap

10366:16799:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1349:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23244:218;;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;23244:218:0;1023:187:1;10493:44:0;;;;;;;;;1361:25:1;;;1349:2;1334:18;10493:44:0;1215:177:1;12612:35:0;;;;;;15154:102;15236:12;;15154:102;;12161:32;;;;;-1:-1:-1;;;;;12161:32:0;;;;;;-1:-1:-1;;;;;1581:32:1;;;1563:51;;1551:2;1536:18;12161:32:0;1397:223:1;12538:67:0;;;;;;19715:454;;;;;;:::i;:::-;;:::i;10822:40::-;;;;;;1535:83;1601:9;;1535:83;;1601:9;;;;2228:36:1;;2216:2;2201:18;1535:83:0;2086:184:1;22861:375:0;;;;;;:::i;:::-;;:::i;12057:26::-;;;;;-1:-1:-1;;;;;12057:26:0;;;17038:412;;;;;;:::i;:::-;;:::i;:::-;;12660:33;;;;;;;;;23470:144;;;:::i;24512:149::-;;;:::i;15817:106::-;15886:10;;15900:15;-1:-1:-1;15886:29:0;15817:106;;20183:1266;;;:::i;12463:31::-;;;;;;15686:123;;;:::i;10454:30::-;;;;;-1:-1:-1;;;10454:30:0;;;;;;15424:133;;;;;;:::i;:::-;;:::i;2930:126::-;;;:::i;16835:115::-;;;:::i;16436:166::-;;;:::i;10611:44::-;;;;;;25412:242;;;:::i;2741:79::-;2806:6;;;;;-1:-1:-1;;;;;2806:6:0;2741:79;;25821:180;;;;;;:::i;:::-;;:::i;10726:29::-;;;;;;;;;11136:40;;11175:1;11136:40;;1440:87;;;:::i;12425:31::-;;;;;;24673:731;;;;;;:::i;:::-;;:::i;26974:188::-;;;;;;:::i;:::-;;:::i;11183:51::-;;11230:4;11183:51;;22284:569;;;;;;:::i;:::-;;:::i;26009:304::-;;;;;;:::i;:::-;;:::i;11982:31::-;;;;;-1:-1:-1;;;;;11982:31:0;;;12133:19;;;;;-1:-1:-1;;;;;12133:19:0;;;16610:173;;;;;;:::i;:::-;;:::i;10886:28::-;;;;;;11069:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;10414:33;;;;;-1:-1:-1;;;10414:33:0;;;;;;10694:25;;;;;;12020:30;;;;;-1:-1:-1;;;;;12020:30:0;;;12377:39;;;;;;;;;12501:30;;;;;;26321:355;;;;;;:::i;:::-;;:::i;10923:27::-;;;;;;10764:51;;;;;;15565:113;;;;;;:::i;:::-;-1:-1:-1;;;;;15651:19:0;15627:4;15651:19;;;:12;:19;;;;;;;;;15565:113;11034:28;;;;;;:::i;:::-;;:::i;10544:58::-;;;;;;15264:152;;;;;;:::i;:::-;-1:-1:-1;;;;;15374:25:0;;;15348:7;15374:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;15264:152;25715:98;;;:::i;3064:109::-;;;;;;:::i;:::-;;:::i;12092:34::-;;;;;26684:282;;;;;;:::i;:::-;;:::i;10957:24::-;;;;;;1349:83;1386:13;1419:5;1412:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1349:83;:::o;23244:218::-;23352:10;23318:4;23334:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;23334:38:0;;;;;;;;;;:46;;;23396:36;23318:4;;23334:38;;23396:36;;;;23375:5;1361:25:1;;1349:2;1334:18;;1215:177;23396:36:0;;;;;;;;-1:-1:-1;23450:4:0;23244:218;;;;;:::o;19715:454::-;19825:4;19812:2;-1:-1:-1;;;;;13159:18:0;;13151:27;;;;;;-1:-1:-1;;;;;19846:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;19870:10:::1;19846:35:::0;;;;;;;;-1:-1:-1;;19846:50:0::1;19842:257;;-1:-1:-1::0;;;;;19921:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;19945:10:::1;19921:35:::0;;;;;;;;:44;-1:-1:-1;19921:44:0::1;19913:78;;;::::0;-1:-1:-1;;;19913:78:0;;5418:2:1;19913:78:0::1;::::0;::::1;5400:21:1::0;5457:2;5437:18;;;5430:30;-1:-1:-1;;;5476:18:1;;;5469:52;5538:18;;19913:78:0::1;;;;;;;;;-1:-1:-1::0;;;;;20044:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;20068:10:::1;20044:35:::0;;;;;;;;:43:::1;::::0;20081:5;;20044:43:::1;:::i;:::-;-1:-1:-1::0;;;;;20006:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;20030:10:::1;20006:35:::0;;;;;;;:81;19842:257:::1;20109:30;20123:4;20129:2;20133:5;20109:13;:30::i;:::-;-1:-1:-1::0;20157:4:0::1;::::0;19715:454;-1:-1:-1;;;;;19715:454:0:o;22861:375::-;23018:10;22943:4;23000:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;23000:58:0;;;;;;;;;;:71;;23060:10;;23000:71;:::i;:::-;22977:10;22959:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22959:38:0;;;;;;;;;;;;:112;;;23087:119;1361:25:1;;;22959:38:0;;23087:119;;1334:18:1;23087:119:0;1215:177:1;17038:412:0;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17114:22:0;::::1;17106:47;;;::::0;-1:-1:-1;;;17106:47:0;;6501:2:1;17106:47:0::1;::::0;::::1;6483:21:1::0;6540:2;6520:18;;;6513:30;-1:-1:-1;;;6559:18:1;;;6552:42;6611:18;;17106:47:0::1;6299:336:1::0;17106:47:0::1;17173:13;::::0;-1:-1:-1;;;17173:13:0;::::1;;;17172:14;17164:49;;;::::0;-1:-1:-1;;;17164:49:0;;6842:2:1;17164:49:0::1;::::0;::::1;6824:21:1::0;6881:2;6861:18;;;6854:30;-1:-1:-1;;;6900:18:1;;;6893:52;6962:18;;17164:49:0::1;6640:346:1::0;17164:49:0::1;17243:6;-1:-1:-1::0;;;;;17243:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17231:65;::::0;-1:-1:-1;;;17231:65:0;;17280:4:::1;17231:65;::::0;::::1;7459:34:1::0;-1:-1:-1;;;;;7529:15:1;;;7509:18;;;7502:43;17231:40:0;;;::::1;::::0;::::1;::::0;7394:18:1;;17231:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17224:4;:72:::0;;-1:-1:-1;;;;;;17224:72:0::1;-1:-1:-1::0;;;;;17224:72:0;;::::1;::::0;;::::1;::::0;;17333:4:::1;-1:-1:-1::0;17307:32:0;;;:17:::1;:32;::::0;;;;;;;:38;;;;;;;-1:-1:-1;;17307:52:0;;17398:4;17370:39:::1;::::0;17398:4:::1;-1:-1:-1::0;17370:27:0::1;:39::i;:::-;17420:11;:22:::0;;-1:-1:-1;;;;;;17420:22:0::1;-1:-1:-1::0;;;;;17420:22:0;;;::::1;::::0;;;::::1;::::0;;17038:412::o;23470:144::-;23531:7;23584:22;;23571:11;;23558:12;;:24;;;;:::i;:::-;23557:49;;;;:::i;:::-;23550:56;;23470:144;:::o;24512:149::-;24565:6;;;;;;;24564:7;24556:29;;;;-1:-1:-1;;;24556:29:0;;8188:2:1;24556:29:0;;;8170:21:1;8227:1;8207:18;;;8200:29;-1:-1:-1;;;8245:18:1;;;8238:39;8294:18;;24556:29:0;7986:332:1;24556:29:0;15886:10;;15900:15;-1:-1:-1;15886:29:0;24596:38;;;;-1:-1:-1;;;24596:38:0;;8525:2:1;24596:38:0;;;8507:21:1;8564:2;8544:18;;;8537:30;-1:-1:-1;;;8583:18:1;;;8576:41;8634:18;;24596:38:0;8323:335:1;24596:38:0;24645:8;:6;:8::i;:::-;;24512:149::o;20183:1266::-;20223:23;20249:24;20267:4;20249:9;:24::i;:::-;20223:50;;20325:16;;20307;;:35;;;;:::i;:::-;:40;;20345:2;20307:40;:::i;:::-;20289:15;:58;20286:147;;;20399:16;;20381;;:35;;;;:::i;:::-;:40;;20419:2;20381:40;:::i;:::-;20363:58;;20286:147;20445:26;20507:8;;20492:12;;20474:15;:30;;;;:::i;:::-;:41;;;;:::i;:::-;20445:70;;20552:1;20531:18;:22;:63;;;;;20576:18;20557:15;:37;;20531:63;20528:264;;;20639:4;;20610:54;;20632:4;;-1:-1:-1;;;;;20639:4:0;20645:18;20610:13;:54::i;:::-;;20679:12;:10;:12::i;:::-;20706:37;20725:18;20706:37;;:::i;:::-;;;20779:1;20758:22;;20528:264;20812:41;20837:15;20812:24;:41::i;:::-;20866:12;;20904:11;;20866:51;;-1:-1:-1;;;20866:51:0;;-1:-1:-1;;;;;20904:11:0;;;20866:51;;;1563::1;20866:12:0;;;:29;;1536:18:1;;20866:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20974:11:0;;20967:44;;-1:-1:-1;;;20967:44:0;;21005:4;20967:44;;;1563:51:1;20938:26:0;;-1:-1:-1;;;;;;20974:11:0;;;;-1:-1:-1;20967:29:0;;1536:18:1;;20967:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20938:73;;21024:30;21107:12;;21093:11;;:26;;;;:::i;:::-;21078:11;;21057:32;;:18;:32;:::i;:::-;:63;;;;:::i;:::-;21024:96;-1:-1:-1;21136:26:0;;21133:126;;21185:11;;21207:15;;21178:69;;-1:-1:-1;;;21178:69:0;;-1:-1:-1;;;;;21207:15:0;;;21178:69;;;9026:51:1;9093:18;;;9086:34;;;21185:11:0;;;21178:28;;8999:18:1;;21178:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21133:126;21281:11;;21274:44;;-1:-1:-1;;;21274:44:0;;21312:4;21274:44;;;1563:51:1;21321:1:0;;-1:-1:-1;;;;;21281:11:0;;21274:29;;1536:18:1;;21274:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;21271:171;;;21345:11;;21367:16;;21385:44;;-1:-1:-1;;;21385:44:0;;21423:4;21385:44;;;1563:51:1;-1:-1:-1;;;;;21345:11:0;;;;21338:28;;21367:16;;21345:11;;21385:29;;1536:18:1;;21385:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21338:92;;-1:-1:-1;;;;;;21338:92:0;;;;;;;-1:-1:-1;;;;;9044:32:1;;;21338:92:0;;;9026:51:1;9093:18;;;9086:34;8999:18;;21338:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21271:171;20210:1239;;;;20183:1266::o;15686:123::-;15739:7;15784:16;;15766;;:35;;;;:::i;15424:133::-;15532:16;;;-1:-1:-1;;;;;15513:17:0;;15486:7;15513:17;;;:12;:17;;;;;;;:36;;15532:16;15513:36;:::i;2930:126::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;3011:6:::1;::::0;2992:26:::1;::::0;3011:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;3011:6:0::1;::::0;2992:26:::1;::::0;;;::::1;3029:6;:19:::0;;-1:-1:-1;;;;;;3029:19:0::1;::::0;;2930:126::o;16835:115::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;16889:14:::1;:22:::0;;-1:-1:-1;;16889:22:0::1;::::0;;16927:15:::1;::::0;::::1;::::0;16906:5:::1;::::0;16927:15:::1;16835:115::o:0;16436:166::-;16480:6;16476:119;16496:11;:18;16492:22;;16476:119;;;16551:11;16563:1;16551:14;;;;;;;;:::i;:::-;;;;;;;;;;16539:34;;;-1:-1:-1;;;;;;16539:34:0;;;;-1:-1:-1;;;;;16551:14:0;;;;16539:32;;:34;;;;;;;;;;16551:14;;16539:34;;;;;;;;;;;;;;;;;;;;;;;;;16535:49;16516:3;;;;:::i;:::-;;;;16476:119;;25412:242;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;25476:13:::1;::::0;-1:-1:-1;;;25476:13:0;::::1;;;25475:14;25467:49;;;::::0;-1:-1:-1;;;25467:49:0;;9855:2:1;25467:49:0::1;::::0;::::1;9837:21:1::0;9894:2;9874:18;;;9867:30;-1:-1:-1;;;9913:18:1;;;9906:52;9975:18;;25467:49:0::1;9653:346:1::0;25467:49:0::1;25527:13;:20:::0;;-1:-1:-1;;;;25527:20:0::1;-1:-1:-1::0;;;25527:20:0::1;::::0;;25589:15:::1;::::0;25571:33:::1;::::0;:15:::1;:33;:::i;:::-;25558:10;:46:::0;25631:15:::1;25615:13;:31:::0;25412:242::o;25821:180::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25909:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;:29;::::1;;:19;::::0;;::::1;:29;;::::0;25901:53:::1;;;::::0;-1:-1:-1;;;25901:53:0;;10206:2:1;25901:53:0::1;::::0;::::1;10188:21:1::0;10245:2;10225:18;;;10218:30;-1:-1:-1;;;10264:18:1;;;10257:41;10315:18;;25901:53:0::1;10004:335:1::0;25901:53:0::1;-1:-1:-1::0;;;;;25965:19:0;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:28;;-1:-1:-1;;25965:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25821:180::o;1440:87::-;1479:13;1512:7;1505:14;;;;;:::i;24673:731::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24774:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;:42;::::1;;:32;::::0;;::::1;:42;;::::0;24766:72:::1;;;::::0;-1:-1:-1;;;24766:72:0;;10546:2:1;24766:72:0::1;::::0;::::1;10528:21:1::0;10585:2;10565:18;;;10558:30;-1:-1:-1;;;10604:18:1;;;10597:47;10661:18;;24766:72:0::1;10344:341:1::0;24766:72:0::1;-1:-1:-1::0;;;;;24851:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;24851:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;24905:432:::1;;24930:11;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24930:23:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24930:23:0::1;-1:-1:-1::0;;;;;24930:23:0;::::1;;::::0;;24905:432:::1;;;24994:11;:18:::0;25015:1:::1;-1:-1:-1::0;24986:50:0::1;;;::::0;-1:-1:-1;;;24986:50:0;;10892:2:1;24986:50:0::1;::::0;::::1;10874:21:1::0;10931:2;10911:18;;;10904:30;-1:-1:-1;;;10950:18:1;;;10943:45;11005:18;;24986:50:0::1;10690:339:1::0;24986:50:0::1;25056:9;25051:275;25075:11;:18:::0;25071:22;::::1;25051:275;;;25141:5;-1:-1:-1::0;;;;;25123:23:0::1;:11;25135:1;25123:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25123:14:0::1;:23:::0;25119:192:::1;;25188:11;25200:18:::0;;:22:::1;::::0;25221:1:::1;::::0;25200:22:::1;:::i;:::-;25188:35;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25171:11:::1;:14:::0;;-1:-1:-1;;;;;25188:35:0;;::::1;::::0;25183:1;;25171:14;::::1;;;;;:::i;:::-;;;;;;;;;:52;;;;;-1:-1:-1::0;;;;;25171:52:0::1;;;;;-1:-1:-1::0;;;;;25171:52:0::1;;;;;;25246:11;:17;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25246:17:0;;;;;-1:-1:-1;;;;;;25246:17:0::1;::::0;;;;;25286:5:::1;;25119:192;25095:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25051:275;;;;24905:432;25354:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;25354:42:0;::::1;::::0;::::1;::::0;;;::::1;24673:731:::0;;:::o;26974:188::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;27070:15:::1;27056:11;:29;27048:71;;;::::0;-1:-1:-1;;;27048:71:0;;11368:2:1;27048:71:0::1;::::0;::::1;11350:21:1::0;11407:2;11387:18;;;11380:30;11446:31;11426:18;;;11419:59;11495:18;;27048:71:0::1;11166:353:1::0;27048:71:0::1;27130:10;:24:::0;26974:188::o;22284:569::-;22424:10;22371:4;22406:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22406:38:0;;;;;;;;;;22459:27;;;22455:234;;22521:10;22544:1;22503:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22503:38:0;;;;;;;;;:42;22455:234;;;22619:58;22647:15;22619:8;:58;:::i;:::-;22596:10;22578:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22578:38:0;;;;;;;;;:99;22455:234;22727:10;22774:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22704:119:0;;22774:38;;;;;;;;;;;22704:119;;1361:25:1;;;22704:119:0;;22727:10;22704:119;;1334:18:1;22704:119:0;;;;;;;-1:-1:-1;22841:4:0;;22284:569;-1:-1:-1;;;22284:569:0:o;26009:304::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26127:32:0;::::1;::::0;;::::1;::::0;:67:::1;;-1:-1:-1::0;;;;;;26163:31:0;::::1;::::0;::::1;26127:67;26119:92;;;::::0;-1:-1:-1;;;26119:92:0;;11726:2:1;26119:92:0::1;::::0;::::1;11708:21:1::0;11765:2;11745:18;;;11738:30;-1:-1:-1;;;11784:18:1;;;11777:42;11836:18;;26119:92:0::1;11524:336:1::0;26119:92:0::1;26222:15;:35:::0;;-1:-1:-1;;;;;26222:35:0;;::::1;-1:-1:-1::0;;;;;;26222:35:0;;::::1;;::::0;;;26268:16:::1;:37:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;26009:304::o;16610:173::-;16701:4;16688:2;-1:-1:-1;;;;;13159:18:0;;13151:27;;;;;;16717:36:::1;16731:10;16743:2;16747:5;16717:13;:36::i;:::-;-1:-1:-1::0;16771:4:0::1;::::0;16610:173;-1:-1:-1;;;;16610:173:0:o;26321:355::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;26436:12:::1;:28:::0;;;26475:12:::1;:28:::0;;;26514:11:::1;:26:::0;;;26528:12;26562:27:::1;26490:13:::0;26451;26562:27:::1;:::i;:::-;:41;;;;:::i;:::-;26551:8;:52:::0;;;11175:1:::1;-1:-1:-1::0;26622:24:0::1;26614:54;;;::::0;-1:-1:-1;;;26614:54:0;;12067:2:1;26614:54:0::1;::::0;::::1;12049:21:1::0;12106:2;12086:18;;;12079:30;-1:-1:-1;;;12125:18:1;;;12118:47;12182:18;;26614:54:0::1;11865:341:1::0;26614:54:0::1;26321:355:::0;;;:::o;11034:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11034:28:0;;-1:-1:-1;11034:28:0;:::o;25715:98::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;25777:20:::1;:28:::0;;-1:-1:-1;;25777:28:0::1;::::0;;25715:98::o;3064:109::-;2882:6;;;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;3137:28:::1;3156:8;3137:18;:28::i;26684:282::-:0;2882:6;;26792:12;;2882:6;;;-1:-1:-1;;;;;2882:6:0;2868:10;:20;2860:42;;;;-1:-1:-1;;;2860:42:0;;;;;;;:::i;:::-;26848:4:::1;-1:-1:-1::0;;;;;26824:29:0;::::1;::::0;26816:67:::1;;;::::0;-1:-1:-1;;;26816:67:0;;12413:2:1;26816:67:0::1;::::0;::::1;12395:21:1::0;12452:2;12432:18;;;12425:30;12491:27;12471:18;;;12464:55;12536:18;;26816:67:0::1;12211:349:1::0;26816:67:0::1;26901:57;::::0;-1:-1:-1;;;26901:57:0;;-1:-1:-1;;;;;9044:32:1;;;26901:57:0::1;::::0;::::1;9026:51:1::0;9093:18;;;9086:34;;;26901:36:0;::::1;::::0;::::1;::::0;8999:18:1;;26901:57:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26894:64:::0;26684:282;-1:-1:-1;;;;26684:282:0:o;17458:2249::-;17573:13;;17550:4;;-1:-1:-1;;;17573:13:0;;;;17569:122;;-1:-1:-1;;;;;17610:20:0;;;;;;:12;:20;;;;;;;;;:47;;-1:-1:-1;;;;;;17634:23:0;;;;;;:12;:23;;;;;;;;17610:47;17602:77;;;;-1:-1:-1;;;17602:77:0;;12767:2:1;17602:77:0;;;12749:21:1;12806:2;12786:18;;;12779:30;-1:-1:-1;;;12825:18:1;;;12818:47;12882:18;;17602:77:0;12565:341:1;17602:77:0;17706:14;;;;17703:1172;;;-1:-1:-1;;;;;17741:20:0;;;;;;:12;:20;;;;;;;;17740:21;:49;;;;-1:-1:-1;;;;;;17766:23:0;;;;;;:12;:23;;;;;;;;17765:24;17740:49;17736:1128;;;17949:20;;;;17945:524;;;18018:6;-1:-1:-1;;;;;17997:28:0;:9;-1:-1:-1;;;;;17997:28:0;;;:69;;;;-1:-1:-1;;;;;;18030:36:0;;;;;;:25;:36;;;;;;;;18029:37;17997:69;17993:457;;;18127:9;18102:35;;;;:24;:35;;;;;;18144:12;;18102:39;;18140:1;18102:39;:::i;:::-;:54;:112;;;;-1:-1:-1;;;;;;18160:35:0;;;;;;:24;:35;;;;;;18202:12;;18160:39;;18198:1;18160:39;:::i;:::-;:54;18102:112;18094:178;;;;-1:-1:-1;;;18094:178:0;;13113:2:1;18094:178:0;;;13095:21:1;13152:2;13132:18;;;13125:30;13191:34;13171:18;;;13164:62;-1:-1:-1;;;13242:18:1;;;13235:51;13303:19;;18094:178:0;12911:417:1;18094:178:0;18324:9;18299:35;;;;:24;:35;;;;;;18337:12;18299:50;;;;-1:-1:-1;;;;;18376:35:0;;;;;;:50;17993:457;-1:-1:-1;;;;;18519:33:0;;;;;;:25;:33;;;;;;;;18515:157;;;18595:12;;18585:6;:22;;18577:75;;;;-1:-1:-1;;;18577:75:0;;13535:2:1;18577:75:0;;;13517:21:1;13574:2;13554:18;;;13547:30;13613:34;13593:18;;;13586:62;-1:-1:-1;;;13664:18:1;;;13657:38;13712:19;;18577:75:0;13333:404:1;18577:75:0;-1:-1:-1;;;;;18695:36:0;;;;;;:25;:36;;;;;;;;18690:159;;18796:9;;18786:6;18763:20;18773:9;18763;:20::i;:::-;:29;;;;:::i;:::-;:42;;18755:74;;;;-1:-1:-1;;;18755:74:0;;13944:2:1;18755:74:0;;;13926:21:1;13983:2;13963:18;;;13956:30;-1:-1:-1;;;14002:18:1;;;13995:49;14061:18;;18755:74:0;13742:343:1;18755:74:0;-1:-1:-1;;;;;18891:20:0;;;;;;:12;:20;;;;;;;;18890:21;:49;;;;-1:-1:-1;;;;;;18916:23:0;;;;;;:12;:23;;;;;;;;18915:24;18890:49;:69;;;;;18943:16;:14;:16::i;:::-;18890:107;;;;-1:-1:-1;;;;;;18964:33:0;;;;;;:25;:33;;;;;;;;18963:34;18890:107;18887:205;;;19013:6;:13;;-1:-1:-1;;19013:13:0;;;;;19041:10;:8;:10::i;:::-;19066:6;:14;;-1:-1:-1;;19066:14:0;;;18887:205;19107:10;;;;:48;;;;-1:-1:-1;;;;;;19122:33:0;;;;;;:25;:33;;;;;;;;19121:34;19107:48;:59;;;;-1:-1:-1;19160:6:0;;;;;;;19159:7;19107:59;:77;;;;-1:-1:-1;15886:10:0;;15900:15;-1:-1:-1;15886:29:0;19170:14;19107:105;;;;-1:-1:-1;;;;;;19189:23:0;;;;;;:12;:23;;;;;;;;19188:24;19107:105;:130;;;;-1:-1:-1;;;;;;19217:20:0;;;;;;:12;:20;;;;;;;;19216:21;19107:130;19104:169;;;19253:8;:6;:8::i;:::-;;19104:169;19285:17;19313:16;;19305:6;:25;;;;:::i;:::-;-1:-1:-1;;;;;19366:20:0;;;;;;:12;:20;;;;;;19285:45;;-1:-1:-1;19366:32:0;;19285:45;;19366:32;:::i;:::-;-1:-1:-1;;;;;19343:20:0;;;;;;:12;:20;;;;;:55;;;;19439:32;19356:6;19461:9;19439:13;:32::i;:::-;:73;;19503:9;19439:73;;;19474:26;19482:6;19490:9;19474:7;:26::i;:::-;-1:-1:-1;;;;;19549:23:0;;;;;;:12;:23;;;;;;19411:101;;-1:-1:-1;19549:43:0;;19411:101;;19549:43;:::i;:::-;-1:-1:-1;;;;;19523:23:0;;;;;;;:12;:23;;;;;;;;:69;;;;19657:16;;19610:65;;;;;;19638:36;;:17;:36;:::i;:::-;19610:65;;1361:25:1;;;1349:2;1334:18;19610:65:0;;;;;;;-1:-1:-1;19695:4:0;;17458:2249;-1:-1:-1;;;;;17458:2249:0:o;23622:882::-;23740:26;;23724:13;;23657:7;;23693:15;;;;23724:42;;;:::i;:::-;:61;23721:193;;23854:2;23830:21;;23816:11;;:35;;;;:::i;:::-;:40;;;;:::i;:::-;23801:11;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;23887:15:0;23871:13;:31;23721:193;23926:19;23975:22;;23962:11;;23949:12;;:24;;;;:::i;:::-;23948:49;;;;:::i;:::-;23926:71;;24044:15;;24031:10;;:28;;;;:::i;:::-;24018:10;:41;24091:1;24076:16;;;24072:118;;24124:5;24114:30;24131:12;;24114:30;;;;1361:25:1;;1349:2;1334:18;;1215:177;24114:30:0;;;;;;;;24166:12;;24159:19;;;;23622:882;:::o;24072:118::-;24230:11;24217:12;;:24;;;;:::i;:::-;24202:12;:39;11652:12;11335:2;11652;:12;:::i;:::-;11639:25;;:10;:25;:::i;:::-;24258:12;;:25;24254:83;;;11652:12;11335:2;11652;:12;:::i;:::-;11639:25;;:10;:25;:::i;:::-;24300:12;:25;24254:83;24380:12;;11471;11335:2;11471;:12;:::i;:::-;11459:24;;:9;:24;:::i;:::-;11549:44;;-1:-1:-1;;11549:44:0;:::i;:::-;11528:66;;-1:-1:-1;;11528:66:0;:::i;:::-;24368:25;;;;:::i;:::-;24349:16;:44;24406:12;:10;:12::i;:::-;24446:5;24436:30;24453:12;;24436:30;;;;1361:25:1;;1349:2;1334:18;;1215:177;21457:455:0;21555:16;;;21569:1;21555:16;;;;;;;;21531:21;;21555:16;;;;;;;;;;-1:-1:-1;21555:16:0;21531:40;;21600:4;21582;21587:1;21582:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21582:23:0;;;:7;;;;;;;;;:23;21634:11;;21616:7;;21634:11;;;21616:4;;21634:11;;21616:7;;;;;;:::i;:::-;-1:-1:-1;;;;;21616:30:0;;;:7;;;;;;;;;:30;21850:12;;21685:219;;-1:-1:-1;;;21685:219:0;;:6;:60;;;;;:219;;21760:11;;21786:1;;21823:4;;21850:12;;;21878:15;;21685:219;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21520:392;21457:455;:::o;3181:187::-;-1:-1:-1;;;;;3255:22:0;;3247:31;;;;;;3315:6;;3294:38;;-1:-1:-1;;;;;3294:38:0;;;;3315:6;;;;;3294:38;;;;;3343:6;:17;;-1:-1:-1;;;;;3343:17:0;;;;;-1:-1:-1;;;;;;3343:17:0;;;;;;;;;3181:187::o;16222:206::-;16305:6;;16271:4;;16305:6;;;;;16304:7;:31;;;;-1:-1:-1;16324:11:0;;-1:-1:-1;;;16324:11:0;;;;16304:31;:56;;;;;16359:1;16348:8;;:12;16304:56;:116;;;;-1:-1:-1;;16404:16:0;;16394:4;16373:27;;;;:12;:27;;;;;;:47;;;16222:206::o;15931:283::-;-1:-1:-1;;;;;16023:18:0;;16003:4;16023:18;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;16045:16:0;;;;;;:12;:16;;;;;;;;16023:38;16020:187;;;-1:-1:-1;16084:5:0;16077:12;;16020:187;-1:-1:-1;;;;;16130:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;16165:29:0;;;;;;:25;:29;;;;;;;;16130:64;16122:73;;;;21920:356;21990:7;22011:17;22053:14;;22042:8;;22031:9;:20;;;;:::i;:::-;:37;;;;:::i;:::-;22132:4;22111:27;;;;:12;:27;;;;;;22011:57;;-1:-1:-1;22111:39:0;;22011:57;;22111:39;:::i;:::-;22102:4;22081:27;;;;:12;:27;;;;;;;;:69;;;;22209:16;;-1:-1:-1;;;;;22166:61:0;;;;;22198:28;;:9;:28;:::i;:::-;22166:61;;1361:25:1;;;1349:2;1334:18;22166:61:0;;;;;;;22247:21;22258:9;22247;:21;:::i;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;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1625:456::-;1702:6;1710;1718;1771:2;1759:9;1750:7;1746:23;1742:32;1739:52;;;1787:1;1784;1777:12;1739:52;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1625:456;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1625:456::o;2483:247::-;2542:6;2595:2;2583:9;2574:7;2570:23;2566:32;2563:52;;;2611:1;2608;2601:12;2563:52;2650:9;2637:23;2669:31;2694:5;2669:31;:::i;:::-;2719:5;2483:247;-1:-1:-1;;;2483:247:1:o;2735:118::-;2821:5;2814:13;2807:21;2800:5;2797:32;2787:60;;2843:1;2840;2833:12;2858:382;2923:6;2931;2984:2;2972:9;2963:7;2959:23;2955:32;2952:52;;;3000:1;2997;2990:12;2952:52;3039:9;3026:23;3058:31;3083:5;3058:31;:::i;:::-;3108:5;-1:-1:-1;3165:2:1;3150:18;;3137:32;3178:30;3137:32;3178:30;:::i;:::-;3227:7;3217:17;;;2858:382;;;;;:::o;3245:180::-;3304:6;3357:2;3345:9;3336:7;3332:23;3328:32;3325:52;;;3373:1;3370;3363:12;3325:52;-1:-1:-1;3396:23:1;;3245:180;-1:-1:-1;3245:180:1:o;3430:388::-;3498:6;3506;3559:2;3547:9;3538:7;3534:23;3530:32;3527:52;;;3575:1;3572;3565:12;3527:52;3614:9;3601:23;3633:31;3658:5;3633:31;:::i;:::-;3683:5;-1:-1:-1;3740:2:1;3725:18;;3712:32;3753:33;3712:32;3753:33;:::i;3823:316::-;3900:6;3908;3916;3969:2;3957:9;3948:7;3944:23;3940:32;3937:52;;;3985:1;3982;3975:12;3937:52;-1:-1:-1;;4008:23:1;;;4078:2;4063:18;;4050:32;;-1:-1:-1;4129:2:1;4114:18;;;4101:32;;3823:316;-1:-1:-1;3823:316:1:o;4370:456::-;4447:6;4455;4463;4516:2;4504:9;4495:7;4491:23;4487:32;4484:52;;;4532:1;4529;4522:12;4484:52;4571:9;4558:23;4590:31;4615:5;4590:31;:::i;:::-;4640:5;-1:-1:-1;4692:2:1;4677:18;;4664:32;;-1:-1:-1;4748:2:1;4733:18;;4720:32;4761:33;4720:32;4761:33;:::i;:::-;4813:7;4803:17;;;4370:456;;;;;:::o;4831:380::-;4910:1;4906:12;;;;4953;;;4974:61;;5028:4;5020:6;5016:17;5006:27;;4974:61;5081:2;5073:6;5070:14;5050:18;5047:38;5044:161;;5127:10;5122:3;5118:20;5115:1;5108:31;5162:4;5159:1;5152:15;5190:4;5187:1;5180:15;5044:161;;4831:380;;;:::o;5567:127::-;5628:10;5623:3;5619:20;5616:1;5609:31;5659:4;5656:1;5649:15;5683:4;5680:1;5673:15;5699:128;5766:9;;;5787:11;;;5784:37;;;5801:18;;:::i;5832:125::-;5897:9;;;5918:10;;;5915:36;;;5931:18;;:::i;5962:332::-;6164:2;6146:21;;;6203:1;6183:18;;;6176:29;-1:-1:-1;;;6236:2:1;6221:18;;6214:39;6285:2;6270:18;;5962:332::o;6991:251::-;7061:6;7114:2;7102:9;7093:7;7089:23;7085:32;7082:52;;;7130:1;7127;7120:12;7082:52;7162:9;7156:16;7181:31;7206:5;7181:31;:::i;7556:168::-;7629:9;;;7660;;7677:15;;;7671:22;;7657:37;7647:71;;7698:18;;:::i;7729:127::-;7790:10;7785:3;7781:20;7778:1;7771:31;7821:4;7818:1;7811:15;7845:4;7842:1;7835:15;7861:120;7901:1;7927;7917:35;;7932:18;;:::i;:::-;-1:-1:-1;7966:9:1;;7861:120::o;8663:184::-;8733:6;8786:2;8774:9;8765:7;8761:23;8757:32;8754:52;;;8802:1;8799;8792:12;8754:52;-1:-1:-1;8825:16:1;;8663:184;-1:-1:-1;8663:184:1:o;9131:245::-;9198:6;9251:2;9239:9;9230:7;9226:23;9222:32;9219:52;;;9267:1;9264;9257:12;9219:52;9299:9;9293:16;9318:28;9340:5;9318:28;:::i;9381:127::-;9442:10;9437:3;9433:20;9430:1;9423:31;9473:4;9470:1;9463:15;9497:4;9494:1;9487:15;9513:135;9552:3;9573:17;;;9570:43;;9593:18;;:::i;:::-;-1:-1:-1;9640:1:1;9629:13;;9513:135::o;11034:127::-;11095:10;11090:3;11086:20;11083:1;11076:31;11126:4;11123:1;11116:15;11150:4;11147:1;11140:15;14090:422;14179:1;14222:5;14179:1;14236:270;14257:7;14247:8;14244:21;14236:270;;;14316:4;14312:1;14308:6;14304:17;14298:4;14295:27;14292:53;;;14325:18;;:::i;:::-;14375:7;14365:8;14361:22;14358:55;;;14395:16;;;;14358:55;14474:22;;;;14434:15;;;;14236:270;;;14240:3;14090:422;;;;;:::o;14517:806::-;14566:5;14596:8;14586:80;;-1:-1:-1;14637:1:1;14651:5;;14586:80;14685:4;14675:76;;-1:-1:-1;14722:1:1;14736:5;;14675:76;14767:4;14785:1;14780:59;;;;14853:1;14848:130;;;;14760:218;;14780:59;14810:1;14801:10;;14824:5;;;14848:130;14885:3;14875:8;14872:17;14869:43;;;14892:18;;:::i;:::-;-1:-1:-1;;14948:1:1;14934:16;;14963:5;;14760:218;;15062:2;15052:8;15049:16;15043:3;15037:4;15034:13;15030:36;15024:2;15014:8;15011:16;15006:2;15000:4;14997:12;14993:35;14990:77;14987:159;;;-1:-1:-1;15099:19:1;;;15131:5;;14987:159;15178:34;15203:8;15197:4;15178:34;:::i;:::-;15248:6;15244:1;15240:6;15236:19;15227:7;15224:32;15221:58;;;15259:18;;:::i;:::-;15297:20;;14517:806;-1:-1:-1;;;14517:806:1:o;15328:131::-;15388:5;15417:36;15444:8;15438:4;15417:36;:::i;15464:112::-;15496:1;15522;15512:35;;15527:18;;:::i;:::-;-1:-1:-1;15561:9:1;;15464:112::o;15713:980::-;15975:4;16023:3;16012:9;16008:19;16054:6;16043:9;16036:25;16080:2;16118:6;16113:2;16102:9;16098:18;16091:34;16161:3;16156:2;16145:9;16141:18;16134:31;16185:6;16220;16214:13;16251:6;16243;16236:22;16289:3;16278:9;16274:19;16267:26;;16328:2;16320:6;16316:15;16302:29;;16349:1;16359:195;16373:6;16370:1;16367:13;16359:195;;;16438:13;;-1:-1:-1;;;;;16434:39:1;16422:52;;16529:15;;;;16494:12;;;;16470:1;16388:9;16359:195;;;-1:-1:-1;;;;;;;16610:32:1;;;;16605:2;16590:18;;16583:60;-1:-1:-1;;;16674:3:1;16659:19;16652:35;16571:3;15713:980;-1:-1:-1;;;15713:980:1:o

Swarm Source

ipfs://399a7f69f0f71e3b311e1fbc4547db673f957a702e0d21ebd7ee9b22de0f665c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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