MATIC Price: $0.533837 (-0.53%)
Gas: 30.9 GWei
 
Transaction Hash
Method
Block
From
To
Sell594455662024-07-16 22:13:554 days ago1721168035IN
0x69fF8b40...A4559a4C0
6 MATIC0.0017830530.00000005
Sell594455432024-07-16 22:13:074 days ago1721167987IN
0x69fF8b40...A4559a4C0
6 MATIC0.0017830530.00000005
Sell594455362024-07-16 22:12:534 days ago1721167973IN
0x69fF8b40...A4559a4C0
6 MATIC0.0017830530.00000005
Sell594455232024-07-16 22:12:254 days ago1721167945IN
0x69fF8b40...A4559a4C0
6 MATIC0.0022960530.00000005
Airdrop594453652024-07-16 22:06:494 days ago1721167609IN
0x69fF8b40...A4559a4C0
0 MATIC0.0028816230.00000002
Airdrop592905182024-07-13 0:52:078 days ago1720831927IN
0x69fF8b40...A4559a4C0
0 MATIC0.0066571969.30679102
Airdrop592904562024-07-13 0:49:558 days ago1720831795IN
0x69fF8b40...A4559a4C0
0 MATIC0.0077085580.25226218
Airdrop592904092024-07-13 0:48:158 days ago1720831695IN
0x69fF8b40...A4559a4C0
0 MATIC0.0078533881.76014035
Airdrop592903482024-07-13 0:46:058 days ago1720831565IN
0x69fF8b40...A4559a4C0
0 MATIC0.0084190687.64930784
Airdrop592902442024-07-13 0:42:258 days ago1720831345IN
0x69fF8b40...A4559a4C0
0 MATIC0.0069685472.54824414
Sell592369762024-07-11 16:50:039 days ago1720716603IN
0x69fF8b40...A4559a4C0
0.3 MATIC0.0030911352.00868855
Airdrop592055362024-07-10 22:11:2110 days ago1720649481IN
0x69fF8b40...A4559a4C0
0 MATIC0.0029130730.3274299
Airdrop592055222024-07-10 22:10:5110 days ago1720649451IN
0x69fF8b40...A4559a4C0
0 MATIC0.0029148430.34593679
Airdrop592055172024-07-10 22:10:3910 days ago1720649439IN
0x69fF8b40...A4559a4C0
0 MATIC0.0029128230.32486428
Airdrop592055092024-07-10 22:10:2310 days ago1720649423IN
0x69fF8b40...A4559a4C0
0 MATIC0.0029171230.36966045
Airdrop592055042024-07-10 22:10:1310 days ago1720649413IN
0x69fF8b40...A4559a4C0
0 MATIC0.002917430.37257499
Airdrop592054882024-07-10 22:09:3910 days ago1720649379IN
0x69fF8b40...A4559a4C0
0 MATIC0.0029178130.37680375
Airdrop592054742024-07-10 22:09:0910 days ago1720649349IN
0x69fF8b40...A4559a4C0
0 MATIC0.0029212130.41218728
Airdrop592054642024-07-10 22:08:4710 days ago1720649327IN
0x69fF8b40...A4559a4C0
0 MATIC0.002928630.48915841
Airdrop592054532024-07-10 22:08:2310 days ago1720649303IN
0x69fF8b40...A4559a4C0
0 MATIC0.0029136130.33307218
Airdrop592054472024-07-10 22:08:1110 days ago1720649291IN
0x69fF8b40...A4559a4C0
0 MATIC0.0029110530.30639171
Airdrop592053422024-07-10 22:04:2710 days ago1720649067IN
0x69fF8b40...A4559a4C0
0 MATIC0.002900730.19874043
Airdrop592053252024-07-10 22:03:5110 days ago1720649031IN
0x69fF8b40...A4559a4C0
0 MATIC0.0029029230.22180266
Airdrop592053002024-07-10 22:02:5910 days ago1720648979IN
0x69fF8b40...A4559a4C0
0 MATIC0.0029584730.8000916
Airdrop592052922024-07-10 22:02:4110 days ago1720648961IN
0x69fF8b40...A4559a4C0
0 MATIC0.002904830.24139942
View all transactions

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Bide_N2

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2024-06-07
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

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

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// File: contracts/bide_n2.sol


pragma solidity ^0.8.25;


//import "@openzeppelin/contracts/token/ERC20/ERC20.sol";




// Interface for the ERC-20 standard
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

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

event Airdrop(address indexed to);
event Sale(address indexed to, uint256 amount);
event Received(address indexed sender, uint256 amount);
event FallbackCalled(address indexed sender, uint256 amount, bytes data);


contract Bide_N2 is IERC20,  Ownable, ReentrancyGuard {

    string public name = "Bide N2 Token";
    string public symbol = "2BIDE";
    uint256 public decimals=18;

    uint256 private constant _PRECISION = 1e18;
    uint256 private constant _MAX_SUPPLY = 1e9 * _PRECISION;            // Maximum 2BIDE supply possible
    uint256 private constant _AIRDROP_PER_WALLET = 2e3 * _PRECISION;    // Airdrop per wallet limit
    uint256 private constant _AIRDROP_LIMIT = 3e6 * _PRECISION;         // Overall airdrop allocation
    uint256 private constant _CREATOR_SHARE = 5e6 * _PRECISION;         // Because why not?
    uint256 private _SALE_PER_WALLET = 1e5 * _PRECISION;                // Maximum amount of tokens to be sold
                                                                        // to a single address via the website
                                                                        // or by direct transfer of MATIC to this contract
    uint256 private _totalSupply = _CREATOR_SHARE;                      // Initial supply is the creator share.

    string private constant _ERROR_EXCEEDS_MAX_SUPPLY = "Exceeds max supply";
    string private constant _ERROR_GO_TO_UNI = "Sale is no longer available here. Go to UniSwap";
    string private constant _ERROR_INSUFFICIENT_FUNDS = "Insufficient funds";
    string private constant _ERROR_ZERO_ADDRESS = "Operation is prohibited for the 0 address";

    /*
        Bide N2 Tax
        ===========
        It is not really a tax. While there are many other tokens that utilize some sort of internal 
        gas fee per transaction, we see absolutely no reason for such, and even consider it to be
        unfair.

        The "Bide N2 Tax" is a philanthropic initiative. It means that a certain percent of newly
        minted 2BIDE tokens goes into a vault (the balance of the account itself). These funds may
        not be released prior to December 1st, 2024 at midnight. Releasing these funds it one of a very 
        few things that the creator of the contract is allowed to do.

        The funds collected by leveraging this taxation of the minting process will then be donated
        to a medical research institution that concentrates on the research of aging of the human breain.

        As a community driven project, we will organize vote (using another smart cotract) and you,
        as token holders, will be able to vote for a set of medical institutions, in order to select 
        just one.
    */
    uint private  _BIDE_N2_TAX_END_TIME = 1733011200;  //December 1st, 2024
    uint256 private  _BIDE_N2_TAX_RATE = 1e4;

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

    // All newly minted tokens will go into reserve.
    // The reserve will be used for liquidity provision and further development needs.
    address private _reserve;

    // The one responsible for the release of the philanthropic savings.
    address private _creator;

    // Only one airdrop per address. This would be set to 1 for addresses that have claimed their airdrop.
    mapping(address => uint256) private _airdropStatus;

    /*
        !THIS IS NOT THE USER'S ACTUAL BALANCE!
        This field is used ONLY for tracking of token sales on the 2bite.io website.
        Since there is an implied limit of how much tokens may be purchased by a single wallet
        on website, this mapping is used in order to enforce the limit.
    */
    mapping(address => uint256) private _saleBalance;

    // Just the amount of airdripped tokens.
    uint256 private _airdopped = 0;

    /*
        This modifier ensures that marked functions may only be invoked by the creator of the contract.
        Since the contract will be renounced right after creation, the usual onlyOwner modifier is 
        not applicable. 
    */
    modifier onlyCreator()
    {
        require(msg.sender == _creator, "You are not authorized");
        _;
    }


    /*
        Creation of the contract :-)
    */
    constructor() Ownable(msg.sender)  
    {
        _balances[msg.sender] = _CREATOR_SHARE;
        _creator = msg.sender;
    }

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

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

    /*
        This function returns the amount of 2BIDE tokens held by 
        this contract (in the "philantropy vault").
        The same may be achieved by calling balanceOf(<this contract address>).
    */
    function tokenBalance() public view returns(uint256)
    {
        return _balances[address(this)];
    }

    /*
         In order to keep the minting process up and running, each transfer of 2BIDE tokens would 
         produce (mint) a few tokens into the reserve and (if it happens before December 1st, 2024)
         would mint a bit into the philantropy vault as well.

         Depending on the totalSupply, the amount of new tokens to mint would gradually degrade. 
         This intends to soften the emission process.
    */
    function _calculateMintAmount(uint256 transactionAmount)private view returns(uint256)
    {
        uint256 factor;
        if(_totalSupply < 5e8)
            factor = 1e4;
        else if(_totalSupply < 7.5e8)
            factor = 2e4;
        else if(_totalSupply < 9e8)
            factor = 5e4;
        else if(_totalSupply < _MAX_SUPPLY)
            factor = 1e5;
        
        uint256 mintAmount = transactionAmount * 1e2 / factor;
        return (_totalSupply + mintAmount <= _MAX_SUPPLY)? mintAmount : _MAX_SUPPLY - _totalSupply;
    }


    /*
        This function is the one that calculates the amount of tokens to be minted to 
        the philantropy vault (as long as it is before December 1st, 2024).
    */
    function calculateTax(uint256 amount)private view returns(uint256)
    {
        uint256 tax = 0;
        if(block.timestamp < _BIDE_N2_TAX_END_TIME)
        {
            uint256 dynamicFactor = (_totalSupply < 5e8)? 5e2 : 1e2;
            tax = (amount * dynamicFactor)/_BIDE_N2_TAX_RATE;
        }
        return tax;
    }

    /*
        This is another management function left for the creator.
        This function is used to adjust the amount of tokens that may be sold to a single 
        address on the website in order to prevent abuse of the website.
    */
    function adjustSalePerWallet(uint256 newAmount)external onlyCreator
    {
        require(newAmount >= 1e3 * _PRECISION, "Too low");
        require(newAmount <= 1e5 * _PRECISION, "Too high");
        _SALE_PER_WALLET = newAmount * _PRECISION;
    }

    /*
        Airdrop is a bonus for the early adopters of the 2BIDE token.
        This functionality has two purposes:
        1 - provide our early adopters with a few tokens for free.
        2 - produce (mint) new tokens that would go into the reserve and 
            into the philantropy vault (the latter would later be donated).
    */
    function airdrop() public nonReentrant returns(bool)
    {
        require(_airdopped < _AIRDROP_LIMIT, "Ran out");
        require(_airdropStatus[msg.sender] != 1, "You can't do it twice");
        uint256 mintedReserve = (_AIRDROP_PER_WALLET * 5e3) / 1e4;
        uint256 mintedTokens = _AIRDROP_PER_WALLET + mintedReserve;
        require((_totalSupply + mintedTokens) <= _MAX_SUPPLY, _ERROR_EXCEEDS_MAX_SUPPLY);
        _airdopped += _AIRDROP_PER_WALLET;
        _airdropStatus[msg.sender] = 1;
        _mint(msg.sender, _AIRDROP_PER_WALLET);
        _mint(_reserve, mintedReserve);
        emit Airdrop(msg.sender);
        return true;
    }

    /*
        This function is implemented in order to let the visitors of the 2bide.io 
        website purchase 2BIDE tokens directly from the contract for a lower price.
        The tokens would be delivered directly to the balance of the buyer.
        In addition, the function would mint a certain amount of tokens into the 
        reserve (to remind you, the reserve will be used to provide liquidity 
        and to cover further development cost.

        To put it in simple terms, by buyin 2BIDE on site you crowdfund its liquidity
        and provide the team with the means to keep up the work.

        NOTE #1: This function would work as long as total supply is less than half of 
                 the maximum supply for 2BIDE, meaning (totalSupply < 500,000,000).

        NOTE #2: There is an implied limit for how many tokens may be sold to a single
                 address. The range is 1,000 - 100,000 2BIDE. The range may be adjusted
                 depending on the market situation. This, however, would have not impact
                 on the selling price whatsoever.
    */
    function sell() public payable nonReentrant returns(bool)
    { 
        return _sell();
    }

    // This is the actual implementation of the sell() function
    function _sell()private  returns(bool)
    {
        uint256 mintedSale = ((msg.value * 1e4)/(6*_PRECISION))*1e18;
        // The purchased amount should be enough to produce some reserve.
        require(mintedSale > 1e4, "Value too small");            
        uint256 mintedReserve = (mintedSale * 1e3)/1e4;
        uint256 mintedTotal = mintedSale + mintedReserve;
        require((_totalSupply + mintedTotal) <= _MAX_SUPPLY/2, _ERROR_GO_TO_UNI);
        require((_saleBalance[msg.sender] + mintedSale) <= _SALE_PER_WALLET, "Per wallet limit exceeded");
        _saleBalance[msg.sender] += mintedSale;
        _mint(msg.sender, mintedSale);
        _mint(_reserve, mintedReserve);
        emit Sale(msg.sender, mintedSale);
        return true;
    }

    // As the name of the function states - it mints new 2BIDE tokens.
    function _mint(address to, uint256 amount)private returns (bool)
    {
        require(to != address(0), _ERROR_ZERO_ADDRESS);
        require((_totalSupply + amount) < _MAX_SUPPLY,_ERROR_EXCEEDS_MAX_SUPPLY);
        _balances[to] += amount;
        _totalSupply += amount;
        emit Transfer(address(0), to, amount);
        return true;
    }

    /*
        This function is the standard transfer function from the ERC20 specification,
        yet, with the tiny addition of minting new tokens as long as the totalSupply
        is below _MAX_SUPPLY.

        In case the transaction is performed before December 1st, 2024, the function 
        also mints a tiny amount into the philantropy vault.
    */
    function transfer(address recipient, uint256 amount)external override nonReentrant returns(bool)
    {
        require(recipient != address(0),_ERROR_ZERO_ADDRESS);
        require(_balances[msg.sender] >= amount, _ERROR_INSUFFICIENT_FUNDS);
        _balances[msg.sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(msg.sender, recipient, amount);
        if(_totalSupply < _MAX_SUPPLY)
        {
            uint256 mintAmount = _calculateMintAmount(amount);
            uint256 r = calculateTax(mintAmount);
            uint256 d = mintAmount - r;
            _mint(_reserve, d);
            if(r > 0)
                _mint(address(this), r);
        }
        return true;
    }

    /*
        This is a standard ERC20 transferFrom() function with the same
        tiny additions as the transfer() function above.
    */
    function transferFrom(address sender, address recipient, uint256 amount)external override nonReentrant returns(bool)
    {
        require(_balances[sender] >= amount,_ERROR_INSUFFICIENT_FUNDS);
        require(_allowances[sender][msg.sender] >= amount, "Allowance exceeded");
        _allowances[sender][msg.sender] -= amount;
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        if(_totalSupply < _MAX_SUPPLY)
        {
            uint256 mintAmount = _calculateMintAmount(amount);
            uint256 r = calculateTax(mintAmount);
            uint256 d = mintAmount - r;
            _mint(_reserve, d);
            if(r > 0)
                _mint(address(this), r);
        }
        return true;
    }

    // Standard ERC20 function
    function allowance(address owner, address spender) external view override returns (uint256)
    {
        return _allowances[owner][spender];
    }

    // Standard ERC20 function 
    function approve(address spender, uint256 amount)external override returns(bool)
    {
        require(spender != address(0), _ERROR_ZERO_ADDRESS);
        _allowances[msg.sender][spender] = 0;
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    /*
        This function sets the reserve wallet.
        It may only be called before the contract's ownership is renounced.
    */
    function setReserve(address newReserve) external onlyOwner
    {
        _reserve = newReserve;
    }

    /*
        This function transfers the accumulated MATIC balance to
        the reserve wallet. Most of it would go into the liquidity pool,
        but a certain (small) percent would assist in further 
        development of the project.
    */
    event LiquidityFundAbsorbed(address indexed to, uint256 amount);
    function prepareLiquidityFund()external payable onlyCreator nonReentrant
    {
        uint256 amount = address(this).balance;
        payable(_reserve).transfer(amount);
        emit LiquidityFundAbsorbed(_reserve, amount);
    }

    /*
        When December 1st, 2024 comes, the creator would be able 
        to release the funds locked in the philantropy vault 
        to the address provided by the selected research institution.
    */
    event PhilanthropicSavingsReleased(address indexed to, uint256 amount);
    function releasePhilanthropicSavings(address target) external onlyCreator
    {
        require(target != address(0), _ERROR_ZERO_ADDRESS);
        require(_balances[address(this)] > 0, _ERROR_INSUFFICIENT_FUNDS);
        require(block.timestamp > _BIDE_N2_TAX_END_TIME, "Too early");
        uint256 deposit = _balances[address(this)];
        _balances[address(this)] = 0;
        _balances[target] += deposit;
        emit Transfer(address(this), target, deposit);
        emit PhilanthropicSavingsReleased(target, deposit);
    }

    /*
        Shows how many tokens are available for airdrop.
    */
    function remainingAirdrop()external view returns (uint256)
    {
        return _AIRDROP_LIMIT - _airdopped;
    }

    /*
        Shows how many tokens have been airdropped already.
    */
    function spentAirdrop()external view returns (uint256)
    {
        return _airdopped;
    }

    /*
        This function shows how many tokens may still be bought by certain address.
    */
    function remainingSaleLimit(address account)external view returns(uint256)
    {
        uint256 remaining = _SALE_PER_WALLET - _saleBalance[account];
        return (remaining > 0)? remaining : 0; 
    }
    

    /*
        It is possible to purchase 2BIDE tokens by sending MATIC 
        directly to this contract. However, it is important 
        to keep in mind that the rules of purchasing the token 
        on the 2bide.io website apply here as well.
    */
    receive() external payable 
    {
        _sell();
        emit Received(msg.sender, msg.value);
    }

    fallback() external payable 
    { 
        emit FallbackCalled(msg.sender, msg.value, msg.data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"FallbackCalled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityFundAbsorbed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PhilanthropicSavingsReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Sale","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"adjustSalePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"decimals","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareLiquidityFund","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"releasePhilanthropicSavings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"remainingAirdrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"remainingSaleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newReserve","type":"address"}],"name":"setReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"spentAirdrop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060400160405280600d81526020017f42696465204e3220546f6b656e00000000000000000000000000000000000000815250600290816100489190610505565b506040518060400160405280600581526020017f32424944450000000000000000000000000000000000000000000000000000008152506003908161008d9190610505565b506012600455670de0b6b3a7640000620186a06100aa9190610601565b600555670de0b6b3a7640000624c4b406100c49190610601565b60065563674ba7006007556127106008555f600f553480156100e4575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610156575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161014d9190610681565b60405180910390fd5b6101658161020a60201b60201c565b5060018081905550670de0b6b3a7640000624c4b406101849190610601565b60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555033600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061069a565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061034657607f821691505b60208210810361035957610358610302565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103bb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610380565b6103c58683610380565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104096104046103ff846103dd565b6103e6565b6103dd565b9050919050565b5f819050919050565b610422836103ef565b61043661042e82610410565b84845461038c565b825550505050565b5f90565b61044a61043e565b610455818484610419565b505050565b5b818110156104785761046d5f82610442565b60018101905061045b565b5050565b601f8211156104bd5761048e8161035f565b61049784610371565b810160208510156104a6578190505b6104ba6104b285610371565b83018261045a565b50505b505050565b5f82821c905092915050565b5f6104dd5f19846008026104c2565b1980831691505092915050565b5f6104f583836104ce565b9150826002028217905092915050565b61050e826102cb565b67ffffffffffffffff811115610527576105266102d5565b5b610531825461032f565b61053c82828561047c565b5f60209050601f83116001811461056d575f841561055b578287015190505b61056585826104ea565b8655506105cc565b601f19841661057b8661035f565b5f5b828110156105a25784890151825560018201915060208501945060208101905061057d565b868310156105bf57848901516105bb601f8916826104ce565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61060b826103dd565b9150610616836103dd565b9250828202610624816103dd565b9150828204841483151761063b5761063a6105d4565b5b5092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61066b82610642565b9050919050565b61067b81610661565b82525050565b5f6020820190506106945f830184610672565b92915050565b612ca9806106a75f395ff3fe608060405260043610610138575f3560e01c806395d89b41116100aa578063afda05751161006e578063afda0575146104ae578063ca690256146104d8578063dd62ed3e14610500578063f2fde38b1461053c578063f5af6bdc14610564578063f7ce39951461056e57610196565b806395d89b41146103cc5780639770c301146103f65780639cecc80a146104205780639e1a4d1914610448578063a9059cbb1461047257610196565b8063313ce567116100fc578063313ce567146102de5780633884d63514610308578063457100741461033257806370a0823114610350578063715018a61461038c5780638da5cb5b146103a257610196565b806306fdde03146101ea578063095ea7b31461021457806318160ddd146102505780631c4350251461027a57806323b872dd146102a257610196565b36610196576101456105aa565b503373ffffffffffffffffffffffffffffffffffffffff167f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743460405161018c9190612355565b60405180910390a2005b3373ffffffffffffffffffffffffffffffffffffffff167faca09dd456ca888dccf8cc966e382e6e3042bb7e4d2d7815015f844edeafce42345f366040516101e0939291906123c8565b60405180910390a2005b3480156101f5575f80fd5b506101fe610855565b60405161020b9190612458565b60405180910390f35b34801561021f575f80fd5b5061023a60048036038101906102359190612500565b6108e1565b6040516102479190612558565b60405180910390f35b34801561025b575f80fd5b50610264610ad6565b6040516102719190612355565b60405180910390f35b348015610285575f80fd5b506102a0600480360381019061029b9190612571565b610adf565b005b3480156102ad575f80fd5b506102c860048036038101906102c3919061259c565b610c3c565b6040516102d59190612558565b60405180910390f35b3480156102e9575f80fd5b506102f2610ff1565b6040516102ff9190612355565b60405180910390f35b348015610313575f80fd5b5061031c610ff7565b6040516103299190612558565b60405180910390f35b61033a6112e1565b6040516103479190612558565b60405180910390f35b34801561035b575f80fd5b50610376600480360381019061037191906125ec565b6112ff565b6040516103839190612355565b60405180910390f35b348015610397575f80fd5b506103a0611345565b005b3480156103ad575f80fd5b506103b6611358565b6040516103c39190612626565b60405180910390f35b3480156103d7575f80fd5b506103e061137f565b6040516103ed9190612458565b60405180910390f35b348015610401575f80fd5b5061040a61140b565b6040516104179190612355565b60405180910390f35b34801561042b575f80fd5b50610446600480360381019061044191906125ec565b611435565b005b348015610453575f80fd5b5061045c611480565b6040516104699190612355565b60405180910390f35b34801561047d575f80fd5b5061049860048036038101906104939190612500565b6114c4565b6040516104a59190612558565b60405180910390f35b3480156104b9575f80fd5b506104c26117ba565b6040516104cf9190612355565b60405180910390f35b3480156104e3575f80fd5b506104fe60048036038101906104f991906125ec565b6117c3565b005b34801561050b575f80fd5b506105266004803603810190610521919061263f565b611b66565b6040516105339190612355565b60405180910390f35b348015610547575f80fd5b50610562600480360381019061055d91906125ec565b611be8565b005b61056c611c6c565b005b348015610579575f80fd5b50610594600480360381019061058f91906125ec565b611de6565b6040516105a19190612355565b60405180910390f35b5f80670de0b6b3a76400008060066105c291906126aa565b612710346105d091906126aa565b6105da9190612718565b6105e491906126aa565b9050612710811161062a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062190612792565b60405180910390fd5b5f6127106103e88361063c91906126aa565b6106469190612718565b90505f818361065591906127b0565b90506002670de0b6b3a7640000633b9aca0061067191906126aa565b61067b9190612718565b8160065461068991906127b0565b11156040518060600160405280602f8152602001612c45602f9139906106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc9190612458565b60405180910390fd5b5060055483600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461073291906127b0565b1115610773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076a9061282d565b60405180910390fd5b82600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107bf91906127b0565b925050819055506107d03384611e4c565b506107fc600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e4c565b503373ffffffffffffffffffffffffffffffffffffffff167fc6851889326b4ff916523ef06f539b4cf0b81d78fc6e0f97c30e6223d1831990846040516108439190612355565b60405180910390a26001935050505090565b6002805461086290612878565b80601f016020809104026020016040519081016040528092919081815260200182805461088e90612878565b80156108d95780601f106108b0576101008083540402835291602001916108d9565b820191905f5260205f20905b8154815290600101906020018083116108bc57829003601f168201915b505050505081565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060298152602001612c1c602991399061096c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109639190612458565b60405180910390fd5b505f600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555081600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ac49190612355565b60405180910390a36001905092915050565b5f600654905090565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b65906128f2565b60405180910390fd5b670de0b6b3a76400006103e8610b8491906126aa565b811015610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd9061295a565b60405180910390fd5b670de0b6b3a7640000620186a0610bdd91906126aa565b811115610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906129c2565b60405180910390fd5b670de0b6b3a764000081610c3391906126aa565b60058190555050565b5f610c45612051565b8160095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156040518060400160405280601281526020017f496e73756666696369656e742066756e6473000000000000000000000000000081525090610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf49190612458565b60405180910390fd5b5081600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090612a2a565b60405180910390fd5b81600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e409190612a48565b925050819055508160095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e939190612a48565b925050819055508160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ee691906127b0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4a9190612355565b60405180910390a3670de0b6b3a7640000633b9aca00610f6a91906126aa565b6006541015610fde575f610f7d836120a0565b90505f610f8982612191565b90505f8183610f989190612a48565b9050610fc5600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e4c565b505f821115610fda57610fd83083611e4c565b505b5050505b60019050610fea6121e5565b9392505050565b60045481565b5f611000612051565b670de0b6b3a7640000622dc6c061101791906126aa565b600f541061105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190612ac5565b60405180910390fd5b6001600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190612b2d565b60405180910390fd5b5f612710611388670de0b6b3a76400006107d06110f791906126aa565b61110191906126aa565b61110b9190612718565b90505f81670de0b6b3a76400006107d061112591906126aa565b61112f91906127b0565b9050670de0b6b3a7640000633b9aca0061114991906126aa565b8160065461115791906127b0565b11156040518060400160405280601281526020017f45786365656473206d617820737570706c790000000000000000000000000000815250906111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c79190612458565b60405180910390fd5b50670de0b6b3a76400006107d06111e791906126aa565b600f5f8282546111f791906127b0565b925050819055506001600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061126033670de0b6b3a76400006107d061125b91906126aa565b611e4c565b5061128c600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e4c565b503373ffffffffffffffffffffffffffffffffffffffff167f84b8d6a5d5e1034bc8734d8fff0d20ab52702355d302ba88515a311d8ce0dd7d60405160405180910390a26001925050506112de6121e5565b90565b5f6112ea612051565b6112f26105aa565b90506112fc6121e5565b90565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61134d6121ee565b6113565f612275565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003805461138c90612878565b80601f01602080910402602001604051908101604052809291908181526020018280546113b890612878565b80156114035780601f106113da57610100808354040283529160200191611403565b820191905f5260205f20905b8154815290600101906020018083116113e657829003601f168201915b505050505081565b5f600f54670de0b6b3a7640000622dc6c061142691906126aa565b6114309190612a48565b905090565b61143d6121ee565b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905090565b5f6114cd612051565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060298152602001612c1c6029913990611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e9190612458565b60405180910390fd5b508160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156040518060400160405280601281526020017f496e73756666696369656e742066756e6473000000000000000000000000000081525090611610576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116079190612458565b60405180910390fd5b508160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461165d9190612a48565b925050819055508160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546116b091906127b0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117149190612355565b60405180910390a3670de0b6b3a7640000633b9aca0061173491906126aa565b60065410156117a8575f611747836120a0565b90505f61175382612191565b90505f81836117629190612a48565b905061178f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e4c565b505f8211156117a4576117a23083611e4c565b505b5050505b600190506117b46121e5565b92915050565b5f600f54905090565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611852576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611849906128f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060298152602001612c1c60299139906118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d39190612458565b60405180910390fd5b505f60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054116040518060400160405280601281526020017f496e73756666696369656e742066756e6473000000000000000000000000000081525090611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b9190612458565b60405180910390fd5b5060075442116119d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d090612b95565b60405180910390fd5b5f60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611aa891906127b0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b0c9190612355565b60405180910390a38173ffffffffffffffffffffffffffffffffffffffff167ff886f6ae64b7e1ab9db5f3ee323cc1040d07d7f69c02e89784b199d1b449526b82604051611b5a9190612355565b60405180910390a25050565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611bf06121ee565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c60575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611c579190612626565b60405180910390fd5b611c6981612275565b50565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf2906128f2565b60405180910390fd5b611d03612051565b5f479050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611d6b573d5f803e3d5ffd5b50600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdcfb4d28be51ae95b784910078355220065005b95dfe1ffb2b76e24a43389a4f82604051611dd39190612355565b60405180910390a250611de46121e5565b565b5f80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600554611e339190612a48565b90505f8111611e42575f611e44565b805b915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060298152602001612c1c6029913990611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece9190612458565b60405180910390fd5b50670de0b6b3a7640000633b9aca00611ef091906126aa565b82600654611efe91906127b0565b106040518060400160405280601281526020017f45786365656473206d617820737570706c79000000000000000000000000000081525090611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d9190612458565b60405180910390fd5b508160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611fc391906127b0565b925050819055508160065f828254611fdb91906127b0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161203f9190612355565b60405180910390a36001905092915050565b600260015403612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d90612bfd565b60405180910390fd5b6002600181905550565b5f80631dcd650060065410156120ba576127109050612115565b632cb4178060065410156120d257614e209050612114565b6335a4e90060065410156120ea5761c3509050612113565b670de0b6b3a7640000633b9aca0061210291906126aa565b600654101561211257620186a090505b5b5b5b5f8160648561212491906126aa565b61212e9190612718565b9050670de0b6b3a7640000633b9aca0061214891906126aa565b8160065461215691906127b0565b111561218657600654670de0b6b3a7640000633b9aca0061217791906126aa565b6121819190612a48565b612188565b805b92505050919050565b5f805f90506007544210156121dc575f631dcd6500600654106121b55760646121b9565b6101f45b61ffff16905060085481856121ce91906126aa565b6121d89190612718565b9150505b80915050919050565b60018081905550565b6121f6612336565b73ffffffffffffffffffffffffffffffffffffffff16612214611358565b73ffffffffffffffffffffffffffffffffffffffff161461227357612237612336565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161226a9190612626565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f819050919050565b61234f8161233d565b82525050565b5f6020820190506123685f830184612346565b92915050565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f6123a7838561236e565b93506123b483858461237e565b6123bd8361238c565b840190509392505050565b5f6040820190506123db5f830186612346565b81810360208301526123ee81848661239c565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61242a826123f8565b6124348185612402565b9350612444818560208601612412565b61244d8161238c565b840191505092915050565b5f6020820190508181035f8301526124708184612420565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124a58261247c565b9050919050565b6124b58161249b565b81146124bf575f80fd5b50565b5f813590506124d0816124ac565b92915050565b6124df8161233d565b81146124e9575f80fd5b50565b5f813590506124fa816124d6565b92915050565b5f806040838503121561251657612515612478565b5b5f612523858286016124c2565b9250506020612534858286016124ec565b9150509250929050565b5f8115159050919050565b6125528161253e565b82525050565b5f60208201905061256b5f830184612549565b92915050565b5f6020828403121561258657612585612478565b5b5f612593848285016124ec565b91505092915050565b5f805f606084860312156125b3576125b2612478565b5b5f6125c0868287016124c2565b93505060206125d1868287016124c2565b92505060406125e2868287016124ec565b9150509250925092565b5f6020828403121561260157612600612478565b5b5f61260e848285016124c2565b91505092915050565b6126208161249b565b82525050565b5f6020820190506126395f830184612617565b92915050565b5f806040838503121561265557612654612478565b5b5f612662858286016124c2565b9250506020612673858286016124c2565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126b48261233d565b91506126bf8361233d565b92508282026126cd8161233d565b915082820484148315176126e4576126e361267d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6127228261233d565b915061272d8361233d565b92508261273d5761273c6126eb565b5b828204905092915050565b7f56616c756520746f6f20736d616c6c00000000000000000000000000000000005f82015250565b5f61277c600f83612402565b915061278782612748565b602082019050919050565b5f6020820190508181035f8301526127a981612770565b9050919050565b5f6127ba8261233d565b91506127c58361233d565b92508282019050808211156127dd576127dc61267d565b5b92915050565b7f5065722077616c6c6574206c696d6974206578636565646564000000000000005f82015250565b5f612817601983612402565b9150612822826127e3565b602082019050919050565b5f6020820190508181035f8301526128448161280b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061288f57607f821691505b6020821081036128a2576128a161284b565b5b50919050565b7f596f7520617265206e6f7420617574686f72697a6564000000000000000000005f82015250565b5f6128dc601683612402565b91506128e7826128a8565b602082019050919050565b5f6020820190508181035f830152612909816128d0565b9050919050565b7f546f6f206c6f77000000000000000000000000000000000000000000000000005f82015250565b5f612944600783612402565b915061294f82612910565b602082019050919050565b5f6020820190508181035f83015261297181612938565b9050919050565b7f546f6f20686967680000000000000000000000000000000000000000000000005f82015250565b5f6129ac600883612402565b91506129b782612978565b602082019050919050565b5f6020820190508181035f8301526129d9816129a0565b9050919050565b7f416c6c6f77616e636520657863656564656400000000000000000000000000005f82015250565b5f612a14601283612402565b9150612a1f826129e0565b602082019050919050565b5f6020820190508181035f830152612a4181612a08565b9050919050565b5f612a528261233d565b9150612a5d8361233d565b9250828203905081811115612a7557612a7461267d565b5b92915050565b7f52616e206f7574000000000000000000000000000000000000000000000000005f82015250565b5f612aaf600783612402565b9150612aba82612a7b565b602082019050919050565b5f6020820190508181035f830152612adc81612aa3565b9050919050565b7f596f752063616e277420646f20697420747769636500000000000000000000005f82015250565b5f612b17601583612402565b9150612b2282612ae3565b602082019050919050565b5f6020820190508181035f830152612b4481612b0b565b9050919050565b7f546f6f206561726c7900000000000000000000000000000000000000000000005f82015250565b5f612b7f600983612402565b9150612b8a82612b4b565b602082019050919050565b5f6020820190508181035f830152612bac81612b73565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f612be7601f83612402565b9150612bf282612bb3565b602082019050919050565b5f6020820190508181035f830152612c1481612bdb565b905091905056fe4f7065726174696f6e2069732070726f6869626974656420666f72207468652030206164647265737353616c65206973206e6f206c6f6e67657220617661696c61626c6520686572652e20476f20746f20556e6953776170a2646970667358221220c0c688a62f17cd893ef5b0c6d33fa6399c2be9a015f2ca7de0e8c266fe2a0dd064736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610138575f3560e01c806395d89b41116100aa578063afda05751161006e578063afda0575146104ae578063ca690256146104d8578063dd62ed3e14610500578063f2fde38b1461053c578063f5af6bdc14610564578063f7ce39951461056e57610196565b806395d89b41146103cc5780639770c301146103f65780639cecc80a146104205780639e1a4d1914610448578063a9059cbb1461047257610196565b8063313ce567116100fc578063313ce567146102de5780633884d63514610308578063457100741461033257806370a0823114610350578063715018a61461038c5780638da5cb5b146103a257610196565b806306fdde03146101ea578063095ea7b31461021457806318160ddd146102505780631c4350251461027a57806323b872dd146102a257610196565b36610196576101456105aa565b503373ffffffffffffffffffffffffffffffffffffffff167f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743460405161018c9190612355565b60405180910390a2005b3373ffffffffffffffffffffffffffffffffffffffff167faca09dd456ca888dccf8cc966e382e6e3042bb7e4d2d7815015f844edeafce42345f366040516101e0939291906123c8565b60405180910390a2005b3480156101f5575f80fd5b506101fe610855565b60405161020b9190612458565b60405180910390f35b34801561021f575f80fd5b5061023a60048036038101906102359190612500565b6108e1565b6040516102479190612558565b60405180910390f35b34801561025b575f80fd5b50610264610ad6565b6040516102719190612355565b60405180910390f35b348015610285575f80fd5b506102a0600480360381019061029b9190612571565b610adf565b005b3480156102ad575f80fd5b506102c860048036038101906102c3919061259c565b610c3c565b6040516102d59190612558565b60405180910390f35b3480156102e9575f80fd5b506102f2610ff1565b6040516102ff9190612355565b60405180910390f35b348015610313575f80fd5b5061031c610ff7565b6040516103299190612558565b60405180910390f35b61033a6112e1565b6040516103479190612558565b60405180910390f35b34801561035b575f80fd5b50610376600480360381019061037191906125ec565b6112ff565b6040516103839190612355565b60405180910390f35b348015610397575f80fd5b506103a0611345565b005b3480156103ad575f80fd5b506103b6611358565b6040516103c39190612626565b60405180910390f35b3480156103d7575f80fd5b506103e061137f565b6040516103ed9190612458565b60405180910390f35b348015610401575f80fd5b5061040a61140b565b6040516104179190612355565b60405180910390f35b34801561042b575f80fd5b50610446600480360381019061044191906125ec565b611435565b005b348015610453575f80fd5b5061045c611480565b6040516104699190612355565b60405180910390f35b34801561047d575f80fd5b5061049860048036038101906104939190612500565b6114c4565b6040516104a59190612558565b60405180910390f35b3480156104b9575f80fd5b506104c26117ba565b6040516104cf9190612355565b60405180910390f35b3480156104e3575f80fd5b506104fe60048036038101906104f991906125ec565b6117c3565b005b34801561050b575f80fd5b506105266004803603810190610521919061263f565b611b66565b6040516105339190612355565b60405180910390f35b348015610547575f80fd5b50610562600480360381019061055d91906125ec565b611be8565b005b61056c611c6c565b005b348015610579575f80fd5b50610594600480360381019061058f91906125ec565b611de6565b6040516105a19190612355565b60405180910390f35b5f80670de0b6b3a76400008060066105c291906126aa565b612710346105d091906126aa565b6105da9190612718565b6105e491906126aa565b9050612710811161062a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062190612792565b60405180910390fd5b5f6127106103e88361063c91906126aa565b6106469190612718565b90505f818361065591906127b0565b90506002670de0b6b3a7640000633b9aca0061067191906126aa565b61067b9190612718565b8160065461068991906127b0565b11156040518060600160405280602f8152602001612c45602f9139906106e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dc9190612458565b60405180910390fd5b5060055483600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461073291906127b0565b1115610773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076a9061282d565b60405180910390fd5b82600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107bf91906127b0565b925050819055506107d03384611e4c565b506107fc600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e4c565b503373ffffffffffffffffffffffffffffffffffffffff167fc6851889326b4ff916523ef06f539b4cf0b81d78fc6e0f97c30e6223d1831990846040516108439190612355565b60405180910390a26001935050505090565b6002805461086290612878565b80601f016020809104026020016040519081016040528092919081815260200182805461088e90612878565b80156108d95780601f106108b0576101008083540402835291602001916108d9565b820191905f5260205f20905b8154815290600101906020018083116108bc57829003601f168201915b505050505081565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060298152602001612c1c602991399061096c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109639190612458565b60405180910390fd5b505f600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555081600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ac49190612355565b60405180910390a36001905092915050565b5f600654905090565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b65906128f2565b60405180910390fd5b670de0b6b3a76400006103e8610b8491906126aa565b811015610bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbd9061295a565b60405180910390fd5b670de0b6b3a7640000620186a0610bdd91906126aa565b811115610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906129c2565b60405180910390fd5b670de0b6b3a764000081610c3391906126aa565b60058190555050565b5f610c45612051565b8160095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156040518060400160405280601281526020017f496e73756666696369656e742066756e6473000000000000000000000000000081525090610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf49190612458565b60405180910390fd5b5081600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090612a2a565b60405180910390fd5b81600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e409190612a48565b925050819055508160095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e939190612a48565b925050819055508160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ee691906127b0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f4a9190612355565b60405180910390a3670de0b6b3a7640000633b9aca00610f6a91906126aa565b6006541015610fde575f610f7d836120a0565b90505f610f8982612191565b90505f8183610f989190612a48565b9050610fc5600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e4c565b505f821115610fda57610fd83083611e4c565b505b5050505b60019050610fea6121e5565b9392505050565b60045481565b5f611000612051565b670de0b6b3a7640000622dc6c061101791906126aa565b600f541061105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190612ac5565b60405180910390fd5b6001600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190612b2d565b60405180910390fd5b5f612710611388670de0b6b3a76400006107d06110f791906126aa565b61110191906126aa565b61110b9190612718565b90505f81670de0b6b3a76400006107d061112591906126aa565b61112f91906127b0565b9050670de0b6b3a7640000633b9aca0061114991906126aa565b8160065461115791906127b0565b11156040518060400160405280601281526020017f45786365656473206d617820737570706c790000000000000000000000000000815250906111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c79190612458565b60405180910390fd5b50670de0b6b3a76400006107d06111e791906126aa565b600f5f8282546111f791906127b0565b925050819055506001600d5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061126033670de0b6b3a76400006107d061125b91906126aa565b611e4c565b5061128c600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e4c565b503373ffffffffffffffffffffffffffffffffffffffff167f84b8d6a5d5e1034bc8734d8fff0d20ab52702355d302ba88515a311d8ce0dd7d60405160405180910390a26001925050506112de6121e5565b90565b5f6112ea612051565b6112f26105aa565b90506112fc6121e5565b90565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61134d6121ee565b6113565f612275565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6003805461138c90612878565b80601f01602080910402602001604051908101604052809291908181526020018280546113b890612878565b80156114035780601f106113da57610100808354040283529160200191611403565b820191905f5260205f20905b8154815290600101906020018083116113e657829003601f168201915b505050505081565b5f600f54670de0b6b3a7640000622dc6c061142691906126aa565b6114309190612a48565b905090565b61143d6121ee565b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905090565b5f6114cd612051565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060298152602001612c1c6029913990611557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154e9190612458565b60405180910390fd5b508160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156040518060400160405280601281526020017f496e73756666696369656e742066756e6473000000000000000000000000000081525090611610576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116079190612458565b60405180910390fd5b508160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461165d9190612a48565b925050819055508160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546116b091906127b0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117149190612355565b60405180910390a3670de0b6b3a7640000633b9aca0061173491906126aa565b60065410156117a8575f611747836120a0565b90505f61175382612191565b90505f81836117629190612a48565b905061178f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e4c565b505f8211156117a4576117a23083611e4c565b505b5050505b600190506117b46121e5565b92915050565b5f600f54905090565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611852576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611849906128f2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060298152602001612c1c60299139906118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d39190612458565b60405180910390fd5b505f60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054116040518060400160405280601281526020017f496e73756666696369656e742066756e6473000000000000000000000000000081525090611994576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198b9190612458565b60405180910390fd5b5060075442116119d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d090612b95565b60405180910390fd5b5f60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611aa891906127b0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b0c9190612355565b60405180910390a38173ffffffffffffffffffffffffffffffffffffffff167ff886f6ae64b7e1ab9db5f3ee323cc1040d07d7f69c02e89784b199d1b449526b82604051611b5a9190612355565b60405180910390a25050565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611bf06121ee565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c60575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611c579190612626565b60405180910390fd5b611c6981612275565b50565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf2906128f2565b60405180910390fd5b611d03612051565b5f479050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611d6b573d5f803e3d5ffd5b50600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdcfb4d28be51ae95b784910078355220065005b95dfe1ffb2b76e24a43389a4f82604051611dd39190612355565b60405180910390a250611de46121e5565b565b5f80600e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054600554611e339190612a48565b90505f8111611e42575f611e44565b805b915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060298152602001612c1c6029913990611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece9190612458565b60405180910390fd5b50670de0b6b3a7640000633b9aca00611ef091906126aa565b82600654611efe91906127b0565b106040518060400160405280601281526020017f45786365656473206d617820737570706c79000000000000000000000000000081525090611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d9190612458565b60405180910390fd5b508160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611fc391906127b0565b925050819055508160065f828254611fdb91906127b0565b925050819055508273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161203f9190612355565b60405180910390a36001905092915050565b600260015403612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d90612bfd565b60405180910390fd5b6002600181905550565b5f80631dcd650060065410156120ba576127109050612115565b632cb4178060065410156120d257614e209050612114565b6335a4e90060065410156120ea5761c3509050612113565b670de0b6b3a7640000633b9aca0061210291906126aa565b600654101561211257620186a090505b5b5b5b5f8160648561212491906126aa565b61212e9190612718565b9050670de0b6b3a7640000633b9aca0061214891906126aa565b8160065461215691906127b0565b111561218657600654670de0b6b3a7640000633b9aca0061217791906126aa565b6121819190612a48565b612188565b805b92505050919050565b5f805f90506007544210156121dc575f631dcd6500600654106121b55760646121b9565b6101f45b61ffff16905060085481856121ce91906126aa565b6121d89190612718565b9150505b80915050919050565b60018081905550565b6121f6612336565b73ffffffffffffffffffffffffffffffffffffffff16612214611358565b73ffffffffffffffffffffffffffffffffffffffff161461227357612237612336565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161226a9190612626565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f819050919050565b61234f8161233d565b82525050565b5f6020820190506123685f830184612346565b92915050565b5f82825260208201905092915050565b828183375f83830152505050565b5f601f19601f8301169050919050565b5f6123a7838561236e565b93506123b483858461237e565b6123bd8361238c565b840190509392505050565b5f6040820190506123db5f830186612346565b81810360208301526123ee81848661239c565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61242a826123f8565b6124348185612402565b9350612444818560208601612412565b61244d8161238c565b840191505092915050565b5f6020820190508181035f8301526124708184612420565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124a58261247c565b9050919050565b6124b58161249b565b81146124bf575f80fd5b50565b5f813590506124d0816124ac565b92915050565b6124df8161233d565b81146124e9575f80fd5b50565b5f813590506124fa816124d6565b92915050565b5f806040838503121561251657612515612478565b5b5f612523858286016124c2565b9250506020612534858286016124ec565b9150509250929050565b5f8115159050919050565b6125528161253e565b82525050565b5f60208201905061256b5f830184612549565b92915050565b5f6020828403121561258657612585612478565b5b5f612593848285016124ec565b91505092915050565b5f805f606084860312156125b3576125b2612478565b5b5f6125c0868287016124c2565b93505060206125d1868287016124c2565b92505060406125e2868287016124ec565b9150509250925092565b5f6020828403121561260157612600612478565b5b5f61260e848285016124c2565b91505092915050565b6126208161249b565b82525050565b5f6020820190506126395f830184612617565b92915050565b5f806040838503121561265557612654612478565b5b5f612662858286016124c2565b9250506020612673858286016124c2565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126b48261233d565b91506126bf8361233d565b92508282026126cd8161233d565b915082820484148315176126e4576126e361267d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6127228261233d565b915061272d8361233d565b92508261273d5761273c6126eb565b5b828204905092915050565b7f56616c756520746f6f20736d616c6c00000000000000000000000000000000005f82015250565b5f61277c600f83612402565b915061278782612748565b602082019050919050565b5f6020820190508181035f8301526127a981612770565b9050919050565b5f6127ba8261233d565b91506127c58361233d565b92508282019050808211156127dd576127dc61267d565b5b92915050565b7f5065722077616c6c6574206c696d6974206578636565646564000000000000005f82015250565b5f612817601983612402565b9150612822826127e3565b602082019050919050565b5f6020820190508181035f8301526128448161280b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061288f57607f821691505b6020821081036128a2576128a161284b565b5b50919050565b7f596f7520617265206e6f7420617574686f72697a6564000000000000000000005f82015250565b5f6128dc601683612402565b91506128e7826128a8565b602082019050919050565b5f6020820190508181035f830152612909816128d0565b9050919050565b7f546f6f206c6f77000000000000000000000000000000000000000000000000005f82015250565b5f612944600783612402565b915061294f82612910565b602082019050919050565b5f6020820190508181035f83015261297181612938565b9050919050565b7f546f6f20686967680000000000000000000000000000000000000000000000005f82015250565b5f6129ac600883612402565b91506129b782612978565b602082019050919050565b5f6020820190508181035f8301526129d9816129a0565b9050919050565b7f416c6c6f77616e636520657863656564656400000000000000000000000000005f82015250565b5f612a14601283612402565b9150612a1f826129e0565b602082019050919050565b5f6020820190508181035f830152612a4181612a08565b9050919050565b5f612a528261233d565b9150612a5d8361233d565b9250828203905081811115612a7557612a7461267d565b5b92915050565b7f52616e206f7574000000000000000000000000000000000000000000000000005f82015250565b5f612aaf600783612402565b9150612aba82612a7b565b602082019050919050565b5f6020820190508181035f830152612adc81612aa3565b9050919050565b7f596f752063616e277420646f20697420747769636500000000000000000000005f82015250565b5f612b17601583612402565b9150612b2282612ae3565b602082019050919050565b5f6020820190508181035f830152612b4481612b0b565b9050919050565b7f546f6f206561726c7900000000000000000000000000000000000000000000005f82015250565b5f612b7f600983612402565b9150612b8a82612b4b565b602082019050919050565b5f6020820190508181035f830152612bac81612b73565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f612be7601f83612402565b9150612bf282612bb3565b602082019050919050565b5f6020820190508181035f830152612c1481612bdb565b905091905056fe4f7065726174696f6e2069732070726f6869626974656420666f72207468652030206164647265737353616c65206973206e6f206c6f6e67657220617661696c61626c6520686572652e20476f20746f20556e6953776170a2646970667358221220c0c688a62f17cd893ef5b0c6d33fa6399c2be9a015f2ca7de0e8c266fe2a0dd064736f6c634300081a0033

Deployed Bytecode Sourcemap

8541:15961:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24323:7;:5;:7::i;:::-;;24355:10;24346:31;;;24367:9;24346:31;;;;;;:::i;:::-;;;;;;;;8541:15961;;24459:10;24444:47;;;24471:9;24482:8;;24444:47;;;;;;;;:::i;:::-;;;;;;;;8541:15961;8604:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21307:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12842:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15230:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20270:806;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8684:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15845:660;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17637:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12987:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3394:103;;;;;;;;;;;;;:::i;:::-;;2719:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8647:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23387:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21786:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13335:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19389:727;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23589:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22762:543;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21116:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3652:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22225:235;;;:::i;:::-;;23794:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17807:768;17840:4;17862:18;17918:4;8757;17903:1;:12;;;;:::i;:::-;17897:3;17885:9;:15;;;;:::i;:::-;17884:32;;;;:::i;:::-;17883:39;;;;:::i;:::-;17862:60;;18029:3;18016:10;:16;18008:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;18075:21;18118:3;18113;18100:10;:16;;;;:::i;:::-;18099:22;;;;:::i;:::-;18075:46;;18132:19;18167:13;18154:10;:26;;;;:::i;:::-;18132:48;;18243:1;8757:4;8807:3;:16;;;;:::i;:::-;18231:13;;;;:::i;:::-;18215:11;18200:12;;:26;;;;:::i;:::-;18199:45;;18246:16;;;;;;;;;;;;;;;;;18191:72;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18325:16;;18310:10;18283:12;:24;18296:10;18283:24;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;18282:59;;18274:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;18410:10;18382:12;:24;18395:10;18382:24;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;18431:29;18437:10;18449;18431:5;:29::i;:::-;;18471:30;18477:8;;;;;;;;;;;18487:13;18471:5;:30::i;:::-;;18522:10;18517:28;;;18534:10;18517:28;;;;;;:::i;:::-;;;;;;;;18563:4;18556:11;;;;;17807:768;:::o;8604:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21307:330::-;21382:4;21431:1;21412:21;;:7;:21;;;;21435:19;;;;;;;;;;;;;;;;;21404:51;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21501:1;21466:11;:23;21478:10;21466:23;;;;;;;;;;;;;;;:32;21490:7;21466:32;;;;;;;;;;;;;;;:36;;;;21548:6;21513:11;:23;21525:10;21513:23;;;;;;;;;;;;;;;:32;21537:7;21513:32;;;;;;;;;;;;;;;:41;;;;21591:7;21570:37;;21579:10;21570:37;;;21600:6;21570:37;;;;;;:::i;:::-;;;;;;;;21625:4;21618:11;;21307:330;;;;:::o;12842:105::-;12895:7;12927:12;;12920:19;;12842:105;:::o;15230:254::-;12553:8;;;;;;;;;;;12539:22;;:10;:22;;;12531:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;8757:4:::1;15335:3;:16;;;;:::i;:::-;15322:9;:29;;15314:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;8757:4;15395:3;:16;;;;:::i;:::-;15382:9;:29;;15374:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;8757:4;15454:9;:22;;;;:::i;:::-;15435:16;:41;;;;15230:254:::0;:::o;20270:806::-;20381:4;6575:21;:19;:21::i;:::-;20432:6:::1;20411:9;:17;20421:6;20411:17;;;;;;;;;;;;;;;;:27;;20439:25;;;;;;;;;;;;;;;;::::0;20403:62:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20519:6;20484:11;:19;20496:6;20484:19;;;;;;;;;;;;;;;:31;20504:10;20484:31;;;;;;;;;;;;;;;;:41;;20476:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;20594:6;20559:11;:19;20571:6;20559:19;;;;;;;;;;;;;;;:31;20579:10;20559:31;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;20632:6;20611:9;:17;20621:6;20611:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;20673:6;20649:9;:20;20659:9;20649:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;20712:9;20695:35;;20704:6;20695:35;;;20723:6;20695:35;;;;;;:::i;:::-;;;;;;;;8757:4;8807:3;:16;;;;:::i;:::-;20744:12;;:26;20741:306;;;20796:18;20817:28;20838:6;20817:20;:28::i;:::-;20796:49;;20860:9;20872:24;20885:10;20872:12;:24::i;:::-;20860:36;;20911:9;20936:1;20923:10;:14;;;;:::i;:::-;20911:26;;20952:18;20958:8;;;;;;;;;;;20968:1;20952:5;:18::i;:::-;;20992:1;20988;:5;20985:50;;;21012:23;21026:4;21033:1;21012:5;:23::i;:::-;;20985:50;20781:266;;;20741:306;21064:4;21057:11;;6619:20:::0;:18;:20::i;:::-;20270:806;;;;;:::o;8684:26::-;;;;:::o;15845:660::-;15892:4;6575:21;:19;:21::i;:::-;8757:4:::1;9017:3;:16;;;;:::i;:::-;15922:10;;:27;15914:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;16010:1;15980:14;:26;15995:10;15980:26;;;;;;;;;;;;;;;;:31:::0;15972:65:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16048:21;16102:3;16095;8757:4;8921:3;:16;;;;:::i;:::-;16073:25;;;;:::i;:::-;16072:33;;;;:::i;:::-;16048:57;;16116:20;16161:13;8757:4;8921:3;:16;;;;:::i;:::-;16139:35;;;;:::i;:::-;16116:58;;8757:4;8807:3;:16;;;;:::i;:::-;16209:12;16194;;:27;;;;:::i;:::-;16193:44;;16239:25;;;;;;;;;;;;;;;;::::0;16185:80:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8757:4;8921:3;:16;;;;:::i;:::-;16276:10;;:33;;;;;;;:::i;:::-;;;;;;;;16349:1;16320:14;:26;16335:10;16320:26;;;;;;;;;;;;;;;:30;;;;16361:38;16367:10;8757:4;8921:3;:16;;;;:::i;:::-;16361:5;:38::i;:::-;;16410:30;16416:8;;;;;;;;;;;16426:13;16410:5;:30::i;:::-;;16464:10;16456:19;;;;;;;;;;;;16493:4;16486:11;;;;6619:20:::0;:18;:20::i;:::-;15845:660;:::o;17637:97::-;17689:4;6575:21;:19;:21::i;:::-;17719:7:::1;:5;:7::i;:::-;17712:14;;6619:20:::0;:18;:20::i;:::-;17637:97;:::o;12987:123::-;13052:7;13084:9;:18;13094:7;13084:18;;;;;;;;;;;;;;;;13077:25;;12987:123;;;:::o;3394:103::-;2605:13;:11;:13::i;:::-;3459:30:::1;3486:1;3459:18;:30::i;:::-;3394:103::o:0;2719:87::-;2765:7;2792:6;;;;;;;;;;;2785:13;;2719:87;:::o;8647:30::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23387:117::-;23437:7;23486:10;;8757:4;9017:3;:16;;;;:::i;:::-;23469:27;;;;:::i;:::-;23462:34;;23387:117;:::o;21786:104::-;2605:13;:11;:13::i;:::-;21872:10:::1;21861:8;;:21;;;;;;;;;;;;;;;;;;21786:104:::0;:::o;13335:108::-;13379:7;13411:9;:24;13429:4;13411:24;;;;;;;;;;;;;;;;13404:31;;13335:108;:::o;19389:727::-;19480:4;6575:21;:19;:21::i;:::-;19531:1:::1;19510:23;;:9;:23;;;;19534:19;;;;;;;;;;;;;;;;;19502:52;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19598:6;19573:9;:21;19583:10;19573:21;;;;;;;;;;;;;;;;:31;;19606:25;;;;;;;;;;;;;;;;::::0;19565:67:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19668:6;19643:9;:21;19653:10;19643:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;19709:6;19685:9;:20;19695:9;19685:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;19752:9;19731:39;;19740:10;19731:39;;;19763:6;19731:39;;;;;;:::i;:::-;;;;;;;;8757:4;8807:3;:16;;;;:::i;:::-;19784:12;;:26;19781:306;;;19836:18;19857:28;19878:6;19857:20;:28::i;:::-;19836:49;;19900:9;19912:24;19925:10;19912:12;:24::i;:::-;19900:36;;19951:9;19976:1;19963:10;:14;;;;:::i;:::-;19951:26;;19992:18;19998:8;;;;;;;;;;;20008:1;19992:5;:18::i;:::-;;20032:1;20028;:5;20025:50;;;20052:23;20066:4;20073:1;20052:5;:23::i;:::-;;20025:50;19821:266;;;19781:306;20104:4;20097:11;;6619:20:::0;:18;:20::i;:::-;19389:727;;;;:::o;23589:96::-;23635:7;23667:10;;23660:17;;23589:96;:::o;22762:543::-;12553:8;;;;;;;;;;;12539:22;;:10;:22;;;12531:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22878:1:::1;22860:20;;:6;:20;;;;22882:19;;;;;;;;;;;;;;;;;22852:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22948:1;22921:9;:24;22939:4;22921:24;;;;;;;;;;;;;;;;:28;22951:25;;;;;;;;;;;;;;;;::::0;22913:64:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23014:21;;22996:15;:39;22988:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;23060:15;23078:9;:24;23096:4;23078:24;;;;;;;;;;;;;;;;23060:42;;23140:1;23113:9;:24;23131:4;23113:24;;;;;;;;;;;;;;;:28;;;;23173:7;23152:9;:17;23162:6;23152:17;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;23220:6;23196:40;;23213:4;23196:40;;;23228:7;23196:40;;;;;;:::i;:::-;;;;;;;;23281:6;23252:45;;;23289:7;23252:45;;;;;;:::i;:::-;;;;;;;;22841:464;22762:543:::0;:::o;21116:150::-;21199:7;21231:11;:18;21243:5;21231:18;;;;;;;;;;;;;;;:27;21250:7;21231:27;;;;;;;;;;;;;;;;21224:34;;21116:150;;;;:::o;3652:220::-;2605:13;:11;:13::i;:::-;3757:1:::1;3737:22;;:8;:22;;::::0;3733:93:::1;;3811:1;3783:31;;;;;;;;;;;:::i;:::-;;;;;;;;3733:93;3836:28;3855:8;3836:18;:28::i;:::-;3652:220:::0;:::o;22225:235::-;12553:8;;;;;;;;;;;12539:22;;:10;:22;;;12531:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;6575:21:::1;:19;:21::i;:::-;22314:14:::2;22331:21;22314:38;;22371:8;;;;;;;;;;;22363:26;;:34;22390:6;22363:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;22435:8;;;;;;;;;;;22413:39;;;22445:6;22413:39;;;;;;:::i;:::-;;;;;;;;22303:157;6619:20:::1;:18;:20::i;:::-;22225:235::o:0;23794:208::-;23860:7;23885:17;23924:12;:21;23937:7;23924:21;;;;;;;;;;;;;;;;23905:16;;:40;;;;:::i;:::-;23885:60;;23976:1;23964:9;:13;23963:30;;23992:1;23963:30;;;23980:9;23963:30;23956:37;;;23794:208;;;:::o;18655:355::-;18714:4;18758:1;18744:16;;:2;:16;;;;18762:19;;;;;;;;;;;;;;;;;18736:46;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8757:4;8807:3;:16;;;;:::i;:::-;18817:6;18802:12;;:21;;;;:::i;:::-;18801:37;18839:25;;;;;;;;;;;;;;;;;18793:72;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18893:6;18876:9;:13;18886:2;18876:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;18926:6;18910:12;;:22;;;;;;;:::i;:::-;;;;;;;;18969:2;18948:32;;18965:1;18948:32;;;18973:6;18948:32;;;;;;:::i;:::-;;;;;;;;18998:4;18991:11;;18655:355;;;;:::o;6655:293::-;6057:1;6789:7;;:19;6781:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6057:1;6922:7;:18;;;;6655:293::o;13887:560::-;13964:7;13989:14;14032:3;14017:12;;:18;14014:250;;;14059:3;14050:12;;14014:250;;;14096:5;14081:12;;:20;14078:186;;;14125:3;14116:12;;14078:186;;;14162:3;14147:12;;:18;14144:120;;;14189:3;14180:12;;14144:120;;;8757:4;8807:3;:16;;;;:::i;:::-;14211:12;;:26;14208:56;;;14261:3;14252:12;;14208:56;14144:120;14078:186;14014:250;14285:18;14332:6;14326:3;14306:17;:23;;;;:::i;:::-;:32;;;;:::i;:::-;14285:53;;8757:4;8807:3;:16;;;;:::i;:::-;14372:10;14357:12;;:25;;;;:::i;:::-;:40;;14356:83;;14427:12;;8757:4;8807:3;:16;;;;:::i;:::-;14413:26;;;;:::i;:::-;14356:83;;;14400:10;14356:83;14349:90;;;;13887:560;;;:::o;14638:335::-;14696:7;14721:11;14735:1;14721:15;;14768:21;;14750:15;:39;14747:198;;;14815:21;14855:3;14840:12;;:18;14839:31;;14867:3;14839:31;;;14861:3;14839:31;14815:55;;;;14916:17;;14901:13;14892:6;:22;;;;:::i;:::-;14891:42;;;;:::i;:::-;14885:48;;14800:145;14747:198;14962:3;14955:10;;;14638:335;;;:::o;6956:213::-;6013:1;7139:7;:22;;;;6956:213::o;2884:166::-;2955:12;:10;:12::i;:::-;2944:23;;:7;:5;:7::i;:::-;:23;;;2940:103;;3018:12;:10;:12::i;:::-;2991:40;;;;;;;;;;;:::i;:::-;;;;;;;;2940:103;2884:166::o;4032:191::-;4106:16;4125:6;;;;;;;;;;;4106:25;;4151:8;4142:6;;:17;;;;;;;;;;;;;;;;;;4206:8;4175:40;;4196:8;4175:40;;;;;;;;;;;;4095:128;4032:191;:::o;728:98::-;781:7;808:10;801:17;;728:98;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:168::-;525:11;559:6;554:3;547:19;599:4;594:3;590:14;575:29;;442:168;;;;:::o;616:148::-;714:6;709:3;704;691:30;755:1;746:6;741:3;737:16;730:27;616:148;;;:::o;770:102::-;811:6;862:2;858:7;853:2;846:5;842:14;838:28;828:38;;770:102;;;:::o;900:314::-;996:3;1017:70;1080:6;1075:3;1017:70;:::i;:::-;1010:77;;1097:56;1146:6;1141:3;1134:5;1097:56;:::i;:::-;1178:29;1200:6;1178:29;:::i;:::-;1173:3;1169:39;1162:46;;900:314;;;;;:::o;1220:439::-;1369:4;1407:2;1396:9;1392:18;1384:26;;1420:71;1488:1;1477:9;1473:17;1464:6;1420:71;:::i;:::-;1538:9;1532:4;1528:20;1523:2;1512:9;1508:18;1501:48;1566:86;1647:4;1638:6;1630;1566:86;:::i;:::-;1558:94;;1220:439;;;;;;:::o;1665:99::-;1717:6;1751:5;1745:12;1735:22;;1665:99;;;:::o;1770:169::-;1854:11;1888:6;1883:3;1876:19;1928:4;1923:3;1919:14;1904:29;;1770:169;;;;:::o;1945:139::-;2034:6;2029:3;2024;2018:23;2075:1;2066:6;2061:3;2057:16;2050:27;1945:139;;;:::o;2090:377::-;2178:3;2206:39;2239:5;2206:39;:::i;:::-;2261:71;2325:6;2320:3;2261:71;:::i;:::-;2254:78;;2341:65;2399:6;2394:3;2387:4;2380:5;2376:16;2341:65;:::i;:::-;2431:29;2453:6;2431:29;:::i;:::-;2426:3;2422:39;2415:46;;2182:285;2090:377;;;;:::o;2473:313::-;2586:4;2624:2;2613:9;2609:18;2601:26;;2673:9;2667:4;2663:20;2659:1;2648:9;2644:17;2637:47;2701:78;2774:4;2765:6;2701:78;:::i;:::-;2693:86;;2473:313;;;;:::o;2873:117::-;2982:1;2979;2972:12;3119:126;3156:7;3196:42;3189:5;3185:54;3174:65;;3119:126;;;:::o;3251:96::-;3288:7;3317:24;3335:5;3317:24;:::i;:::-;3306:35;;3251:96;;;:::o;3353:122::-;3426:24;3444:5;3426:24;:::i;:::-;3419:5;3416:35;3406:63;;3465:1;3462;3455:12;3406:63;3353:122;:::o;3481:139::-;3527:5;3565:6;3552:20;3543:29;;3581:33;3608:5;3581:33;:::i;:::-;3481:139;;;;:::o;3626:122::-;3699:24;3717:5;3699:24;:::i;:::-;3692:5;3689:35;3679:63;;3738:1;3735;3728:12;3679:63;3626:122;:::o;3754:139::-;3800:5;3838:6;3825:20;3816:29;;3854:33;3881:5;3854:33;:::i;:::-;3754:139;;;;:::o;3899:474::-;3967:6;3975;4024:2;4012:9;4003:7;3999:23;3995:32;3992:119;;;4030:79;;:::i;:::-;3992:119;4150:1;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4121:117;4277:2;4303:53;4348:7;4339:6;4328:9;4324:22;4303:53;:::i;:::-;4293:63;;4248:118;3899:474;;;;;:::o;4379:90::-;4413:7;4456:5;4449:13;4442:21;4431:32;;4379:90;;;:::o;4475:109::-;4556:21;4571:5;4556:21;:::i;:::-;4551:3;4544:34;4475:109;;:::o;4590:210::-;4677:4;4715:2;4704:9;4700:18;4692:26;;4728:65;4790:1;4779:9;4775:17;4766:6;4728:65;:::i;:::-;4590:210;;;;:::o;4806:329::-;4865:6;4914:2;4902:9;4893:7;4889:23;4885:32;4882:119;;;4920:79;;:::i;:::-;4882:119;5040:1;5065:53;5110:7;5101:6;5090:9;5086:22;5065:53;:::i;:::-;5055:63;;5011:117;4806:329;;;;:::o;5141:619::-;5218:6;5226;5234;5283:2;5271:9;5262:7;5258:23;5254:32;5251:119;;;5289:79;;:::i;:::-;5251:119;5409:1;5434:53;5479:7;5470:6;5459:9;5455:22;5434:53;:::i;:::-;5424:63;;5380:117;5536:2;5562:53;5607:7;5598:6;5587:9;5583:22;5562:53;:::i;:::-;5552:63;;5507:118;5664:2;5690:53;5735:7;5726:6;5715:9;5711:22;5690:53;:::i;:::-;5680:63;;5635:118;5141:619;;;;;:::o;5766:329::-;5825:6;5874:2;5862:9;5853:7;5849:23;5845:32;5842:119;;;5880:79;;:::i;:::-;5842:119;6000:1;6025:53;6070:7;6061:6;6050:9;6046:22;6025:53;:::i;:::-;6015:63;;5971:117;5766:329;;;;:::o;6101:118::-;6188:24;6206:5;6188:24;:::i;:::-;6183:3;6176:37;6101:118;;:::o;6225:222::-;6318:4;6356:2;6345:9;6341:18;6333:26;;6369:71;6437:1;6426:9;6422:17;6413:6;6369:71;:::i;:::-;6225:222;;;;:::o;6453:474::-;6521:6;6529;6578:2;6566:9;6557:7;6553:23;6549:32;6546:119;;;6584:79;;:::i;:::-;6546:119;6704:1;6729:53;6774:7;6765:6;6754:9;6750:22;6729:53;:::i;:::-;6719:63;;6675:117;6831:2;6857:53;6902:7;6893:6;6882:9;6878:22;6857:53;:::i;:::-;6847:63;;6802:118;6453:474;;;;;:::o;6933:180::-;6981:77;6978:1;6971:88;7078:4;7075:1;7068:15;7102:4;7099:1;7092:15;7119:410;7159:7;7182:20;7200:1;7182:20;:::i;:::-;7177:25;;7216:20;7234:1;7216:20;:::i;:::-;7211:25;;7271:1;7268;7264:9;7293:30;7311:11;7293:30;:::i;:::-;7282:41;;7472:1;7463:7;7459:15;7456:1;7453:22;7433:1;7426:9;7406:83;7383:139;;7502:18;;:::i;:::-;7383:139;7167:362;7119:410;;;;:::o;7535:180::-;7583:77;7580:1;7573:88;7680:4;7677:1;7670:15;7704:4;7701:1;7694:15;7721:185;7761:1;7778:20;7796:1;7778:20;:::i;:::-;7773:25;;7812:20;7830:1;7812:20;:::i;:::-;7807:25;;7851:1;7841:35;;7856:18;;:::i;:::-;7841:35;7898:1;7895;7891:9;7886:14;;7721:185;;;;:::o;7912:165::-;8052:17;8048:1;8040:6;8036:14;8029:41;7912:165;:::o;8083:366::-;8225:3;8246:67;8310:2;8305:3;8246:67;:::i;:::-;8239:74;;8322:93;8411:3;8322:93;:::i;:::-;8440:2;8435:3;8431:12;8424:19;;8083:366;;;:::o;8455:419::-;8621:4;8659:2;8648:9;8644:18;8636:26;;8708:9;8702:4;8698:20;8694:1;8683:9;8679:17;8672:47;8736:131;8862:4;8736:131;:::i;:::-;8728:139;;8455:419;;;:::o;8880:191::-;8920:3;8939:20;8957:1;8939:20;:::i;:::-;8934:25;;8973:20;8991:1;8973:20;:::i;:::-;8968:25;;9016:1;9013;9009:9;9002:16;;9037:3;9034:1;9031:10;9028:36;;;9044:18;;:::i;:::-;9028:36;8880:191;;;;:::o;9077:175::-;9217:27;9213:1;9205:6;9201:14;9194:51;9077:175;:::o;9258:366::-;9400:3;9421:67;9485:2;9480:3;9421:67;:::i;:::-;9414:74;;9497:93;9586:3;9497:93;:::i;:::-;9615:2;9610:3;9606:12;9599:19;;9258:366;;;:::o;9630:419::-;9796:4;9834:2;9823:9;9819:18;9811:26;;9883:9;9877:4;9873:20;9869:1;9858:9;9854:17;9847:47;9911:131;10037:4;9911:131;:::i;:::-;9903:139;;9630:419;;;:::o;10055:180::-;10103:77;10100:1;10093:88;10200:4;10197:1;10190:15;10224:4;10221:1;10214:15;10241:320;10285:6;10322:1;10316:4;10312:12;10302:22;;10369:1;10363:4;10359:12;10390:18;10380:81;;10446:4;10438:6;10434:17;10424:27;;10380:81;10508:2;10500:6;10497:14;10477:18;10474:38;10471:84;;10527:18;;:::i;:::-;10471:84;10292:269;10241:320;;;:::o;10567:172::-;10707:24;10703:1;10695:6;10691:14;10684:48;10567:172;:::o;10745:366::-;10887:3;10908:67;10972:2;10967:3;10908:67;:::i;:::-;10901:74;;10984:93;11073:3;10984:93;:::i;:::-;11102:2;11097:3;11093:12;11086:19;;10745:366;;;:::o;11117:419::-;11283:4;11321:2;11310:9;11306:18;11298:26;;11370:9;11364:4;11360:20;11356:1;11345:9;11341:17;11334:47;11398:131;11524:4;11398:131;:::i;:::-;11390:139;;11117:419;;;:::o;11542:157::-;11682:9;11678:1;11670:6;11666:14;11659:33;11542:157;:::o;11705:365::-;11847:3;11868:66;11932:1;11927:3;11868:66;:::i;:::-;11861:73;;11943:93;12032:3;11943:93;:::i;:::-;12061:2;12056:3;12052:12;12045:19;;11705:365;;;:::o;12076:419::-;12242:4;12280:2;12269:9;12265:18;12257:26;;12329:9;12323:4;12319:20;12315:1;12304:9;12300:17;12293:47;12357:131;12483:4;12357:131;:::i;:::-;12349:139;;12076:419;;;:::o;12501:158::-;12641:10;12637:1;12629:6;12625:14;12618:34;12501:158;:::o;12665:365::-;12807:3;12828:66;12892:1;12887:3;12828:66;:::i;:::-;12821:73;;12903:93;12992:3;12903:93;:::i;:::-;13021:2;13016:3;13012:12;13005:19;;12665:365;;;:::o;13036:419::-;13202:4;13240:2;13229:9;13225:18;13217:26;;13289:9;13283:4;13279:20;13275:1;13264:9;13260:17;13253:47;13317:131;13443:4;13317:131;:::i;:::-;13309:139;;13036:419;;;:::o;13461:168::-;13601:20;13597:1;13589:6;13585:14;13578:44;13461:168;:::o;13635:366::-;13777:3;13798:67;13862:2;13857:3;13798:67;:::i;:::-;13791:74;;13874:93;13963:3;13874:93;:::i;:::-;13992:2;13987:3;13983:12;13976:19;;13635:366;;;:::o;14007:419::-;14173:4;14211:2;14200:9;14196:18;14188:26;;14260:9;14254:4;14250:20;14246:1;14235:9;14231:17;14224:47;14288:131;14414:4;14288:131;:::i;:::-;14280:139;;14007:419;;;:::o;14432:194::-;14472:4;14492:20;14510:1;14492:20;:::i;:::-;14487:25;;14526:20;14544:1;14526:20;:::i;:::-;14521:25;;14570:1;14567;14563:9;14555:17;;14594:1;14588:4;14585:11;14582:37;;;14599:18;;:::i;:::-;14582:37;14432:194;;;;:::o;14632:157::-;14772:9;14768:1;14760:6;14756:14;14749:33;14632:157;:::o;14795:365::-;14937:3;14958:66;15022:1;15017:3;14958:66;:::i;:::-;14951:73;;15033:93;15122:3;15033:93;:::i;:::-;15151:2;15146:3;15142:12;15135:19;;14795:365;;;:::o;15166:419::-;15332:4;15370:2;15359:9;15355:18;15347:26;;15419:9;15413:4;15409:20;15405:1;15394:9;15390:17;15383:47;15447:131;15573:4;15447:131;:::i;:::-;15439:139;;15166:419;;;:::o;15591:171::-;15731:23;15727:1;15719:6;15715:14;15708:47;15591:171;:::o;15768:366::-;15910:3;15931:67;15995:2;15990:3;15931:67;:::i;:::-;15924:74;;16007:93;16096:3;16007:93;:::i;:::-;16125:2;16120:3;16116:12;16109:19;;15768:366;;;:::o;16140:419::-;16306:4;16344:2;16333:9;16329:18;16321:26;;16393:9;16387:4;16383:20;16379:1;16368:9;16364:17;16357:47;16421:131;16547:4;16421:131;:::i;:::-;16413:139;;16140:419;;;:::o;16565:159::-;16705:11;16701:1;16693:6;16689:14;16682:35;16565:159;:::o;16730:365::-;16872:3;16893:66;16957:1;16952:3;16893:66;:::i;:::-;16886:73;;16968:93;17057:3;16968:93;:::i;:::-;17086:2;17081:3;17077:12;17070:19;;16730:365;;;:::o;17101:419::-;17267:4;17305:2;17294:9;17290:18;17282:26;;17354:9;17348:4;17344:20;17340:1;17329:9;17325:17;17318:47;17382:131;17508:4;17382:131;:::i;:::-;17374:139;;17101:419;;;:::o;17526:181::-;17666:33;17662:1;17654:6;17650:14;17643:57;17526:181;:::o;17713:366::-;17855:3;17876:67;17940:2;17935:3;17876:67;:::i;:::-;17869:74;;17952:93;18041:3;17952:93;:::i;:::-;18070:2;18065:3;18061:12;18054:19;;17713:366;;;:::o;18085:419::-;18251:4;18289:2;18278:9;18274:18;18266:26;;18338:9;18332:4;18328:20;18324:1;18313:9;18309:17;18302:47;18366:131;18492:4;18366:131;:::i;:::-;18358:139;;18085:419;;;:::o

Swarm Source

ipfs://c0c688a62f17cd893ef5b0c6d33fa6399c2be9a015f2ca7de0e8c266fe2a0dd0

Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.