ETH Price: $3,039.50 (+4.20%)

Token

Dragon Blood (DB)
 

Overview

Max Total Supply

538,437,982.8501164436679467 DB

Holders

259

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Null: 0x000...000
Balance
0 DB

Value
$0.00
0x0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ERC20TokenGovernedProxy

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 12 : ERC20TokenGovernedProxy.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

// Energi Governance system is the fundamental part of Energi Core.

// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.

pragma solidity 0.5.16;

import { NonReentrant } from './NonReentrant.sol';

import { SafeMath } from './libraries/SafeMath.sol';

import { IERC20TokenGovernedProxy } from './interfaces/IERC20TokenGovernedProxy.sol';
import { IGovernedContract } from './interfaces/IGovernedContract.sol';
import { IGovernedProxy } from './interfaces/IGovernedProxy.sol';
import { IUpgradeProposal } from './interfaces/IUpgradeProposal.sol';
import { ISporkRegistry } from './interfaces/ISporkRegistry.sol';
import { IGovernedERC20 } from './interfaces/IGovernedERC20.sol';
import { IOwnedERC20 } from './interfaces/IOwnedERC20.sol';
import { IERC20Token } from './interfaces/IERC20Token.sol';

/**
 * SC-9: This contract has no chance of being updated. It must be stupid simple.
 *
 * If another upgrade logic is required in the future - it can be done as proxy stage II.
 */
contract ERC20TokenGovernedProxy is IERC20TokenGovernedProxy, IGovernedProxy, NonReentrant {
    using SafeMath for uint256;

    IGovernedContract public impl;
    IGovernedContract public implementation; // only used for block explorers to detect contract as a proxy

    IGovernedProxy public spork_proxy;

    mapping(address => IGovernedContract) public upgrade_proposals;

    IUpgradeProposal[] public upgrade_proposal_list;

    modifier senderOrigin() {
        // Internal calls are expected to use impl directly.
        // That's due to use of call() instead of delegatecall() on purpose.
        // solium-disable-next-line security/no-tx-origin
        require(tx.origin == msg.sender, 'Only direct calls are allowed!');
        _;
    }

    modifier onlyImpl() {
        require(msg.sender == address(impl), 'Only calls from impl are allowed!');
        _;
    }

    constructor(IGovernedContract _impl) public {
        impl = _impl;
        implementation = _impl; // to allow block explorers to find the impl contract
    }

    function setSporkProxy(address payable _sporkProxy) external onlyImpl {
        spork_proxy = IGovernedProxy(_sporkProxy);
    }

    function emitAirdropRewardsClaimed(
        address recipient,
        uint256 claimAmountAirdrop,
        uint256 claimAmountReferral1,
        uint256 claimAmountReferral2,
        uint256 claimAmountReferral3,
        bytes4 airdropId,
        uint256 lastClaimNonce,
        uint256 claimNonce,
        bytes calldata airdropServiceSignature
    ) external onlyImpl {
        emit AirdropRewardsClaimed(
            recipient,
            claimAmountAirdrop,
            claimAmountReferral1,
            claimAmountReferral2,
            claimAmountReferral3,
            airdropId,
            lastClaimNonce,
            claimNonce,
            airdropServiceSignature
        );
    }

    function emitTransfer(
        address from,
        address to,
        uint256 value
    ) external onlyImpl {
        emit Transfer(from, to, value);
    }

    function emitApproval(
        address owner,
        address spender,
        uint256 value
    ) external onlyImpl {
        emit Approval(owner, spender, value);
    }

    // ERC20 standard functions
    //
    function name() external view returns (string memory _name) {
        _name = IERC20Token(address(uint160(address(impl)))).name();
    }

    function symbol() external view returns (string memory _symbol) {
        _symbol = IERC20Token(address(uint160(address(impl)))).symbol();
    }

    function decimals() external view returns (uint256 _decimals) {
        _decimals = IERC20Token(address(uint160(address(impl)))).decimals();
    }

    function balanceOf(address account) external view returns (uint256 _balance) {
        _balance = IGovernedERC20(address(uint160(address(impl)))).balanceOf(account);
    }

    function allowance(address owner, address spender) external view returns (uint256 _allowance) {
        _allowance = IGovernedERC20(address(uint160(address(impl)))).allowance(owner, spender);
    }

    function totalSupply() external view returns (uint256 _totalSupply) {
        _totalSupply = IGovernedERC20(address(uint160(address(impl)))).totalSupply();
    }

    function approve(address spender, uint256 value) external returns (bool result) {
        result = IGovernedERC20(address(uint160(address(impl)))).approve(
            msg.sender,
            spender,
            value
        );
        emit Approval(msg.sender, spender, value);
    }

    function transfer(address to, uint256 value) external returns (bool result) {
        result = IGovernedERC20(address(uint160(address(impl)))).transfer(msg.sender, to, value);
        emit Transfer(msg.sender, to, value);
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool result) {
        result = IGovernedERC20(address(uint160(address(impl)))).transferFrom(
            msg.sender,
            from,
            to,
            value
        );
        emit Transfer(from, to, value);
        uint256 newApproveAmount = IGovernedERC20(address(uint160(address(impl)))).allowance(
            from,
            msg.sender
        );
        emit Approval(from, msg.sender, newApproveAmount);
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool result) {
        result = IGovernedERC20(address(uint160(address(impl)))).increaseAllowance(
            msg.sender,
            spender,
            addedValue
        );
        uint256 newApproveAmount = IGovernedERC20(address(uint160(address(impl)))).allowance(
            msg.sender,
            spender
        );
        emit Approval(msg.sender, spender, newApproveAmount);
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        returns (bool result)
    {
        result = IGovernedERC20(address(uint160(address(impl)))).decreaseAllowance(
            msg.sender,
            spender,
            subtractedValue
        );
        uint256 newApproveAmount = IGovernedERC20(address(uint160(address(impl)))).allowance(
            msg.sender,
            spender
        );
        emit Approval(msg.sender, spender, newApproveAmount);
    }

    // OwnedERC20 functions
    //
    function mint(address recipient, uint256 amount) external {
        IOwnedERC20(address(uint160(address(impl)))).mint(recipient, amount);
    }

    function burn(address recipient, uint256 amount) external {
        IOwnedERC20(address(uint160(address(impl)))).burn(recipient, amount);
    }

    // Governance functions
    //
    /**
     * Pre-create a new contract first.
     * Then propose upgrade based on that.
     */
    function proposeUpgrade(IGovernedContract _newImpl, uint256 _period)
        external
        payable
        senderOrigin
        noReentry
        returns (IUpgradeProposal)
    {
        require(_newImpl != impl, 'Already active!');
        require(_newImpl.proxy() == address(this), 'Wrong proxy!');

        ISporkRegistry spork_reg = ISporkRegistry(address(spork_proxy.impl()));
        IUpgradeProposal proposal = spork_reg.createUpgradeProposal.value(msg.value)(
            _newImpl,
            _period,
            msg.sender
        );

        upgrade_proposals[address(proposal)] = _newImpl;
        upgrade_proposal_list.push(proposal);

        emit UpgradeProposal(_newImpl, proposal);

        return proposal;
    }

    /**
     * Once proposal is accepted, anyone can activate that.
     */
    function upgrade(IUpgradeProposal _proposal) external noReentry {
        IGovernedContract new_impl = upgrade_proposals[address(_proposal)];
        require(new_impl != impl, 'Already active!'); // in case it changes in the flight
        require(address(new_impl) != address(0), 'Not registered!');
        require(_proposal.isAccepted(), 'Not accepted!');

        IGovernedContract old_impl = impl;

        new_impl.migrate(old_impl);
        impl = new_impl;
        implementation = new_impl;
        old_impl.destroy(new_impl);

        // SECURITY: prevent downgrade attack
        _cleanupProposal(_proposal);

        // Return fee ASAP
        _proposal.destroy();

        emit Upgraded(new_impl, _proposal);
    }

    /**
     * Map proposal to implementation
     */
    function upgradeProposalImpl(IUpgradeProposal _proposal)
        external
        view
        returns (IGovernedContract new_impl)
    {
        new_impl = upgrade_proposals[address(_proposal)];
    }

    /**
     * Lists all available upgrades
     */
    function listUpgradeProposals() external view returns (IUpgradeProposal[] memory proposals) {
        uint256 len = upgrade_proposal_list.length;
        proposals = new IUpgradeProposal[](len);

        for (uint256 i = 0; i < len; ++i) {
            proposals[i] = upgrade_proposal_list[i];
        }

        return proposals;
    }

    /**
     * Once proposal is reject, anyone can start collect procedure.
     */
    function collectUpgradeProposal(IUpgradeProposal _proposal) external noReentry {
        IGovernedContract new_impl = upgrade_proposals[address(_proposal)];
        require(address(new_impl) != address(0), 'Not registered!');
        _proposal.collect();
        delete upgrade_proposals[address(_proposal)];

        _cleanupProposal(_proposal);
    }

    function _cleanupProposal(IUpgradeProposal _proposal) internal {
        delete upgrade_proposals[address(_proposal)];

        uint256 len = upgrade_proposal_list.length;
        for (uint256 i = 0; i < len; ++i) {
            if (upgrade_proposal_list[i] == _proposal) {
                upgrade_proposal_list[i] = upgrade_proposal_list[len - 1];
                upgrade_proposal_list.pop();
                break;
            }
        }
    }

    /**
     * Related to above
     */
    function proxy() external view returns (address) {
        return address(this);
    }

    /**
     * SECURITY: prevent on-behalf-of calls
     */
    function transferFrom(
        address,
        address,
        address,
        uint256
    ) external pure {
        revert('Good try');
    }

    /**
     * SECURITY: prevent on-behalf-of calls
     */
    function increaseAllowance(
        address,
        address,
        uint256
    ) external pure {
        revert('Good try');
    }

    /**
     * SECURITY: prevent on-behalf-of calls
     */
    function decreaseAllowance(
        address,
        address,
        uint256
    ) external pure {
        revert('Good try');
    }

    /**
     * SECURITY: prevent on-behalf-of calls
     */
    function transfer(
        address,
        address,
        uint256
    ) external pure {
        revert('Good try');
    }

    /**
     * SECURITY: prevent on-behalf-of calls
     */
    function approve(
        address,
        address,
        uint256
    ) external pure {
        revert('Good try');
    }

    /**
     * SECURITY: prevent on-behalf-of calls
     */
    function migrate(IGovernedContract) external pure {
        revert('Good try');
    }

    /**
     * SECURITY: prevent on-behalf-of calls
     */
    function destroy(IGovernedContract) external pure {
        revert('Good try');
    }

    /**
     * Proxy all other calls to implementation.
     */
    function() external payable senderOrigin {
        // SECURITY: senderOrigin() modifier is mandatory

        // A dummy delegatecall opcode in the fallback function is necessary for
        // block explorers to pick up the Energi proxy-implementation pattern
        if (false) {
            (bool success, bytes memory data) = address(0).delegatecall(
                abi.encodeWithSignature('')
            );
            require(
                success && !success && data.length == 0 && data.length != 0,
                'ERC20TokenGovernedProxy: delegatecall cannot be used'
            );
        }

        IGovernedContract impl_m = impl;

        // solium-disable-next-line security/no-inline-assembly
        assembly {
            let ptr := mload(0x40)
            calldatacopy(ptr, 0, calldatasize)

            let res := call(sub(gas, 10000), impl_m, callvalue, ptr, calldatasize, 0, 0)
            // NOTE: returndatasize should allow repeatable calls
            //       what should save one opcode.
            returndatacopy(ptr, 0, returndatasize)

            switch res
            case 0 {
                revert(ptr, returndatasize)
            }
            default {
                return(ptr, returndatasize)
            }
        }
    }
}

File 2 of 12 : SafeMath.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

pragma solidity 0.5.16;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, 'SafeMath: modulo by zero');
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 3 of 12 : IUpgradeProposal.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

// Energi Governance system is the fundamental part of Energi Core.

// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.

pragma solidity 0.5.16;

import { IProposal } from './IProposal.sol';
import { IGovernedContract } from './IGovernedContract.sol';

contract IUpgradeProposal is IProposal {
    function impl() external view returns (IGovernedContract);
}

File 4 of 12 : ISporkRegistry.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

// Energi Governance system is the fundamental part of Energi Core.

// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.

pragma solidity 0.5.16;

import { IGovernedContract } from './IGovernedContract.sol';
import { IUpgradeProposal } from './IUpgradeProposal.sol';

interface ISporkRegistry {
    function createUpgradeProposal(
        IGovernedContract _impl,
        uint256 _period,
        address payable _fee_payer
    ) external payable returns (IUpgradeProposal);

    function consensusGasLimits() external view returns (uint256 callGas, uint256 xferGas);
}

File 5 of 12 : IProposal.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

// Energi Governance system is the fundamental part of Energi Core.

// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.

pragma solidity 0.5.16;

interface IProposal {
    function parent() external view returns (address);

    function created_block() external view returns (uint256);

    function deadline() external view returns (uint256);

    function fee_payer() external view returns (address payable);

    function fee_amount() external view returns (uint256);

    function accepted_weight() external view returns (uint256);

    function rejected_weight() external view returns (uint256);

    function total_weight() external view returns (uint256);

    function quorum_weight() external view returns (uint256);

    function isFinished() external view returns (bool);

    function isAccepted() external view returns (bool);

    function withdraw() external;

    function destroy() external;

    function collect() external;

    function voteAccept() external;

    function voteReject() external;

    function setFee() external payable;

    function canVote(address owner) external view returns (bool);
}

File 6 of 12 : IOwnedERC20.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

pragma solidity 0.5.16;

interface IOwnedERC20 {
    function owner() external view returns (address _owner);

    function setOwner(address _owner) external;

    function mint(address recipient, uint256 amount) external;

    function burn(address recipient, uint256 amount) external;
}

File 7 of 12 : IGovernedProxy.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

// Energi Governance system is the fundamental part of Energi Core.

// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.

pragma solidity 0.5.16;

import { IGovernedContract } from './IGovernedContract.sol';
import { IUpgradeProposal } from './IUpgradeProposal.sol';

interface IGovernedProxy {
    event UpgradeProposal(IGovernedContract indexed impl, IUpgradeProposal proposal);

    event Upgraded(IGovernedContract indexed impl, IUpgradeProposal proposal);

    function impl() external view returns (IGovernedContract);

    function proposeUpgrade(IGovernedContract _newImpl, uint256 _period)
        external
        payable
        returns (IUpgradeProposal);

    function upgrade(IUpgradeProposal _proposal) external;

    function upgradeProposalImpl(IUpgradeProposal _proposal)
        external
        view
        returns (IGovernedContract new_impl);

    function listUpgradeProposals() external view returns (IUpgradeProposal[] memory proposals);

    function collectUpgradeProposal(IUpgradeProposal _proposal) external;

    function() external payable;
}

File 8 of 12 : IGovernedERC20.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

pragma solidity 0.5.16;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IGovernedERC20 {
    function erc20Storage() external view returns (address _erc20Storage);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function increaseAllowance(
        address sender,
        address spender,
        uint256 addedValue
    ) external returns (bool);

    function decreaseAllowance(
        address sender,
        address spender,
        uint256 subtractedValue
    ) external returns (bool);
}

File 9 of 12 : IGovernedContract.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

// Energi Governance system is the fundamental part of Energi Core.

// NOTE: It's not allowed to change the compiler due to byte-to-byte
// match requirement.

pragma solidity 0.5.16;

/**
 * Genesis version of GovernedContract interface.
 *
 * Base Consensus interface for upgradable contracts.
 * Unlike common approach, the implementation is NOT expected to be
 * called through delegatecall() to minimize risks of shared storage.
 *
 * NOTE: it MUST NOT change after blockchain launch!
 */

interface IGovernedContract {
    // Return actual proxy address for secure validation
    function proxy() external view returns (address);

    // It must check that the caller is the proxy
    // and copy all required data from the old address.
    function migrate(IGovernedContract _oldImpl) external;

    // It must check that the caller is the proxy
    // and self destruct to the new address.
    function destroy(IGovernedContract _newImpl) external;

    // function () external payable; // This line (from original Energi IGovernedContract) is commented because it
    // makes truffle migrations fail
}

File 10 of 12 : IERC20TokenGovernedProxy.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

pragma solidity 0.5.16;

interface IERC20TokenGovernedProxy {
    event AirdropRewardsClaimed(
        address indexed recipient,
        uint256 claimAmountAirdrop,
        uint256 claimAmountReferral1,
        uint256 claimAmountReferral2,
        uint256 claimAmountReferral3,
        bytes4 airdropId,
        uint256 lastClaimNonce,
        uint256 claimNonce,
        bytes airdropServiceSignature
    );

    // ERC20 events
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    function setSporkProxy(address payable _sporkProxy) external;

    function emitAirdropRewardsClaimed(
        address recipient,
        uint256 claimAmountAirdrop,
        uint256 claimAmountReferral1,
        uint256 claimAmountReferral2,
        uint256 claimAmountReferral3,
        bytes4 airdropId,
        uint256 lastClaimNonce,
        uint256 claimNonce,
        bytes calldata airdropServiceSignature
    ) external;

    function emitTransfer(
        address from,
        address to,
        uint256 value
    ) external;

    // ERC20 standard interface
    function name() external view returns (string memory _name);

    function symbol() external view returns (string memory _symbol);

    function decimals() external view returns (uint256 _decimals);

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

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

    function totalSupply() external view returns (uint256 _totalSupply);

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

    function transfer(address to, uint256 value) external returns (bool result);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool result);

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool result);

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        returns (bool result);
}

File 11 of 12 : IERC20Token.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

pragma solidity 0.5.16;

interface IERC20Token {
    function eRC20TokenStorage() external view returns (address _eRC20TokenStorage);

    function name() external view returns (string memory _name);

    function symbol() external view returns (string memory _symbol);

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

    function getAirdropService() external view returns (address _airdropService);

    function getAirdropLastClaimNonce(bytes4 airdropId, address _user)
        external
        view
        returns (uint256 _lastClaimNonce);

    // Setter functions
    //
    function setName(string calldata _name) external;

    function setSymbol(string calldata _symbol) external;

    function setDecimals(uint8 _decimals) external;

    function setAirdropService(address _airdropService) external;

    function setERC721ManagerProxy(address _eRC721ManagerProxy) external;

    // Mint/burn functions
    //
    function mint(address recipient, uint256 amount) external;

    function burn(address account, uint256 amount) external;

    // ERC20 airdrop and airdrop referral rewards claim function
    function claimAirdrop(
        uint256 claimAmountAirdrop,
        uint256 claimAmountReferral1,
        uint256 claimAmountReferral2,
        uint256 claimAmountReferral3,
        bytes4 airdropId,
        uint256 lastClaimNonce,
        uint256 claimNonce,
        bytes calldata airdropServiceSignature
    ) external;
}

File 12 of 12 : NonReentrant.sol
// SPDX-License-Identifier: MIT

// Copyright 2023 Energi Core

pragma solidity 0.5.16;

/**
 * A little helper to protect contract from being re-entrant in state
 * modifying functions.
 */

contract NonReentrant {
    uint256 private entry_guard;

    modifier noReentry() {
        require(entry_guard == 0, 'Reentry');
        entry_guard = 1;
        _;
        entry_guard = 0;
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IGovernedContract","name":"_impl","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"claimAmountAirdrop","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claimAmountReferral1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claimAmountReferral2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claimAmountReferral3","type":"uint256"},{"indexed":false,"internalType":"bytes4","name":"airdropId","type":"bytes4"},{"indexed":false,"internalType":"uint256","name":"lastClaimNonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claimNonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"airdropServiceSignature","type":"bytes"}],"name":"AirdropRewardsClaimed","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IGovernedContract","name":"impl","type":"address"},{"indexed":false,"internalType":"contract IUpgradeProposal","name":"proposal","type":"address"}],"name":"UpgradeProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IGovernedContract","name":"impl","type":"address"},{"indexed":false,"internalType":"contract IUpgradeProposal","name":"proposal","type":"address"}],"name":"Upgraded","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"_allowance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUpgradeProposal","name":"_proposal","type":"address"}],"name":"collectUpgradeProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"_decimals","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"decreaseAllowance","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IGovernedContract","name":"","type":"address"}],"name":"destroy","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"claimAmountAirdrop","type":"uint256"},{"internalType":"uint256","name":"claimAmountReferral1","type":"uint256"},{"internalType":"uint256","name":"claimAmountReferral2","type":"uint256"},{"internalType":"uint256","name":"claimAmountReferral3","type":"uint256"},{"internalType":"bytes4","name":"airdropId","type":"bytes4"},{"internalType":"uint256","name":"lastClaimNonce","type":"uint256"},{"internalType":"uint256","name":"claimNonce","type":"uint256"},{"internalType":"bytes","name":"airdropServiceSignature","type":"bytes"}],"name":"emitAirdropRewardsClaimed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"emitApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"emitTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"impl","outputs":[{"internalType":"contract IGovernedContract","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"contract IGovernedContract","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseAllowance","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"listUpgradeProposals","outputs":[{"internalType":"contract IUpgradeProposal[]","name":"proposals","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IGovernedContract","name":"","type":"address"}],"name":"migrate","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IGovernedContract","name":"_newImpl","type":"address"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"proposeUpgrade","outputs":[{"internalType":"contract IUpgradeProposal","name":"","type":"address"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"proxy","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_sporkProxy","type":"address"}],"name":"setSporkProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"spork_proxy","outputs":[{"internalType":"contract IGovernedProxy","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"result","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IUpgradeProposal","name":"_proposal","type":"address"}],"name":"upgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IUpgradeProposal","name":"_proposal","type":"address"}],"name":"upgradeProposalImpl","outputs":[{"internalType":"contract IGovernedContract","name":"new_impl","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"upgrade_proposal_list","outputs":[{"internalType":"contract IUpgradeProposal","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"upgrade_proposals","outputs":[{"internalType":"contract IGovernedContract","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b506040516121873803806121878339818101604052602081101561003357600080fd5b5051600180546001600160a01b039092166001600160a01b03199283168117909155600280549092161790556121198061006e6000396000f3fe6080604052600436106102035760003560e01c80636fa09ab011610118578063a9059cbb116100a0578063d73b1dc91161006f578063d73b1dc91461070c578063dd62ed3e14610a42578063dd6a851d14610a7d578063e1f21c671461070c578063ec55688914610a9257610203565b8063a9059cbb146109a4578063b364595e146109dd578063beabacc81461070c578063ce5494bb1461037d57610203565b806390d6001a116100e757806390d6001a1461082757806395d89b41146108ea5780639dc29fac146108ff578063a1b0e47614610938578063a457c2d71461096b57610203565b80636fa09ab01461078257806370a08231146107ac5780638abf6077146107df5780638d2c45f5146107f457610203565b8063313ce5671161019b5780635687f2b81161016a5780635687f2b8146106885780635b6dee4c146106cb5780635c60da1b146106f75780636c43a2ca1461070c5780636d5b6c441461074f57610203565b8063313ce567146105b257806332e3a905146105c7578063395093511461061657806340c10f191461064f57610203565b806315dacbea116101d757806315dacbea146104bc57806318160ddd1461050557806323b872dd1461052c57806323de66511461056f57610203565b8062f55d9d1461037d57806306fdde03146103b25780630900f0101461043c578063095ea7b31461046f575b323314610257576040805162461bcd60e51b815260206004820152601e60248201527f4f6e6c79206469726563742063616c6c732061726520616c6c6f776564210000604482015290519081900360640190fd5b610345565b6020831061027b5780518252601f19909201916020918201910161025c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146102db576040519150601f19603f3d011682016040523d82523d6000602084013e6102e0565b606091505b50915091508180156102f0575081155b80156102fb57508051155b80156103075750805115155b6103425760405162461bcd60e51b81526004018080602001828103825260348152602001806120706034913960400191505060405180910390fd5b50505b6001546040516001600160a01b03909116903660008237600080368334866127105a03f13d6000833e808015610379573d83f35b3d83fd5b34801561038957600080fd5b506103b0600480360360208110156103a057600080fd5b50356001600160a01b0316610aa7565b005b3480156103be57600080fd5b506103c7610adf565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104015781810151838201526020016103e9565b50505050905090810190601f16801561042e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044857600080fd5b506103b06004803603602081101561045f57600080fd5b50356001600160a01b0316610c16565b34801561047b57600080fd5b506104a86004803603604081101561049257600080fd5b506001600160a01b038135169060200135610f46565b604080519115158252519081900360200190f35b3480156104c857600080fd5b506103b0600480360360808110156104df57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610aa7565b34801561051157600080fd5b5061051a611009565b60408051918252519081900360200190f35b34801561053857600080fd5b506104a86004803603606081101561054f57600080fd5b506001600160a01b0381358116916020810135909116906040013561107f565b34801561057b57600080fd5b506103b06004803603606081101561059257600080fd5b506001600160a01b03813581169160208101359091169060400135611216565b3480156105be57600080fd5b5061051a6112af565b3480156105d357600080fd5b506105fa600480360360208110156105ea57600080fd5b50356001600160a01b0316611328565b604080516001600160a01b039092168252519081900360200190f35b34801561062257600080fd5b506104a86004803603604081101561063957600080fd5b506001600160a01b038135169060200135611343565b34801561065b57600080fd5b506103b06004803603604081101561067257600080fd5b506001600160a01b03813516906020013561148c565b34801561069457600080fd5b506103b0600480360360608110156106ab57600080fd5b506001600160a01b038135811691602081013590911690604001356114fd565b6105fa600480360360408110156106e157600080fd5b506001600160a01b038135169060200135611584565b34801561070357600080fd5b506105fa6118d7565b34801561071857600080fd5b506103b06004803603606081101561072f57600080fd5b506001600160a01b03813581169160208101359091169060400135610aa7565b34801561075b57600080fd5b506105fa6004803603602081101561077257600080fd5b50356001600160a01b03166118e6565b34801561078e57600080fd5b506105fa600480360360208110156107a557600080fd5b5035611904565b3480156107b857600080fd5b5061051a600480360360208110156107cf57600080fd5b50356001600160a01b031661192b565b3480156107eb57600080fd5b506105fa6119ae565b34801561080057600080fd5b506103b06004803603602081101561081757600080fd5b50356001600160a01b03166119bd565b34801561083357600080fd5b506103b0600480360361012081101561084b57600080fd5b6001600160a01b03823516916020810135916040820135916060810135916080820135916001600160e01b031960a0820135169160c08201359160e08101359181019061012081016101008201356401000000008111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111640100000000831117156108df57600080fd5b509092509050611a28565b3480156108f657600080fd5b506103c7611b33565b34801561090b57600080fd5b506103b06004803603604081101561092257600080fd5b506001600160a01b038135169060200135611b78565b34801561094457600080fd5b506103b06004803603602081101561095b57600080fd5b50356001600160a01b0316611bcd565b34801561097757600080fd5b506104a86004803603604081101561098e57600080fd5b506001600160a01b038135169060200135611cfa565b3480156109b057600080fd5b506104a8600480360360408110156109c757600080fd5b506001600160a01b038135169060200135611d59565b3480156109e957600080fd5b506109f2611e2e565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610a2e578181015183820152602001610a16565b505050509050019250505060405180910390f35b348015610a4e57600080fd5b5061051a60048036036040811015610a6557600080fd5b506001600160a01b0381358116916020013516611ec8565b348015610a8957600080fd5b506105fa611f54565b348015610a9e57600080fd5b506105fa611f63565b6040805162461bcd60e51b8152602060048201526008602482015267476f6f642074727960c01b604482015290519081900360640190fd5b600154604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b158015610b2457600080fd5b505afa158015610b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610b6157600080fd5b8101908080516040519392919084640100000000821115610b8157600080fd5b908301906020820185811115610b9657600080fd5b8251640100000000811182820188101715610bb057600080fd5b82525081516020918201929091019080838360005b83811015610bdd578181015183820152602001610bc5565b50505050905090810190601f168015610c0a5780820380516001836020036101000a031916815260200191505b50604052505050905090565b60005415610c55576040805162461bcd60e51b81526020600482015260076024820152665265656e74727960c81b604482015290519081900360640190fd5b600160008181556001600160a01b038084168252600460205260409091205491549181169116811415610cc1576040805162461bcd60e51b815260206004820152600f60248201526e416c7265616479206163746976652160881b604482015290519081900360640190fd5b6001600160a01b038116610d0e576040805162461bcd60e51b815260206004820152600f60248201526e4e6f7420726567697374657265642160881b604482015290519081900360640190fd5b816001600160a01b0316635051a5ec6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4757600080fd5b505afa158015610d5b573d6000803e3d6000fd5b505050506040513d6020811015610d7157600080fd5b5051610db4576040805162461bcd60e51b815260206004820152600d60248201526c4e6f742061636365707465642160981b604482015290519081900360640190fd5b6001546040805163ce5494bb60e01b81526001600160a01b03928316600482018190529151919284169163ce5494bb9160248082019260009290919082900301818387803b158015610e0557600080fd5b505af1158015610e19573d6000803e3d6000fd5b5050600180546001600160a01b038087166001600160a01b031992831681179093556002805490921683179091556040805162f55d9d60e01b8152600481019390935251908516935062f55d9d9250602480830192600092919082900301818387803b158015610e8857600080fd5b505af1158015610e9c573d6000803e3d6000fd5b50505050610ea983611f67565b826001600160a01b03166383197ef06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ee457600080fd5b505af1158015610ef8573d6000803e3d6000fd5b5050604080516001600160a01b038781168252915191861693507f5d611f318680d00598bb735d61bacf0c514c6b50e1e5ad30040a4df2b12791c7925081900360200190a250506000805550565b6001546040805163e1f21c6760e01b81523360048201526001600160a01b038581166024830152604482018590529151600093929092169163e1f21c679160648082019260209290919082900301818787803b158015610fa557600080fd5b505af1158015610fb9573d6000803e3d6000fd5b505050506040513d6020811015610fcf57600080fd5b50516040805184815290519192506001600160a01b0385169133916000805160206120c5833981519152919081900360200190a392915050565b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561104e57600080fd5b505afa158015611062573d6000803e3d6000fd5b505050506040513d602081101561107857600080fd5b5051919050565b60015460408051630aed65f560e11b81523360048201526001600160a01b038681166024830152858116604483015260648201859052915160009392909216916315dacbea9160848082019260209290919082900301818787803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d602081101561111057600080fd5b50516040805184815290519192506001600160a01b0380861692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a360015460408051636eb1769f60e11b81526001600160a01b0387811660048301523360248301529151600093929092169163dd62ed3e91604480820192602092909190829003018186803b1580156111b057600080fd5b505afa1580156111c4573d6000803e3d6000fd5b505050506040513d60208110156111da57600080fd5b505160408051828152905191925033916001600160a01b038816916000805160206120c5833981519152919081900360200190a3509392505050565b6001546001600160a01b0316331461125f5760405162461bcd60e51b81526004018080602001828103825260218152602001806120a46021913960400191505060405180910390fd5b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b1580156112f457600080fd5b505afa158015611308573d6000803e3d6000fd5b505050506040513d602081101561131e57600080fd5b505160ff16919050565b6004602052600090815260409020546001600160a01b031681565b60015460408051633621d16560e11b81523360048201526001600160a01b0385811660248301526044820185905291516000939290921691636c43a2ca9160648082019260209290919082900301818787803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b505050506040513d60208110156113cc57600080fd5b505160015460408051636eb1769f60e11b81523360048201526001600160a01b0387811660248301529151939450600093919092169163dd62ed3e916044808301926020929190829003018186803b15801561142757600080fd5b505afa15801561143b573d6000803e3d6000fd5b505050506040513d602081101561145157600080fd5b50516040805182815290519192506001600160a01b0386169133916000805160206120c5833981519152919081900360200190a35092915050565b600154604080516340c10f1960e01b81526001600160a01b03858116600483015260248201859052915191909216916340c10f1991604480830192600092919082900301818387803b1580156114e157600080fd5b505af11580156114f5573d6000803e3d6000fd5b505050505050565b6001546001600160a01b031633146115465760405162461bcd60e51b81526004018080602001828103825260218152602001806120a46021913960400191505060405180910390fd5b816001600160a01b0316836001600160a01b03166000805160206120c5833981519152836040518082815260200191505060405180910390a3505050565b60003233146115da576040805162461bcd60e51b815260206004820152601e60248201527f4f6e6c79206469726563742063616c6c732061726520616c6c6f776564210000604482015290519081900360640190fd5b60005415611619576040805162461bcd60e51b81526020600482015260076024820152665265656e74727960c81b604482015290519081900360640190fd5b60016000819055546001600160a01b0384811691161415611673576040805162461bcd60e51b815260206004820152600f60248201526e416c7265616479206163746976652160881b604482015290519081900360640190fd5b306001600160a01b0316836001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156116b657600080fd5b505afa1580156116ca573d6000803e3d6000fd5b505050506040513d60208110156116e057600080fd5b50516001600160a01b03161461172c576040805162461bcd60e51b815260206004820152600c60248201526b57726f6e672070726f78792160a01b604482015290519081900360640190fd5b60035460408051638abf607760e01b815290516000926001600160a01b031691638abf6077916004808301926020929190829003018186803b15801561177157600080fd5b505afa158015611785573d6000803e3d6000fd5b505050506040513d602081101561179b57600080fd5b5051604080516362877ccd60e01b81526001600160a01b038781166004830152602482018790523360448301529151929350600092918416916362877ccd913491606480830192602092919082900301818588803b1580156117fc57600080fd5b505af1158015611810573d6000803e3d6000fd5b50505050506040513d602081101561182757600080fd5b50516001600160a01b0380821660008181526004602090815260408083208054958c166001600160a01b031996871681179091556005805460018101825594527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09093018054909516841790945583519283529251939450927f812eb2689eecf94cfb55caf4a123ea76c6d93eef07dd54a5273b7a4949f7d763929181900390910190a260008055949350505050565b6002546001600160a01b031681565b6001600160a01b039081166000908152600460205260409020541690565b6005818154811061191157fe5b6000918252602090912001546001600160a01b0316905081565b600154604080516370a0823160e01b81526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561197c57600080fd5b505afa158015611990573d6000803e3d6000fd5b505050506040513d60208110156119a657600080fd5b505192915050565b6001546001600160a01b031681565b6001546001600160a01b03163314611a065760405162461bcd60e51b81526004018080602001828103825260218152602001806120a46021913960400191505060405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314611a715760405162461bcd60e51b81526004018080602001828103825260218152602001806120a46021913960400191505060405180910390fd5b896001600160a01b03167f928751aabde843c1f88d22d1392d97ac696d9d71f6904a5a195bd37c489939348a8a8a8a8a8a8a8a8a604051808a8152602001898152602001888152602001878152602001866001600160e01b0319166001600160e01b0319168152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a250505050505050505050565b600154604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b158015610b2457600080fd5b60015460408051632770a7eb60e21b81526001600160a01b0385811660048301526024820185905291519190921691639dc29fac91604480830192600092919082900301818387803b1580156114e157600080fd5b60005415611c0c576040805162461bcd60e51b81526020600482015260076024820152665265656e74727960c81b604482015290519081900360640190fd5b600160009081556001600160a01b03808316825260046020526040909120541680611c70576040805162461bcd60e51b815260206004820152600f60248201526e4e6f7420726567697374657265642160881b604482015290519081900360640190fd5b816001600160a01b031663e52253816040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b5050506001600160a01b038316600090815260046020526040902080546001600160a01b031916905550611cf282611f67565b505060008055565b6001546040805163d73b1dc960e01b81523360048201526001600160a01b038581166024830152604482018590529151600093929092169163d73b1dc99160648082019260209290919082900301818787803b1580156113a257600080fd5b600154604080516317d5759960e31b81523360048201526001600160a01b038581166024830152604482018590529151600093929092169163beabacc89160648082019260209290919082900301818787803b158015611db857600080fd5b505af1158015611dcc573d6000803e3d6000fd5b505050506040513d6020811015611de257600080fd5b50516040805184815290519192506001600160a01b0385169133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a392915050565b60055460408051828152602080840282010190915260609190818015611e5e578160200160208202803883390190505b50915060005b81811015611ec35760058181548110611e7957fe5b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611ea357fe5b6001600160a01b0390921660209283029190910190910152600101611e64565b505090565b60015460408051636eb1769f60e11b81526001600160a01b03858116600483015284811660248301529151600093929092169163dd62ed3e91604480820192602092909190829003018186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d6020811015611f4b57600080fd5b50519392505050565b6003546001600160a01b031681565b3090565b6001600160a01b038116600090815260046020526040812080546001600160a01b0319169055600554905b8181101561206a57826001600160a01b031660058281548110611fb157fe5b6000918252602090912001546001600160a01b031614156120625760056001830381548110611fdc57fe5b600091825260209091200154600580546001600160a01b03909216918390811061200257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061203b57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561206a565b600101611f92565b50505056fe4552433230546f6b656e476f7665726e656450726f78793a2064656c656761746563616c6c2063616e6e6f7420626520757365644f6e6c792063616c6c732066726f6d20696d706c2061726520616c6c6f776564218c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a265627a7a723158202a0e4f802cfdc1a7b12d8d094db9ece470d5e9adedbbfef5cbce0c72c988f84064736f6c6343000510003200000000000000000000000061a7ce2ea07908f56e98d71d01211226d5980325

Deployed Bytecode

0x6080604052600436106102035760003560e01c80636fa09ab011610118578063a9059cbb116100a0578063d73b1dc91161006f578063d73b1dc91461070c578063dd62ed3e14610a42578063dd6a851d14610a7d578063e1f21c671461070c578063ec55688914610a9257610203565b8063a9059cbb146109a4578063b364595e146109dd578063beabacc81461070c578063ce5494bb1461037d57610203565b806390d6001a116100e757806390d6001a1461082757806395d89b41146108ea5780639dc29fac146108ff578063a1b0e47614610938578063a457c2d71461096b57610203565b80636fa09ab01461078257806370a08231146107ac5780638abf6077146107df5780638d2c45f5146107f457610203565b8063313ce5671161019b5780635687f2b81161016a5780635687f2b8146106885780635b6dee4c146106cb5780635c60da1b146106f75780636c43a2ca1461070c5780636d5b6c441461074f57610203565b8063313ce567146105b257806332e3a905146105c7578063395093511461061657806340c10f191461064f57610203565b806315dacbea116101d757806315dacbea146104bc57806318160ddd1461050557806323b872dd1461052c57806323de66511461056f57610203565b8062f55d9d1461037d57806306fdde03146103b25780630900f0101461043c578063095ea7b31461046f575b323314610257576040805162461bcd60e51b815260206004820152601e60248201527f4f6e6c79206469726563742063616c6c732061726520616c6c6f776564210000604482015290519081900360640190fd5b610345565b6020831061027b5780518252601f19909201916020918201910161025c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146102db576040519150601f19603f3d011682016040523d82523d6000602084013e6102e0565b606091505b50915091508180156102f0575081155b80156102fb57508051155b80156103075750805115155b6103425760405162461bcd60e51b81526004018080602001828103825260348152602001806120706034913960400191505060405180910390fd5b50505b6001546040516001600160a01b03909116903660008237600080368334866127105a03f13d6000833e808015610379573d83f35b3d83fd5b34801561038957600080fd5b506103b0600480360360208110156103a057600080fd5b50356001600160a01b0316610aa7565b005b3480156103be57600080fd5b506103c7610adf565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104015781810151838201526020016103e9565b50505050905090810190601f16801561042e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561044857600080fd5b506103b06004803603602081101561045f57600080fd5b50356001600160a01b0316610c16565b34801561047b57600080fd5b506104a86004803603604081101561049257600080fd5b506001600160a01b038135169060200135610f46565b604080519115158252519081900360200190f35b3480156104c857600080fd5b506103b0600480360360808110156104df57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610aa7565b34801561051157600080fd5b5061051a611009565b60408051918252519081900360200190f35b34801561053857600080fd5b506104a86004803603606081101561054f57600080fd5b506001600160a01b0381358116916020810135909116906040013561107f565b34801561057b57600080fd5b506103b06004803603606081101561059257600080fd5b506001600160a01b03813581169160208101359091169060400135611216565b3480156105be57600080fd5b5061051a6112af565b3480156105d357600080fd5b506105fa600480360360208110156105ea57600080fd5b50356001600160a01b0316611328565b604080516001600160a01b039092168252519081900360200190f35b34801561062257600080fd5b506104a86004803603604081101561063957600080fd5b506001600160a01b038135169060200135611343565b34801561065b57600080fd5b506103b06004803603604081101561067257600080fd5b506001600160a01b03813516906020013561148c565b34801561069457600080fd5b506103b0600480360360608110156106ab57600080fd5b506001600160a01b038135811691602081013590911690604001356114fd565b6105fa600480360360408110156106e157600080fd5b506001600160a01b038135169060200135611584565b34801561070357600080fd5b506105fa6118d7565b34801561071857600080fd5b506103b06004803603606081101561072f57600080fd5b506001600160a01b03813581169160208101359091169060400135610aa7565b34801561075b57600080fd5b506105fa6004803603602081101561077257600080fd5b50356001600160a01b03166118e6565b34801561078e57600080fd5b506105fa600480360360208110156107a557600080fd5b5035611904565b3480156107b857600080fd5b5061051a600480360360208110156107cf57600080fd5b50356001600160a01b031661192b565b3480156107eb57600080fd5b506105fa6119ae565b34801561080057600080fd5b506103b06004803603602081101561081757600080fd5b50356001600160a01b03166119bd565b34801561083357600080fd5b506103b0600480360361012081101561084b57600080fd5b6001600160a01b03823516916020810135916040820135916060810135916080820135916001600160e01b031960a0820135169160c08201359160e08101359181019061012081016101008201356401000000008111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111640100000000831117156108df57600080fd5b509092509050611a28565b3480156108f657600080fd5b506103c7611b33565b34801561090b57600080fd5b506103b06004803603604081101561092257600080fd5b506001600160a01b038135169060200135611b78565b34801561094457600080fd5b506103b06004803603602081101561095b57600080fd5b50356001600160a01b0316611bcd565b34801561097757600080fd5b506104a86004803603604081101561098e57600080fd5b506001600160a01b038135169060200135611cfa565b3480156109b057600080fd5b506104a8600480360360408110156109c757600080fd5b506001600160a01b038135169060200135611d59565b3480156109e957600080fd5b506109f2611e2e565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610a2e578181015183820152602001610a16565b505050509050019250505060405180910390f35b348015610a4e57600080fd5b5061051a60048036036040811015610a6557600080fd5b506001600160a01b0381358116916020013516611ec8565b348015610a8957600080fd5b506105fa611f54565b348015610a9e57600080fd5b506105fa611f63565b6040805162461bcd60e51b8152602060048201526008602482015267476f6f642074727960c01b604482015290519081900360640190fd5b600154604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b158015610b2457600080fd5b505afa158015610b38573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610b6157600080fd5b8101908080516040519392919084640100000000821115610b8157600080fd5b908301906020820185811115610b9657600080fd5b8251640100000000811182820188101715610bb057600080fd5b82525081516020918201929091019080838360005b83811015610bdd578181015183820152602001610bc5565b50505050905090810190601f168015610c0a5780820380516001836020036101000a031916815260200191505b50604052505050905090565b60005415610c55576040805162461bcd60e51b81526020600482015260076024820152665265656e74727960c81b604482015290519081900360640190fd5b600160008181556001600160a01b038084168252600460205260409091205491549181169116811415610cc1576040805162461bcd60e51b815260206004820152600f60248201526e416c7265616479206163746976652160881b604482015290519081900360640190fd5b6001600160a01b038116610d0e576040805162461bcd60e51b815260206004820152600f60248201526e4e6f7420726567697374657265642160881b604482015290519081900360640190fd5b816001600160a01b0316635051a5ec6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d4757600080fd5b505afa158015610d5b573d6000803e3d6000fd5b505050506040513d6020811015610d7157600080fd5b5051610db4576040805162461bcd60e51b815260206004820152600d60248201526c4e6f742061636365707465642160981b604482015290519081900360640190fd5b6001546040805163ce5494bb60e01b81526001600160a01b03928316600482018190529151919284169163ce5494bb9160248082019260009290919082900301818387803b158015610e0557600080fd5b505af1158015610e19573d6000803e3d6000fd5b5050600180546001600160a01b038087166001600160a01b031992831681179093556002805490921683179091556040805162f55d9d60e01b8152600481019390935251908516935062f55d9d9250602480830192600092919082900301818387803b158015610e8857600080fd5b505af1158015610e9c573d6000803e3d6000fd5b50505050610ea983611f67565b826001600160a01b03166383197ef06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ee457600080fd5b505af1158015610ef8573d6000803e3d6000fd5b5050604080516001600160a01b038781168252915191861693507f5d611f318680d00598bb735d61bacf0c514c6b50e1e5ad30040a4df2b12791c7925081900360200190a250506000805550565b6001546040805163e1f21c6760e01b81523360048201526001600160a01b038581166024830152604482018590529151600093929092169163e1f21c679160648082019260209290919082900301818787803b158015610fa557600080fd5b505af1158015610fb9573d6000803e3d6000fd5b505050506040513d6020811015610fcf57600080fd5b50516040805184815290519192506001600160a01b0385169133916000805160206120c5833981519152919081900360200190a392915050565b600154604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b15801561104e57600080fd5b505afa158015611062573d6000803e3d6000fd5b505050506040513d602081101561107857600080fd5b5051919050565b60015460408051630aed65f560e11b81523360048201526001600160a01b038681166024830152858116604483015260648201859052915160009392909216916315dacbea9160848082019260209290919082900301818787803b1580156110e657600080fd5b505af11580156110fa573d6000803e3d6000fd5b505050506040513d602081101561111057600080fd5b50516040805184815290519192506001600160a01b0380861692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a360015460408051636eb1769f60e11b81526001600160a01b0387811660048301523360248301529151600093929092169163dd62ed3e91604480820192602092909190829003018186803b1580156111b057600080fd5b505afa1580156111c4573d6000803e3d6000fd5b505050506040513d60208110156111da57600080fd5b505160408051828152905191925033916001600160a01b038816916000805160206120c5833981519152919081900360200190a3509392505050565b6001546001600160a01b0316331461125f5760405162461bcd60e51b81526004018080602001828103825260218152602001806120a46021913960400191505060405180910390fd5b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b1580156112f457600080fd5b505afa158015611308573d6000803e3d6000fd5b505050506040513d602081101561131e57600080fd5b505160ff16919050565b6004602052600090815260409020546001600160a01b031681565b60015460408051633621d16560e11b81523360048201526001600160a01b0385811660248301526044820185905291516000939290921691636c43a2ca9160648082019260209290919082900301818787803b1580156113a257600080fd5b505af11580156113b6573d6000803e3d6000fd5b505050506040513d60208110156113cc57600080fd5b505160015460408051636eb1769f60e11b81523360048201526001600160a01b0387811660248301529151939450600093919092169163dd62ed3e916044808301926020929190829003018186803b15801561142757600080fd5b505afa15801561143b573d6000803e3d6000fd5b505050506040513d602081101561145157600080fd5b50516040805182815290519192506001600160a01b0386169133916000805160206120c5833981519152919081900360200190a35092915050565b600154604080516340c10f1960e01b81526001600160a01b03858116600483015260248201859052915191909216916340c10f1991604480830192600092919082900301818387803b1580156114e157600080fd5b505af11580156114f5573d6000803e3d6000fd5b505050505050565b6001546001600160a01b031633146115465760405162461bcd60e51b81526004018080602001828103825260218152602001806120a46021913960400191505060405180910390fd5b816001600160a01b0316836001600160a01b03166000805160206120c5833981519152836040518082815260200191505060405180910390a3505050565b60003233146115da576040805162461bcd60e51b815260206004820152601e60248201527f4f6e6c79206469726563742063616c6c732061726520616c6c6f776564210000604482015290519081900360640190fd5b60005415611619576040805162461bcd60e51b81526020600482015260076024820152665265656e74727960c81b604482015290519081900360640190fd5b60016000819055546001600160a01b0384811691161415611673576040805162461bcd60e51b815260206004820152600f60248201526e416c7265616479206163746976652160881b604482015290519081900360640190fd5b306001600160a01b0316836001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156116b657600080fd5b505afa1580156116ca573d6000803e3d6000fd5b505050506040513d60208110156116e057600080fd5b50516001600160a01b03161461172c576040805162461bcd60e51b815260206004820152600c60248201526b57726f6e672070726f78792160a01b604482015290519081900360640190fd5b60035460408051638abf607760e01b815290516000926001600160a01b031691638abf6077916004808301926020929190829003018186803b15801561177157600080fd5b505afa158015611785573d6000803e3d6000fd5b505050506040513d602081101561179b57600080fd5b5051604080516362877ccd60e01b81526001600160a01b038781166004830152602482018790523360448301529151929350600092918416916362877ccd913491606480830192602092919082900301818588803b1580156117fc57600080fd5b505af1158015611810573d6000803e3d6000fd5b50505050506040513d602081101561182757600080fd5b50516001600160a01b0380821660008181526004602090815260408083208054958c166001600160a01b031996871681179091556005805460018101825594527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09093018054909516841790945583519283529251939450927f812eb2689eecf94cfb55caf4a123ea76c6d93eef07dd54a5273b7a4949f7d763929181900390910190a260008055949350505050565b6002546001600160a01b031681565b6001600160a01b039081166000908152600460205260409020541690565b6005818154811061191157fe5b6000918252602090912001546001600160a01b0316905081565b600154604080516370a0823160e01b81526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561197c57600080fd5b505afa158015611990573d6000803e3d6000fd5b505050506040513d60208110156119a657600080fd5b505192915050565b6001546001600160a01b031681565b6001546001600160a01b03163314611a065760405162461bcd60e51b81526004018080602001828103825260218152602001806120a46021913960400191505060405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314611a715760405162461bcd60e51b81526004018080602001828103825260218152602001806120a46021913960400191505060405180910390fd5b896001600160a01b03167f928751aabde843c1f88d22d1392d97ac696d9d71f6904a5a195bd37c489939348a8a8a8a8a8a8a8a8a604051808a8152602001898152602001888152602001878152602001866001600160e01b0319166001600160e01b0319168152602001858152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039c50909a5050505050505050505050a250505050505050505050565b600154604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b158015610b2457600080fd5b60015460408051632770a7eb60e21b81526001600160a01b0385811660048301526024820185905291519190921691639dc29fac91604480830192600092919082900301818387803b1580156114e157600080fd5b60005415611c0c576040805162461bcd60e51b81526020600482015260076024820152665265656e74727960c81b604482015290519081900360640190fd5b600160009081556001600160a01b03808316825260046020526040909120541680611c70576040805162461bcd60e51b815260206004820152600f60248201526e4e6f7420726567697374657265642160881b604482015290519081900360640190fd5b816001600160a01b031663e52253816040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cab57600080fd5b505af1158015611cbf573d6000803e3d6000fd5b5050506001600160a01b038316600090815260046020526040902080546001600160a01b031916905550611cf282611f67565b505060008055565b6001546040805163d73b1dc960e01b81523360048201526001600160a01b038581166024830152604482018590529151600093929092169163d73b1dc99160648082019260209290919082900301818787803b1580156113a257600080fd5b600154604080516317d5759960e31b81523360048201526001600160a01b038581166024830152604482018590529151600093929092169163beabacc89160648082019260209290919082900301818787803b158015611db857600080fd5b505af1158015611dcc573d6000803e3d6000fd5b505050506040513d6020811015611de257600080fd5b50516040805184815290519192506001600160a01b0385169133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a392915050565b60055460408051828152602080840282010190915260609190818015611e5e578160200160208202803883390190505b50915060005b81811015611ec35760058181548110611e7957fe5b9060005260206000200160009054906101000a90046001600160a01b0316838281518110611ea357fe5b6001600160a01b0390921660209283029190910190910152600101611e64565b505090565b60015460408051636eb1769f60e11b81526001600160a01b03858116600483015284811660248301529151600093929092169163dd62ed3e91604480820192602092909190829003018186803b158015611f2157600080fd5b505afa158015611f35573d6000803e3d6000fd5b505050506040513d6020811015611f4b57600080fd5b50519392505050565b6003546001600160a01b031681565b3090565b6001600160a01b038116600090815260046020526040812080546001600160a01b0319169055600554905b8181101561206a57826001600160a01b031660058281548110611fb157fe5b6000918252602090912001546001600160a01b031614156120625760056001830381548110611fdc57fe5b600091825260209091200154600580546001600160a01b03909216918390811061200257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061203b57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561206a565b600101611f92565b50505056fe4552433230546f6b656e476f7665726e656450726f78793a2064656c656761746563616c6c2063616e6e6f7420626520757365644f6e6c792063616c6c732066726f6d20696d706c2061726520616c6c6f776564218c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a265627a7a723158202a0e4f802cfdc1a7b12d8d094db9ece470d5e9adedbbfef5cbce0c72c988f84064736f6c63430005100032

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

00000000000000000000000061A7CE2EA07908F56e98D71d01211226d5980325

-----Decoded View---------------
Arg [0] : _impl (address): 0x61A7CE2EA07908F56e98D71d01211226d5980325

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000061A7CE2EA07908F56e98D71d01211226d5980325


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.