Token nitroDOGE

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
1,329,227,995,773,540,000.425182 nitroDOGE

Holders:
220 addresses

Transfers:
-

Contract:
0x8E75DafEcf75de7747A05B0891177ba03333a1660x8E75DafEcf75de7747A05B0891177ba03333a166

Decimals:
18

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
nitroDOGE

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 4 : nitroDOGE.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;

import "./IERC20.sol";
import "./SafeMath.sol";
import "./IWAGMI20.sol";


/*
*   
*   nitroDOGE - the fastest, most based DOGE on Arbitrum
*   1% burn tax on buys and sells
*   
*   Telegram: https://t.me/nitrodoge
*   Twitter: https://twitter.com/nitroDOGE
*   Website: TBA
*   
*   
*   
*   
*   
*   
*   enjoy
*/


/**
 * Implement the basic ERC20 functions
 */
abstract contract ERC20 is IERC20 {
    using SafeMath for uint256;

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

    uint256 internal _totalSupply = 0;
    
    string internal _name;
    string internal _symbol;
    uint8 internal _decimals = 18;

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

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

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    
    function name() public view override returns (string memory) {
        return _name;
    }
    
    function symbol() public view override returns (string memory) {
        return _symbol;
    }
    
    function decimals() public view override returns (uint8) {
        return _decimals;
    }
}

/**
 * Store contract creation block & timestamp. 
 * Useful for APY calculations
 */
abstract contract RecordsCreation {
    uint256 public creationBlock;
    uint256 public creationTimestamp;
    
    constructor(){
        creationBlock = block.number;
        creationTimestamp = block.timestamp;
    }
}


/**
 * Provides ownable context 
 */
abstract contract Ownable {
    constructor() { _owner = msg.sender; }
    address payable _owner;
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }    
    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }
    
    /**
     * Function modifier to require caller to be contract owner
     */
    modifier owned() {
        require(isOwner(msg.sender)); _;
    }
    
    /**
     * Transfer ownership to the zero address. Caller must be owner.
     */
    function renounceOwnership() public owned() {
        transferOwnership(address(0));
    }
    
    /**
     * Transfer ownership to new address. Caller must be owner.
     */
    function transferOwnership(address payable adr) public owned() {
        _owner = adr;
    }
}

/**
 * NitroDogeBot interface for accepting transfer hooks
 */
interface INitroDogeBot {
    function txHook(address caller, address sender, address receiver, uint256 amount) external;
}

/**
 * Allow external contracts (NitroDogeBots) to hook into NitroDoge transactions
 */
abstract contract NitroDogeBotController is Ownable {
    struct NitroDogeBotInfo {
        bool bot;
        uint256 adrIndex;
    }
    
    mapping (address => NitroDogeBotInfo) _botsInfo;
    address[] _NitroDogeBots;
    uint256 _NitroDogeBotsCount;
    
    /**
     * Returns array of NitroDogeBots
     */
    function getBots() public view returns (address[] memory) {
        return _NitroDogeBots;
    }
    
    /**
     * Returns NitroDogeBot count
     */
    function getBotCount() public view returns (uint256) {
        return _NitroDogeBotsCount;
    }
    
    /**
     * Check if address is registered as NitroDogeBot
     */
    function isBot(address account) public view returns (bool) {
        return _botsInfo[account].bot;
    }
    
    /**
     * Add contract to list
     */
    function addNitroDogeBot(address bot) external owned {
        require(isContract(bot));
        _botsInfo[bot].bot = true;
        _botsInfo[bot].adrIndex = _NitroDogeBots.length;
        _NitroDogeBots.push(bot);
        _NitroDogeBotsCount++;
    }
    
    /**
     * Remove bot from list
     */
    function removeNitroDogeBot(address bot) external owned {
        require(isBot(bot));
        _botsInfo[bot].bot = false;
        _NitroDogeBotsCount--; 
        
        uint256 i = _botsInfo[bot].adrIndex; // gas savings
        
        // swap in removed bot with last holder and then pop from end
        _NitroDogeBots[i] = _NitroDogeBots[_NitroDogeBots.length-1];
        _botsInfo[_NitroDogeBots[i]].adrIndex = i;
        _NitroDogeBots.pop();
    }
    
    /**
     * Call all NitroDogeBot hooks
     */
    function NitroDogeBotTxHook(address sender, address receiver, uint256 amount) internal {
        if(getBotCount() == 0){ return; }
        for(uint256 i=0; i<_NitroDogeBots.length; i++){ 
            /* 
             * Using try-catch ensures that any errors / fails in one of the NitroDogeBot contracts will not cancel the overall transaction
             */
            try INitroDogeBot(_NitroDogeBots[i]).txHook(msg.sender, sender, receiver, amount) {} catch {}
        }
    }
    
    /**
     * Check if address is contract.
     * Credit to OpenZeppelin
     */
    function isContract(address addr) internal view returns (bool) {
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
    
        bytes32 codehash;
        assembly {
            codehash := extcodehash(addr)
        }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

/**
 * Keeps a record of all holders.
 * Allows all holder data to be used on-chain by other contracts. ;)
 */
abstract contract TracksHolders is Ownable {
    
    /**
     * Struct for storing holdings data
     */
    struct Holding {
        bool holding; // whether address is currently holding
        uint256 adrIndex; // index of address in holders array
    }
    
    mapping (address => Holding) _holdings;
    address[] _holders;
    uint256 _holdersCount;
    
    /**
     * Returns array of holders
     */
    function getHolders() public view returns (address[] memory) {
        return _holders;
    }
    
    /**
     * Returns holders count
     */
    function getHoldersCount() public view returns (uint256) {
        return _holdersCount;
    }
    
    /**
     * Returns whether address is currently holder
     */
    function isHolder(address holder) public view returns (bool) {
        return _holdings[holder].holding;
    }
    
    /**
     * Add address to holders list
     */
    function addHolder(address account) internal {
        _holdings[account].holding = true;
        _holdings[account].adrIndex = _holders.length;
        _holders.push(account);
        _holdersCount++;
    }
    
    /**
     * Remove address from holders list
     */
    function removeHolder(address account) internal {
        _holdings[account].holding = false;
        
        // saves gas
        uint256 i = _holdings[account].adrIndex;
        
        // remove holder from array by swapping in end holder
        _holders[i] = _holders[_holders.length-1];
        _holders.pop();
        
        // update end holder index
        _holdings[_holders[i]].adrIndex = i;
        
        _holdersCount--;
    }
}

interface INitroDogeDistributive {
    function getTotalStaked() external view returns (uint256);
    function getTotalFees() external view returns (uint256);
    
    function getStake(address staker) external view returns (uint256);
    function getEarnings(address staker) external view returns (uint256);
    
    function stake(uint256 amount) external;
    function unstake(uint256 amount) external;
    
    function getPairAddress() external view returns (address);
    function forceUnstakeAll() external;
    
    event Staked(address account, uint256 amount);
    event Unstaked(address account, uint256 amount);
    
    event FeesDistributed(address account, uint256 amount);
}

/* > We can soon purchase Sri Lanka with our market cap */

/**
 * This is where the fun begins
 */
abstract contract NitroDogeDistributive is INitroDogeDistributive, ERC20, Ownable, TracksHolders {
    using SafeMath for uint256;
    
    IERC20 _pair;
    bool _pairInitialized;
    
    /**
     * Struct for holding record of account stakes.
     */
    struct Stake {
        uint256 LP; // Amount of LP tokens staked
        uint256 excludedAmt; // Amount of staking rewards to exclude from returns (if claimed or staked after)
        uint256 realised; // realised rewards
    }
    
    mapping (address => Stake) _stakes;
    
    uint256 _totalLP;
    uint256 _totalFees;
    uint256 _totalRealised;
    
    /**
     * Total LP tokens staked
     */
    function getTotalStaked() external override view returns (uint256) {
        return _totalLP;
    }
    
    /**
     * Total amount of transaction fees reflected to stakers
     */
    function getTotalFees() external override view returns (uint256) {
        return _totalFees;
    }
    
    /**
     * Returns amount of LP that address has staked
     */
    function getStake(address account) public override view returns (uint256) {
        return _stakes[account].LP;
    }
    
    /**
     * Returns total earnings (realised + unrealised)
     */
    function getEarnings(address staker) external override view returns (uint256) {
        return _stakes[staker].realised.add(earnt(staker)); // realised gains plus outstanding earnings
    }
    
    /**
     * Returns unrealised earnings
     */
    function getUnrealisedEarnings(address staker) external view returns (uint256) {
        return earnt(staker);
    }
    
    /**
     * Stake LP tokens to earn a share of the 4% tx fee
     */
    function stake(uint256 amount) external override pairInitialized {
        _stake(msg.sender, amount);
    }
    
    /**
     * Unstake LP tokens
     */
    function unstake(uint256 amount) external override pairInitialized {
        _unstake(msg.sender, amount);
    }
    
    /**
     * Return Cake-LP pair address
     */
    function getPairAddress() external view override returns (address) {
        return address(_pair);
    }
    
    /**
     * Return stakes to all holders
     */
    function forceUnstakeAll() external override owned {
        for(uint256 i=0; i<_holders.length; i++){
            uint256 amt = getStake(_holders[i]); // saves gas
            if(amt > 0){ _unstake(_holders[i], amt); }
        }
    }
    
    /**
     * Add outstanding staking rewards to balance
     */
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account].add(earnt(account));
    }
    
    /**
     * Convert unrealised staking gains into actual balance
     */
    function realise() public {
        _realise(msg.sender);
    }
    
    /**
     * Realises outstanding staking rewards into balance
     */
    function _realise(address account) internal {
        if(getStake(account) != 0){
            uint256 amount = earnt(account);
            _balances[account] = _balances[account].add(amount);
            _stakes[account].realised = _stakes[account].realised.add(amount);
            _totalRealised = _totalRealised.add(amount);
        }
        _stakes[account].excludedAmt = _totalFees;
    }
    
    /**
     * Calculate current outstanding staking gains
     */
    function earnt(address account) internal view returns (uint256) {
        if(_stakes[account].excludedAmt == _totalFees || _stakes[account].LP == 0){ return 0; }
        uint256 availableFees = _totalFees.sub(_stakes[account].excludedAmt);
        uint256 share = availableFees.mul(_stakes[account].LP).div(_totalLP); // won't overflow as even totalsupply^2 is less than uint256 max
        return share;
    }
    
    /**
     * Stake amount LP from account
     */
    function _stake(address account, uint256 amount) internal {
        _pair.transferFrom(account, address(this), amount); // transfer LP tokens from account
        
        // realise staking gains now (also works to set excluded amt to current total rewards)
        _realise(account); 
        
        // add to current address' stake
        _stakes[account].LP = _stakes[account].LP.add(amount);
        _totalLP = _totalLP.add(amount);
        
        // ensure staker is recorded as holder
        updateHoldersStaked(account);
        
        emit Staked(account, amount);
    }
    
    /**
     * Unstake amount for account
     */
    function _unstake(address account, uint256 amount) internal {
        require(_stakes[account].LP >= amount); // ensure sender has staked more than or equal to requested amount
        
        _realise(account); // realise staking gains
        
        // remove stake
        _stakes[account].LP = _stakes[account].LP.sub(amount);
        _totalLP = _totalLP.sub(amount);
        
        // send LP tokens back
        _pair.transfer(account, amount);
        
        // check if sender is no longer a holder
        updateHoldersUnstaked(account);
        
        emit Unstaked(account, amount);
    }
    
    /**
     * Distribute amount to stakers.
     */
    function distribute(uint256 amount) external {
        _realise(msg.sender);
        require(_balances[msg.sender] >= amount);
        
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        _distribute(msg.sender, amount);
    }
    
    /**
     * Distribute amount from account as transaction fee
     */
    function _distribute(address account, uint256 amount) internal {
        _totalFees = _totalFees.add(amount);
        emit FeesDistributed(account, amount);
    }
    
    /**
     * Check if account is holding in context of transaction sender
     */
    function updateHoldersTransferSender(address account) internal {
        if(!isStillHolding(account)){ removeHolder(account); }
    }
    
    /**
     * Check if account is still holding in context of transaction recipient
     */
    function updateHoldersTransferRecipient(address account) internal {
        if(!isHolder(account)){ addHolder(account); }
    }
    
    /**
     * Check if account is holding in context of staking tokens
     */
    function updateHoldersStaked(address account) internal {
        if(!isHolder(account)){ addHolder(account); }
    }
    
    /**
     * Check if account is still holding in context of unstaking tokens
     */
    function updateHoldersUnstaked(address account) internal {
        if(!isStillHolding(account)){ removeHolder(account); }
    }
    
    /**
     * Check if account has a balance or a stake
     */
    function isStillHolding(address account) internal view returns (bool) {
        return balanceOf(account) > 0 || getStake(account) > 0;
    }
    
    /**
     * Require pair address to be set
     */
    modifier pairInitialized() { require(_pairInitialized); _; }
    
    /**
     * Set the pair address.
     * Don't allow changing whilst LP is staked (as this would prevent stakers getting their LP back)
     */
    function setPairAddress(address pair) external owned {
        require(_totalLP == 0, "Cannot change pair whilst there is LP staked");
        _pair = IERC20(pair);
        _pairInitialized = true;
    }
}

/* > NitroDoge governs exchanges & pools globally */

/**
 * This contract burns tokens on transactions
 */
abstract contract Burnable is NitroDogeDistributive {
    using SafeMath for uint256;
    
    uint256 _burnRate = 20; // 2.0% of tx's to  be split between burn/distribute
    uint256 _distributeRatio = 1; // 1:1 ratio of burn:distribute
    uint256 _totalBurnt;
    
    /**
     * Total amount of tokens burnt
     */
    function getTotalBurnt() external view returns (uint256) {
        return _totalBurnt;
    }
    
    /**
     * Current burn rate
     */
    function getBurnRate() public view returns (uint256) {
        return _burnRate;
    }
    
    /**
     * Current distribution ratio
     */
     function getDistributionRatio() public view returns (uint256) {
         return _distributeRatio;
     }
    
    /**
     * Change to a new burn rate
     */
    function setBurnRate(uint256 newRate) external owned {
        require(newRate < 100);
        _burnRate = newRate;
    }
    
    /**
     * Change the burn:stakers distribution ratio
     */
    function setDistributionRatio(uint256 newRatio) external owned {
        require(newRatio >= 1);
        _distributeRatio = newRatio;
    }  

    /**
     * Burns transaction amount as per burn rate & returns remaining transfer amount. 
     */
    function _txBurn(address account, uint256 txAmount) internal returns (uint256) {
        uint256 toBurn = txAmount.mul(_burnRate).div(1000); // calculate amount to burn
        
        _distribute(account, toBurn.mul(_distributeRatio-1).div(_distributeRatio));
        _burn(account, toBurn.div(_distributeRatio));
        
        return txAmount.sub(toBurn); // return amount left after burn
    }
    
    /**
     * Burn amount tokens from sender
     */
    function burn(uint256 amount) public {
        require(_balances[msg.sender] >= amount);
        _burn(msg.sender, amount);
    }
    
    /**
     * Burns amount of tokens from account
     */
    function _burn(address account, uint256 amount) internal {
        if(amount == 0){ return; }
        
        _totalSupply = _totalSupply.sub(amount);
        _totalBurnt = _totalBurnt.add(amount);
        _balances[account] = _balances[account].sub(amount);
        
        emit Burn(account, amount);
    }
    
    event Burn(address account, uint256 amount);
}

/**
 * Implements high level functions
 */
abstract contract WAGMI20 is IWAGMI20, Burnable, NitroDogeBotController {
    using SafeMath for uint256;
    
    uint32 _maxTxPercent = 30; // max size as % of supply as percentage to 1d.p, eg 30 = 3.0%
    bool _firstTx = true; // flag for first tx (as this will be to provide liquidity so don't want limit)
    
    /**
     * Mint tx sender with initial supply
     */
    constructor(uint256 supply) {
        uint256 amount = supply * (10 ** _decimals);
        _balances[msg.sender] = _balances[msg.sender].add(amount);
        _totalSupply = _totalSupply.add(amount);
        updateHoldersTransferRecipient(msg.sender); // ensure receiver is set as sender
        emit Transfer(address(0), msg.sender, amount);
    }
    
    /**
     * >Can I get a quick rundown?
     */
    function quickRundown(address account) external view override returns (uint256) {
        return balanceOf(account);    
    }
    
    /**
     * funds are safu?
     */
    function fundsAreSafu() external pure override returns (bool) {
        return true; // always ;)
    }

    /**
    * burns NitroDoge to the dead address 
    */

    function _burnToDeadAddress(address account, uint256 amount) internal virtual {
        _balances[account] = _balances[account].sub(amount);
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
    }   
   
    /**
     * Return owner address as per ERC20 standard
     */
    function getOwner() external view override returns (address) {
        return _owner;
    }
    
    /**
     * Ensure tx size is within allowed % of supply
     */
    function checkTxAmount(uint256 amount) internal {
        if(_firstTx){ _firstTx = amount == 0 ? true : false; return; } // skip first tx as this will be providing 100% as liquidity
        require(amount <= _totalSupply.mul(_maxTxPercent).div(1000), "Tx size exceeds limit");
    }

    /**
    * calls burn function
    */

    function burnToDeadAddress(uint256 amount) public onlyOwner {
        _burnToDeadAddress(msg.sender, amount);
    }    

    /**
     * Change the max tx size percent. Required to be from 1% to 100%
     */
    function setMaxTxPercent(uint32 amount) external owned {
        require(amount > 10 && amount < 1000, "Invalid max tx size"); // ensure > 1% & < 100%
        _maxTxPercent = amount;
    }
       
    /**
     * The transfer function. 
     * Normal transfer is also called through this and a sender==msg.sender check is used to determine whether to use allowance
     */
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "Can't transfer from zero");
        require(recipient != address(0), "Can't transfer to zero");
        
        // ensure tx size is below limit
        checkTxAmount(amount); 
        
        // realise staked gains & then check if enough balance to cover
        _realise(sender);
        require(_balances[sender] >= amount, "Not enough balance");
        
        // require allowance if sender is not transaction creator
        if(sender != msg.sender){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Not enough allowance");
        }
        
        // burn & distribute
        uint256 sendAmt = _txBurn(sender, amount); 
        
        // transfer
        _balances[sender] = _balances[sender].sub(sendAmt);
        _balances[recipient] = _balances[recipient].add(sendAmt);
        
        // update holders
        updateHoldersTransferSender(sender);
        updateHoldersTransferRecipient(recipient);
        
        // call any hooks
        NitroDogeBotTxHook(sender, recipient, amount);
        
        emit Transfer(sender, recipient, sendAmt);
        return true;
    }
    
    /**
     * Approve spender to spend amount from msg.sender
     */
    function _approve(address spender, uint256 amount) internal returns (bool) {
        _allowances[msg.sender][spender] = amount;
        return true;
    }
    
    function heBought(address account, uint256 amount) external override { /* just for the IWAGMI20 meme */}
    function heSold(address account, uint256 amount) external override { /* just for the IWAGMI20 meme */ }
    
    
    /**
     * Approve spender to spend amount from msg.sender
     */
    function approve(address spender, uint256 amount) external override returns (bool) {
        return _approve(spender, amount);
    }
    
    /**
     * Transfer from msg.sender to recipient for amount
     */
    function transfer(address recipient, uint256 amount) external override returns (bool) {
         return _transferFrom(msg.sender, recipient, amount);
     }

    /**
     * Transfer amount from sender to recipient so long as msg.sender has at least amount allowance
     */
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(sender, recipient, amount);
    }
    
    /**
     * Bulk execute transfers
     */
    function multiTransfer(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Accounts & amounts must be same length");
        for(uint256 i=0; i<accounts.length; i++){
            _transferFrom(msg.sender, accounts[i], amounts[i]);
        }
    }
}

contract nitroDOGE is WAGMI20, RecordsCreation {
    using SafeMath for uint256;
    
    constructor() WAGMI20(1000000) {
        _name = "nitroDOGE";
        _symbol = "nitroDOGE";
    }
}

File 2 of 4 : IWAGMI20.sol
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.7.4;


/**
 * @dev Interface of the WAGMI20 standard
 */
interface IWAGMI20 {
    function quickRundown(address account) external view returns (uint256);
    function heBought(address account, uint256 amount) external;
    function heSold(address account, uint256 amount) external;
    function fundsAreSafu() external pure returns (bool);
}

File 3 of 4 : SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.7.4;
/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */

library SafeMath {

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }


    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { if (b == 1) return ~uint120(0);
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) {
        return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

        return c;
    }
}

File 4 of 4 : IERC20.sol
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.7.4;


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

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FeesDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"addNitroDogeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToDeadAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creationBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creationTimestamp","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":"uint256","name":"amount","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceUnstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fundsAreSafu","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getBotCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBots","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistributionRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHoldersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalBurnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getUnrealisedEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"heBought","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"heSold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"quickRundown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"realise","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"removeNitroDogeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRatio","type":"uint256"}],"name":"setDistributionRatio","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"amount","type":"uint32"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006002556005805460ff191660121790556014600e8190556001600f55805460ff60201b1963ffffffff19909116601e17166401000000001790553480156200004d57600080fd5b5060058054610100600160a81b031916336101008102919091179182905560009081526020818152604090912054620f42409260ff16600a0a830291620000a09190839062000189811b6200124d17901c565b3360009081526020818152604090912091909155600254620000cd9183906200124d62000189821b17901c565b600255620000db33620001eb565b60408051828152905133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350504360155542601655604080518082019091526009808252686e6974726f444f474560b81b60209092019182526200014f916003916200029c565b50604080518082019091526009808252686e6974726f444f474560b81b602090920191825262000182916004916200029c565b5062000348565b600082820183811015620001e4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b620001f68162000209565b6200020657620002068162000227565b50565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03166000818152600660205260408120805460ff1916600190811782556007805492820183905582820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b031916909217909155600880549091019055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002d457600085556200031f565b82601f10620002ef57805160ff19168380011785556200031f565b828001600101855582156200031f579182015b828111156200031f57825182559160200191906001019062000302565b506200032d92915062000331565b5090565b5b808211156200032d576000815560010162000332565b61215b80620003586000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c8063715018a6116101675780639f5a9b7c116100ce578063b331108611610087578063b33110861461086c578063cbb47d4614610874578063d4d7b19a1461089a578063dd62ed3e146108c0578063f2fde38b146108ee578063f47aee3f14610914576102a0565b80639f5a9b7c146107cf5780639fd6ef09146107d7578063a22d4832146107fd578063a694fc3a14610823578063a9059cbb14610840578063b2d4a6f114610553576102a0565b806391c05b0b1161012057806391c05b0b1461075157806393005dc21461076e57806395978cec1461077657806395d89b411461079c578063986f3a75146107a45780639b652d02146107c7576102a0565b8063715018a6146106e757806373889f4a146106ef5780637a766460146106f75780637d8cf4b61461071d578063893d20e8146107255780638d5f81e214610749576102a0565b80632e17de781161020b5780634af5da32116101c45780634af5da321461062b57806351d19a4e1461063357806351f4ae631461063b5780635fe8e7cc14610661578063626e1ae7146106b957806370a08231146106c1576102a0565b80632e17de781461057f5780632f54bf6e1461059c578063313ce567146105c25780633bbac579146105e057806342966c6814610606578063482cd6c514610623576102a0565b806318160ddd1161025d57806318160ddd146103c9578063189d165e146103d15780631e89d545146103ee578063224b2a5b1461051557806323b872dd1461051d57806326c9326014610553576102a0565b806306fdde03146102a55780630917e77614610322578063095ea7b31461033c5780630e53c3341461037c578063131b9c041461039b57806317634514146103c1575b600080fd5b6102ad610931565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102e75781810151838201526020016102cf565b50505050905090810190601f1680156103145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61032a6109c7565b60408051918252519081900360200190f35b6103686004803603604081101561035257600080fd5b506001600160a01b0381351690602001356109cd565b604080519115158252519081900360200190f35b6103996004803603602081101561039257600080fd5b50356109e2565b005b61032a600480360360208110156103b157600080fd5b50356001600160a01b0316610a07565b61032a610a3f565b61032a610a45565b610399600480360360208110156103e757600080fd5b5035610a4b565b6103996004803603604081101561040457600080fd5b81019060208101813564010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184602083028401116401000000008311171561045357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111640100000000831117156104d757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610a6f945050505050565b610399610afa565b6103686004803603606081101561053357600080fd5b506001600160a01b03813581169160208101359091169060400135610b05565b6103996004803603604081101561056957600080fd5b506001600160a01b038135169060200135610b1c565b6103996004803603602081101561059557600080fd5b5035610b20565b610368600480360360208110156105b257600080fd5b50356001600160a01b0316610b43565b6105ca610b5c565b6040805160ff9092168252519081900360200190f35b610368600480360360208110156105f657600080fd5b50356001600160a01b0316610b65565b6103996004803603602081101561061c57600080fd5b5035610b83565b61032a610ba9565b61032a610baf565b61032a610bb5565b61032a6004803603602081101561065157600080fd5b50356001600160a01b0316610bbb565b610669610bc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106a557818101518382015260200161068d565b505050509050019250505060405180910390f35b61032a610c27565b61032a600480360360208110156106d757600080fd5b50356001600160a01b0316610c2d565b610399610c5a565b61032a610c76565b61032a6004803603602081101561070d57600080fd5b50356001600160a01b0316610c7c565b610399610c97565b61072d610d1e565b604080516001600160a01b039092168252519081900360200190f35b61072d610d32565b6103996004803603602081101561076757600080fd5b5035610d41565b610669610d9d565b6103996004803603602081101561078c57600080fd5b50356001600160a01b0316610dfd565b6102ad610f27565b610399600480360360208110156107ba57600080fd5b503563ffffffff16610f88565b61036861101a565b61032a61101f565b610399600480360360208110156107ed57600080fd5b50356001600160a01b0316611025565b6103996004803603602081101561081357600080fd5b50356001600160a01b03166110be565b6103996004803603602081101561083957600080fd5b503561113f565b6103686004803603604081101561085657600080fd5b506001600160a01b03813516906020013561115f565b61032a61116c565b61032a6004803603602081101561088a57600080fd5b50356001600160a01b0316611172565b610368600480360360208110156108b057600080fd5b50356001600160a01b031661117d565b61032a600480360360408110156108d657600080fd5b506001600160a01b038135811691602001351661119b565b6103996004803603602081101561090457600080fd5b50356001600160a01b03166111c6565b6103996004803603602081101561092a57600080fd5b5035611200565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109bd5780601f10610992576101008083540402835291602001916109bd565b820191906000526020600020905b8154815290600101906020018083116109a057829003601f168201915b5050505050905090565b600b5490565b60006109d983836112a7565b90505b92915050565b6109eb33610b43565b6109f457600080fd5b6001811015610a0257600080fd5b600f55565b6000610a37610a15836112d1565b6001600160a01b0384166000908152600a60205260409020600201549061124d565b90505b919050565b60155481565b60025490565b610a5433610b43565b610a5d57600080fd5b60648110610a6a57600080fd5b600e55565b8051825114610aaf5760405162461bcd60e51b81526004018080602001828103825260268152602001806120b36026913960400191505060405180910390fd5b60005b8251811015610af557610aec33848381518110610acb57fe5b6020026020010151848481518110610adf57fe5b6020026020010151611387565b50600101610ab2565b505050565b610b0333611628565b565b6000610b12848484611387565b90505b9392505050565b5050565b600954600160a01b900460ff16610b3657600080fd5b610b4033826116e7565b50565b60055461010090046001600160a01b0390811691161490565b60055460ff1690565b6001600160a01b031660009081526011602052604090205460ff1690565b33600090815260208190526040902054811115610b9f57600080fd5b610b403382611835565b600e5490565b600f5490565b60135490565b6000610a3782610c2d565b606060078054806020026020016040519081016040528092919081815260200182805480156109bd57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c00575050505050905090565b600c5490565b6000610a37610c3b836112d1565b6001600160a01b0384166000908152602081905260409020549061124d565b610c6333610b43565b610c6c57600080fd5b610b0360006111c6565b60085490565b6001600160a01b03166000908152600a602052604090205490565b610ca033610b43565b610ca957600080fd5b60005b600754811015610b40576000610ce260078381548110610cc857fe5b6000918252602090912001546001600160a01b0316610c7c565b90508015610d1557610d1560078381548110610cfa57fe5b6000918252602090912001546001600160a01b0316826116e7565b50600101610cac565b60055461010090046001600160a01b031690565b6009546001600160a01b031690565b610d4a33611628565b33600090815260208190526040902054811115610d6657600080fd5b33600090815260208190526040902054610d8090826118dc565b33600081815260208190526040902091909155610b40908261191e565b606060128054806020026020016040519081016040528092919081815260200182805480156109bd576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c00575050505050905090565b610e0633610b43565b610e0f57600080fd5b610e1881610b65565b610e2157600080fd5b6001600160a01b0381166000908152601160205260409020805460ff19168155601380546000199081019091556001909101546012805491929091908101908110610e6857fe5b600091825260209091200154601280546001600160a01b039092169183908110610e8e57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806011600060128481548110610ece57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020600101556012805480610f0157fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109bd5780601f10610992576101008083540402835291602001916109bd565b610f9133610b43565b610f9a57600080fd5b600a8163ffffffff16118015610fb757506103e88163ffffffff16105b610ffe576040805162461bcd60e51b8152602060048201526013602482015272496e76616c6964206d61782074782073697a6560681b604482015290519081900360640190fd5b6014805463ffffffff191663ffffffff92909216919091179055565b600190565b60105490565b61102e33610b43565b61103757600080fd5b61104081611976565b61104957600080fd5b6001600160a01b03166000818152601160205260408120805460ff1916600190811782556012805492820183905582820181559092527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b031916909217909155601380549091019055565b6110c733610b43565b6110d057600080fd5b600b541561110f5760405162461bcd60e51b815260040180806020018281038252602c8152602001806120fa602c913960400191505060405180910390fd5b6009805460ff60a01b196001600160a01b039093166001600160a01b03199091161791909116600160a01b179055565b600954600160a01b900460ff1661115557600080fd5b610b4033826119ad565b60006109d9338484611387565b60165481565b6000610a37826112d1565b6001600160a01b031660009081526006602052604090205460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6111cf33610b43565b6111d857600080fd5b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b61120933610b43565b611243576040805162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b604482015290519081900360640190fd5b610b403382611adc565b6000828201838110156109d9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3360009081526001602081815260408084206001600160a01b039690961684529490529290205590565b600c546001600160a01b0382166000908152600a60205260408120600101549091148061131457506001600160a01b0382166000908152600a6020526040902054155b1561132157506000610a3a565b6001600160a01b0382166000908152600a6020526040812060010154600c54611349916118dc565b600b546001600160a01b0385166000908152600a60205260408120549293509161137f9190611379908590611b5d565b90611bb6565b949350505050565b60006001600160a01b0384166113e4576040805162461bcd60e51b815260206004820152601860248201527f43616e2774207472616e736665722066726f6d207a65726f0000000000000000604482015290519081900360640190fd5b6001600160a01b038316611438576040805162461bcd60e51b815260206004820152601660248201527543616e2774207472616e7366657220746f207a65726f60501b604482015290519081900360640190fd5b61144182611bf8565b61144a84611628565b6001600160a01b0384166000908152602081905260409020548211156114ac576040805162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015290519081900360640190fd5b6001600160a01b038416331461153b5760408051808201825260148152734e6f7420656e6f75676820616c6c6f77616e636560601b6020808301919091526001600160a01b0387166000908152600182528381203382529091529190912054611516918490611cab565b6001600160a01b03851660009081526001602090815260408083203384529091529020555b60006115478584611d61565b6001600160a01b03861660009081526020819052604090205490915061156d90826118dc565b6001600160a01b03808716600090815260208190526040808220939093559086168152205461159c908261124d565b6001600160a01b0385166000908152602081905260409020556115be85611dd0565b6115c784611de6565b6115d2858585611dfc565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b61163181610c7c565b156116c5576000611641826112d1565b6001600160a01b038316600090815260208190526040902054909150611667908261124d565b6001600160a01b03831660009081526020818152604080832093909355600a90522060020154611697908261124d565b6001600160a01b0383166000908152600a6020526040902060020155600d546116c0908261124d565b600d55505b600c546001600160a01b039091166000908152600a6020526040902060010155565b6001600160a01b0382166000908152600a602052604090205481111561170c57600080fd5b61171582611628565b6001600160a01b0382166000908152600a602052604090205461173890826118dc565b6001600160a01b0383166000908152600a6020526040902055600b5461175e90826118dc565b600b556009546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156117b757600080fd5b505af11580156117cb573d6000803e3d6000fd5b505050506040513d60208110156117e157600080fd5b506117ed905082611dd0565b604080516001600160a01b03841681526020810183905281517f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75929181900390910190a15050565b8061183f57610b1c565b60025461184c90826118dc565b60025560105461185c908261124d565b6010556001600160a01b03821660009081526020819052604090205461188290826118dc565b6001600160a01b0383166000818152602081815260409182902093909355805191825291810183905281517fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5929181900390910190a15050565b60006109d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cab565b600c5461192b908261124d565b600c55604080516001600160a01b03841681526020810183905281517f63be20cc905d5ba0cf65db405c4999f99f2575e521875f13a8009d6eed7a09d9929181900390910190a15050565b60007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470823f801580159061137f5750141592915050565b600954604080516323b872dd60e01b81526001600160a01b03858116600483015230602483015260448201859052915191909216916323b872dd9160648083019260209291908290030181600087803b158015611a0957600080fd5b505af1158015611a1d573d6000803e3d6000fd5b505050506040513d6020811015611a3357600080fd5b50611a3f905082611628565b6001600160a01b0382166000908152600a6020526040902054611a62908261124d565b6001600160a01b0383166000908152600a6020526040902055600b54611a88908261124d565b600b55611a9482611de6565b604080516001600160a01b03841681526020810183905281517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d929181900390910190a15050565b6001600160a01b038216600090815260208190526040902054611aff90826118dc565b6001600160a01b038316600081815260208181526040808320949094556002805486900390558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b600082611b6c575060006109dc565b82820282848281611b7957fe5b04146109d95760405162461bcd60e51b81526004018080602001828103825260218152602001806120d96021913960400191505060405180910390fd5b60006109d983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611eae565b601454640100000000900460ff1615611c3e578015611c18576000611c1b565b60015b601480549115156401000000000264ff0000000019909216919091179055610b40565b601454600254611c5f916103e8916113799163ffffffff90811690611b5d16565b811115610b40576040805162461bcd60e51b8152602060048201526015602482015274151e081cda5e9948195e18d959591cc81b1a5b5a5d605a1b604482015290519081900360640190fd5b60008260011415611ccc57506effffffffffffffffffffffffffffff610b15565b8184841115611d595760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611d1e578181015183820152602001611d06565b50505050905090810190601f168015611d4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080611d7f6103e8611379600e5486611b5d90919063ffffffff16565b9050611da884611da3600f546113796001600f540386611b5d90919063ffffffff16565b61191e565b611dc684611dc1600f5484611bb690919063ffffffff16565b611835565b61137f83826118dc565b611dd981611f13565b610b4057610b4081611f38565b611def8161117d565b610b4057610b408161203d565b611e04610bb5565b611e0d57610af5565b60005b601254811015611ea85760128181548110611e2757fe5b6000918252602082200154604080516352870d9f60e11b81523360048201526001600160a01b0388811660248301528781166044830152606482018790529151919092169263a50e1b3e926084808201939182900301818387803b158015611e8e57600080fd5b505af1925050508015611e9f575060015b50600101611e10565b50505050565b60008183611efd5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611d1e578181015183820152602001611d06565b506000838581611f0957fe5b0495945050505050565b600080611f1f83610c2d565b1180610a3757506000611f3183610c7c565b1192915050565b6001600160a01b0381166000908152600660205260409020805460ff1916815560010154600780546000198101908110611f6e57fe5b600091825260209091200154600780546001600160a01b039092169183908110611f9457fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480611fcd57fe5b6001900381819060005260206000200160006101000a8154906001600160a01b030219169055905580600660006007848154811061200757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902060010155505060088054600019019055565b6001600160a01b03166000818152600660205260408120805460ff1916600190811782556007805492820183905582820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191690921790915560088054909101905556fe4163636f756e7473202620616d6f756e7473206d7573742062652073616d65206c656e677468536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7743616e6e6f74206368616e67652070616972207768696c7374207468657265206973204c50207374616b6564a2646970667358221220a57c489e12017e570daa5d300b401ab35bf3be602cb043840802dd81ebd2ca2664736f6c63430007060033

Deployed ByteCode Sourcemap

23001:190:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1157:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8686:99;;;:::i;:::-;;;;;;;;;;;;;;;;21969:132;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21969:132:3;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16302:139;;;;;;;;;;;;;;;;-1:-1:-1;16302:139:3;;:::i;:::-;;9246:189;;;;;;;;;;;;;;;;-1:-1:-1;9246:189:3;-1:-1:-1;;;;;9246:189:3;;:::i;1581:28::-;;;:::i;763:98::-;;;:::i;16105:121::-;;;;;;;;;;;;;;;;-1:-1:-1;16105:121:3;;:::i;22687:310::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22687:310:3;;;;;;;;-1:-1:-1;22687:310:3;;-1:-1:-1;;22687:310:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22687:310:3;;-1:-1:-1;22687:310:3;;-1:-1:-1;;;;;22687:310:3:i;10727:63::-;;;:::i;22461:170::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22461:170:3;;;;;;;;;;;;;;;;;:::i;21780:103::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21780:103:3;;;;;;;;:::i;9853:112::-;;;;;;;;;;;;;;;;-1:-1:-1;9853:112:3;;:::i;2043:102::-;;;;;;;;;;;;;;;;-1:-1:-1;2043:102:3;-1:-1:-1;;;;;2043:102:3;;:::i;1361:90::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3597:105;;;;;;;;;;;;;;;;-1:-1:-1;3597:105:3;-1:-1:-1;;;;;3597:105:3;;:::i;17016:129::-;;;;;;;;;;;;;;;;-1:-1:-1;17016:129:3;;:::i;15795:86::-;;;:::i;15942:104::-;;;:::i;3421:96::-;;;:::i;18411:126::-;;;;;;;;;;;;;;;;-1:-1:-1;18411:126:3;-1:-1:-1;;;;;18411:126:3;;:::i;6015:93::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8872:99;;;:::i;10504:137::-;;;;;;;;;;;;;;;;-1:-1:-1;10504:137:3;-1:-1:-1;;;;;10504:137:3;;:::i;2395:90::-;;;:::i;6163:94::-;;;:::i;9049:117::-;;;;;;;;;;;;;;;;-1:-1:-1;9049:117:3;-1:-1:-1;;;;;9049:117:3;;:::i;10193:235::-;;;:::i;19062:91::-;;;:::i;:::-;;;;-1:-1:-1;;;;;19062:91:3;;;;;;;;;;;;;;10026:105;;;:::i;13134:249::-;;;;;;;;;;;;;;;;-1:-1:-1;13134:249:3;;:::i;3265:96::-;;;:::i;4061:458::-;;;;;;;;;;;;;;;;-1:-1:-1;4061:458:3;-1:-1:-1;;;;;4061:458:3;;:::i;1257:94::-;;;:::i;19772:188::-;;;;;;;;;;;;;;;;-1:-1:-1;19772:188:3;;;;:::i;18586:103::-;;;:::i;15652:92::-;;;:::i;3756:251::-;;;;;;;;;;;;;;;;-1:-1:-1;3756:251:3;-1:-1:-1;;;;;3756:251:3;;:::i;15013:203::-;;;;;;;;;;;;;;;;-1:-1:-1;15013:203:3;-1:-1:-1;;;;;15013:203:3;;:::i;9694:108::-;;;;;;;;;;;;;;;;-1:-1:-1;9694:108:3;;:::i;22183:156::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22183:156:3;;;;;;;;:::i;1615:32::-;;;:::i;9496:116::-;;;;;;;;;;;;;;;;-1:-1:-1;9496:116:3;-1:-1:-1;;;;;9496:116:3;;:::i;6334:110::-;;;;;;;;;;;;;;;;-1:-1:-1;6334:110:3;-1:-1:-1;;;;;6334:110:3;;:::i;998:149::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;998:149:3;;;;;;;;;;:::i;2575:92::-;;;;;;;;;;;;;;;;-1:-1:-1;2575:92:3;-1:-1:-1;;;;;2575:92:3;;:::i;19561:115::-;;;;;;;;;;;;;;;;-1:-1:-1;19561:115:3;;:::i;1157:90::-;1235:5;1228:12;;;;;;;;-1:-1:-1;;1228:12:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1203:13;;1228:12;;1235:5;;1228:12;;1235:5;1228:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1157:90;:::o;8686:99::-;8770:8;;8686:99;:::o;21969:132::-;22046:4;22069:25;22078:7;22087:6;22069:8;:25::i;:::-;22062:32;;21969:132;;;;;:::o;16302:139::-;2270:19;2278:10;2270:7;:19::i;:::-;2262:28;;;;;;16395:1:::1;16383:8;:13;;16375:22;;;::::0;::::1;;16407:16;:27:::0;16302:139::o;9246:189::-;9315:7;9341:43;9370:13;9376:6;9370:5;:13::i;:::-;-1:-1:-1;;;;;9341:15:3;;;;;;:7;:15;;;;;:24;;;;:28;:43::i;:::-;9334:50;;9246:189;;;;:::o;1581:28::-;;;;:::o;763:98::-;842:12;;763:98;:::o;16105:121::-;2270:19;2278:10;2270:7;:19::i;:::-;2262:28;;;;;;16186:3:::1;16176:7;:13;16168:22;;;::::0;::::1;;16200:9;:19:::0;16105:121::o;22687:310::-;22809:7;:14;22790:8;:15;:33;22782:84;;;;-1:-1:-1;;;22782:84:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22880:9;22876:115;22895:8;:15;22893:1;:17;22876:115;;;22930:50;22944:10;22956:8;22965:1;22956:11;;;;;;;;;;;;;;22969:7;22977:1;22969:10;;;;;;;;;;;;;;22930:13;:50::i;:::-;-1:-1:-1;22912:3:3;;22876:115;;;;22687:310;;:::o;10727:63::-;10763:20;10772:10;10763:8;:20::i;:::-;10727:63::o;22461:170::-;22561:4;22584:40;22598:6;22606:9;22617:6;22584:13;:40::i;:::-;22577:47;;22461:170;;;;;;:::o;21780:103::-;;;:::o;9853:112::-;14833:16;;-1:-1:-1;;;14833:16:3;;;;14825:25;;;;;;9930:28:::1;9939:10;9951:6;9930:8;:28::i;:::-;9853:112:::0;:::o;2043:102::-;2132:6;;;;;-1:-1:-1;;;;;2132:6:3;;;2121:17;;;;2043:102::o;1361:90::-;1435:9;;;;1361:90;:::o;3597:105::-;-1:-1:-1;;;;;3673:18:3;3650:4;3673:18;;;:9;:18;;;;;:22;;;;3597:105::o;17016:129::-;17081:10;17071:9;:21;;;;;;;;;;;:31;-1:-1:-1;17071:31:3;17063:40;;;;;;17113:25;17119:10;17131:6;17113:5;:25::i;15795:86::-;15865:9;;15795:86;:::o;15942:104::-;16022:16;;15942:104;:::o;3421:96::-;3491:19;;3421:96;:::o;18411:126::-;18482:7;18508:18;18518:7;18508:9;:18::i;6015:93::-;6058:16;6093:8;6086:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6086:15:3;;;;;;;;;;;;;;;;;;;;;;6015:93;:::o;8872:99::-;8954:10;;8872:99;:::o;10504:137::-;10570:7;10596:38;10619:14;10625:7;10619:5;:14::i;:::-;-1:-1:-1;;;;;10596:18:3;;:9;:18;;;;;;;;;;;;:22;:38::i;2395:90::-;2270:19;2278:10;2270:7;:19::i;:::-;2262:28;;;;;;2449:29:::1;2475:1;2449:17;:29::i;6163:94::-:0;6237:13;;6163:94;:::o;9049:117::-;-1:-1:-1;;;;;9140:16:3;9114:7;9140:16;;;:7;:16;;;;;:19;;9049:117::o;10193:235::-;2270:19;2278:10;2270:7;:19::i;:::-;2262:28;;;;;;10258:9:::1;10254:168;10273:8;:15:::0;10271:17;::::1;10254:168;;;10308:11;10322:21;10331:8;10340:1;10331:11;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;10331:11:3::1;10322:8;:21::i;:::-;10308:35:::0;-1:-1:-1;10373:7:3;;10370:42:::1;;10383:26;10392:8;10401:1;10392:11;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;10392:11:3::1;10405:3:::0;10383:8:::1;:26::i;:::-;-1:-1:-1::0;10290:3:3::1;;10254:168;;19062:91:::0;19140:6;;;;;-1:-1:-1;;;;;19140:6:3;;19062:91::o;10026:105::-;10118:5;;-1:-1:-1;;;;;10118:5:3;10026:105;:::o;13134:249::-;13189:20;13198:10;13189:8;:20::i;:::-;13237:10;13227:9;:21;;;;;;;;;;;:31;-1:-1:-1;13227:31:3;13219:40;;;;;;13312:10;13302:9;:21;;;;;;;;;;;:33;;13328:6;13302:25;:33::i;:::-;13288:10;13278:9;:21;;;;;;;;;;:57;;;;13345:31;;13369:6;13345:11;:31::i;3265:96::-;3305:16;3340:14;3333:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3333:21:3;;;;;;;;;;;;;;;;;;;;;;3265:96;:::o;4061:458::-;2270:19;2278:10;2270:7;:19::i;:::-;2262:28;;;;;;4135:10:::1;4141:3;4135:5;:10::i;:::-;4127:19;;;::::0;::::1;;-1:-1:-1::0;;;;;4156:14:3;::::1;4177:5;4156:14:::0;;;:9:::1;:14;::::0;;;;:26;;-1:-1:-1;;4156:26:3::1;::::0;;4192:19:::1;:21:::0;;-1:-1:-1;;4192:21:3;;;;;;4156:26;4245:23;;::::1;::::0;4392:14:::1;4407:21:::0;;4245:23;;4392:14;;4407:23;;;;4392:39;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;4372:14:::1;:17:::0;;-1:-1:-1;;;;;4392:39:3;;::::1;::::0;4387:1;;4372:17;::::1;;;;;;;;;;;;;:59;;;;;-1:-1:-1::0;;;;;4372:59:3::1;;;;;-1:-1:-1::0;;;;;4372:59:3::1;;;;;;4481:1;4441:9;:28;4451:14;4466:1;4451:17;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;4451:17:3::1;4441:28:::0;;;::::1;::::0;;;;;;;;4451:17;4441:37:::1;:41:::0;4492:14:::1;:20:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;4492:20:3;;;;;-1:-1:-1;;;;;;4492:20:3::1;::::0;;;;;-1:-1:-1;;4061:458:3:o;1257:94::-;1337:7;1330:14;;;;;;;;-1:-1:-1;;1330:14:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1305:13;;1330:14;;1337:7;;1330:14;;1337:7;1330:14;;;;;;;;;;;;;;;;;;;;;;;;19772:188;2270:19;2278:10;2270:7;:19::i;:::-;2262:28;;;;;;19854:2:::1;19845:6;:11;;;:28;;;;;19869:4;19860:6;:13;;;19845:28;19837:60;;;::::0;;-1:-1:-1;;;19837:60:3;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;19837:60:3;;;;;;;;;;;;;::::1;;19931:13;:22:::0;;-1:-1:-1;;19931:22:3::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19772:188::o;18586:103::-;18665:4;18586:103;:::o;15652:92::-;15726:11;;15652:92;:::o;3756:251::-;2270:19;2278:10;2270:7;:19::i;:::-;2262:28;;;;;;3827:15:::1;3838:3;3827:10;:15::i;:::-;3819:24;;;::::0;::::1;;-1:-1:-1::0;;;;;3853:14:3::1;;::::0;;;:9:::1;:14;::::0;;;;:25;;-1:-1:-1;;3853:25:3::1;3874:4;3853:25:::0;;::::1;::::0;;3914:14:::1;:21:::0;;3888:23;;::::1;:47:::0;;;3945:24;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;3945:24:3::1;::::0;;::::1;::::0;;;3979:19:::1;:21:::0;;;;::::1;::::0;;3756:251::o;15013:203::-;2270:19;2278:10;2270:7;:19::i;:::-;2262:28;;;;;;15084:8:::1;::::0;:13;15076:70:::1;;;;-1:-1:-1::0;;;15076:70:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15156:5;:20:::0;;-1:-1:-1;;;;;;;;;15156:20:3;;::::1;-1:-1:-1::0;;;;;;15156:20:3;;::::1;;15186:23:::0;;;::::1;-1:-1:-1::0;;;15186:23:3::1;::::0;;15013:203::o;9694:108::-;14833:16;;-1:-1:-1;;;14833:16:3;;;;14825:25;;;;;;9769:26:::1;9776:10;9788:6;9769;:26::i;22183:156::-:0;22263:4;22287:44;22301:10;22313:9;22324:6;22287:13;:44::i;1615:32::-;;;;:::o;9496:116::-;9566:7;9592:13;9598:6;9592:5;:13::i;6334:110::-;-1:-1:-1;;;;;6412:17:3;6389:4;6412:17;;;:9;:17;;;;;:25;;;;6334:110::o;998:149::-;-1:-1:-1;;;;;1113:18:3;;;1087:7;1113:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;998:149::o;2575:92::-;2270:19;2278:10;2270:7;:19::i;:::-;2262:28;;;;;;2648:6:::1;:12:::0;;-1:-1:-1;;;;;2648:12:3;;::::1;;;-1:-1:-1::0;;;;;;2648:12:3;;::::1;::::0;;;::::1;::::0;;2575:92::o;19561:115::-;1945:19;1953:10;1945:7;:19::i;:::-;1937:38;;;;;-1:-1:-1;;;1937:38:3;;;;;;;;;;;;-1:-1:-1;;;1937:38:3;;;;;;;;;;;;;;;19631::::1;19650:10;19662:6;19631:18;:38::i;582:176:2:-:0;640:7;671:5;;;694:6;;;;686:46;;;;;-1:-1:-1;;;686:46:2;;;;;;;;;;;;;;;;;;;;;;;;;;;21507:154:3;21604:10;21576:4;21592:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;21592:32:3;;;;;;;;;;;;:41;:11;21507:154::o;11344:410::-;11453:10;;-1:-1:-1;;;;;11421:16:3;;11399:7;11421:16;;;:7;:16;;;;;:28;;;11399:7;;11421:42;;:70;;-1:-1:-1;;;;;;11467:16:3;;;;;;:7;:16;;;;;:19;:24;11421:70;11418:87;;;-1:-1:-1;11501:1:3;11494:8;;11418:87;-1:-1:-1;;;;;11553:16:3;;11514:21;11553:16;;;:7;:16;;;;;:28;;;11538:10;;:44;;:14;:44::i;:::-;11651:8;;-1:-1:-1;;;;;11626:16:3;;11592:13;11626:16;;;:7;:16;;;;;:19;11514:68;;-1:-1:-1;11592:13:3;11608:52;;11651:8;11608:38;;11514:68;;11608:17;:38::i;:::-;:42;;:52::i;:::-;11592:68;11344:410;-1:-1:-1;;;;11344:410:3:o;20148:1278::-;20240:4;-1:-1:-1;;;;;20264:20:3;;20256:57;;;;;-1:-1:-1;;;20256:57:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20331:23:3;;20323:58;;;;;-1:-1:-1;;;20323:58:3;;;;;;;;;;;;-1:-1:-1;;;20323:58:3;;;;;;;;;;;;;;;20441:21;20455:6;20441:13;:21::i;:::-;20554:16;20563:6;20554:8;:16::i;:::-;-1:-1:-1;;;;;20588:17:3;;:9;:17;;;;;;;;;;;:27;-1:-1:-1;20588:27:3;20580:58;;;;;-1:-1:-1;;;20580:58:3;;;;;;;;;;;;-1:-1:-1;;;20580:58:3;;;;;;;;;;;;;;;-1:-1:-1;;;;;20726:20:3;;20736:10;20726:20;20723:150;;20795:67;;;;;;;;;;;-1:-1:-1;;;20795:67:3;;;;;;;;-1:-1:-1;;;;;20795:19:3;;-1:-1:-1;20795:19:3;;;:11;:19;;;;;20815:10;20795:31;;;;;;;;;;:67;;20831:6;;20795:35;:67::i;:::-;-1:-1:-1;;;;;20761:19:3;;;;;;:11;:19;;;;;;;;20781:10;20761:31;;;;;;;:101;20723:150;20920:15;20938:23;20946:6;20954;20938:7;:23::i;:::-;-1:-1:-1;;;;;21021:17:3;;:9;:17;;;;;;;;;;;20920:41;;-1:-1:-1;21021:30:3;;20920:41;21021:21;:30::i;:::-;-1:-1:-1;;;;;21001:17:3;;;:9;:17;;;;;;;;;;;:50;;;;21084:20;;;;;;;:33;;21109:7;21084:24;:33::i;:::-;-1:-1:-1;;;;;21061:20:3;;:9;:20;;;;;;;;;;:56;21162:35;21190:6;21162:27;:35::i;:::-;21207:41;21238:9;21207:30;:41::i;:::-;21293:45;21312:6;21320:9;21331:6;21293:18;:45::i;:::-;21379:9;-1:-1:-1;;;;;21362:36:3;21371:6;-1:-1:-1;;;;;21362:36:3;;21390:7;21362:36;;;;;;;;;;;;;;;;;;-1:-1:-1;21415:4:3;;20148:1278;-1:-1:-1;;;;20148:1278:3:o;10873:394::-;10930:17;10939:7;10930:8;:17::i;:::-;:22;10927:283;;10967:14;10984;10990:7;10984:5;:14::i;:::-;-1:-1:-1;;;;;11033:18:3;;:9;:18;;;;;;;;;;;10967:31;;-1:-1:-1;11033:30:3;;10967:31;11033:22;:30::i;:::-;-1:-1:-1;;;;;11012:18:3;;:9;:18;;;;;;;;;;;:51;;;;11105:7;:16;;;:25;;;:37;;11135:6;11105:29;:37::i;:::-;-1:-1:-1;;;;;11077:16:3;;;;;;:7;:16;;;;;:25;;:65;11173:14;;:26;;11192:6;11173:18;:26::i;:::-;11156:14;:43;-1:-1:-1;10927:283:3;11250:10;;-1:-1:-1;;;;;11219:16:3;;;;;;;:7;:16;;;;;:28;;:41;10873:394::o;12463:608::-;-1:-1:-1;;;;;12541:16:3;;;;;;:7;:16;;;;;:19;:29;-1:-1:-1;12541:29:3;12533:38;;;;;;12657:17;12666:7;12657:8;:17::i;:::-;-1:-1:-1;;;;;12764:16:3;;;;;;:7;:16;;;;;:19;:31;;12788:6;12764:23;:31::i;:::-;-1:-1:-1;;;;;12742:16:3;;;;;;:7;:16;;;;;:53;12816:8;;:20;;12829:6;12816:12;:20::i;:::-;12805:8;:31;12886:5;;:31;;;-1:-1:-1;;;12886:31:3;;-1:-1:-1;;;;;12886:31:3;;;;;;;;;;;;;;;:5;;;;;:14;;:31;;;;;;;;;;;;;;:5;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12985:30:3;;-1:-1:-1;13007:7:3;12985:21;:30::i;:::-;13039:25;;;-1:-1:-1;;;;;13039:25:3;;;;;;;;;;;;;;;;;;;;;;;12463:608;;:::o;17214:310::-;17284:11;17281:26;;17298:7;;17281:26;17340:12;;:24;;17357:6;17340:16;:24::i;:::-;17325:12;:39;17388:11;;:23;;17404:6;17388:15;:23::i;:::-;17374:11;:37;-1:-1:-1;;;;;17442:18:3;;:9;:18;;;;;;;;;;;:30;;17465:6;17442:22;:30::i;:::-;-1:-1:-1;;;;;17421:18:3;;:9;:18;;;;;;;;;;;;:51;;;;17496:21;;;;;;;;;;;;;;;;;;;;;;;;17214:310;;:::o;1029:134:2:-;1087:7;1113:43;1117:1;1120;1113:43;;;;;;;;;;;;;;;;;:3;:43::i;13466:162:3:-;13552:10;;:22;;13567:6;13552:14;:22::i;:::-;13539:10;:35;13589:32;;;-1:-1:-1;;;;;13589:32:3;;;;;;;;;;;;;;;;;;;;;;;13466:162;;:::o;5154:331::-;5211:4;5249:66;5391:17;;5435:15;;;;;:42;;-1:-1:-1;5454:23:3;;;5427:51;-1:-1:-1;;5154:331:3:o;11816:587::-;11884:5;;:50;;;-1:-1:-1;;;11884:50:3;;-1:-1:-1;;;;;11884:50:3;;;;;;;11920:4;11884:50;;;;;;;;;;;;:5;;;;;:18;;:50;;;;;;;;;;;;;;:5;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12083:17:3;;-1:-1:-1;12092:7:3;12083:8;:17::i;:::-;-1:-1:-1;;;;;12183:16:3;;;;;;:7;:16;;;;;:19;:31;;12207:6;12183:23;:31::i;:::-;-1:-1:-1;;;;;12161:16:3;;;;;;:7;:16;;;;;:53;12235:8;;:20;;12248:6;12235:12;:20::i;:::-;12224:8;:31;12321:28;12341:7;12321:19;:28::i;:::-;12373:23;;;-1:-1:-1;;;;;12373:23:3;;;;;;;;;;;;;;;;;;;;;;;11816:587;;:::o;18754:230::-;-1:-1:-1;;;;;18863:18:3;;:9;:18;;;;;;;;;;;:30;;18886:6;18863:22;:30::i;:::-;-1:-1:-1;;;;;18842:18:3;;:9;:18;;;;;;;;;;;:51;;;;18903:12;:22;;;;;;;18940:37;;;;;;;18842:9;;18940:37;;;;;;;;;;;18754:230;;:::o;1636:229:2:-;1694:7;1709:6;1705:41;;-1:-1:-1;1734:1:2;1727:8;;1705:41;1768:5;;;1772:1;1768;:5;:1;1791:5;;;;;:10;1783:56;;;;-1:-1:-1;;;1783:56:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:130;2407:7;2433:39;2437:1;2440;2433:39;;;;;;;;;;;;;;;;;:3;:39::i;19231:282:3:-;19292:8;;;;;;;19289:62;;;19314:11;;:26;;19335:5;19314:26;;;19328:4;19314:26;19303:8;:37;;;;;;;-1:-1:-1;;19303:37:3;;;;;;;;;19342:7;;19289:62;19456:13;;19439:12;;:41;;19475:4;;19439:31;;19456:13;;;;;19439:16;:31;:::i;:41::-;19429:6;:51;;19421:85;;;;;-1:-1:-1;;;19421:85:3;;;;;;;;;;;;-1:-1:-1;;;19421:85:3;;;;;;;;;;;;;;1170:219:2;1256:7;1271:1;1276;1271:6;1267:30;;;-1:-1:-1;1279:18:2;;;1267:30;1323:12;1315:6;;;;1307:29;;;;-1:-1:-1;;;1307:29:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1358:5:2;;;1170:219::o;16552:400:3:-;16622:7;16641:14;16658:33;16686:4;16658:23;16671:9;;16658:8;:12;;:23;;;;:::i;:33::-;16641:50;;16738:74;16750:7;16759:52;16794:16;;16759:30;16787:1;16770:16;;:18;16759:6;:10;;:30;;;;:::i;:52::-;16738:11;:74::i;:::-;16822:44;16828:7;16837:28;16848:16;;16837:6;:10;;:28;;;;:::i;:::-;16822:5;:44::i;:::-;16892:20;:8;16905:6;16892:12;:20::i;13722:133::-;13799:23;13814:7;13799:14;:23::i;:::-;13795:54;;13825:21;13838:7;13825:12;:21::i;13958:127::-;14038:17;14047:7;14038:8;:17::i;:::-;14034:45;;14058:18;14068:7;14058:9;:18::i;4580:481::-;4680:13;:11;:13::i;:::-;4677:33;;4701:7;;4677:33;4723:9;4719:336;4738:14;:21;4736:23;;4719:336;;;4970:14;4985:1;4970:17;;;;;;;;;;;;;;;;;4956:77;;;-1:-1:-1;;;4956:77:3;;4996:10;4956:77;;;;-1:-1:-1;;;;;4956:77:3;;;;;;;;;;;;;;;;;;;;;;4970:17;;;;;4956:39;;:77;;;;;;;;;;;4970:17;;4956:77;;;;;;;;;;;;;;;;;;;;;;;;;4952:93;4761:3;;4719:336;;;;4580:481;;;:::o;2485:338:2:-;2571:7;2671:12;2664:5;2656:28;;;;-1:-1:-1;;;2656:28:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2694:9;2710:1;2706;:5;;;;;;;2485:338;-1:-1:-1;;;;;2485:338:2:o;14591:141:3:-;14655:4;14699:1;14678:18;14688:7;14678:9;:18::i;:::-;:22;:47;;;;14724:1;14704:17;14713:7;14704:8;:17::i;:::-;:21;;14591:141;-1:-1:-1;;14591:141:3:o;6778:447::-;-1:-1:-1;;;;;6836:18:3;;6865:5;6836:18;;;:9;:18;;;;;:34;;-1:-1:-1;;6836:34:3;;;;6922:27;;7044:8;7053:15;;-1:-1:-1;;7053:17:3;;;7044:27;;;;;;;;;;;;;;;;7030:8;:11;;-1:-1:-1;;;;;7044:27:3;;;;7039:1;;7030:11;;;;;;;;;;;;;;:41;;;;;-1:-1:-1;;;;;7030:41:3;;;;;-1:-1:-1;;;;;7030:41:3;;;;;;7081:8;:14;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7081:14:3;;;;;;;7183:1;7149:9;:22;7159:8;7168:1;7159:11;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7159:11:3;7149:22;;;;;;;;;;;;7159:11;7149:31;:35;-1:-1:-1;;7203:13:3;:15;;-1:-1:-1;;7203:15:3;;;6778:447::o;6505:207::-;-1:-1:-1;;;;;6560:18:3;;;;;:9;:18;;;;;:33;;-1:-1:-1;;6560:33:3;6589:4;6560:33;;;;;6633:8;:15;;6603:27;;;:45;;;6658:22;;;;;;;;;;;;-1:-1:-1;;;;;;6658:22:3;;;;;;;6690:13;:15;;;;;;;6505:207::o

Metadata Hash

ipfs://a57c489e12017e570daa5d300b401ab35bf3be602cb043840802dd81ebd2ca26
Loading