ETH Price: $3,419.13 (-1.65%)
Gas: 8 Gwei

Contract

0x4f65C5F0F89BE0305Dd9F07FF9cD1390C614f21a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Forge129454012021-08-02 10:23:511080 days ago1627899831IN
0x4f65C5F0...0C614f21a
0.005 ETH0.0054070121
Forge129450522021-08-02 9:04:501080 days ago1627895090IN
0x4f65C5F0...0C614f21a
0.003 ETH0.0061618426
Forge129446702021-08-02 7:33:221080 days ago1627889602IN
0x4f65C5F0...0C614f21a
0 ETH0.0048292524
Forge129094982021-07-27 17:44:131086 days ago1627407853IN
0x4f65C5F0...0C614f21a
0 ETH0.0046280323
Forge129094872021-07-27 17:42:361086 days ago1627407756IN
0x4f65C5F0...0C614f21a
0.005 ETH0.0062666923
Forge129094702021-07-27 17:38:411086 days ago1627407521IN
0x4f65C5F0...0C614f21a
0 ETH0.0052729725
Forge129094662021-07-27 17:37:521086 days ago1627407472IN
0x4f65C5F0...0C614f21a
0.003 ETH0.007339226
Forge128847532021-07-23 20:25:121089 days ago1627071912IN
0x4f65C5F0...0C614f21a
0 ETH0.0024134212
Forge128847522021-07-23 20:25:091089 days ago1627071909IN
0x4f65C5F0...0C614f21a
0 ETH0.0033807312
Forge128791322021-07-22 23:18:211090 days ago1626995901IN
0x4f65C5F0...0C614f21a
0 ETH0.0025310212
Forge128694962021-07-21 11:22:061092 days ago1626866526IN
0x4f65C5F0...0C614f21a
0 ETH0.0037993211
Forge128564012021-07-19 10:09:361094 days ago1626689376IN
0x4f65C5F0...0C614f21a
0 ETH0.0026032213
Forge128403802021-07-16 21:50:121096 days ago1626472212IN
0x4f65C5F0...0C614f21a
0 ETH0.0037699619
Forge128403202021-07-16 21:37:391096 days ago1626471459IN
0x4f65C5F0...0C614f21a
0 ETH0.0036219418
Forge128403202021-07-16 21:37:391096 days ago1626471459IN
0x4f65C5F0...0C614f21a
0.005 ETH0.0045028819
Forge128402402021-07-16 21:24:191096 days ago1626470659IN
0x4f65C5F0...0C614f21a
0 ETH0.0051447927
Forge128061952021-07-11 13:12:281102 days ago1626009148IN
0x4f65C5F0...0C614f21a
0 ETH0.001054595
Forge128057412021-07-11 11:28:191102 days ago1626002899IN
0x4f65C5F0...0C614f21a
0 ETH0.001265516
Forge128057392021-07-11 11:28:121102 days ago1626002892IN
0x4f65C5F0...0C614f21a
0 ETH0.001265516
Forge128008522021-07-10 16:56:561103 days ago1625936216IN
0x4f65C5F0...0C614f21a
0 ETH0.0021091910
Forge127969182021-07-10 2:13:471103 days ago1625883227IN
0x4f65C5F0...0C614f21a
0 ETH0.003293319.7435855
Forge127919332021-07-09 7:51:341104 days ago1625817094IN
0x4f65C5F0...0C614f21a
0 ETH0.0042183820
Forge127919302021-07-09 7:50:291104 days ago1625817029IN
0x4f65C5F0...0C614f21a
0.003 ETH0.0049358820
Forge127892412021-07-08 21:46:221104 days ago1625780782IN
0x4f65C5F0...0C614f21a
0.005 ETH0.0031163212
Forge127821652021-07-07 19:21:341105 days ago1625685694IN
0x4f65C5F0...0C614f21a
0 ETH0.0074683828
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
129454012021-08-02 10:23:511080 days ago1627899831
0x4f65C5F0...0C614f21a
0.005 ETH
129450522021-08-02 9:04:501080 days ago1627895090
0x4f65C5F0...0C614f21a
0.003 ETH
129094872021-07-27 17:42:361086 days ago1627407756
0x4f65C5F0...0C614f21a
0.005 ETH
129094662021-07-27 17:37:521086 days ago1627407472
0x4f65C5F0...0C614f21a
0.003 ETH
128403202021-07-16 21:37:391096 days ago1626471459
0x4f65C5F0...0C614f21a
0.005 ETH
127919302021-07-09 7:50:291104 days ago1625817029
0x4f65C5F0...0C614f21a
0.003 ETH
127892412021-07-08 21:46:221104 days ago1625780782
0x4f65C5F0...0C614f21a
0.005 ETH
127723042021-07-06 6:27:251107 days ago1625552845
0x4f65C5F0...0C614f21a
0.003 ETH
127312542021-06-29 21:10:281113 days ago1625001028
0x4f65C5F0...0C614f21a
0.003 ETH
127312342021-06-29 21:06:001113 days ago1625000760
0x4f65C5F0...0C614f21a
0.003 ETH
127312162021-06-29 21:01:231113 days ago1625000483
0x4f65C5F0...0C614f21a
0.003 ETH
127312122021-06-29 21:00:111113 days ago1625000411
0x4f65C5F0...0C614f21a
0.003 ETH
127163762021-06-27 13:43:491116 days ago1624801429
0x4f65C5F0...0C614f21a
0.005 ETH
127098972021-06-26 13:19:101117 days ago1624713550
0x4f65C5F0...0C614f21a
0.01 ETH
126414972021-06-15 21:21:401127 days ago1623792100
0x4f65C5F0...0C614f21a
0.005 ETH
126414182021-06-15 21:06:101127 days ago1623791170
0x4f65C5F0...0C614f21a
0.003 ETH
126411282021-06-15 20:04:061127 days ago1623787446
0x4f65C5F0...0C614f21a
0.003 ETH
125314482021-05-29 20:31:521144 days ago1622320312
0x4f65C5F0...0C614f21a
0.005 ETH
112447292020-11-12 19:34:151342 days ago1605209655
0x4f65C5F0...0C614f21a
0.003 ETH
111406832020-10-27 20:05:451358 days ago1603829145
0x4f65C5F0...0C614f21a
0.003 ETH
111285712020-10-25 23:26:501360 days ago1603668410
0x4f65C5F0...0C614f21a
0.003 ETH
111285712020-10-25 23:26:501360 days ago1603668410
0x4f65C5F0...0C614f21a
0.003 ETH
110847442020-10-19 6:07:531367 days ago1603087673
0x4f65C5F0...0C614f21a
0.003 ETH
110844372020-10-19 5:00:361367 days ago1603083636
0x4f65C5F0...0C614f21a
0.003 ETH
110843092020-10-19 4:32:171367 days ago1603081937
0x4f65C5F0...0C614f21a
0.003 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ForgeCombined

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-03-04
*/

// File: contracts/ERC1155/enjin/Common.sol

pragma solidity 0.5.0;

/**
    Note: Simple contract to use as base for const vals
*/
contract CommonConstants {

    bytes4 constant internal ERC1155_ACCEPTED = 0xf23a6e61; // bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))
    bytes4 constant internal ERC1155_BATCH_ACCEPTED = 0xbc197c81; // bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))
}

// File: contracts/ERC1155/enjin/IEnjinERC1155.sol

pragma solidity 0.5.0;

interface IEnjinERC1155 {
  function acceptAssignment ( uint256 _id ) external;
  function assign ( uint256 _id, address _creator ) external;
  function balanceOf ( address _owner, uint256 _id ) external view returns ( uint256 );
  function balanceOfBatch ( address[] calldata _owners, uint256[] calldata _ids ) external view returns ( uint256[] memory);
  function create ( string calldata _name, uint256 _totalSupply, uint256 _initialReserve, address _supplyModel, uint256 _meltValue, uint16 _meltFeeRatio, uint8 _transferable, uint256[3] calldata _transferFeeSettings, bool _nonFungible ) external;
  function isApprovedForAll ( address _owner, address _operator ) external view returns ( bool );
  function melt ( uint256[] calldata _ids, uint256[] calldata _values ) external;
  function mintFungibles ( uint256 _id, address[] calldata _to, uint256[] calldata _values ) external;
  function mintNonFungibles ( uint256 _id, address[] calldata _to ) external;
  function safeBatchTransferFrom ( address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data ) external;
  function safeTransferFrom ( address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data ) external;
  function setApprovalForAll ( address _operator, bool _approved ) external;
  function setURI ( uint256 _id, string calldata _uri ) external;
  function supportsInterface ( bytes4 _interfaceID ) external pure returns ( bool );
  function uri ( uint256 _id ) external view returns ( string memory );
}

// File: contracts/ERC1155/enjin/IERC1155TokenReceiver.sol

pragma solidity 0.5.0;

/**
    Note: The ERC-165 identifier for this interface is 0x4e2312e0.
*/
interface ERC1155TokenReceiver {
    /**
        @notice Handle the receipt of a single ERC1155 token type.
        @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated.
        This function MUST return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61) if it accepts the transfer.
        This function MUST revert if it rejects the transfer.
        Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.
        @param _operator  The address which initiated the transfer (i.e. msg.sender)
        @param _from      The address which previously owned the token
        @param _id        The ID of the token being transferred
        @param _value     The amount of tokens being transferred
        @param _data      Additional data with no specified format
        @return           `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
    */
    function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _value, bytes calldata _data) external returns(bytes4);

    /**
        @notice Handle the receipt of multiple ERC1155 token types.
        @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated.
        This function MUST return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81) if it accepts the transfer(s).
        This function MUST revert if it rejects the transfer(s).
        Return of any other value than the prescribed keccak256 generated value MUST result in the transaction being reverted by the caller.
        @param _operator  The address which initiated the batch transfer (i.e. msg.sender)
        @param _from      The address which previously owned the token
        @param _ids       An array containing ids of each token being transferred (order and length must match _values array)
        @param _values    An array containing amounts of each token being transferred (order and length must match _ids array)
        @param _data      Additional data with no specified format
        @return           `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
    */
    function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external returns(bytes4);
}

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through `transferFrom`. This is
     * zero by default.
     *
     * This value changes when `approve` or `transferFrom` are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * > Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: contracts/ERC721/el/forging/ForgeERC1155Operations.sol

pragma solidity 0.5.0;





contract ForgeERC1155Operations is ERC1155TokenReceiver, CommonConstants {

    // The Enjin ERC-1155 smart contract
    IEnjinERC1155 public enjinContract;

    // The Enjin Coin ERC-20 smart contract
    IERC20 public enjinCoinContract;

    function safeTransferFungibleItemWithOptionalMelt(uint256 tokenId, address recipient, bool melt) internal {
      bytes memory extraData = new bytes(0); 
      enjinContract.safeTransferFrom(msg.sender, melt ? address(this) : recipient, tokenId, 1, extraData);

      if(melt) {
        uint256 startingEnjinCoinBalance = enjinCoinContract.balanceOf(address(this));
        uint256[] memory ids = new uint256[](1);
        uint256[] memory values = new uint256[](1);
        ids[0] = tokenId;
        values[0] = 1;
        enjinContract.melt(ids, values);
        uint256 endingEnjinCoinBalance = enjinCoinContract.balanceOf(address(this));
        uint256 changeInEnjinCoinBalance = endingEnjinCoinBalance - startingEnjinCoinBalance;

        if(changeInEnjinCoinBalance > 0) {
          enjinCoinContract.transfer(msg.sender, changeInEnjinCoinBalance);
        }
      }
    }    

    function safeTransferNonFungibleItemWithOptionalMelt(uint256 tokenId, uint256 NFTIndex, address recipient, bool melt) internal {
      uint256[] memory nftIds = new uint256[](1);
      uint256[] memory values = new uint256[](1);
      nftIds[0] = tokenId | NFTIndex;
      values[0] = 1;

      bytes memory extraData = new bytes(0);
      enjinContract.safeBatchTransferFrom(msg.sender, melt ? address(this) : recipient, nftIds, values, extraData);

      if(melt) {
        uint256 startingEnjinCoinBalance = enjinCoinContract.balanceOf(address(this));
        enjinContract.melt(nftIds, values);
        uint256 endingEnjinCoinBalance = enjinCoinContract.balanceOf(address(this));
        uint256 changeInEnjinCoinBalance = endingEnjinCoinBalance - startingEnjinCoinBalance;

        if(changeInEnjinCoinBalance > 0) {
          enjinCoinContract.transfer(msg.sender, changeInEnjinCoinBalance);
        }        
      }      
    }        

    function onERC1155Received(address /*_operator*/, address /*_from*/, uint256 /*_id*/, uint256 /*_value*/, bytes calldata /*_data*/) external returns(bytes4) {
      return ERC1155_ACCEPTED;
    }

    function onERC1155BatchReceived(address /*_operator*/, address /*_from*/, uint256[] calldata /*_ids*/, uint256[] calldata /*_values*/, bytes calldata /*_data*/) external returns(bytes4) {        
      return ERC1155_BATCH_ACCEPTED;        
    }

    // ERC165 interface support
    function supportsInterface(bytes4 interfaceID) external pure returns (bool) {
        return  interfaceID == 0x01ffc9a7 ||    // ERC165
                interfaceID == 0x4e2312e0;      // ERC1155_ACCEPTED ^ ERC1155_BATCH_ACCEPTED;
    }
}

// File: contracts/ERC721/el/forging/IForgePathCatalogCombined.sol

pragma solidity 0.5.0;

interface IForgePathCatalogCombined {        
    function getNumberOfPathDefinitions() external view returns (uint256);
    function getForgePathNameAtIndex(uint256 index) external view returns (string memory);
    function getForgePathIdAtIndex(uint256 index) external view returns (uint256);

    function getForgeType(uint256 pathId) external view returns (uint8);
    function getForgePathDetailsCommon(uint256 pathId) external view returns (uint256, uint256, uint256);
    function getForgePathDetailsTwoGen1Tokens(uint256 pathId) external view returns (uint256, uint256, bool, bool);
    function getForgePathDetailsTwoERC721Addresses(uint256 pathId) external view returns (address, address);
    function getForgePathDetailsERC721AddressWithGen1Token(uint256 pathId) external view returns (address, uint256, bool);
    function getForgePathDetailsTwoERC1155Tokens(uint256 pathId) external view returns (uint256, uint256, bool, bool, bool, bool);
    function getForgePathDetailsERC1155WithGen1Token(uint256 pathId) external view returns (uint256, uint256, bool, bool, bool);
    function getForgePathDetailsERC1155WithERC721Address(uint256 pathId) external view returns (uint256, address, bool, bool);
}

// File: contracts/ERC721/el/IBurnableEtherLegendsToken.sol

pragma solidity 0.5.0;

interface IBurnableEtherLegendsToken {        
    function burn(uint256 tokenId) external;
}

// File: contracts/ERC721/el/IMintableEtherLegendsToken.sol

pragma solidity 0.5.0;

interface IMintableEtherLegendsToken {        
    function mintTokenOfType(address to, uint256 idOfTokenType) external;
}

// File: contracts/ERC721/el/ITokenDefinitionManager.sol

pragma solidity 0.5.0;

interface ITokenDefinitionManager {        
    function getNumberOfTokenDefinitions() external view returns (uint256);
    function hasTokenDefinition(uint256 tokenTypeId) external view returns (bool);
    function getTokenTypeNameAtIndex(uint256 index) external view returns (string memory);
    function getTokenTypeName(uint256 tokenTypeId) external view returns (string memory);
    function getTokenTypeId(string calldata name) external view returns (uint256);
    function getCap(uint256 tokenTypeId) external view returns (uint256);
    function getAbbreviation(uint256 tokenTypeId) external view returns (string memory);
}

// File: openzeppelin-solidity/contracts/introspection/IERC165.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * [EIP](https://eips.ethereum.org/EIPS/eip-165).
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others (`ERC165Checker`).
 *
 * For an implementation, see `ERC165`.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified)
     * 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);
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.5.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
contract IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

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

    /**
     * @dev Returns the owner of the NFT specified by `tokenId`.
     */
    function ownerOf(uint256 tokenId) public view returns (address owner);

    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     * 
     *
     * Requirements:
     * - `from`, `to` cannot be zero.
     * - `tokenId` must be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this
     * NFT by either `approve` or `setApproveForAll`.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public;
    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     * Requirements:
     * - If the caller is not `from`, it must be approved to move this NFT by
     * either `approve` or `setApproveForAll`.
     */
    function transferFrom(address from, address to, uint256 tokenId) public;
    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);


    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Enumerable.sol

pragma solidity ^0.5.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract IERC721Enumerable is IERC721 {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) public view returns (uint256);
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol

pragma solidity ^0.5.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Full.sol

pragma solidity ^0.5.0;




/**
 * @title ERC-721 Non-Fungible Token Standard, full implementation interface
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract IERC721Full is IERC721, IERC721Enumerable, IERC721Metadata {
    // solhint-disable-previous-line no-empty-blocks
}

// File: contracts/ERC721/el/IEtherLegendsToken.sol

pragma solidity 0.5.0;





contract IEtherLegendsToken is IERC721Full, IMintableEtherLegendsToken, IBurnableEtherLegendsToken, ITokenDefinitionManager {
    function totalSupplyOfType(uint256 tokenTypeId) external view returns (uint256);
    function getTypeIdOfToken(uint256 tokenId) external view returns (uint256);
}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

pragma solidity ^0.5.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * > Note: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: openzeppelin-solidity/contracts/utils/ReentrancyGuard.sol

pragma solidity ^0.5.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the `nonReentrant` modifier
 * available, which can be aplied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 */
contract ReentrancyGuard {
    /// @dev counter to allow mutex lock with only one SSTORE operation
    uint256 private _guardCounter;

    constructor () internal {
        // The counter starts at one to prevent changing it from zero to a non-zero
        // value, which is a more expensive operation.
        _guardCounter = 1;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
    }
}

// File: contracts/ERC721/el/forging/ForgeCombined.sol

pragma solidity 0.5.0;









contract ForgeCombined is ForgeERC1155Operations, Ownable, ReentrancyGuard {    

    // Address to which elementeum and ETH are transferred
    address public payee;    

    // Address to which non-melted items are transferred
    address public lootWallet;    

    // The forge catalog smart contract
    IForgePathCatalogCombined public catalogContract;    

    // The Elementeum ERC-20 token smart contract
    IERC20 public elementeumContract;

    // The Ether Legends Gen 1 ERC-721 token smart contract
    IEtherLegendsToken public etherLegendsGen1;    

    constructor() public 
      Ownable()
      ReentrancyGuard()
    {
      
    }    

    function() external payable {
        revert("Fallback function not permitted.");
    }

    function destroyContract() external {
      _requireOnlyOwner();
      address payable payableOwner = address(uint160(owner()));
      selfdestruct(payableOwner);
    }

    function setPayee(address addr) external {
      _requireOnlyOwner();
      payee = addr;
    }

    function setLootWallet(address addr) external {
      _requireOnlyOwner();
      lootWallet = addr;
    }

    function setCatalogContractAddress(address addr) external {
      _requireOnlyOwner();
      catalogContract = IForgePathCatalogCombined(addr);
    }

    function setElementeumERC20ContractAddress(address addr) external {
      _requireOnlyOwner();
      elementeumContract = IERC20(addr);
    }    

    function setEtherLegendsGen1(address addr) external {
      _requireOnlyOwner();
      etherLegendsGen1 = IEtherLegendsToken(addr);
    }  

    function setEnjinERC1155ContractAddress(address addr) external {
      _requireOnlyOwner();
      enjinContract = IEnjinERC1155(addr);
    }

    function setEnjinERC20ContractAddress(address addr) external {
      _requireOnlyOwner();
      enjinCoinContract = IERC20(addr);
    }

    function forge(uint256 pathId, uint256 material1TokenId, uint256 material2TokenId) external payable nonReentrant {
      _requireOnlyHuman();      

      uint8 forgeType = catalogContract.getForgeType(pathId);
      (uint256 weiCost, uint256 elementeumCost, uint256 forgedItem) = catalogContract.getForgePathDetailsCommon(pathId);

      require(msg.value >= weiCost, "Insufficient ETH");

      if(forgeType == 1) {
        require(material1TokenId != material2TokenId, "NFT ids must be unique");  
        (uint256 material1, 
         uint256 material2, 
         bool burnMaterial1, 
         bool burnMaterial2) = catalogContract.getForgePathDetailsTwoGen1Tokens(pathId);
         _forgeGen1Token(material1, material1TokenId, burnMaterial1);
         _forgeGen1Token(material2, material2TokenId, burnMaterial2);
      } else if(forgeType == 2) {
        (address material1, address material2) = catalogContract.getForgePathDetailsTwoERC721Addresses(pathId);
        if(material1 == material2) {
          require(material1TokenId != material2TokenId, "NFT ids must be unique");
        }
        _forgeERC721Token(material1, material1TokenId);
        _forgeERC721Token(material2, material2TokenId);
      } else if(forgeType == 3) {
        (address material1, 
         uint256 material2, 
         bool burnMaterial2) = catalogContract.getForgePathDetailsERC721AddressWithGen1Token(pathId);
         _forgeERC721Token(material1, material1TokenId);
         _forgeGen1Token(material2, material2TokenId, burnMaterial2);
      } else if(forgeType == 4) {
        (uint256 material1,
         uint256 material2,
         bool meltMaterial1,
         bool meltMaterial2,
         bool material1IsNonFungible,
         bool material2IsNonFungible) = catalogContract.getForgePathDetailsTwoERC1155Tokens(pathId);
        if(material1 == material2 && material1IsNonFungible && material2IsNonFungible) {
          require(material1TokenId != material2TokenId, "NFT ids must be unique");
        }
        _forgeERC1155Token(material1, material1TokenId, meltMaterial1, material1IsNonFungible);
        _forgeERC1155Token(material2, material2TokenId, meltMaterial2, material2IsNonFungible);
      } else if(forgeType == 5) {
        (uint256 material1,
         uint256 material2,
         bool meltMaterial1,
         bool burnMaterial2,
         bool material1IsNonFungible) = catalogContract.getForgePathDetailsERC1155WithGen1Token(pathId);
         _forgeERC1155Token(material1, material1TokenId, meltMaterial1, material1IsNonFungible);
         _forgeGen1Token(material2, material2TokenId, burnMaterial2);
      } else if(forgeType == 6) {
        (uint256 material1,
         address material2,
         bool meltMaterial1,
         bool material1IsNonFungible) = catalogContract.getForgePathDetailsERC1155WithERC721Address(pathId);
         _forgeERC1155Token(material1, material1TokenId, meltMaterial1, material1IsNonFungible);
         _forgeERC721Token(material2, material2TokenId);
      } else {
        revert("Non-existent forge type");
      }

      if(elementeumCost > 0) {
        elementeumContract.transferFrom(msg.sender, payee, elementeumCost);      
      }                    

      if(msg.value > 0) {                
        address payable payableWallet = address(uint160(payee));
        payableWallet.transfer(weiCost);

        uint256 change = msg.value - weiCost;
        if(change > 0) {
          msg.sender.transfer(change);
        }
      }

      etherLegendsGen1.mintTokenOfType(msg.sender, forgedItem);            
    }

    function _forgeGen1Token(uint256 material, uint256 tokenId, bool burnMaterial) internal {
      _verifyOwnershipAndApprovalERC721(address(etherLegendsGen1), tokenId);
      require(material == etherLegendsGen1.getTypeIdOfToken(tokenId), "Incorrect material type");
      burnMaterial ? etherLegendsGen1.burn(tokenId) : _safeTransferERC721(address(etherLegendsGen1), tokenId);
    } 

    function _forgeERC721Token(address material, uint256 tokenId) internal {
      _verifyOwnershipAndApprovalERC721(material, tokenId);
      _safeTransferERC721(material, tokenId);
    }       

    function _forgeERC1155Token(uint256 material, uint256 materialNFTIndex, bool meltMaterial, bool materialIsNonFungible) internal {
      require(enjinContract.isApprovedForAll(msg.sender, address(this)), "Not approved to spend user's ERC1155 tokens");      
      require(enjinContract.balanceOf(msg.sender, materialIsNonFungible ? ( material | materialNFTIndex ) : material) > 0, "Insufficient material balance");  
      materialIsNonFungible ? 
      safeTransferNonFungibleItemWithOptionalMelt(material, materialNFTIndex, lootWallet, meltMaterial) :
      safeTransferFungibleItemWithOptionalMelt(material, lootWallet, meltMaterial);
    }                 

    function _verifyOwnershipAndApprovalERC721(address tokenAddress, uint256 tokenId) internal view {
      IERC721Full tokenContract = IERC721Full(tokenAddress);
      require(tokenContract.ownerOf(tokenId) == msg.sender, "Token not owned by user");
      require(tokenContract.getApproved(tokenId) == address(this) || tokenContract.isApprovedForAll(msg.sender, address(this)), "Token not approved");      
    }    

    function _safeTransferERC721(address tokenAddress, uint256 tokenId) internal {
      IERC721Full tokenContract = IERC721Full(tokenAddress);
      tokenContract.safeTransferFrom(msg.sender, lootWallet, tokenId);
    }    

    function _requireOnlyOwner() internal view {
      require(isOwner(), "Ownable: caller is not the owner");
    }

    function _requireOnlyHuman() internal view {
      require(msg.sender == tx.origin, "Caller must be human user");
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"destroyContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pathId","type":"uint256"},{"name":"material1TokenId","type":"uint256"},{"name":"material2TokenId","type":"uint256"}],"name":"forge","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setEtherLegendsGen1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setPayee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setEnjinERC20ContractAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"elementeumContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"catalogContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setEnjinERC1155ContractAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lootWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setLootWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"payee","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256[]"},{"name":"","type":"uint256[]"},{"name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"etherLegendsGen1","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setElementeumERC20ContractAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setCatalogContractAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"enjinContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"enjinCoinContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b5033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36001600381905550613bfa806100e66000396000f3fe608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146101a1578063092a5cce1461021357806328c212971461022a5780632f9c7a161461026c578063410459ad146102bd578063578636771461030e578063715018a61461035f5780638a817ed4146103765780638da5cb5b146103cd5780638f32d59b1461042457806394b62d1414610453578063989bc666146104aa57806399263bf6146104fb578063a60f1ffc14610552578063ae90b213146105a3578063bc197c81146105fa578063c9ada233146107bc578063d635a20b14610813578063dc3585f614610864578063f1146ff7146108b5578063f23a6e611461090c578063f2fde38b14610a38578063fefa7b4d14610a89575b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f46616c6c6261636b2066756e6374696f6e206e6f74207065726d69747465642e81525060200191505060405180910390fd5b3480156101ad57600080fd5b506101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610ae0565b604051808215151515815260200191505060405180910390f35b34801561021f57600080fd5b50610228610b7a565b005b61026a6004803603606081101561024057600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610ba7565b005b34801561027857600080fd5b506102bb6004803603602081101561028f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a7a565b005b3480156102c957600080fd5b5061030c600480360360208110156102e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ac6565b005b34801561031a57600080fd5b5061035d6004803603602081101561033157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b12565b005b34801561036b57600080fd5b50610374611b5e565b005b34801561038257600080fd5b5061038b611c9b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d957600080fd5b506103e2611cc1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561043057600080fd5b50610439611ceb565b604051808215151515815260200191505060405180910390f35b34801561045f57600080fd5b50610468611d43565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104b657600080fd5b506104f9600480360360208110156104cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d69565b005b34801561050757600080fd5b50610510611db4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561055e57600080fd5b506105a16004803603602081101561057557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dda565b005b3480156105af57600080fd5b506105b8611e26565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060657600080fd5b50610768600480360360a081101561061d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561067a57600080fd5b82018360208201111561068c57600080fd5b803590602001918460208302840111640100000000831117156106ae57600080fd5b9091929391929390803590602001906401000000008111156106cf57600080fd5b8201836020820111156106e157600080fd5b8035906020019184602083028401116401000000008311171561070357600080fd5b90919293919293908035906020019064010000000081111561072457600080fd5b82018360208201111561073657600080fd5b8035906020019184600183028401116401000000008311171561075857600080fd5b9091929391929390505050611e4c565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156107c857600080fd5b506107d1611e80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561081f57600080fd5b506108626004803603602081101561083657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ea6565b005b34801561087057600080fd5b506108b36004803603602081101561088757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ef2565b005b3480156108c157600080fd5b506108ca611f3e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561091857600080fd5b506109e4600480360360a081101561092f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109a057600080fd5b8201836020820111156109b257600080fd5b803590602001918460018302840111640100000000831117156109d457600080fd5b9091929391929390505050611f63565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b348015610a4457600080fd5b50610a8760048036036020811015610a5b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f95565b005b348015610a9557600080fd5b50610a9e61201d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b735750634e2312e07c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610b82612043565b6000610b8c611cc1565b90508073ffffffffffffffffffffffffffffffffffffffff16ff5b600160036000828254019250508190555060006003549050610bc76120c1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367aec4c5866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610c5857600080fd5b505afa158015610c6c573d6000803e3d6000fd5b505050506040513d6020811015610c8257600080fd5b810190808051906020019092919050505090506000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c88d1d79896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060606040518083038186803b158015610d2957600080fd5b505afa158015610d3d573d6000803e3d6000fd5b505050506040513d6060811015610d5357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050925092509250823410151515610df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e73756666696369656e74204554480000000000000000000000000000000081525060200191505060405180910390fd5b60018460ff161415610f8f57858714151515610e7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e465420696473206d75737420626520756e697175650000000000000000000081525060200191505060405180910390fd5b600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379f127c48d6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060806040518083038186803b158015610f0f57600080fd5b505afa158015610f23573d6000803e3d6000fd5b505050506040513d6080811015610f3957600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509350935093509350610f7b848c84612166565b610f86838b83612166565b505050506116e7565b60028460ff16141561113d57600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337e304398b6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050604080518083038186803b15801561102c57600080fd5b505afa158015611040573d6000803e3d6000fd5b505050506040513d604081101561105657600080fd5b810190808051906020019092919080519060200190929190505050915091508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561112257878914151515611121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e465420696473206d75737420626520756e697175650000000000000000000081525060200191505060405180910390fd5b5b61112c828a6123b7565b61113681896123b7565b50506116e6565b60038460ff16141561124f576000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634b6f62798c6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060606040518083038186803b1580156111dd57600080fd5b505afa1580156111f1573d6000803e3d6000fd5b505050506040513d606081101561120757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505092509250925061123c838b6123b7565b611247828a83612166565b5050506116e5565b60048460ff16141561142257600080600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637198459a8f6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060c06040518083038186803b1580156112f357600080fd5b505afa158015611307573d6000803e3d6000fd5b505050506040513d60c081101561131d57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505095509550955095509550955084861480156113785750815b80156113815750805b156113ff578b8d141515156113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e465420696473206d75737420626520756e697175650000000000000000000081525060200191505060405180910390fd5b5b61140b868e86856123cf565b611417858d85846123cf565b5050505050506116e4565b60058460ff161415611553576000806000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166360b2a8e78e6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060a06040518083038186803b1580156114c557600080fd5b505afa1580156114d9573d6000803e3d6000fd5b505050506040513d60a08110156114ef57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509450945094509450945061153e858d85846123cf565b611549848c84612166565b50505050506116e3565b60068460ff16141561167457600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de4a73a48d6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060806040518083038186803b1580156115f457600080fd5b505afa158015611608573d6000803e3d6000fd5b505050506040513d608081101561161e57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509350935093509350611661848c84846123cf565b61166b838b6123b7565b505050506116e2565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f6e2d6578697374656e7420666f726765207479706500000000000000000081525060200191505060405180910390fd5b5b5b5b5b5b600082111561184857600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505050506040513d602081101561183557600080fd5b8101908080519060200190929190505050505b600034111561191a576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156118be573d6000803e3d6000fd5b50600084340390506000811115611917573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611915573d6000803e3d6000fd5b505b50505b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a64a8ef033836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050505050505060035481141515611a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b50505050565b611a82612043565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ace612043565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b1a612043565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b66611ceb565b1515611bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d71612043565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611de2612043565b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063bc197c817c010000000000000000000000000000000000000000000000000000000002905098975050505050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611eae612043565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611efa612043565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063f23a6e617c01000000000000000000000000000000000000000000000000000000000290509695505050505050565b611f9d611ceb565b1515612011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61201a8161277f565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61204b611ceb565b15156120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612164576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616c6c6572206d7573742062652068756d616e20757365720000000000000081525060200191505060405180910390fd5b565b612192600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361290a565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bfbd90b5836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561222157600080fd5b505afa158015612235573d6000803e3d6000fd5b505050506040513d602081101561224b57600080fd5b8101908080519060200190929190505050831415156122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f496e636f7272656374206d6174657269616c207479706500000000000000000081525060200191505060405180910390fd5b8061230857612303600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612cb7565b6123b2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561239957600080fd5b505af11580156123ad573d6000803e3d6000fd5b505050505b505050565b6123c1828261290a565b6123cb8282612cb7565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156124bd57600080fd5b505afa1580156124d1573d6000803e3d6000fd5b505050506040513d60208110156124e757600080fd5b81019080805190602001909291905050501515612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f4e6f7420617070726f76656420746f207370656e64207573657227732045524381526020017f3131353520746f6b656e7300000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33846125dc57876125e0565b8688175b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561266357600080fd5b505afa158015612677573d6000803e3d6000fd5b505050506040513d602081101561268d57600080fd5b8101908080519060200190929190505050111515612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e73756666696369656e74206d6174657269616c2062616c616e636500000081525060200191505060405180910390fd5b8061274a5761274584600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612dd2565b612779565b6127788484600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561348e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561284a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526020017f646472657373000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561299357600080fd5b505afa1580156129a7573d6000803e3d6000fd5b505050506040513d60208110156129bd57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515612a59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f6b656e206e6f74206f776e6564206279207573657200000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663081812fc846040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015612add57600080fd5b505afa158015612af1573d6000803e3d6000fd5b505050506040513d6020811015612b0757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161480612c3e57508073ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612c0257600080fd5b505afa158015612c16573d6000803e3d6000fd5b505050506040513d6020811015612c2c57600080fd5b81019080805190602001909291905050505b1515612cb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f546f6b656e206e6f7420617070726f766564000000000000000000000000000081525060200191505060405180910390fd5b505050565b60008290508073ffffffffffffffffffffffffffffffffffffffff166342842e0e33600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015612db557600080fd5b505af1158015612dc9573d6000803e3d6000fd5b50505050505050565b606060006040519080825280601f01601f191660200182016040528015612e085781602001600182028038833980820191505090505b5090506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a3384612e545785612e56565b305b876001866040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612f35578082015181840152602081019050612f1a565b50505050905090810190601f168015612f625780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015612f8557600080fd5b505af1158015612f99573d6000803e3d6000fd5b505050508115613488576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561306057600080fd5b505afa158015613074573d6000803e3d6000fd5b505050506040513d602081101561308a57600080fd5b81019080805190602001909291905050509050606060016040519080825280602002602001820160405280156130cf5781602001602082028038833980820191505090505b509050606060016040519080825280602002602001820160405280156131045781602001602082028038833980820191505090505b5090508682600081518110151561311757fe5b9060200190602002018181525050600181600081518110151561313657fe5b90602001906020020181815250506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6089e1283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156131f55780820151818401526020810190506131da565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561323757808201518184015260208101905061321c565b50505050905001945050505050600060405180830381600087803b15801561325e57600080fd5b505af1158015613272573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561333357600080fd5b505afa158015613347573d6000803e3d6000fd5b505050506040513d602081101561335d57600080fd5b8101908080519060200190929190505050905060008482039050600081111561348257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561344557600080fd5b505af1158015613459573d6000803e3d6000fd5b505050506040513d602081101561346f57600080fd5b8101908080519060200190929190505050505b50505050505b50505050565b606060016040519080825280602002602001820160405280156134c05781602001602082028038833980820191505090505b509050606060016040519080825280602002602001820160405280156134f55781602001602082028038833980820191505090505b50905084861782600081518110151561350a57fe5b9060200190602002018181525050600181600081518110151561352957fe5b9060200190602002018181525050606060006040519080825280601f01601f19166020018201604052801561356d5781602001600182028038833980820191505090505b5090506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d633866135b957876135bb565b305b8686866040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561369857808201518184015260208101905061367d565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156136da5780820151818401526020810190506136bf565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156137195780820151818401526020810190506136fe565b50505050905090810190601f1680156137465780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561376b57600080fd5b505af115801561377f573d6000803e3d6000fd5b505050508315613bc5576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561384657600080fd5b505afa15801561385a573d6000803e3d6000fd5b505050506040513d602081101561387057600080fd5b810190808051906020019092919050505090506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6089e1285856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015613934578082015181840152602081019050613919565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561397657808201518184015260208101905061395b565b50505050905001945050505050600060405180830381600087803b15801561399d57600080fd5b505af11580156139b1573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613a7257600080fd5b505afa158015613a86573d6000803e3d6000fd5b505050506040513d6020811015613a9c57600080fd5b81019080805190602001909291905050509050600082820390506000811115613bc157600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b505050506040513d6020811015613bae57600080fd5b8101908080519060200190929190505050505b5050505b5050505050505056fea165627a7a72305820aa58ec00dea08e05690ab442bdedbe57ed3dd4a4f526f6897c724ab66c8e475b0029

Deployed Bytecode

0x608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146101a1578063092a5cce1461021357806328c212971461022a5780632f9c7a161461026c578063410459ad146102bd578063578636771461030e578063715018a61461035f5780638a817ed4146103765780638da5cb5b146103cd5780638f32d59b1461042457806394b62d1414610453578063989bc666146104aa57806399263bf6146104fb578063a60f1ffc14610552578063ae90b213146105a3578063bc197c81146105fa578063c9ada233146107bc578063d635a20b14610813578063dc3585f614610864578063f1146ff7146108b5578063f23a6e611461090c578063f2fde38b14610a38578063fefa7b4d14610a89575b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f46616c6c6261636b2066756e6374696f6e206e6f74207065726d69747465642e81525060200191505060405180910390fd5b3480156101ad57600080fd5b506101f9600480360360208110156101c457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610ae0565b604051808215151515815260200191505060405180910390f35b34801561021f57600080fd5b50610228610b7a565b005b61026a6004803603606081101561024057600080fd5b81019080803590602001909291908035906020019092919080359060200190929190505050610ba7565b005b34801561027857600080fd5b506102bb6004803603602081101561028f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a7a565b005b3480156102c957600080fd5b5061030c600480360360208110156102e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ac6565b005b34801561031a57600080fd5b5061035d6004803603602081101561033157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b12565b005b34801561036b57600080fd5b50610374611b5e565b005b34801561038257600080fd5b5061038b611c9b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103d957600080fd5b506103e2611cc1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561043057600080fd5b50610439611ceb565b604051808215151515815260200191505060405180910390f35b34801561045f57600080fd5b50610468611d43565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104b657600080fd5b506104f9600480360360208110156104cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d69565b005b34801561050757600080fd5b50610510611db4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561055e57600080fd5b506105a16004803603602081101561057557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dda565b005b3480156105af57600080fd5b506105b8611e26565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060657600080fd5b50610768600480360360a081101561061d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561067a57600080fd5b82018360208201111561068c57600080fd5b803590602001918460208302840111640100000000831117156106ae57600080fd5b9091929391929390803590602001906401000000008111156106cf57600080fd5b8201836020820111156106e157600080fd5b8035906020019184602083028401116401000000008311171561070357600080fd5b90919293919293908035906020019064010000000081111561072457600080fd5b82018360208201111561073657600080fd5b8035906020019184600183028401116401000000008311171561075857600080fd5b9091929391929390505050611e4c565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b3480156107c857600080fd5b506107d1611e80565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561081f57600080fd5b506108626004803603602081101561083657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ea6565b005b34801561087057600080fd5b506108b36004803603602081101561088757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ef2565b005b3480156108c157600080fd5b506108ca611f3e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561091857600080fd5b506109e4600480360360a081101561092f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156109a057600080fd5b8201836020820111156109b257600080fd5b803590602001918460018302840111640100000000831117156109d457600080fd5b9091929391929390505050611f63565b60405180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200191505060405180910390f35b348015610a4457600080fd5b50610a8760048036036020811015610a5b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f95565b005b348015610a9557600080fd5b50610a9e61201d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b735750634e2312e07c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610b82612043565b6000610b8c611cc1565b90508073ffffffffffffffffffffffffffffffffffffffff16ff5b600160036000828254019250508190555060006003549050610bc76120c1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166367aec4c5866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015610c5857600080fd5b505afa158015610c6c573d6000803e3d6000fd5b505050506040513d6020811015610c8257600080fd5b810190808051906020019092919050505090506000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c88d1d79896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060606040518083038186803b158015610d2957600080fd5b505afa158015610d3d573d6000803e3d6000fd5b505050506040513d6060811015610d5357600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050925092509250823410151515610df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f496e73756666696369656e74204554480000000000000000000000000000000081525060200191505060405180910390fd5b60018460ff161415610f8f57858714151515610e7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e465420696473206d75737420626520756e697175650000000000000000000081525060200191505060405180910390fd5b600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166379f127c48d6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060806040518083038186803b158015610f0f57600080fd5b505afa158015610f23573d6000803e3d6000fd5b505050506040513d6080811015610f3957600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509350935093509350610f7b848c84612166565b610f86838b83612166565b505050506116e7565b60028460ff16141561113d57600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337e304398b6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050604080518083038186803b15801561102c57600080fd5b505afa158015611040573d6000803e3d6000fd5b505050506040513d604081101561105657600080fd5b810190808051906020019092919080519060200190929190505050915091508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561112257878914151515611121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e465420696473206d75737420626520756e697175650000000000000000000081525060200191505060405180910390fd5b5b61112c828a6123b7565b61113681896123b7565b50506116e6565b60038460ff16141561124f576000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634b6f62798c6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060606040518083038186803b1580156111dd57600080fd5b505afa1580156111f1573d6000803e3d6000fd5b505050506040513d606081101561120757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505092509250925061123c838b6123b7565b611247828a83612166565b5050506116e5565b60048460ff16141561142257600080600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637198459a8f6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060c06040518083038186803b1580156112f357600080fd5b505afa158015611307573d6000803e3d6000fd5b505050506040513d60c081101561131d57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505095509550955095509550955084861480156113785750815b80156113815750805b156113ff578b8d141515156113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e465420696473206d75737420626520756e697175650000000000000000000081525060200191505060405180910390fd5b5b61140b868e86856123cf565b611417858d85846123cf565b5050505050506116e4565b60058460ff161415611553576000806000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166360b2a8e78e6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060a06040518083038186803b1580156114c557600080fd5b505afa1580156114d9573d6000803e3d6000fd5b505050506040513d60a08110156114ef57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509450945094509450945061153e858d85846123cf565b611549848c84612166565b50505050506116e3565b60068460ff16141561167457600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de4a73a48d6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060806040518083038186803b1580156115f457600080fd5b505afa158015611608573d6000803e3d6000fd5b505050506040513d608081101561161e57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291905050509350935093509350611661848c84846123cf565b61166b838b6123b7565b505050506116e2565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4e6f6e2d6578697374656e7420666f726765207479706500000000000000000081525060200191505060405180910390fd5b5b5b5b5b5b600082111561184857600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b505050506040513d602081101561183557600080fd5b8101908080519060200190929190505050505b600034111561191a576000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f193505050501580156118be573d6000803e3d6000fd5b50600084340390506000811115611917573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611915573d6000803e3d6000fd5b505b50505b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a64a8ef033836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b505050505050505060035481141515611a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b50505050565b611a82612043565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ace612043565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b1a612043565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b66611ceb565b1515611bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d71612043565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611de2612043565b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063bc197c817c010000000000000000000000000000000000000000000000000000000002905098975050505050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611eae612043565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611efa612043565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063f23a6e617c01000000000000000000000000000000000000000000000000000000000290509695505050505050565b611f9d611ceb565b1515612011576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61201a8161277f565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61204b611ceb565b15156120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612164576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43616c6c6572206d7573742062652068756d616e20757365720000000000000081525060200191505060405180910390fd5b565b612192600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361290a565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bfbd90b5836040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561222157600080fd5b505afa158015612235573d6000803e3d6000fd5b505050506040513d602081101561224b57600080fd5b8101908080519060200190929190505050831415156122d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f496e636f7272656374206d6174657269616c207479706500000000000000000081525060200191505060405180910390fd5b8061230857612303600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612cb7565b6123b2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561239957600080fd5b505af11580156123ad573d6000803e3d6000fd5b505050505b505050565b6123c1828261290a565b6123cb8282612cb7565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156124bd57600080fd5b505afa1580156124d1573d6000803e3d6000fd5b505050506040513d60208110156124e757600080fd5b81019080805190602001909291905050501515612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f4e6f7420617070726f76656420746f207370656e64207573657227732045524381526020017f3131353520746f6b656e7300000000000000000000000000000000000000000081525060400191505060405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662fdd58e33846125dc57876125e0565b8688175b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561266357600080fd5b505afa158015612677573d6000803e3d6000fd5b505050506040513d602081101561268d57600080fd5b8101908080519060200190929190505050111515612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e73756666696369656e74206d6174657269616c2062616c616e636500000081525060200191505060405180910390fd5b8061274a5761274584600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612dd2565b612779565b6127788484600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561348e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561284a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526020017f646472657373000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008290503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561299357600080fd5b505afa1580156129a7573d6000803e3d6000fd5b505050506040513d60208110156129bd57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515612a59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f546f6b656e206e6f74206f776e6564206279207573657200000000000000000081525060200191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663081812fc846040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015612add57600080fd5b505afa158015612af1573d6000803e3d6000fd5b505050506040513d6020811015612b0757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161480612c3e57508073ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612c0257600080fd5b505afa158015612c16573d6000803e3d6000fd5b505050506040513d6020811015612c2c57600080fd5b81019080805190602001909291905050505b1515612cb2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f546f6b656e206e6f7420617070726f766564000000000000000000000000000081525060200191505060405180910390fd5b505050565b60008290508073ffffffffffffffffffffffffffffffffffffffff166342842e0e33600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015612db557600080fd5b505af1158015612dc9573d6000803e3d6000fd5b50505050505050565b606060006040519080825280601f01601f191660200182016040528015612e085781602001600182028038833980820191505090505b5090506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a3384612e545785612e56565b305b876001866040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612f35578082015181840152602081019050612f1a565b50505050905090810190601f168015612f625780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b158015612f8557600080fd5b505af1158015612f99573d6000803e3d6000fd5b505050508115613488576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561306057600080fd5b505afa158015613074573d6000803e3d6000fd5b505050506040513d602081101561308a57600080fd5b81019080805190602001909291905050509050606060016040519080825280602002602001820160405280156130cf5781602001602082028038833980820191505090505b509050606060016040519080825280602002602001820160405280156131045781602001602082028038833980820191505090505b5090508682600081518110151561311757fe5b9060200190602002018181525050600181600081518110151561313657fe5b90602001906020020181815250506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6089e1283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156131f55780820151818401526020810190506131da565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561323757808201518184015260208101905061321c565b50505050905001945050505050600060405180830381600087803b15801561325e57600080fd5b505af1158015613272573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561333357600080fd5b505afa158015613347573d6000803e3d6000fd5b505050506040513d602081101561335d57600080fd5b8101908080519060200190929190505050905060008482039050600081111561348257600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561344557600080fd5b505af1158015613459573d6000803e3d6000fd5b505050506040513d602081101561346f57600080fd5b8101908080519060200190929190505050505b50505050505b50505050565b606060016040519080825280602002602001820160405280156134c05781602001602082028038833980820191505090505b509050606060016040519080825280602002602001820160405280156134f55781602001602082028038833980820191505090505b50905084861782600081518110151561350a57fe5b9060200190602002018181525050600181600081518110151561352957fe5b9060200190602002018181525050606060006040519080825280601f01601f19166020018201604052801561356d5781602001600182028038833980820191505090505b5090506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632eb2c2d633866135b957876135bb565b305b8686866040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561369857808201518184015260208101905061367d565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156136da5780820151818401526020810190506136bf565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156137195780820151818401526020810190506136fe565b50505050905090810190601f1680156137465780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561376b57600080fd5b505af115801561377f573d6000803e3d6000fd5b505050508315613bc5576000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561384657600080fd5b505afa15801561385a573d6000803e3d6000fd5b505050506040513d602081101561387057600080fd5b810190808051906020019092919050505090506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f6089e1285856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015613934578082015181840152602081019050613919565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561397657808201518184015260208101905061395b565b50505050905001945050505050600060405180830381600087803b15801561399d57600080fd5b505af11580156139b1573d6000803e3d6000fd5b505050506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613a7257600080fd5b505afa158015613a86573d6000803e3d6000fd5b505050506040513d6020811015613a9c57600080fd5b81019080805190602001909291905050509050600082820390506000811115613bc157600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613b8457600080fd5b505af1158015613b98573d6000803e3d6000fd5b505050506040513d6020811015613bae57600080fd5b8101908080519060200190929190505050505b5050505b5050505050505056fea165627a7a72305820aa58ec00dea08e05690ab442bdedbe57ed3dd4a4f526f6897c724ab66c8e475b0029

Deployed Bytecode Sourcemap

22106:7758:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22829:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10580:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10580:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10580:238:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22887:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22887:172:0;;;;;;24052:3633;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24052:3633:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23605:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23605:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23605:140:0;;;;;;;;;;;;;;;;;;;;;;23067:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23067:98:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23067:98:0;;;;;;;;;;;;;;;;;;;;;;23906:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23906:138:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23906:138:0;;;;;;;;;;;;;;;;;;;;;;19681:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19681:140:0;;;;;;22536:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22536:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;18870:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18870:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;19236:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19236:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22424:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22424:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;23755:143;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23755:143:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23755:143:0;;;;;;;;;;;;;;;;;;;;;;22345:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22345:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;23173:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23173:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23173:108:0;;;;;;;;;;;;;;;;;;;;;;22254:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22254:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10291:248;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10291:248:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;10291:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;10291:248:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10291:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;10291:248:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;10291:248:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10291:248:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;10291:248:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;10291:248:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10291:248:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;10291:248:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22638:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22638:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;23449:144;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23449:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23449:144:0;;;;;;;;;;;;;;;;;;;;;;23289:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23289:152:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23289:152:0;;;;;;;;;;;;;;;;;;;;;;8079:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8079:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10086:197;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10086:197:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;10086:197:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;10086:197:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;10086:197:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;10086:197:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19976:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19976:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19976:109:0;;;;;;;;;;;;;;;;;;;;;;8167:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8167:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10580:238;10650:4;10690:10;10675:25;;:11;:25;;;;:84;;;;10749:10;10734:25;;:11;:25;;;;10675:84;10667:92;;10580:238;;;:::o;22887:172::-;22932:19;:17;:19::i;:::-;22960:28;23007:7;:5;:7::i;:::-;22960:56;;23038:12;23025:26;;;24052:3633;21847:1;21830:13;;:18;;;;;;;;;;;21859:20;21882:13;;21859:36;;24174:19;:17;:19::i;:::-;24210:15;24228;;;;;;;;;;;:28;;;24257:6;24228:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24228:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24228:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24228:36:0;;;;;;;;;;;;;;;;24210:54;;24274:15;24291:22;24315:18;24337:15;;;;;;;;;;;:41;;;24379:6;24337:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24337:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24337:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24337:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24273:113;;;;;;24418:7;24405:9;:20;;24397:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24473:1;24460:9;:14;;;24457:2708;;;24515:16;24495;:36;;24487:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24572:17;24602;24632:18;24663;24685:15;;;;;;;;;;;:48;;;24734:6;24685:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24685:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24685:56:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;24685:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24571:170;;;;;;;;24753:59;24769:9;24780:16;24798:13;24753:15;:59::i;:::-;24824;24840:9;24851:16;24869:13;24824:15;:59::i;:::-;24457:2708;;;;;;;24915:1;24902:9;:14;;;24899:2266;;;24930:17;24949;24970:15;;;;;;;;;;;:53;;;25024:6;24970:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24970:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24970:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24970:61:0;;;;;;;;;;;;;;;;;;;;;;;;;24929:102;;;;25058:9;25045:22;;:9;:22;;;25042:123;;;25110:16;25090;:36;;25082:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25042:123;25175:46;25193:9;25204:16;25175:17;:46::i;:::-;25232;25250:9;25261:16;25232:17;:46::i;:::-;24899:2266;;;;;25310:1;25297:9;:14;;;25294:1871;;;25325:17;25355;25385:18;25407:15;;;;;;;;;;;:61;;;25469:6;25407:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25407:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25407:69:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25407:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25324:152;;;;;;25488:46;25506:9;25517:16;25488:17;:46::i;:::-;25546:59;25562:9;25573:16;25591:13;25546:15;:59::i;:::-;25294:1871;;;;;;25637:1;25624:9;:14;;;25621:1544;;;25652:17;25681;25710:18;25740;25770:27;25809;25840:15;;;;;;;;;;;:51;;;25892:6;25840:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25840:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25840:59:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;25840:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25651:248;;;;;;;;;;;;25926:9;25913;:22;:48;;;;;25939:22;25913:48;:74;;;;;25965:22;25913:74;25910:175;;;26030:16;26010;:36;;26002:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25910:175;26095:86;26114:9;26125:16;26143:13;26158:22;26095:18;:86::i;:::-;26192;26211:9;26222:16;26240:13;26255:22;26192:18;:86::i;:::-;25621:1544;;;;;;;;;26310:1;26297:9;:14;;;26294:871;;;26325:17;26354;26383:18;26413;26443:27;26474:15;;;;;;;;;;;:55;;;26530:6;26474:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26474:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26474:63:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;26474:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26324:213;;;;;;;;;;26549:86;26568:9;26579:16;26597:13;26612:22;26549:18;:86::i;:::-;26647:59;26663:9;26674:16;26692:13;26647:15;:59::i;:::-;26294:871;;;;;;;;26738:1;26725:9;:14;;;26722:443;;;26753:17;26782;26811:18;26841:27;26872:15;;;;;;;;;;;:59;;;26932:6;26872:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26872:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26872:67:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;26872:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26752:187;;;;;;;;26951:86;26970:9;26981:16;26999:13;27014:22;26951:18;:86::i;:::-;27049:46;27067:9;27078:16;27049:17;:46::i;:::-;26722:443;;;;;;;27122:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26722:443;26294:871;25621:1544;25294:1871;24899:2266;24457:2708;27195:1;27178:14;:18;27175:116;;;27209:18;;;;;;;;;;;:31;;;27241:10;27253:5;;;;;;;;;;;27260:14;27209:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27209:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27209:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27209:66:0;;;;;;;;;;;;;;;;;27175:116;27336:1;27324:9;:13;27321:278;;;27366:29;27414:5;;;;;;;;;;;27366:55;;27432:13;:22;;:31;27455:7;27432:31;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27432:31:0;27476:14;27505:7;27493:9;:19;27476:36;;27535:1;27526:6;:10;27523:67;;;27551:10;:19;;:27;27571:6;27551:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27551:27:0;27523:67;27321:278;;;27609:16;;;;;;;;;;;:32;;;27642:10;27654;27609:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27609:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27609:56:0;;;;21906:1;;;;21942:13;;21926:12;:29;21918:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24052:3633;;;;:::o;23605:140::-;23666:19;:17;:19::i;:::-;23732:4;23694:16;;:43;;;;;;;;;;;;;;;;;;23605:140;:::o;23067:98::-;23117:19;:17;:19::i;:::-;23153:4;23145:5;;:12;;;;;;;;;;;;;;;;;;23067:98;:::o;23906:138::-;23976:19;:17;:19::i;:::-;24031:4;24004:17;;:32;;;;;;;;;;;;;;;;;;23906:138;:::o;19681:140::-;19082:9;:7;:9::i;:::-;19074:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19780:1;19743:40;;19764:6;;;;;;;;;;;19743:40;;;;;;;;;;;;19811:1;19794:6;;:19;;;;;;;;;;;;;;;;;;19681:140::o;22536:32::-;;;;;;;;;;;;;:::o;18870:79::-;18908:7;18935:6;;;;;;;;;;;18928:13;;18870:79;:::o;19236:92::-;19276:4;19314:6;;;;;;;;;;;19300:20;;:10;:20;;;19293:27;;19236:92;:::o;22424:48::-;;;;;;;;;;;;;:::o;23755:143::-;23827:19;:17;:19::i;:::-;23885:4;23855:13;;:35;;;;;;;;;;;;;;;;;;23755:143;:::o;22345:25::-;;;;;;;;;;;;;:::o;23173:108::-;23228:19;:17;:19::i;:::-;23269:4;23256:10;;:17;;;;;;;;;;;;;;;;;;23173:108;:::o;22254:20::-;;;;;;;;;;;;;:::o;10291:248::-;10469:6;365:10;10501:22;;10494:29;;10291:248;;;;;;;;;;:::o;22638:42::-;;;;;;;;;;;;;:::o;23449:144::-;23524:19;:17;:19::i;:::-;23580:4;23552:18;;:33;;;;;;;;;;;;;;;;;;23449:144;:::o;23289:152::-;23356:19;:17;:19::i;:::-;23428:4;23384:15;;:49;;;;;;;;;;;;;;;;;;23289:152;:::o;8079:34::-;;;;;;;;;;;;;:::o;10086:197::-;10235:6;217:10;10259:16;;10252:23;;10086:197;;;;;;;;:::o;19976:109::-;19082:9;:7;:9::i;:::-;19074:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20049:28;20068:8;20049:18;:28::i;:::-;19976:109;:::o;8167:31::-;;;;;;;;;;;;;:::o;29618:114::-;29678:9;:7;:9::i;:::-;29670:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29618:114::o;29740:121::-;29814:9;29800:23;;:10;:23;;;29792:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29740:121::o;27693:385::-;27790:69;27832:16;;;;;;;;;;;27851:7;27790:33;:69::i;:::-;27888:16;;;;;;;;;;;:33;;;27922:7;27888:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27888:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27888:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27888:42:0;;;;;;;;;;;;;;;;27876:8;:54;27868:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27967:12;:103;;28015:55;28043:16;;;;;;;;;;;28062:7;28015:19;:55::i;:::-;27967:103;;;27982:16;;;;;;;;;;;:21;;;28004:7;27982:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27982:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27982:30:0;;;;27967:103;27693:385;;;:::o;28087:187::-;28167:52;28201:8;28211:7;28167:33;:52::i;:::-;28228:38;28248:8;28258:7;28228:19;:38::i;:::-;28087:187;;:::o;28289:648::-;28434:13;;;;;;;;;;;:30;;;28465:10;28485:4;28434:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28434:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28434:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28434:57:0;;;;;;;;;;;;;;;;28426:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28668:1;28562:13;;;;;;;;;;;:23;;;28586:10;28598:21;:66;;28656:8;28598:66;;;28635:16;28624:8;:27;28598:66;28562:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28562:103:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28562:103:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28562:103:0;;;;;;;;;;;;;;;;:107;28554:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28714:21;:215;;28853:76;28894:8;28904:10;;;;;;;;;;;28916:12;28853:40;:76::i;:::-;28714:215;;;28746:97;28790:8;28800:16;28818:10;;;;;;;;;;;28830:12;28746:43;:97::i;:::-;28714:215;28289:648;;;;:::o;20191:229::-;20285:1;20265:22;;:8;:22;;;;20257:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20375:8;20346:38;;20367:6;;;;;;;;;;;20346:38;;;;;;;;;;;;20404:8;20395:6;;:17;;;;;;;;;;;;;;;;;;20191:229;:::o;28962:413::-;29067:25;29107:12;29067:53;;29171:10;29137:44;;:13;:21;;;29159:7;29137:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29137:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29137:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29137:30:0;;;;;;;;;;;;;;;;:44;;;29129:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29272:4;29226:51;;:13;:25;;;29252:7;29226:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29226:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29226:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29226:34:0;;;;;;;;;;;;;;;;:51;;;:112;;;;29281:13;:30;;;29312:10;29332:4;29281:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29281:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29281:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29281:57:0;;;;;;;;;;;;;;;;29226:112;29218:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28962:413;;;:::o;29387:219::-;29473:25;29513:12;29473:53;;29535:13;:30;;;29566:10;29578;;;;;;;;;;;29590:7;29535:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29535:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29535:63:0;;;;29387:219;;;:::o;8207:897::-;8322:22;8357:1;8347:12;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;8347:12:0;;;;8322:37;;8369:13;;;;;;;;;;;:30;;;8400:10;8412:4;:32;;8435:9;8412:32;;;8427:4;8412:32;8446:7;8455:1;8458:9;8369:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;8369:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8369:99:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8369:99:0;;;;8482:4;8479:618;;;8499:32;8534:17;;;;;;;;;;;:27;;;8570:4;8534:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8534:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8534:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8534:42:0;;;;;;;;;;;;;;;;8499:77;;8587:20;8624:1;8610:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;8610:16:0;;;;8587:39;;8637:23;8677:1;8663:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;8663:16:0;;;;8637:42;;8699:7;8690:3;8694:1;8690:6;;;;;;;;;;;;;;;;;:16;;;;;8729:1;8717:6;8724:1;8717:9;;;;;;;;;;;;;;;;;:13;;;;;8741;;;;;;;;;;;:18;;;8760:3;8765:6;8741:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;8741:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;8741:31:0;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8741:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8741:31:0;;;;8783:30;8816:17;;;;;;;;;;;:27;;;8852:4;8816:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8816:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8816:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8816:42:0;;;;;;;;;;;;;;;;8783:75;;8869:32;8929:24;8904:22;:49;8869:84;;8996:1;8969:24;:28;8966:122;;;9012:17;;;;;;;;;;;:26;;;9039:10;9051:24;9012:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9012:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9012:64:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9012:64:0;;;;;;;;;;;;;;;;;8966:122;8479:618;;;;;;8207:897;;;;:::o;9116:954::-;9252:23;9292:1;9278:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9278:16:0;;;;9252:42;;9303:23;9343:1;9329:16;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;9329:16:0;;;;9303:42;;9376:8;9366:7;:18;9354:6;9361:1;9354:9;;;;;;;;;;;;;;;;;:30;;;;;9405:1;9393:6;9400:1;9393:9;;;;;;;;;;;;;;;;;:13;;;;;9417:22;9452:1;9442:12;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;9442:12:0;;;;9417:37;;9463:13;;;;;;;;;;;:35;;;9499:10;9511:4;:32;;9534:9;9511:32;;;9526:4;9511:32;9545:6;9553;9561:9;9463:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9463:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9463:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9463:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9463:108:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9463:108:0;;;;9585:4;9582:475;;;9602:32;9637:17;;;;;;;;;;;:27;;;9673:4;9637:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9637:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9637:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9637:42:0;;;;;;;;;;;;;;;;9602:77;;9690:13;;;;;;;;;;;:18;;;9709:6;9717;9690:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9690:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9690:34:0;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9690:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9690:34:0;;;;9735:30;9768:17;;;;;;;;;;;:27;;;9804:4;9768:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9768:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9768:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9768:42:0;;;;;;;;;;;;;;;;9735:75;;9821:32;9881:24;9856:22;:49;9821:84;;9948:1;9921:24;:28;9918:122;;;9964:17;;;;;;;;;;;:26;;;9991:10;10003:24;9964:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9964:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9964:64:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9964:64:0;;;;;;;;;;;;;;;;;9918:122;9582:475;;;;9116:954;;;;;;;:::o

Swarm Source

bzzr://aa58ec00dea08e05690ab442bdedbe57ed3dd4a4f526f6897c724ab66c8e475b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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