ETH Price: $1,488.21 (-2.80%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Revoke Role193263672024-02-28 13:37:35406 days ago1709127455IN
0xc9b47Dcb...7e7A73516
0 ETH0.0020507669.5811874
Grant Role193263242024-02-28 13:28:59406 days ago1709126939IN
0xc9b47Dcb...7e7A73516
0 ETH0.0034912467.84510122
Revoke Role189840192024-01-11 13:35:59454 days ago1704980159IN
0xc9b47Dcb...7e7A73516
0 ETH0.0012260441.59882154
Grant Role189839862024-01-11 13:29:23454 days ago1704979763IN
0xc9b47Dcb...7e7A73516
0 ETH0.0016876632.79628036
Eggs Hatch161661432022-12-12 4:08:23849 days ago1670818103IN
0xc9b47Dcb...7e7A73516
0 ETH0.0028593914.14769238
Breed161239152022-12-06 6:19:11855 days ago1670307551IN
0xc9b47Dcb...7e7A73516
0 ETH0.0044314814.03189383
Eggs Hatch160062532022-11-19 19:49:23871 days ago1668887363IN
0xc9b47Dcb...7e7A73516
0 ETH0.0031195515.43492714
Eggs Hatch160062402022-11-19 19:46:35871 days ago1668887195IN
0xc9b47Dcb...7e7A73516
0 ETH0.003022414.95426654
Eggs Hatch160062292022-11-19 19:44:23871 days ago1668887063IN
0xc9b47Dcb...7e7A73516
0 ETH0.0026904513.3118475
Eggs Hatch159700012022-11-14 18:14:59876 days ago1668449699IN
0xc9b47Dcb...7e7A73516
0 ETH0.0042035120.79814443
Breed159506882022-11-12 1:35:23879 days ago1668216923IN
0xc9b47Dcb...7e7A73516
0 ETH0.0053417316.6602924
Breed159506822022-11-12 1:34:11879 days ago1668216851IN
0xc9b47Dcb...7e7A73516
0 ETH0.0057424917.91019398
Breed159506712022-11-12 1:31:59879 days ago1668216719IN
0xc9b47Dcb...7e7A73516
0 ETH0.0057219717.84685991
Breed159197322022-11-07 17:46:59883 days ago1667843219IN
0xc9b47Dcb...7e7A73516
0 ETH0.0059459118.54535595
Eggs Hatch158936422022-11-04 2:23:11887 days ago1667528591IN
0xc9b47Dcb...7e7A73516
0 ETH0.00277913.74997725
Eggs Hatch158799472022-11-02 4:27:47889 days ago1667363267IN
0xc9b47Dcb...7e7A73516
0 ETH0.0023858811.80489628
Breed158473522022-10-28 15:07:11894 days ago1666969631IN
0xc9b47Dcb...7e7A73516
0 ETH0.0052822916.47593339
Breed158437102022-10-28 2:54:47894 days ago1666925687IN
0xc9b47Dcb...7e7A73516
0 ETH0.0057129818.7
Eggs Hatch158374072022-10-27 5:45:47895 days ago1666849547IN
0xc9b47Dcb...7e7A73516
0 ETH0.0020831810.30719597
Eggs Hatch158373912022-10-27 5:42:35895 days ago1666849355IN
0xc9b47Dcb...7e7A73516
0 ETH0.0021657610.71577779
Eggs Hatch158373762022-10-27 5:39:35895 days ago1666849175IN
0xc9b47Dcb...7e7A73516
0 ETH0.0020501810.14388823
Eggs Hatch158373612022-10-27 5:36:35895 days ago1666848995IN
0xc9b47Dcb...7e7A73516
0 ETH0.001972679.76039074
Eggs Hatch158350702022-10-26 21:55:23895 days ago1666821323IN
0xc9b47Dcb...7e7A73516
0 ETH0.0037458618.53380687
Eggs Hatch158350502022-10-26 21:51:23895 days ago1666821083IN
0xc9b47Dcb...7e7A73516
0 ETH0.0031704615.68682729
Eggs Hatch158350232022-10-26 21:45:59895 days ago1666820759IN
0xc9b47Dcb...7e7A73516
0 ETH0.0032967616.31173709
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Breeding

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-07
*/

pragma solidity 0.8.4;
//SPDX-License-Identifier: UNLICENSED

interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface ICollarQuest is IERC721 {
    function spawnSparce( uint256 _genes, address _owner) external returns (uint256);
}

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

  function decimals() external view returns (uint8);

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

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

  function getOwner() external view returns (address);

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

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

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

  function approve(address spender, uint256 amount) external returns (bool);
 
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  
  function burn(uint256 amount) external;
  
  function burnFrom(address account, uint256 amount) external;

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

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

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

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

abstract contract Validator {
    bytes32 public constant SIGNATURE_PERMIT_TYPEHASH = keccak256("validateSig(address _owner, uint _sireId, uint _matronId, uint _gene, uint _deadline, bytes memory signature)");
    uint public chainId;
    
    using ECDSA for bytes32;
    
    constructor() {
        uint _chainId;
        assembly {
            _chainId := chainid()
        }
        
        chainId = _chainId;
    }
    
    function validateSig(address _owner, uint _sireId, uint _matronId, uint _gene, uint _deadline, bytes memory signature) public view returns (address){
      // This recreates the message hash that was signed on the client.
      bytes32 hash = keccak256(abi.encodePacked(SIGNATURE_PERMIT_TYPEHASH, _owner, _sireId, _matronId, _gene, chainId, _deadline));
      bytes32 messageHash = hash.toSignedMessageHash();
    
      // Verify that the message's signer is the owner of the order
      return messageHash.recover(signature);
    }
}

library ECDSA {

  /**
   * @dev Recover signer address from a message by using their signature
   * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
   * @param signature bytes signature, the signature is generated using web3.eth.sign()
   */
  function recover(bytes32 hash, bytes memory signature)
    internal
    pure
    returns (address)
  {
    bytes32 r;
    bytes32 s;
    uint8 v;

    // Check the signature length
    if (signature.length != 65) {
      return (address(0));
    }

    // Divide the signature in r, s and v variables with inline assembly.
    assembly {
      r := mload(add(signature, 0x20))
      s := mload(add(signature, 0x40))
      v := byte(0, mload(add(signature, 0x60)))
    }

    // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
    if (v < 27) {
      v += 27;
    }

    // If the version is correct return the signer address
    if (v != 27 && v != 28) {
      return (address(0));
    } else {
      // solium-disable-next-line arg-overflow
      return ecrecover(hash, v, r, s);
    }
  }

  /**
    * toEthSignedMessageHash
    * @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
    * and hash the result
    */
  function toSignedMessageHash(bytes32 hash)
    internal
    pure
    returns (bytes32)
  {
    return keccak256(
      abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
    );
  }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

abstract contract AccessControl is Context, IAccessControl {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

contract BreedingCore is AccessControl, Validator {
    ICollarQuest public collarQuest;
    IERC20 public GeM;
    IERC20 public TAG;
    
    event Breed(uint indexed _sireId, uint indexed _matronId, uint indexed _eggID);
    event EggHatch( uint indexed _eggID, uint indexed _sparceId);
    
    struct BreedStruct {
        address receiver;
        uint sireId;
        uint matronId;
        uint eggGene;
        uint layEggOn;
        bool isHatched;
    }
    
    struct BreedInfoStruct {
        uint breedCount;
        uint eggID;
        bool isEggHatched;
    }
    
    address public treasury;
    
    uint public hatchTime = 5 days;
    uint totalBreedCount = 7;
    uint public TAGFee;
    
    bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
    bytes32 public constant BREED_MANAGER = keccak256("BREED_MANAGER");
    
    BreedStruct[] public breedInfo;
    
    mapping(uint => BreedInfoStruct) public sparceInfo; 
    mapping(uint => uint) public breedSPLFee;
    
    modifier notBreedWhen() {
       require((address(GeM) != address(0)) && (address(TAG) != address(0)));
       _;
    }
    
    function payBreedFee( address _owner, uint _matronCount, uint _sireCount) internal {
        require(TAG.balanceOf(_owner) >= TAGFee,"BreedingCore : insufficient balance to pay TAG Fee");
        require(TAG.allowance(_owner, address(this)) >= TAGFee,"BreedingCore : insufficient allowance to pay TAG");
        require(TAG.transferFrom(_owner, treasury, TAGFee),"BreedingCore : TAG transfer failed");
        
        uint _GeMFee = breedSPLFee[_matronCount] + breedSPLFee[_sireCount];
        
        require(GeM.balanceOf(_owner) >= _GeMFee,"BreedingCore : insufficient balance to pay GeM fee");
        require(GeM.allowance(_owner, address(this)) >= _GeMFee,"BreedingCore : insufficient allowance to pay GeM fee");
        GeM.burnFrom(_owner, _GeMFee);
    }
}

contract Breeding is BreedingCore {
    
    constructor( address _breedManager, ICollarQuest _collarQuest, address _treasury) {
        _setRoleAdmin(DEFAULT_ADMIN_ROLE, ADMIN_ROLE);
        _setupRole(ADMIN_ROLE, _msgSender());
        _setupRole(BREED_MANAGER, _breedManager);
        
        treasury = _treasury;
        collarQuest = _collarQuest;

        BreedStruct memory _breedStruct;
        breedInfo.push(_breedStruct);
    }

    function setCollarQuest( ICollarQuest _collarQuest) external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        collarQuest = _collarQuest;
    }
    
    function setTotalBreedCount( uint _totalBreedCount) external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        totalBreedCount = _totalBreedCount;
    }
    
    function setHatchTime( uint _hatchTime) external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        hatchTime = _hatchTime;
    }
    
    function setTreasury( address _treasury) external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        require(_treasury != address(0),"BreedingCore : _treasury should not be a zero address");
        treasury = _treasury;
    }
    
    function setTag( IERC20 _tag) external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        require(address(_tag) != address(0), "BreedingCore : _tag should not be zero");
        TAG = _tag;
    }
    
    function setGeM( IERC20 _GeM) external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        require(address(_GeM) != address(0), "BreedingCore : _GeM should not be zero");
        GeM = _GeM;
    }
    
    function setTagFee( uint _tag) external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        require(_tag > 0,"BreedingCore : tag fee should be greater than zero");
        TAGFee = _tag;
    }
    
    function setGeMFee( uint _birthCount, uint _GeMFee) external onlyRole(getRoleAdmin(DEFAULT_ADMIN_ROLE)) {
        require((_birthCount <= totalBreedCount) && (_birthCount > 0),"BreedingCore : invalid breed count or exceed breed count");
        require(_GeMFee > 0,"BreedingCore : GeM fee should be greater than zero");
        breedSPLFee[_birthCount] = _GeMFee;
    }
    
    function breed( uint _matronId, uint _sireId, uint _gene, uint _deadLine, bytes memory _signature) external notBreedWhen {
       require(_sireId != _matronId,"BreedingCore : sireId should not be equal to matronId"); 
       require(collarQuest.ownerOf(_sireId) != address(0),"BreedingCore : invalid sireId ownership");
       require(collarQuest.ownerOf(_matronId) != address(0),"BreedingCore : invalid matronId ownership");
       require((collarQuest.ownerOf(_matronId) == _msgSender()) || (collarQuest.ownerOf(_sireId) == _msgSender()), "BreedingCore : caller is not a owner");
       require(sparceInfo[_sireId].breedCount < totalBreedCount,"BreedingCore : sireId exceed breed count");
       require(sparceInfo[_matronId].breedCount < totalBreedCount,"BreedingCore : matronId exceed breed count");
       require(!sparceInfo[_matronId].isEggHatched, "BreedingCore : matronId egg not hatched");
       require(!sparceInfo[_sireId].isEggHatched, "BreedingCore : sireId egg not hatched");
       require(_gene > 0,"BreedingCore : gene should be greater than zero");
       require(hasRole(BREED_MANAGER,validateSig(_msgSender(), _sireId, _matronId, _gene, _deadLine, _signature)),"BreedingCore : failed to verify the signature");
       
       sparceInfo[_sireId].isEggHatched = true;
       sparceInfo[_sireId].breedCount++;
       sparceInfo[_matronId].isEggHatched = true;
       sparceInfo[_matronId].breedCount++;
       
       payBreedFee(_msgSender(), sparceInfo[_sireId].breedCount, sparceInfo[_matronId].breedCount);
       
       breedInfo.push(BreedStruct({
           receiver : _msgSender(),
           sireId : _sireId,
           matronId : _matronId,
           eggGene : _gene,
           layEggOn : block.timestamp,
           isHatched : false
       }));
       
       emit Breed( _sireId,  _matronId, breedInfo.length - 1);
    }
    
    function eggsHatch( uint _eggID) external {
        BreedStruct storage _breed = breedInfo[_eggID];
        
        require((_eggID < breedInfo.length) && (_eggID > 0),"BreedingCore : invalid egg id");
        require((_breed.layEggOn+hatchTime) < block.timestamp,"BreedingCore : wait till hatch period");
        require(!_breed.isHatched,"BreedingCore : SPARC-E already assembled");
       
        sparceInfo[_breed.sireId].isEggHatched = false; 
        sparceInfo[_breed.matronId].isEggHatched = false;
        _breed.isHatched = true;
        
        uint _sparceID = collarQuest.spawnSparce(_breed.eggGene, _breed.receiver);
        sparceInfo[_sparceID].eggID = _eggID;
        
        emit EggHatch(_eggID, _sparceID);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_breedManager","type":"address"},{"internalType":"contract ICollarQuest","name":"_collarQuest","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_sireId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_matronId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_eggID","type":"uint256"}],"name":"Breed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_eggID","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_sparceId","type":"uint256"}],"name":"EggHatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BREED_MANAGER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GeM","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SIGNATURE_PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TAG","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TAGFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_matronId","type":"uint256"},{"internalType":"uint256","name":"_sireId","type":"uint256"},{"internalType":"uint256","name":"_gene","type":"uint256"},{"internalType":"uint256","name":"_deadLine","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"breed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"breedInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"sireId","type":"uint256"},{"internalType":"uint256","name":"matronId","type":"uint256"},{"internalType":"uint256","name":"eggGene","type":"uint256"},{"internalType":"uint256","name":"layEggOn","type":"uint256"},{"internalType":"bool","name":"isHatched","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"breedSPLFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collarQuest","outputs":[{"internalType":"contract ICollarQuest","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_eggID","type":"uint256"}],"name":"eggsHatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hatchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ICollarQuest","name":"_collarQuest","type":"address"}],"name":"setCollarQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_GeM","type":"address"}],"name":"setGeM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_birthCount","type":"uint256"},{"internalType":"uint256","name":"_GeMFee","type":"uint256"}],"name":"setGeMFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hatchTime","type":"uint256"}],"name":"setHatchTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_tag","type":"address"}],"name":"setTag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tag","type":"uint256"}],"name":"setTagFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalBreedCount","type":"uint256"}],"name":"setTotalBreedCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sparceInfo","outputs":[{"internalType":"uint256","name":"breedCount","type":"uint256"},{"internalType":"uint256","name":"eggID","type":"uint256"},{"internalType":"bool","name":"isEggHatched","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_sireId","type":"uint256"},{"internalType":"uint256","name":"_matronId","type":"uint256"},{"internalType":"uint256","name":"_gene","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"validateSig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405262069780600655600780553480156200001c57600080fd5b506040516200275f3803806200275f8339810160408190526200003f916200031b565b466001556200005f60006000805160206200273f83398151915262000220565b6200007a6000805160206200273f833981519152336200026b565b620000a67f1756bad288fdd37f9fdba94d04e6aa5ebf5d5f409103fbab9ba76a42777debc8846200026b565b600580546001600160a01b039283166001600160a01b03199182161790915560028054938316938216939093179092556040805160c081018252600080825260208201818152928201818152606083018281526080840183815260a0850184815260098054600181018255955294517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af6006909502948501805490991697169690961790965592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b082015591517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b183015592517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b282015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b382015590517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b4909101805460ff19169115159190911790555062000387565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6200027782826200027b565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000277576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002d73390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008060006060848603121562000330578283fd5b83516200033d816200036e565b602085015190935062000350816200036e565b604085015190925062000363816200036e565b809150509250925092565b6001600160a01b03811681146200038457600080fd5b50565b6123a880620003976000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806391d1485411610104578063d50a64aa116100a2578063f1fc877e11610071578063f1fc877e146104a2578063f465ae49146104b5578063fc18a420146104d5578063ffbc22dc146104e857600080fd5b8063d50a64aa14610456578063d547741f14610469578063e17457cf1461047c578063f0f442601461048f57600080fd5b8063a1b3c184116100de578063a1b3c1841461040b578063a217fddf1461041e578063c71d8bad14610426578063d4009ad51461042f57600080fd5b806391d1485414610393578063922c0439146103b65780639a8a05921461040257600080fd5b806336568abe1161017c57806361d027b31161014b57806361d027b31461033d5780636fa9cc291461035057806375b238fc146103635780638c7452ce1461038a57600080fd5b806336568abe146102b5578063406d4b75146102c857806347221ac7146102db5780635deb5ad5146102ee57600080fd5b806324e357bd116101b857806324e357bd1461023d5780632b15eed6146102685780632f2ff15d1461028f57806334b40f30146102a257600080fd5b80630826a2de146101df5780630a0fa82e146101f4578063248a9ca314610207575b600080fd5b6101f26101ed366004611fe4565b6104fb565b005b6101f2610202366004611fe4565b610540565b61022a6102153660046120af565b60009081526020819052604090206001015490565b6040519081526020015b60405180910390f35b61025061024b36600461201c565b6105ef565b6040516001600160a01b039091168152602001610234565b61022a7f1756bad288fdd37f9fdba94d04e6aa5ebf5d5f409103fbab9ba76a42777debc881565b6101f261029d3660046120c7565b6106d9565b6101f26102b03660046120af565b61070a565b6101f26102c33660046120c7565b610987565b600354610250906001600160a01b031681565b600454610250906001600160a01b031681565b6103206102fc3660046120af565b600a6020526000908152604090208054600182015460029092015490919060ff1683565b604080519384526020840192909252151590820152606001610234565b600554610250906001600160a01b031681565b6101f261035e3660046120af565b610a05565b61022a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61022a60085481565b6103a66103a13660046120c7565b610a2d565b6040519015158152602001610234565b6103c96103c43660046120af565b610a58565b604080516001600160a01b03909716875260208701959095529385019290925260608401526080830152151560a082015260c001610234565b61022a60015481565b6101f26104193660046120af565b610aab565b61022a600081565b61022a60065481565b61022a7fb081a9d925689b107da9acc133161b75893b20ba4893b54191729cdc59bca14281565b600254610250906001600160a01b031681565b6101f26104773660046120c7565b610b3e565b6101f261048a366004611fe4565b610b6a565b6101f261049d366004611fe4565b610c14565b6101f26104b036600461212f565b610ccd565b61022a6104c33660046120af565b600b6020526000908152604090205481565b6101f26104e33660046120af565b6114d9565b6101f26104f636600461210e565b611501565b60008080526020526000805160206123538339815191525461051d8133611625565b50600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000808052602052600080516020612353833981519152546105628133611625565b6001600160a01b0382166105cc5760405162461bcd60e51b815260206004820152602660248201527f4272656564696e67436f7265203a205f47654d2073686f756c64206e6f74206260448201526565207a65726f60d01b60648201526084015b60405180910390fd5b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b600154604080517fb081a9d925689b107da9acc133161b75893b20ba4893b54191729cdc59bca14260208083019190915260608a901b6bffffffffffffffffffffffff19168284015260548201899052607482018890526094820187905260b482019390935260d48082018690528251808303909101815260f4820183528051908401207f19457468657265756d205369676e6564204d6573736167653a0a333200000000610114830152610130808301829052835180840390910181526101509092019092528051920191909120600091906106cc8185611689565b9998505050505050505050565b6000808052602052600080516020612353833981519152546106fb8133611625565b6107058383611760565b505050565b60006009828154811061072d57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600602019050600980549050821080156107515750600082115b61079d5760405162461bcd60e51b815260206004820152601d60248201527f4272656564696e67436f7265203a20696e76616c69642065676720696400000060448201526064016105c3565b4260065482600401546107b09190612239565b1061080b5760405162461bcd60e51b815260206004820152602560248201527f4272656564696e67436f7265203a20776169742074696c6c2068617463682070604482015264195c9a5bd960da1b60648201526084016105c3565b600581015460ff16156108715760405162461bcd60e51b815260206004820152602860248201527f4272656564696e67436f7265203a2053504152432d4520616c726561647920616044820152671cdcd95b589b195960c21b60648201526084016105c3565b6001818101546000908152600a60205260408082206002908101805460ff1990811690915581860154845282842082018054821690556005860180549091169094179093559154600384015484549351630aa80aa360e41b815260048101919091526001600160a01b0393841660248201529192169063aa80aa3090604401602060405180830381600087803b15801561090a57600080fd5b505af115801561091e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094291906120f6565b6000818152600a602052604080822060010186905551919250829185917f4909f7453e3304d6bbd5281c3bb5b044984601aacd983db76569893233404bd891a3505050565b6001600160a01b03811633146109f75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016105c3565b610a0182826117e4565b5050565b600080805260205260008051602061235383398151915254610a278133611625565b50600655565b6000828152602081815260408083206001600160a01b038516845290915290205460ff165b92915050565b60098181548110610a6857600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909260ff1686565b600080805260205260008051602061235383398151915254610acd8133611625565b60008211610b385760405162461bcd60e51b815260206004820152603260248201527f4272656564696e67436f7265203a20746167206665652073686f756c642062656044820152712067726561746572207468616e207a65726f60701b60648201526084016105c3565b50600855565b600080805260205260008051602061235383398151915254610b608133611625565b61070583836117e4565b600080805260205260008051602061235383398151915254610b8c8133611625565b6001600160a01b038216610bf15760405162461bcd60e51b815260206004820152602660248201527f4272656564696e67436f7265203a205f7461672073686f756c64206e6f74206260448201526565207a65726f60d01b60648201526084016105c3565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b600080805260205260008051602061235383398151915254610c368133611625565b6001600160a01b038216610caa5760405162461bcd60e51b815260206004820152603560248201527f4272656564696e67436f7265203a205f74726561737572792073686f756c64206044820152746e6f742062652061207a65726f206164647265737360581b60648201526084016105c3565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031615801590610cf157506004546001600160a01b031615155b610cfa57600080fd5b84841415610d685760405162461bcd60e51b815260206004820152603560248201527f4272656564696e67436f7265203a207369726549642073686f756c64206e6f7460448201527408189948195c5d585b081d1bc81b585d1c9bdb9259605a1b60648201526084016105c3565b6002546040516331a9108f60e11b8152600481018690526000916001600160a01b031690636352211e9060240160206040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190612000565b6001600160a01b03161415610e4c5760405162461bcd60e51b815260206004820152602760248201527f4272656564696e67436f7265203a20696e76616c696420736972654964206f7760448201526606e6572736869760cc1b60648201526084016105c3565b6002546040516331a9108f60e11b8152600481018790526000916001600160a01b031690636352211e9060240160206040518083038186803b158015610e9157600080fd5b505afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec99190612000565b6001600160a01b03161415610f325760405162461bcd60e51b815260206004820152602960248201527f4272656564696e67436f7265203a20696e76616c6964206d6174726f6e49642060448201526806f776e6572736869760bc1b60648201526084016105c3565b336002546040516331a9108f60e11b8152600481018890526001600160a01b039283169290911690636352211e9060240160206040518083038186803b158015610f7b57600080fd5b505afa158015610f8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb39190612000565b6001600160a01b0316148061104f5750336002546040516331a9108f60e11b8152600481018790526001600160a01b039283169290911690636352211e9060240160206040518083038186803b15801561100c57600080fd5b505afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190612000565b6001600160a01b0316145b6110a75760405162461bcd60e51b8152602060048201526024808201527f4272656564696e67436f7265203a2063616c6c6572206973206e6f742061206f6044820152633bb732b960e11b60648201526084016105c3565b6007546000858152600a6020526040902054106111175760405162461bcd60e51b815260206004820152602860248201527f4272656564696e67436f7265203a20736972654964206578636565642062726560448201526719590818dbdd5b9d60c21b60648201526084016105c3565b6007546000868152600a6020526040902054106111895760405162461bcd60e51b815260206004820152602a60248201527f4272656564696e67436f7265203a206d6174726f6e49642065786365656420626044820152691c9959590818dbdd5b9d60b21b60648201526084016105c3565b6000858152600a602052604090206002015460ff16156111fb5760405162461bcd60e51b815260206004820152602760248201527f4272656564696e67436f7265203a206d6174726f6e496420656767206e6f74206044820152661a185d18da195960ca1b60648201526084016105c3565b6000848152600a602052604090206002015460ff161561126b5760405162461bcd60e51b815260206004820152602560248201527f4272656564696e67436f7265203a2073697265496420656767206e6f742068616044820152641d18da195960da1b60648201526084016105c3565b600083116112d35760405162461bcd60e51b815260206004820152602f60248201527f4272656564696e67436f7265203a2067656e652073686f756c6420626520677260448201526e6561746572207468616e207a65726f60881b60648201526084016105c3565b6113057f1756bad288fdd37f9fdba94d04e6aa5ebf5d5f409103fbab9ba76a42777debc86103a13387898888886105ef565b6113675760405162461bcd60e51b815260206004820152602d60248201527f4272656564696e67436f7265203a206661696c656420746f207665726966792060448201526c746865207369676e617475726560981b60648201526084016105c3565b6000848152600a6020526040812060028101805460ff19166001179055805491611390836122f3565b90915550506000858152600a6020526040812060028101805460ff191660011790558054916113be836122f3565b91905055506113e86113cd3390565b6000868152600a602052604080822054898352912054611849565b60096040518060c001604052806113fc3390565b6001600160a01b039081168252602080830189905260408084018b905260608085018a905242608080870191909152600060a0968701819052885460018082018b5599825290859020885160069092020180546001600160a01b031916919096161785559286015184880155908501516002840155840151600383015583015160048201559101516005909101805460ff19169115159190911790556009546114a59190612295565b604051869086907f9ca383290f66cf05e07fed022366cb0e56f67485387cbc0a5911e8c6fc80455390600090a45050505050565b6000808052602052600080516020612353833981519152546114fb8133611625565b50600755565b6000808052602052600080516020612353833981519152546115238133611625565b60075483111580156115355750600083115b6115a75760405162461bcd60e51b815260206004820152603860248201527f4272656564696e67436f7265203a20696e76616c696420627265656420636f7560448201527f6e74206f722065786365656420627265656420636f756e74000000000000000060648201526084016105c3565b600082116116125760405162461bcd60e51b815260206004820152603260248201527f4272656564696e67436f7265203a2047654d206665652073686f756c642062656044820152712067726561746572207468616e207a65726f60701b60648201526084016105c3565b506000918252600b602052604090912055565b61162f8282610a2d565b610a0157611647816001600160a01b03166014611d74565b611652836020611d74565b604051602001611663929190612191565b60408051601f198184030181529082905262461bcd60e51b82526105c391600401612206565b60008060008084516041146116a45760009350505050610a52565b50505060208201516040830151606084015160001a601b8110156116d0576116cd601b82612251565b90505b8060ff16601b141580156116e857508060ff16601c14155b156116f95760009350505050610a52565b60408051600081526020810180835288905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa15801561174c573d6000803e3d6000fd5b505050602060405103519350505050610a52565b61176a8282610a2d565b610a01576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556117a03390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6117ee8282610a2d565b15610a01576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600854600480546040516370a0823160e01b81526001600160a01b03878116938201939093529116906370a082319060240160206040518083038186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb91906120f6565b10156119345760405162461bcd60e51b815260206004820152603260248201527f4272656564696e67436f7265203a20696e73756666696369656e742062616c616044820152716e636520746f20706179205441472046656560701b60648201526084016105c3565b60085460048054604051636eb1769f60e11b81526001600160a01b038781169382019390935230602482015291169063dd62ed3e9060440160206040518083038186803b15801561198457600080fd5b505afa158015611998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bc91906120f6565b1015611a235760405162461bcd60e51b815260206004820152603060248201527f4272656564696e67436f7265203a20696e73756666696369656e7420616c6c6f60448201526f77616e636520746f207061792054414760801b60648201526084016105c3565b600480546005546008546040516323b872dd60e01b81526001600160a01b0388811695820195909552918416602483015260448201529116906323b872dd90606401602060405180830381600087803b158015611a7f57600080fd5b505af1158015611a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab7919061208f565b611b0e5760405162461bcd60e51b815260206004820152602260248201527f4272656564696e67436f7265203a20544147207472616e73666572206661696c604482015261195960f21b60648201526084016105c3565b6000818152600b60205260408082205484835290822054611b2f9190612239565b6003546040516370a0823160e01b81526001600160a01b0387811660048301529293508392909116906370a082319060240160206040518083038186803b158015611b7957600080fd5b505afa158015611b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb191906120f6565b1015611c1a5760405162461bcd60e51b815260206004820152603260248201527f4272656564696e67436f7265203a20696e73756666696369656e742062616c616044820152716e636520746f207061792047654d2066656560701b60648201526084016105c3565b600354604051636eb1769f60e11b81526001600160a01b0386811660048301523060248301528392169063dd62ed3e9060440160206040518083038186803b158015611c6557600080fd5b505afa158015611c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9d91906120f6565b1015611d085760405162461bcd60e51b815260206004820152603460248201527f4272656564696e67436f7265203a20696e73756666696369656e7420616c6c6f60448201527377616e636520746f207061792047654d2066656560601b60648201526084016105c3565b60035460405163079cc67960e41b81526001600160a01b03868116600483015260248201849052909116906379cc679090604401600060405180830381600087803b158015611d5657600080fd5b505af1158015611d6a573d6000803e3d6000fd5b5050505050505050565b60606000611d83836002612276565b611d8e906002612239565b67ffffffffffffffff811115611db457634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611dde576020820181803683370190505b509050600360fc1b81600081518110611e0757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611e4457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611e68846002612276565b611e73906001612239565b90505b6001811115611f07576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611eb557634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611ed957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611f00816122dc565b9050611e76565b508315611f565760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105c3565b9392505050565b600082601f830112611f6d578081fd5b813567ffffffffffffffff80821115611f8857611f88612324565b604051601f8301601f19908116603f01168101908282118183101715611fb057611fb0612324565b81604052838152866020858801011115611fc8578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215611ff5578081fd5b8135611f568161233a565b600060208284031215612011578081fd5b8151611f568161233a565b60008060008060008060c08789031215612034578182fd5b863561203f8161233a565b95506020870135945060408701359350606087013592506080870135915060a087013567ffffffffffffffff811115612076578182fd5b61208289828a01611f5d565b9150509295509295509295565b6000602082840312156120a0578081fd5b81518015158114611f56578182fd5b6000602082840312156120c0578081fd5b5035919050565b600080604083850312156120d9578182fd5b8235915060208301356120eb8161233a565b809150509250929050565b600060208284031215612107578081fd5b5051919050565b60008060408385031215612120578182fd5b50508035926020909101359150565b600080600080600060a08688031215612146578081fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115612178578182fd5b61218488828901611f5d565b9150509295509295909350565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516121c98160178501602088016122ac565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516121fa8160288401602088016122ac565b01602801949350505050565b60208152600082518060208401526122258160408501602087016122ac565b601f01601f19169190910160400192915050565b6000821982111561224c5761224c61230e565b500190565b600060ff821660ff84168060ff0382111561226e5761226e61230e565b019392505050565b60008160001904831182151516156122905761229061230e565b500290565b6000828210156122a7576122a761230e565b500390565b60005b838110156122c75781810151838201526020016122af565b838111156122d6576000848401525b50505050565b6000816122eb576122eb61230e565b506000190190565b60006000198214156123075761230761230e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461234f57600080fd5b5056fead3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb6a26469706673582212208a3286cd11e8223cbd958ae9ae06bd51d74883ef38e3d0501a277e3bad27297064736f6c63430008040033a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217750000000000000000000000007d8ece5ab6ee7be75f64d154d076d8f7080a6aca000000000000000000000000674900b8fd8ee1b487d162d04c59300222d904660000000000000000000000003a91ece2a4dabd5f9f8086c2161d7d3edd3c8eb7

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101da5760003560e01c806391d1485411610104578063d50a64aa116100a2578063f1fc877e11610071578063f1fc877e146104a2578063f465ae49146104b5578063fc18a420146104d5578063ffbc22dc146104e857600080fd5b8063d50a64aa14610456578063d547741f14610469578063e17457cf1461047c578063f0f442601461048f57600080fd5b8063a1b3c184116100de578063a1b3c1841461040b578063a217fddf1461041e578063c71d8bad14610426578063d4009ad51461042f57600080fd5b806391d1485414610393578063922c0439146103b65780639a8a05921461040257600080fd5b806336568abe1161017c57806361d027b31161014b57806361d027b31461033d5780636fa9cc291461035057806375b238fc146103635780638c7452ce1461038a57600080fd5b806336568abe146102b5578063406d4b75146102c857806347221ac7146102db5780635deb5ad5146102ee57600080fd5b806324e357bd116101b857806324e357bd1461023d5780632b15eed6146102685780632f2ff15d1461028f57806334b40f30146102a257600080fd5b80630826a2de146101df5780630a0fa82e146101f4578063248a9ca314610207575b600080fd5b6101f26101ed366004611fe4565b6104fb565b005b6101f2610202366004611fe4565b610540565b61022a6102153660046120af565b60009081526020819052604090206001015490565b6040519081526020015b60405180910390f35b61025061024b36600461201c565b6105ef565b6040516001600160a01b039091168152602001610234565b61022a7f1756bad288fdd37f9fdba94d04e6aa5ebf5d5f409103fbab9ba76a42777debc881565b6101f261029d3660046120c7565b6106d9565b6101f26102b03660046120af565b61070a565b6101f26102c33660046120c7565b610987565b600354610250906001600160a01b031681565b600454610250906001600160a01b031681565b6103206102fc3660046120af565b600a6020526000908152604090208054600182015460029092015490919060ff1683565b604080519384526020840192909252151590820152606001610234565b600554610250906001600160a01b031681565b6101f261035e3660046120af565b610a05565b61022a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61022a60085481565b6103a66103a13660046120c7565b610a2d565b6040519015158152602001610234565b6103c96103c43660046120af565b610a58565b604080516001600160a01b03909716875260208701959095529385019290925260608401526080830152151560a082015260c001610234565b61022a60015481565b6101f26104193660046120af565b610aab565b61022a600081565b61022a60065481565b61022a7fb081a9d925689b107da9acc133161b75893b20ba4893b54191729cdc59bca14281565b600254610250906001600160a01b031681565b6101f26104773660046120c7565b610b3e565b6101f261048a366004611fe4565b610b6a565b6101f261049d366004611fe4565b610c14565b6101f26104b036600461212f565b610ccd565b61022a6104c33660046120af565b600b6020526000908152604090205481565b6101f26104e33660046120af565b6114d9565b6101f26104f636600461210e565b611501565b60008080526020526000805160206123538339815191525461051d8133611625565b50600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000808052602052600080516020612353833981519152546105628133611625565b6001600160a01b0382166105cc5760405162461bcd60e51b815260206004820152602660248201527f4272656564696e67436f7265203a205f47654d2073686f756c64206e6f74206260448201526565207a65726f60d01b60648201526084015b60405180910390fd5b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b600154604080517fb081a9d925689b107da9acc133161b75893b20ba4893b54191729cdc59bca14260208083019190915260608a901b6bffffffffffffffffffffffff19168284015260548201899052607482018890526094820187905260b482019390935260d48082018690528251808303909101815260f4820183528051908401207f19457468657265756d205369676e6564204d6573736167653a0a333200000000610114830152610130808301829052835180840390910181526101509092019092528051920191909120600091906106cc8185611689565b9998505050505050505050565b6000808052602052600080516020612353833981519152546106fb8133611625565b6107058383611760565b505050565b60006009828154811061072d57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600602019050600980549050821080156107515750600082115b61079d5760405162461bcd60e51b815260206004820152601d60248201527f4272656564696e67436f7265203a20696e76616c69642065676720696400000060448201526064016105c3565b4260065482600401546107b09190612239565b1061080b5760405162461bcd60e51b815260206004820152602560248201527f4272656564696e67436f7265203a20776169742074696c6c2068617463682070604482015264195c9a5bd960da1b60648201526084016105c3565b600581015460ff16156108715760405162461bcd60e51b815260206004820152602860248201527f4272656564696e67436f7265203a2053504152432d4520616c726561647920616044820152671cdcd95b589b195960c21b60648201526084016105c3565b6001818101546000908152600a60205260408082206002908101805460ff1990811690915581860154845282842082018054821690556005860180549091169094179093559154600384015484549351630aa80aa360e41b815260048101919091526001600160a01b0393841660248201529192169063aa80aa3090604401602060405180830381600087803b15801561090a57600080fd5b505af115801561091e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094291906120f6565b6000818152600a602052604080822060010186905551919250829185917f4909f7453e3304d6bbd5281c3bb5b044984601aacd983db76569893233404bd891a3505050565b6001600160a01b03811633146109f75760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016105c3565b610a0182826117e4565b5050565b600080805260205260008051602061235383398151915254610a278133611625565b50600655565b6000828152602081815260408083206001600160a01b038516845290915290205460ff165b92915050565b60098181548110610a6857600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909260ff1686565b600080805260205260008051602061235383398151915254610acd8133611625565b60008211610b385760405162461bcd60e51b815260206004820152603260248201527f4272656564696e67436f7265203a20746167206665652073686f756c642062656044820152712067726561746572207468616e207a65726f60701b60648201526084016105c3565b50600855565b600080805260205260008051602061235383398151915254610b608133611625565b61070583836117e4565b600080805260205260008051602061235383398151915254610b8c8133611625565b6001600160a01b038216610bf15760405162461bcd60e51b815260206004820152602660248201527f4272656564696e67436f7265203a205f7461672073686f756c64206e6f74206260448201526565207a65726f60d01b60648201526084016105c3565b50600480546001600160a01b0319166001600160a01b0392909216919091179055565b600080805260205260008051602061235383398151915254610c368133611625565b6001600160a01b038216610caa5760405162461bcd60e51b815260206004820152603560248201527f4272656564696e67436f7265203a205f74726561737572792073686f756c64206044820152746e6f742062652061207a65726f206164647265737360581b60648201526084016105c3565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b031615801590610cf157506004546001600160a01b031615155b610cfa57600080fd5b84841415610d685760405162461bcd60e51b815260206004820152603560248201527f4272656564696e67436f7265203a207369726549642073686f756c64206e6f7460448201527408189948195c5d585b081d1bc81b585d1c9bdb9259605a1b60648201526084016105c3565b6002546040516331a9108f60e11b8152600481018690526000916001600160a01b031690636352211e9060240160206040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190612000565b6001600160a01b03161415610e4c5760405162461bcd60e51b815260206004820152602760248201527f4272656564696e67436f7265203a20696e76616c696420736972654964206f7760448201526606e6572736869760cc1b60648201526084016105c3565b6002546040516331a9108f60e11b8152600481018790526000916001600160a01b031690636352211e9060240160206040518083038186803b158015610e9157600080fd5b505afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec99190612000565b6001600160a01b03161415610f325760405162461bcd60e51b815260206004820152602960248201527f4272656564696e67436f7265203a20696e76616c6964206d6174726f6e49642060448201526806f776e6572736869760bc1b60648201526084016105c3565b336002546040516331a9108f60e11b8152600481018890526001600160a01b039283169290911690636352211e9060240160206040518083038186803b158015610f7b57600080fd5b505afa158015610f8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb39190612000565b6001600160a01b0316148061104f5750336002546040516331a9108f60e11b8152600481018790526001600160a01b039283169290911690636352211e9060240160206040518083038186803b15801561100c57600080fd5b505afa158015611020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110449190612000565b6001600160a01b0316145b6110a75760405162461bcd60e51b8152602060048201526024808201527f4272656564696e67436f7265203a2063616c6c6572206973206e6f742061206f6044820152633bb732b960e11b60648201526084016105c3565b6007546000858152600a6020526040902054106111175760405162461bcd60e51b815260206004820152602860248201527f4272656564696e67436f7265203a20736972654964206578636565642062726560448201526719590818dbdd5b9d60c21b60648201526084016105c3565b6007546000868152600a6020526040902054106111895760405162461bcd60e51b815260206004820152602a60248201527f4272656564696e67436f7265203a206d6174726f6e49642065786365656420626044820152691c9959590818dbdd5b9d60b21b60648201526084016105c3565b6000858152600a602052604090206002015460ff16156111fb5760405162461bcd60e51b815260206004820152602760248201527f4272656564696e67436f7265203a206d6174726f6e496420656767206e6f74206044820152661a185d18da195960ca1b60648201526084016105c3565b6000848152600a602052604090206002015460ff161561126b5760405162461bcd60e51b815260206004820152602560248201527f4272656564696e67436f7265203a2073697265496420656767206e6f742068616044820152641d18da195960da1b60648201526084016105c3565b600083116112d35760405162461bcd60e51b815260206004820152602f60248201527f4272656564696e67436f7265203a2067656e652073686f756c6420626520677260448201526e6561746572207468616e207a65726f60881b60648201526084016105c3565b6113057f1756bad288fdd37f9fdba94d04e6aa5ebf5d5f409103fbab9ba76a42777debc86103a13387898888886105ef565b6113675760405162461bcd60e51b815260206004820152602d60248201527f4272656564696e67436f7265203a206661696c656420746f207665726966792060448201526c746865207369676e617475726560981b60648201526084016105c3565b6000848152600a6020526040812060028101805460ff19166001179055805491611390836122f3565b90915550506000858152600a6020526040812060028101805460ff191660011790558054916113be836122f3565b91905055506113e86113cd3390565b6000868152600a602052604080822054898352912054611849565b60096040518060c001604052806113fc3390565b6001600160a01b039081168252602080830189905260408084018b905260608085018a905242608080870191909152600060a0968701819052885460018082018b5599825290859020885160069092020180546001600160a01b031916919096161785559286015184880155908501516002840155840151600383015583015160048201559101516005909101805460ff19169115159190911790556009546114a59190612295565b604051869086907f9ca383290f66cf05e07fed022366cb0e56f67485387cbc0a5911e8c6fc80455390600090a45050505050565b6000808052602052600080516020612353833981519152546114fb8133611625565b50600755565b6000808052602052600080516020612353833981519152546115238133611625565b60075483111580156115355750600083115b6115a75760405162461bcd60e51b815260206004820152603860248201527f4272656564696e67436f7265203a20696e76616c696420627265656420636f7560448201527f6e74206f722065786365656420627265656420636f756e74000000000000000060648201526084016105c3565b600082116116125760405162461bcd60e51b815260206004820152603260248201527f4272656564696e67436f7265203a2047654d206665652073686f756c642062656044820152712067726561746572207468616e207a65726f60701b60648201526084016105c3565b506000918252600b602052604090912055565b61162f8282610a2d565b610a0157611647816001600160a01b03166014611d74565b611652836020611d74565b604051602001611663929190612191565b60408051601f198184030181529082905262461bcd60e51b82526105c391600401612206565b60008060008084516041146116a45760009350505050610a52565b50505060208201516040830151606084015160001a601b8110156116d0576116cd601b82612251565b90505b8060ff16601b141580156116e857508060ff16601c14155b156116f95760009350505050610a52565b60408051600081526020810180835288905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa15801561174c573d6000803e3d6000fd5b505050602060405103519350505050610a52565b61176a8282610a2d565b610a01576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556117a03390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6117ee8282610a2d565b15610a01576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600854600480546040516370a0823160e01b81526001600160a01b03878116938201939093529116906370a082319060240160206040518083038186803b15801561189357600080fd5b505afa1580156118a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cb91906120f6565b10156119345760405162461bcd60e51b815260206004820152603260248201527f4272656564696e67436f7265203a20696e73756666696369656e742062616c616044820152716e636520746f20706179205441472046656560701b60648201526084016105c3565b60085460048054604051636eb1769f60e11b81526001600160a01b038781169382019390935230602482015291169063dd62ed3e9060440160206040518083038186803b15801561198457600080fd5b505afa158015611998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119bc91906120f6565b1015611a235760405162461bcd60e51b815260206004820152603060248201527f4272656564696e67436f7265203a20696e73756666696369656e7420616c6c6f60448201526f77616e636520746f207061792054414760801b60648201526084016105c3565b600480546005546008546040516323b872dd60e01b81526001600160a01b0388811695820195909552918416602483015260448201529116906323b872dd90606401602060405180830381600087803b158015611a7f57600080fd5b505af1158015611a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab7919061208f565b611b0e5760405162461bcd60e51b815260206004820152602260248201527f4272656564696e67436f7265203a20544147207472616e73666572206661696c604482015261195960f21b60648201526084016105c3565b6000818152600b60205260408082205484835290822054611b2f9190612239565b6003546040516370a0823160e01b81526001600160a01b0387811660048301529293508392909116906370a082319060240160206040518083038186803b158015611b7957600080fd5b505afa158015611b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb191906120f6565b1015611c1a5760405162461bcd60e51b815260206004820152603260248201527f4272656564696e67436f7265203a20696e73756666696369656e742062616c616044820152716e636520746f207061792047654d2066656560701b60648201526084016105c3565b600354604051636eb1769f60e11b81526001600160a01b0386811660048301523060248301528392169063dd62ed3e9060440160206040518083038186803b158015611c6557600080fd5b505afa158015611c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9d91906120f6565b1015611d085760405162461bcd60e51b815260206004820152603460248201527f4272656564696e67436f7265203a20696e73756666696369656e7420616c6c6f60448201527377616e636520746f207061792047654d2066656560601b60648201526084016105c3565b60035460405163079cc67960e41b81526001600160a01b03868116600483015260248201849052909116906379cc679090604401600060405180830381600087803b158015611d5657600080fd5b505af1158015611d6a573d6000803e3d6000fd5b5050505050505050565b60606000611d83836002612276565b611d8e906002612239565b67ffffffffffffffff811115611db457634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611dde576020820181803683370190505b509050600360fc1b81600081518110611e0757634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611e4457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000611e68846002612276565b611e73906001612239565b90505b6001811115611f07576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611eb557634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110611ed957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93611f00816122dc565b9050611e76565b508315611f565760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105c3565b9392505050565b600082601f830112611f6d578081fd5b813567ffffffffffffffff80821115611f8857611f88612324565b604051601f8301601f19908116603f01168101908282118183101715611fb057611fb0612324565b81604052838152866020858801011115611fc8578485fd5b8360208701602083013792830160200193909352509392505050565b600060208284031215611ff5578081fd5b8135611f568161233a565b600060208284031215612011578081fd5b8151611f568161233a565b60008060008060008060c08789031215612034578182fd5b863561203f8161233a565b95506020870135945060408701359350606087013592506080870135915060a087013567ffffffffffffffff811115612076578182fd5b61208289828a01611f5d565b9150509295509295509295565b6000602082840312156120a0578081fd5b81518015158114611f56578182fd5b6000602082840312156120c0578081fd5b5035919050565b600080604083850312156120d9578182fd5b8235915060208301356120eb8161233a565b809150509250929050565b600060208284031215612107578081fd5b5051919050565b60008060408385031215612120578182fd5b50508035926020909101359150565b600080600080600060a08688031215612146578081fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115612178578182fd5b61218488828901611f5d565b9150509295509295909350565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516121c98160178501602088016122ac565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516121fa8160288401602088016122ac565b01602801949350505050565b60208152600082518060208401526122258160408501602087016122ac565b601f01601f19169190910160400192915050565b6000821982111561224c5761224c61230e565b500190565b600060ff821660ff84168060ff0382111561226e5761226e61230e565b019392505050565b60008160001904831182151516156122905761229061230e565b500290565b6000828210156122a7576122a761230e565b500390565b60005b838110156122c75781810151838201526020016122af565b838111156122d6576000848401525b50505050565b6000816122eb576122eb61230e565b506000190190565b60006000198214156123075761230761230e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461234f57600080fd5b5056fead3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb6a26469706673582212208a3286cd11e8223cbd958ae9ae06bd51d74883ef38e3d0501a277e3bad27297064736f6c63430008040033

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

0000000000000000000000007d8ece5ab6ee7be75f64d154d076d8f7080a6aca000000000000000000000000674900b8fd8ee1b487d162d04c59300222d904660000000000000000000000003a91ece2a4dabd5f9f8086c2161d7d3edd3c8eb7

-----Decoded View---------------
Arg [0] : _breedManager (address): 0x7d8ECe5Ab6eE7Be75f64D154d076d8F7080A6AcA
Arg [1] : _collarQuest (address): 0x674900B8fD8EE1B487d162d04C59300222D90466
Arg [2] : _treasury (address): 0x3a91Ece2a4Dabd5f9f8086c2161D7D3EDD3C8eb7

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007d8ece5ab6ee7be75f64d154d076d8f7080a6aca
Arg [1] : 000000000000000000000000674900b8fd8ee1b487d162d04c59300222d90466
Arg [2] : 0000000000000000000000003a91ece2a4dabd5f9f8086c2161d7d3edd3c8eb7


Deployed Bytecode Sourcemap

20981:4847:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21441:149;;;;;;:::i;:::-;;:::i;:::-;;22371:200;;;;;;:::i;:::-;;:::i;15782:123::-;;;;;;:::i;:::-;15848:7;15875:12;;;;;;;;;;:22;;;;15782:123;;;;8595:25:1;;;8583:2;8568:18;15782:123:0;;;;;;;;9806:540;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6669:32:1;;;6651:51;;6639:2;6624:18;9806:540:0;6606:102:1;19832:66:0;;19872:26;19832:66;;16167:161;;;;;;:::i;:::-;;:::i;25074:751::-;;;;;;:::i;:::-;;:::i;17243:218::-;;;;;;:::i;:::-;;:::i;19116:17::-;;;;;-1:-1:-1;;;;;19116:17:0;;;19140;;;;;-1:-1:-1;;;;;19140:17:0;;;19954:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21166:25:1;;;21222:2;21207:18;;21200:34;;;;21277:14;21270:22;21250:18;;;21243:50;21154:2;21139:18;19954:50:0;21121:178:1;19630:23:0;;;;;-1:-1:-1;;;;;19630:23:0;;;21771:133;;;;;;:::i;:::-;;:::i;19765:60::-;;19802:23;19765:60;;19734:18;;;;;;14667:139;;;;;;:::i;:::-;;:::i;:::-;;;8422:14:1;;8415:22;8397:41;;8385:2;8370:18;14667:139:0;8352:92:1;19911:30:0;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;7980:32:1;;;7962:51;;8044:2;8029:18;;8022:34;;;;8072:18;;;8065:34;;;;8130:2;8115:18;;8108:34;8173:3;8158:19;;8151:35;8230:14;8223:22;8000:3;8202:19;;8195:51;7949:3;7934:19;19911:30:0;7916:336:1;9575:19:0;;;;;;22583:196;;;;;;:::i;:::-;;:::i;14034:49::-;;14079:4;14034:49;;19666:30;;;;;;9394:174;;9446:122;9394:174;;19078:31;;;;;-1:-1:-1;;;;;19078:31:0;;;16573:163;;;;;;:::i;:::-;;:::i;22159:200::-;;;;;;:::i;:::-;;:::i;21916:231::-;;;;;;:::i;:::-;;:::i;23176:1886::-;;;;;;:::i;:::-;;:::i;20012:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;21602:157;;;;;;:::i;:::-;;:::i;22791:373::-;;;;;;:::i;:::-;;:::i;21441:149::-;14079:4;15875:12;;;;;-1:-1:-1;;;;;;;;;;;15875:22:0;14525:30;14536:4;9225:10;14525;:30::i;:::-;-1:-1:-1;21556:11:0::1;:26:::0;;-1:-1:-1;;;;;;21556:26:0::1;-1:-1:-1::0;;;;;21556:26:0;;;::::1;::::0;;;::::1;::::0;;21441:149::o;22371:200::-;14079:4;15875:12;;;;;-1:-1:-1;;;;;;;;;;;15875:22:0;14525:30;14536:4;9225:10;14525;:30::i;:::-;-1:-1:-1;;;;;22472:27:0;::::1;22464:78;;;::::0;-1:-1:-1;;;22464:78:0;;16635:2:1;22464:78:0::1;::::0;::::1;16617:21:1::0;16674:2;16654:18;;;16647:30;16713:34;16693:18;;;16686:62;-1:-1:-1;;;16764:18:1;;;16757:36;16810:19;;22464:78:0::1;;;;;;;;;-1:-1:-1::0;22553:3:0::1;:10:::0;;-1:-1:-1;;;;;;22553:10:0::1;-1:-1:-1::0;;;;;22553:10:0;;;::::1;::::0;;;::::1;::::0;;22371:200::o;9806:540::-;10140:7;;10061:98;;;9446:122;10061:98;;;;4998:19:1;;;;5055:2;5051:15;;;-1:-1:-1;;5047:53:1;5033:12;;;5026:75;5117:12;;;5110:28;;;5154:12;;;5147:28;;;5191:13;;;5184:29;;;5229:13;;;5222:29;;;;5267:13;;;;5260:29;;;10061:98:0;;;;;;;;;;5305:13:1;;;10061:98:0;;10051:109;;;;;;5571:66:1;11788:58:0;;;5559:79:1;5654:12;;;;5647:28;;;11788:58:0;;;;;;;;;;5691:12:1;;;;11788:58:0;;;11770:83;;;;;;;;-1:-1:-1;;10051:109:0;10308:30;10169:48;10328:9;10308:19;:30::i;:::-;10301:37;9806:540;-1:-1:-1;;;;;;;;;9806:540:0:o;16167:161::-;14079:4;15875:12;;;;;-1:-1:-1;;;;;;;;;;;15875:22:0;14525:30;14536:4;9225:10;14525;:30::i;:::-;16295:25:::1;16306:4;16312:7;16295:10;:25::i;:::-;16167:161:::0;;;:::o;25074:751::-;25127:26;25156:9;25166:6;25156:17;;;;;;-1:-1:-1;;;25156:17:0;;;;;;;;;;;;;;;;;;;25127:46;;25212:9;:16;;;;25203:6;:25;25202:43;;;;;25243:1;25234:6;:10;25202:43;25194:84;;;;-1:-1:-1;;;25194:84:0;;20353:2:1;25194:84:0;;;20335:21:1;20392:2;20372:18;;;20365:30;20431:31;20411:18;;;20404:59;20480:18;;25194:84:0;20325:179:1;25194:84:0;25327:15;25314:9;;25298:6;:15;;;:25;;;;:::i;:::-;25297:45;25289:94;;;;-1:-1:-1;;;25289:94:0;;18289:2:1;25289:94:0;;;18271:21:1;18328:2;18308:18;;;18301:30;18367:34;18347:18;;;18340:62;-1:-1:-1;;;18418:18:1;;;18411:35;18463:19;;25289:94:0;18261:227:1;25289:94:0;25403:16;;;;;;25402:17;25394:69;;;;-1:-1:-1;;;25394:69:0;;15402:2:1;25394:69:0;;;15384:21:1;15441:2;15421:18;;;15414:30;15480:34;15460:18;;;15453:62;-1:-1:-1;;;15531:18:1;;;15524:38;15579:19;;25394:69:0;15374:230:1;25394:69:0;25494:13;;;;;25524:5;25483:25;;;:10;:25;;;;;;:38;;;;:46;;-1:-1:-1;;25483:46:0;;;;;;25552:15;;;;25541:27;;;;;:40;;:48;;;;;;25600:16;;;:23;;;;;;;;;;;25661:11;;25685:14;;;;25701:15;;25661:56;;-1:-1:-1;;;25661:56:0;;;;;20865:25:1;;;;-1:-1:-1;;;;;25701:15:0;;;20906:18:1;;;20899:60;25524:5:0;;25661:11;;:23;;20838:18:1;;25661:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25728:21;;;;:10;:21;;;;;;:27;;:36;;;25790:27;25644:73;;-1:-1:-1;25644:73:0;;25758:6;;25790:27;;;25074:751;;;:::o;17243:218::-;-1:-1:-1;;;;;17339:23:0;;9225:10;17339:23;17331:83;;;;-1:-1:-1;;;17331:83:0;;19937:2:1;17331:83:0;;;19919:21:1;19976:2;19956:18;;;19949:30;20015:34;19995:18;;;19988:62;-1:-1:-1;;;20066:18:1;;;20059:45;20121:19;;17331:83:0;19909:237:1;17331:83:0;17427:26;17439:4;17445:7;17427:11;:26::i;:::-;17243:218;;:::o;21771:133::-;14079:4;15875:12;;;;;-1:-1:-1;;;;;;;;;;;15875:22:0;14525:30;14536:4;9225:10;14525;:30::i;:::-;-1:-1:-1;21874:9:0::1;:22:::0;21771:133::o;14667:139::-;14745:4;14769:12;;;;;;;;;;;-1:-1:-1;;;;;14769:29:0;;;;;;;;;;;;14667:139;;;;;:::o;19911:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19911:30:0;;;;-1:-1:-1;19911:30:0;;;;;;;:::o;22583:196::-;14079:4;15875:12;;;;;-1:-1:-1;;;;;;;;;;;15875:22:0;14525:30;14536:4;9225:10;14525;:30::i;:::-;22692:1:::1;22685:4;:8;22677:70;;;::::0;-1:-1:-1;;;22677:70:0;;11259:2:1;22677:70:0::1;::::0;::::1;11241:21:1::0;11298:2;11278:18;;;11271:30;11337:34;11317:18;;;11310:62;-1:-1:-1;;;11388:18:1;;;11381:48;11446:19;;22677:70:0::1;11231:240:1::0;22677:70:0::1;-1:-1:-1::0;22758:6:0::1;:13:::0;22583:196::o;16573:163::-;14079:4;15875:12;;;;;-1:-1:-1;;;;;;;;;;;15875:22:0;14525:30;14536:4;9225:10;14525;:30::i;:::-;16702:26:::1;16714:4;16720:7;16702:11;:26::i;22159:200::-:0;14079:4;15875:12;;;;;-1:-1:-1;;;;;;;;;;;15875:22:0;14525:30;14536:4;9225:10;14525;:30::i;:::-;-1:-1:-1;;;;;22260:27:0;::::1;22252:78;;;::::0;-1:-1:-1;;;22252:78:0;;15811:2:1;22252:78:0::1;::::0;::::1;15793:21:1::0;15850:2;15830:18;;;15823:30;15889:34;15869:18;;;15862:62;-1:-1:-1;;;15940:18:1;;;15933:36;15986:19;;22252:78:0::1;15783:228:1::0;22252:78:0::1;-1:-1:-1::0;22341:3:0::1;:10:::0;;-1:-1:-1;;;;;;22341:10:0::1;-1:-1:-1::0;;;;;22341:10:0;;;::::1;::::0;;;::::1;::::0;;22159:200::o;21916:231::-;14079:4;15875:12;;;;;-1:-1:-1;;;;;;;;;;;15875:22:0;14525:30;14536:4;9225:10;14525;:30::i;:::-;-1:-1:-1;;;;;22028:23:0;::::1;22020:88;;;::::0;-1:-1:-1;;;22020:88:0;;12912:2:1;22020:88:0::1;::::0;::::1;12894:21:1::0;12951:2;12931:18;;;12924:30;12990:34;12970:18;;;12963:62;-1:-1:-1;;;13041:18:1;;;13034:51;13102:19;;22020:88:0::1;12884:243:1::0;22020:88:0::1;-1:-1:-1::0;22119:8:0::1;:20:::0;;-1:-1:-1;;;;;;22119:20:0::1;-1:-1:-1::0;;;;;22119:20:0;;;::::1;::::0;;;::::1;::::0;;21916:231::o;23176:1886::-;20116:3;;-1:-1:-1;;;;;20116:3:0;20108:26;;;;20107:60;;-1:-1:-1;20148:3:0;;-1:-1:-1;;;;;20148:3:0;20140:26;;20107:60;20099:69;;;;;;23326:9:::1;23315:7;:20;;23307:85;;;::::0;-1:-1:-1;;;23307:85:0;;14559:2:1;23307:85:0::1;::::0;::::1;14541:21:1::0;14598:2;14578:18;;;14571:30;14637:34;14617:18;;;14610:62;-1:-1:-1;;;14688:18:1;;;14681:51;14749:19;;23307:85:0::1;14531:243:1::0;23307:85:0::1;23411:11;::::0;:28:::1;::::0;-1:-1:-1;;;23411:28:0;;::::1;::::0;::::1;8595:25:1::0;;;23451:1:0::1;::::0;-1:-1:-1;;;;;23411:11:0::1;::::0;:19:::1;::::0;8568:18:1;;23411:28:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23411:42:0::1;;;23403:93;;;::::0;-1:-1:-1;;;23403:93:0;;13745:2:1;23403:93:0::1;::::0;::::1;13727:21:1::0;13784:2;13764:18;;;13757:30;13823:34;13803:18;;;13796:62;-1:-1:-1;;;13874:18:1;;;13867:37;13921:19;;23403:93:0::1;13717:229:1::0;23403:93:0::1;23514:11;::::0;:30:::1;::::0;-1:-1:-1;;;23514:30:0;;::::1;::::0;::::1;8595:25:1::0;;;23556:1:0::1;::::0;-1:-1:-1;;;;;23514:11:0::1;::::0;:19:::1;::::0;8568:18:1;;23514:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23514:44:0::1;;;23506:97;;;::::0;-1:-1:-1;;;23506:97:0;;12086:2:1;23506:97:0::1;::::0;::::1;12068:21:1::0;12125:2;12105:18;;;12098:30;12164:34;12144:18;;;12137:62;-1:-1:-1;;;12215:18:1;;;12208:39;12264:19;;23506:97:0::1;12058:231:1::0;23506:97:0::1;9225:10:::0;23622:11:::1;::::0;:30:::1;::::0;-1:-1:-1;;;23622:30:0;;::::1;::::0;::::1;8595:25:1::0;;;-1:-1:-1;;;;;23622:46:0;;::::1;::::0;:11;;::::1;::::0;:19:::1;::::0;8568:18:1;;23622:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23622:46:0::1;;23621:98;;;-1:-1:-1::0;9225:10:0;23674:11:::1;::::0;:28:::1;::::0;-1:-1:-1;;;23674:28:0;;::::1;::::0;::::1;8595:25:1::0;;;-1:-1:-1;;;;;23674:44:0;;::::1;::::0;:11;;::::1;::::0;:19:::1;::::0;8568:18:1;;23674:28:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23674:44:0::1;;23621:98;23613:147;;;::::0;-1:-1:-1;;;23613:147:0;;10435:2:1;23613:147:0::1;::::0;::::1;10417:21:1::0;10474:2;10454:18;;;10447:30;10513:34;10493:18;;;10486:62;-1:-1:-1;;;10564:18:1;;;10557:34;10608:19;;23613:147:0::1;10407:226:1::0;23613:147:0::1;23811:15;::::0;23778:19:::1;::::0;;;:10:::1;:19;::::0;;;;:30;:48:::1;23770:100;;;::::0;-1:-1:-1;;;23770:100:0;;19109:2:1;23770:100:0::1;::::0;::::1;19091:21:1::0;19148:2;19128:18;;;19121:30;19187:34;19167:18;;;19160:62;-1:-1:-1;;;19238:18:1;;;19231:38;19286:19;;23770:100:0::1;19081:230:1::0;23770:100:0::1;23923:15;::::0;23888:21:::1;::::0;;;:10:::1;:21;::::0;;;;:32;:50:::1;23880:104;;;::::0;-1:-1:-1;;;23880:104:0;;13334:2:1;23880:104:0::1;::::0;::::1;13316:21:1::0;13373:2;13353:18;;;13346:30;13412:34;13392:18;;;13385:62;-1:-1:-1;;;13463:18:1;;;13456:40;13513:19;;23880:104:0::1;13306:232:1::0;23880:104:0::1;24003:21;::::0;;;:10:::1;:21;::::0;;;;:34:::1;;::::0;::::1;;24002:35;23994:87;;;::::0;-1:-1:-1;;;23994:87:0;;11678:2:1;23994:87:0::1;::::0;::::1;11660:21:1::0;11717:2;11697:18;;;11690:30;11756:34;11736:18;;;11729:62;-1:-1:-1;;;11807:18:1;;;11800:37;11854:19;;23994:87:0::1;11650:229:1::0;23994:87:0::1;24100:19;::::0;;;:10:::1;:19;::::0;;;;:32:::1;;::::0;::::1;;24099:33;24091:83;;;::::0;-1:-1:-1;;;24091:83:0;;14153:2:1;24091:83:0::1;::::0;::::1;14135:21:1::0;14192:2;14172:18;;;14165:30;14231:34;14211:18;;;14204:62;-1:-1:-1;;;14282:18:1;;;14275:35;14327:19;;24091:83:0::1;14125:227:1::0;24091:83:0::1;24200:1;24192:5;:9;24184:68;;;::::0;-1:-1:-1;;;24184:68:0;;12496:2:1;24184:68:0::1;::::0;::::1;12478:21:1::0;12535:2;12515:18;;;12508:30;12574:34;12554:18;;;12547:62;-1:-1:-1;;;12625:18:1;;;12618:45;12680:19;;24184:68:0::1;12468:237:1::0;24184:68:0::1;24270:98;19872:26;24292:75;9225:10:::0;24318:7:::1;24327:9;24338:5;24345:9;24356:10;24292:11;:75::i;24270:98::-;24262:155;;;::::0;-1:-1:-1;;;24262:155:0;;18695:2:1;24262:155:0::1;::::0;::::1;18677:21:1::0;18734:2;18714:18;;;18707:30;18773:34;18753:18;;;18746:62;-1:-1:-1;;;18824:18:1;;;18817:43;18877:19;;24262:155:0::1;18667:235:1::0;24262:155:0::1;24436:19;::::0;;;:10:::1;:19;::::0;;;;:32:::1;::::0;::::1;:39:::0;;-1:-1:-1;;24436:39:0::1;24471:4;24436:39;::::0;;24485:32;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;24527:21:0::1;::::0;;;:10:::1;:21;::::0;;;;:34:::1;::::0;::::1;:41:::0;;-1:-1:-1;;24527:41:0::1;24564:4;24527:41;::::0;;24578:34;;;::::1;::::0;::::1;:::i;:::-;;;;;;24631:91;24643:12;9225:10:::0;;9145:98;24643:12:::1;24657:19;::::0;;;:10:::1;:19;::::0;;;;;:30;24689:21;;;;;:32;24631:11:::1;:91::i;:::-;24741:9;24756:224;;;;;;;;24793:12;9225:10:::0;;9145:98;24793:12:::1;-1:-1:-1::0;;;;;24756:224:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;24923:15:::1;24756:224:::0;;;;;;;;-1:-1:-1;24756:224:0;;;;;;;24741:240;;24756:224;24741:240;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;24741:240:0::1;::::0;;;::::1;;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;24741:240:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25033:9:::1;:16:::0;:20:::1;::::0;24756:224;25033:20:::1;:::i;:::-;25005:49;::::0;25022:9;;25012:7;;25005:49:::1;::::0;;;::::1;23176:1886:::0;;;;;:::o;21602:157::-;14079:4;15875:12;;;;;-1:-1:-1;;;;;;;;;;;15875:22:0;14525:30;14536:4;9225:10;14525;:30::i;:::-;-1:-1:-1;21717:15:0::1;:34:::0;21602:157::o;22791:373::-;14079:4;15875:12;;;;;-1:-1:-1;;;;;;;;;;;15875:22:0;14525:30;14536:4;9225:10;14525;:30::i;:::-;22930:15:::1;;22915:11;:30;;22914:53;;;;;22965:1;22951:11;:15;22914:53;22906:121;;;::::0;-1:-1:-1;;;22906:121:0;;17864:2:1;22906:121:0::1;::::0;::::1;17846:21:1::0;17903:2;17883:18;;;17876:30;17942:34;17922:18;;;17915:62;18013:26;17993:18;;;17986:54;18057:19;;22906:121:0::1;17836:246:1::0;22906:121:0::1;23056:1;23046:7;:11;23038:73;;;::::0;-1:-1:-1;;;23038:73:0;;10840:2:1;23038:73:0::1;::::0;::::1;10822:21:1::0;10879:2;10859:18;;;10852:30;10918:34;10898:18;;;10891:62;-1:-1:-1;;;10969:18:1;;;10962:48;11027:19;;23038:73:0::1;10812:240:1::0;23038:73:0::1;-1:-1:-1::0;23122:24:0::1;::::0;;;:11:::1;:24;::::0;;;;;:34;22791:373::o;15096:497::-;15177:22;15185:4;15191:7;15177;:22::i;:::-;15172:414;;15365:41;15393:7;-1:-1:-1;;;;;15365:41:0;15403:2;15365:19;:41::i;:::-;15479:38;15507:4;15514:2;15479:19;:38::i;:::-;15270:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;15270:270:0;;;;;;;;;;-1:-1:-1;;;15216:358:0;;;;;;;:::i;10659:855::-;10752:7;10771:9;10787;10803:7;10858:9;:16;10878:2;10858:22;10854:64;;10907:1;10891:19;;;;;;;10854:64;-1:-1:-1;;;11045:4:0;11030:20;;11024:27;11085:4;11070:20;;11064:27;11133:4;11118:20;;11112:27;11109:1;11104:36;11251:2;11247:6;;11243:36;;;11264:7;11269:2;11264:7;;:::i;:::-;;;11243:36;11351:1;:7;;11356:2;11351:7;;:18;;;;;11362:1;:7;;11367:2;11362:7;;11351:18;11347:162;;;11396:1;11380:19;;;;;;;11347:162;11477:24;;;;;;;;;;;;8858:25:1;;;8931:4;8919:17;;8899:18;;;8892:45;;;;8953:18;;;8946:34;;;8996:18;;;8989:34;;;11477:24:0;;8830:19:1;;11477:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11470:31;;;;;;;18547:229;18622:22;18630:4;18636:7;18622;:22::i;:::-;18617:152;;18661:6;:12;;;;;;;;;;;-1:-1:-1;;;;;18661:29:0;;;;;;;;;:36;;-1:-1:-1;;18661:36:0;18693:4;18661:36;;;18744:12;9225:10;;9145:98;18744:12;-1:-1:-1;;;;;18717:40:0;18735:7;-1:-1:-1;;;;;18717:40:0;18729:4;18717:40;;;;;;;;;;18547:229;;:::o;18784:230::-;18859:22;18867:4;18873:7;18859;:22::i;:::-;18855:152;;;18930:5;18898:12;;;;;;;;;;;-1:-1:-1;;;;;18898:29:0;;;;;;;;;;:37;;-1:-1:-1;;18898:37:0;;;18955:40;9225:10;;18898:12;;18955:40;;18930:5;18955:40;18784:230;;:::o;20199:775::-;20326:6;;20301:3;;;:21;;-1:-1:-1;;;20301:21:0;;-1:-1:-1;;;;;6669:32:1;;;20301:21:0;;;6651:51:1;;;;20301:3:0;;;:13;;6624:18:1;;20301:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;;20293:93;;;;-1:-1:-1;;;20293:93:0;;17042:2:1;20293:93:0;;;17024:21:1;17081:2;17061:18;;;17054:30;17120:34;17100:18;;;17093:62;-1:-1:-1;;;17171:18:1;;;17164:48;17229:19;;20293:93:0;17014:240:1;20293:93:0;20445:6;;20405:3;;;:36;;-1:-1:-1;;;20405:36:0;;-1:-1:-1;;;;;6943:15:1;;;20405:36:0;;;6925:34:1;;;;20435:4:0;6975:18:1;;;6968:43;20405:3:0;;;:13;;6860:18:1;;20405:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;20397:106;;;;-1:-1:-1;;;20397:106:0;;16218:2:1;20397:106:0;;;16200:21:1;16257:2;16237:18;;;16230:30;16296:34;16276:18;;;16269:62;-1:-1:-1;;;16347:18:1;;;16340:46;16403:19;;20397:106:0;16190:238:1;20397:106:0;20522:3;;;20547:8;;20557:6;;20522:42;;-1:-1:-1;;;20522:42:0;;-1:-1:-1;;;;;7280:15:1;;;20522:42:0;;;7262:34:1;;;;20547:8:0;;;7312:18:1;;;7305:43;7364:18;;;7357:34;20522:3:0;;;:16;;7197:18:1;;20522:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20514:88;;;;-1:-1:-1;;;20514:88:0;;17461:2:1;20514:88:0;;;17443:21:1;17500:2;17480:18;;;17473:30;17539:34;17519:18;;;17512:62;-1:-1:-1;;;17590:18:1;;;17583:32;17632:19;;20514:88:0;17433:224:1;20514:88:0;20623:12;20666:23;;;:11;:23;;;;;;;20638:25;;;;;;;:51;;20666:23;20638:51;:::i;:::-;20718:3;;:21;;-1:-1:-1;;;20718:21:0;;-1:-1:-1;;;;;6669:32:1;;;20718:21:0;;;6651:51:1;20623:66:0;;-1:-1:-1;20623:66:0;;20718:3;;;;:13;;6624:18:1;;20718:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;;20710:94;;;;-1:-1:-1;;;20710:94:0;;19518:2:1;20710:94:0;;;19500:21:1;19557:2;19537:18;;;19530:30;19596:34;19576:18;;;19569:62;-1:-1:-1;;;19647:18:1;;;19640:48;19705:19;;20710:94:0;19490:240:1;20710:94:0;20823:3;;:36;;-1:-1:-1;;;20823:36:0;;-1:-1:-1;;;;;6943:15:1;;;20823:36:0;;;6925:34:1;20853:4:0;6975:18:1;;;6968:43;20863:7:0;;20823:3;;:13;;6860:18:1;;20823:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;20815:111;;;;-1:-1:-1;;;20815:111:0;;14981:2:1;20815:111:0;;;14963:21:1;15020:2;15000:18;;;14993:30;15059:34;15039:18;;;15032:62;-1:-1:-1;;;15110:18:1;;;15103:50;15170:19;;20815:111:0;14953:242:1;20815:111:0;20937:3;;:29;;-1:-1:-1;;;20937:29:0;;-1:-1:-1;;;;;7594:32:1;;;20937:29:0;;;7576:51:1;7643:18;;;7636:34;;;20937:3:0;;;;:12;;7549:18:1;;20937:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20199:775;;;;:::o;13355:451::-;13430:13;13456:19;13488:10;13492:6;13488:1;:10;:::i;:::-;:14;;13501:1;13488:14;:::i;:::-;13478:25;;;;;;-1:-1:-1;;;13478:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13478:25:0;;13456:47;;-1:-1:-1;;;13514:6:0;13521:1;13514:9;;;;;;-1:-1:-1;;;13514:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;13514:15:0;;;;;;;;;-1:-1:-1;;;13540:6:0;13547:1;13540:9;;;;;;-1:-1:-1;;;13540:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;13540:15:0;;;;;;;;-1:-1:-1;13571:9:0;13583:10;13587:6;13583:1;:10;:::i;:::-;:14;;13596:1;13583:14;:::i;:::-;13571:26;;13566:135;13603:1;13599;:5;13566:135;;;-1:-1:-1;;;13651:5:0;13659:3;13651:11;13638:25;;;;;-1:-1:-1;;;13638:25:0;;;;;;;;;;;;13626:6;13633:1;13626:9;;;;;;-1:-1:-1;;;13626:9:0;;;;;;;;;;;;:37;-1:-1:-1;;;;;13626:37:0;;;;;;;;-1:-1:-1;13688:1:0;13678:11;;;;;13606:3;;;:::i;:::-;;;13566:135;;;-1:-1:-1;13719:10:0;;13711:55;;;;-1:-1:-1;;;13711:55:0;;10074:2:1;13711:55:0;;;10056:21:1;;;10093:18;;;10086:30;10152:34;10132:18;;;10125:62;10204:18;;13711:55:0;10046:182:1;13711:55:0;13791:6;13355:451;-1:-1:-1;;;13355:451:0:o;14:738:1:-;56:5;109:3;102:4;94:6;90:17;86:27;76:2;;131:5;124;117:20;76:2;171:6;158:20;197:18;234:2;230;227:10;224:2;;;240:18;;:::i;:::-;315:2;309:9;283:2;369:13;;-1:-1:-1;;365:22:1;;;389:2;361:31;357:40;345:53;;;413:18;;;433:22;;;410:46;407:2;;;459:18;;:::i;:::-;499:10;495:2;488:22;534:2;526:6;519:18;580:3;573:4;568:2;560:6;556:15;552:26;549:35;546:2;;;601:5;594;587:20;546:2;669;662:4;654:6;650:17;643:4;635:6;631:17;618:54;692:15;;;709:4;688:26;681:41;;;;-1:-1:-1;696:6:1;66:686;-1:-1:-1;;;66:686:1:o;757:257::-;816:6;869:2;857:9;848:7;844:23;840:32;837:2;;;890:6;882;875:22;837:2;934:9;921:23;953:31;978:5;953:31;:::i;1019:261::-;1089:6;1142:2;1130:9;1121:7;1117:23;1113:32;1110:2;;;1163:6;1155;1148:22;1110:2;1200:9;1194:16;1219:31;1244:5;1219:31;:::i;1285:750::-;1398:6;1406;1414;1422;1430;1438;1491:3;1479:9;1470:7;1466:23;1462:33;1459:2;;;1513:6;1505;1498:22;1459:2;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1678:2:1;1663:18;;1650:32;;-1:-1:-1;1729:2:1;1714:18;;1701:32;;-1:-1:-1;1780:2:1;1765:18;;1752:32;;-1:-1:-1;1831:3:1;1816:19;;1803:33;;-1:-1:-1;1887:3:1;1872:19;;1859:33;1915:18;1904:30;;1901:2;;;1952:6;1944;1937:22;1901:2;1980:49;2021:7;2012:6;2001:9;1997:22;1980:49;:::i;:::-;1970:59;;;1449:586;;;;;;;;:::o;2040:297::-;2107:6;2160:2;2148:9;2139:7;2135:23;2131:32;2128:2;;;2181:6;2173;2166:22;2128:2;2218:9;2212:16;2271:5;2264:13;2257:21;2250:5;2247:32;2237:2;;2298:6;2290;2283:22;2342:190;2401:6;2454:2;2442:9;2433:7;2429:23;2425:32;2422:2;;;2475:6;2467;2460:22;2422:2;-1:-1:-1;2503:23:1;;2412:120;-1:-1:-1;2412:120:1:o;2537:325::-;2605:6;2613;2666:2;2654:9;2645:7;2641:23;2637:32;2634:2;;;2687:6;2679;2672:22;2634:2;2728:9;2715:23;2705:33;;2788:2;2777:9;2773:18;2760:32;2801:31;2826:5;2801:31;:::i;:::-;2851:5;2841:15;;;2624:238;;;;;:::o;3620:194::-;3690:6;3743:2;3731:9;3722:7;3718:23;3714:32;3711:2;;;3764:6;3756;3749:22;3711:2;-1:-1:-1;3792:16:1;;3701:113;-1:-1:-1;3701:113:1:o;3819:258::-;3887:6;3895;3948:2;3936:9;3927:7;3923:23;3919:32;3916:2;;;3969:6;3961;3954:22;3916:2;-1:-1:-1;;3997:23:1;;;4067:2;4052:18;;;4039:32;;-1:-1:-1;3906:171:1:o;4082:614::-;4186:6;4194;4202;4210;4218;4271:3;4259:9;4250:7;4246:23;4242:33;4239:2;;;4293:6;4285;4278:22;4239:2;4334:9;4321:23;4311:33;;4391:2;4380:9;4376:18;4363:32;4353:42;;4442:2;4431:9;4427:18;4414:32;4404:42;;4493:2;4482:9;4478:18;4465:32;4455:42;;4548:3;4537:9;4533:19;4520:33;4576:18;4568:6;4565:30;4562:2;;;4613:6;4605;4598:22;4562:2;4641:49;4682:7;4673:6;4662:9;4658:22;4641:49;:::i;:::-;4631:59;;;4229:467;;;;;;;;:::o;5714:786::-;6125:25;6120:3;6113:38;6095:3;6180:6;6174:13;6196:62;6251:6;6246:2;6241:3;6237:12;6230:4;6222:6;6218:17;6196:62;:::i;:::-;-1:-1:-1;;;6317:2:1;6277:16;;;6309:11;;;6302:40;6367:13;;6389:63;6367:13;6438:2;6430:11;;6423:4;6411:17;;6389:63;:::i;:::-;6472:17;6491:2;6468:26;;6103:397;-1:-1:-1;;;;6103:397:1:o;9484:383::-;9633:2;9622:9;9615:21;9596:4;9665:6;9659:13;9708:6;9703:2;9692:9;9688:18;9681:34;9724:66;9783:6;9778:2;9767:9;9763:18;9758:2;9750:6;9746:15;9724:66;:::i;:::-;9851:2;9830:15;-1:-1:-1;;9826:29:1;9811:45;;;;9858:2;9807:54;;9605:262;-1:-1:-1;;9605:262:1:o;21304:128::-;21344:3;21375:1;21371:6;21368:1;21365:13;21362:2;;;21381:18;;:::i;:::-;-1:-1:-1;21417:9:1;;21352:80::o;21437:204::-;21475:3;21511:4;21508:1;21504:12;21543:4;21540:1;21536:12;21578:3;21572:4;21568:14;21563:3;21560:23;21557:2;;;21586:18;;:::i;:::-;21622:13;;21483:158;-1:-1:-1;;;21483:158:1:o;21646:168::-;21686:7;21752:1;21748;21744:6;21740:14;21737:1;21734:21;21729:1;21722:9;21715:17;21711:45;21708:2;;;21759:18;;:::i;:::-;-1:-1:-1;21799:9:1;;21698:116::o;21819:125::-;21859:4;21887:1;21884;21881:8;21878:2;;;21892:18;;:::i;:::-;-1:-1:-1;21929:9:1;;21868:76::o;21949:258::-;22021:1;22031:113;22045:6;22042:1;22039:13;22031:113;;;22121:11;;;22115:18;22102:11;;;22095:39;22067:2;22060:10;22031:113;;;22162:6;22159:1;22156:13;22153:2;;;22197:1;22188:6;22183:3;22179:16;22172:27;22153:2;;22002:205;;;:::o;22212:136::-;22251:3;22279:5;22269:2;;22288:18;;:::i;:::-;-1:-1:-1;;;22324:18:1;;22259:89::o;22353:135::-;22392:3;-1:-1:-1;;22413:17:1;;22410:2;;;22433:18;;:::i;:::-;-1:-1:-1;22480:1:1;22469:13;;22400:88::o;22493:127::-;22554:10;22549:3;22545:20;22542:1;22535:31;22585:4;22582:1;22575:15;22609:4;22606:1;22599:15;22625:127;22686:10;22681:3;22677:20;22674:1;22667:31;22717:4;22714:1;22707:15;22741:4;22738:1;22731:15;22757:131;-1:-1:-1;;;;;22832:31:1;;22822:42;;22812:2;;22878:1;22875;22868:12;22812:2;22802:86;:::o

Swarm Source

ipfs://8a3286cd11e8223cbd958ae9ae06bd51d74883ef38e3d0501a277e3bad272970

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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.