POL Price: $0.621285 (-0.48%)
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 POL

POL Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Safe Transfer Fr...525760032024-01-21 8:42:08327 days ago1705826528IN
0xd38fe157...E314a2629
0 POL0.0011262531.92691909
Safe Transfer Fr...525759712024-01-21 8:41:00327 days ago1705826460IN
0xd38fe157...E314a2629
0 POL0.0018507532.36944985
Set Approval For...478033342023-09-21 8:45:12449 days ago1695285912IN
0xd38fe157...E314a2629
0 POL0.0038459383.53652811
Set Approval For...439140372023-06-14 20:15:40548 days ago1686773740IN
0xd38fe157...E314a2629
0 POL0.03192757693.48971405
Set Approval For...366969302022-12-11 11:03:30733 days ago1670756610IN
0xd38fe157...E314a2629
0 POL0.001926441.76661075
Set Approval For...366968362022-12-11 11:00:18733 days ago1670756418IN
0xd38fe157...E314a2629
0 POL0.0021753947.25105029
Burn362448902022-11-30 7:40:01744 days ago1669794001IN
0xd38fe157...E314a2629
0 POL0.0009679634.74262995
Set Approval For...352059572022-11-04 21:44:39770 days ago1667598279IN
0xd38fe157...E314a2629
0 POL0.0042703492.75498771
Mint342702762022-10-12 23:40:56793 days ago1665618056IN
0xd38fe157...E314a2629
0 POL0.14006859519.39583993
Mint342696012022-10-12 23:17:42793 days ago1665616662IN
0xd38fe157...E314a2629
0 POL0.17727375657.35830788
Set Approval For...342463832022-10-12 9:51:17793 days ago1665568277IN
0xd38fe157...E314a2629
0 POL0.0007263330.00000005
Mint341652422022-10-10 10:53:50795 days ago1665399230IN
0xd38fe157...E314a2629
0 POL0.0080895630.00000001
Mint341651442022-10-10 10:50:30795 days ago1665399030IN
0xd38fe157...E314a2629
0 POL0.0080899230.00000001
Mint341385022022-10-09 19:25:07796 days ago1665343507IN
0xd38fe157...E314a2629
0 POL0.0083707431.04
Set Approval For...341384912022-10-09 19:24:41796 days ago1665343481IN
0xd38fe157...E314a2629
0 POL0.0013836930.00000001
Set Approval For...340300472022-10-07 4:15:59798 days ago1665116159IN
0xd38fe157...E314a2629
0 POL0.0013836930.00000001
Mint339794062022-10-05 22:48:43800 days ago1665010123IN
0xd38fe157...E314a2629
0 POL0.0080902830.00000001
Mint339792732022-10-05 22:44:09800 days ago1665009849IN
0xd38fe157...E314a2629
0 POL0.0080902830.00000001
Mint339791042022-10-05 22:38:19800 days ago1665009499IN
0xd38fe157...E314a2629
0 POL0.0080888430.00000001
Mint339788792022-10-05 22:30:33800 days ago1665009033IN
0xd38fe157...E314a2629
0 POL0.0086846432.204
Mint339788652022-10-05 22:30:05800 days ago1665009005IN
0xd38fe157...E314a2629
0 POL0.0080899230.00000001
Mint339785762022-10-05 22:20:07800 days ago1665008407IN
0xd38fe157...E314a2629
0 POL0.0080899230.00000001
Set Approval For...339785312022-10-05 22:18:33800 days ago1665008313IN
0xd38fe157...E314a2629
0 POL0.0013874130.08082907
Mint337708672022-09-30 22:19:23805 days ago1664576363IN
0xd38fe157...E314a2629
0 POL0.0088935132.98
Mint337707792022-09-30 22:16:23805 days ago1664576183IN
0xd38fe157...E314a2629
0 POL0.0098450436.50692
View all transactions

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

Contract Source Code Verified (Exact Match)

Contract Name:
SandStorm

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-02-14
*/

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

library Strings {

    function toString(uint256 value) internal pure returns (string memory) {

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

library EnumerableMap {

    struct MapEntry {
        bytes32 _key;
        bytes32 _value;
    }

    struct Map {
        MapEntry[] _entries;

        mapping (bytes32 => uint256) _indexes;
    }

    function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex == 0) { // Equivalent to !contains(map, key)
            map._entries.push(MapEntry({ _key: key, _value: value }));
            map._indexes[key] = map._entries.length;
            return true;
        } else {
            map._entries[keyIndex - 1]._value = value;
            return false;
        }
    }

    function _remove(Map storage map, bytes32 key) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex != 0) { // Equivalent to contains(map, key)
            uint256 toDeleteIndex = keyIndex - 1;
            uint256 lastIndex = map._entries.length - 1;
            MapEntry storage lastEntry = map._entries[lastIndex];

            map._entries[toDeleteIndex] = lastEntry;
            map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based

            map._entries.pop();

            delete map._indexes[key];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Map storage map, bytes32 key) private view returns (bool) {
        return map._indexes[key] != 0;
    }

    function _length(Map storage map) private view returns (uint256) {
        return map._entries.length;
    }

    function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {
        require(map._entries.length > index, "EnumerableMap: index out of bounds");

        MapEntry storage entry = map._entries[index];
        return (entry._key, entry._value);
    }

    function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)
        return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    struct UintToAddressMap {
        Map _inner;
    }

    function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {
        return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
    }

    function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {
        return _remove(map._inner, bytes32(key));
    }

    function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {
        return _contains(map._inner, bytes32(key));
    }

    function length(UintToAddressMap storage map) internal view returns (uint256) {
        return _length(map._inner);
    }

    function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {
        (bytes32 key, bytes32 value) = _at(map._inner, index);
        return (uint256(key), address(uint160(uint256(value))));
    }

    function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {
        (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
        return (success, address(uint160(uint256(value))));
    }

    function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key)))));
    }

    function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));
    }
}

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

interface IERC165 {

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

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    event tokenBaseURI(string value);


    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function royaltyFee(uint256 tokenId) external view returns(uint256);
    function getCreator(uint256 tokenId) external view returns(address);
    function tokenURI(uint256 tokenId) external view returns (string memory);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

interface IERC1155MetadataURI is IERC1155 {
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external
        returns(bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external
        returns(bytes4);
}

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}
library Address {

    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;
    using Strings for uint256;
    using EnumerableMap for EnumerableMap.UintToAddressMap;

    // Mapping from token ID to account balances
    mapping (uint256 => address) private creators;
    mapping (uint256 => uint256) private _royaltyFee;
    mapping (uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping (address => mapping(address => bool)) private _operatorApprovals;
    string public tokenURIPrefix = "https://gateway.pinata.cloud/ipfs/";

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    EnumerableMap.UintToAddressMap private _tokenOwners;

    string private _name;

    string private _symbol;

    bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;

    bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;

        _registerInterface(_INTERFACE_ID_ERC1155);
        _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
        * @dev Internal function to set the token URI for a given token.
        * Reverts if the token ID does not exist.
        * @param tokenId uint256 ID of the token to set its URI
        * @param uri string URI to assign
    */    

    function _setTokenURI(uint256 tokenId, string memory uri) internal {
        _tokenURIs[tokenId] = uri;
    }

    /**
        @notice Get the royalty associated with tokenID.
        @param tokenId     ID of the Token.
        @return        royaltyFee of given ID.
     */

    function royaltyFee(uint256 tokenId) public view override returns(uint256) {
        return _royaltyFee[tokenId];
    }

    /**
        @notice Get the creator of given tokenID.
        @param tokenId     ID of the Token.
        @return        creator of given ID.
     */    

    function getCreator(uint256 tokenId) public view virtual override returns(address) {
        return creators[tokenId];
    }

    /**
        * @dev Internal function to set the token URI for all the tokens.
        * @param _tokenURIPrefix string memory _tokenURIPrefix of the tokens.
    */   

    function _setTokenURIPrefix(string memory _tokenURIPrefix) internal {
        tokenURIPrefix = _tokenURIPrefix;
        emit tokenBaseURI(_tokenURIPrefix);
    }

    /**
        * @dev Returns an URI for a given token ID.
        * Throws if the token ID does not exist. May return an empty string.
        * @param tokenId uint256 ID of the token to query
    */    

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC1155Metadata: URI query for nonexistent token");
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = tokenURIPrefix;

        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        return string(abi.encodePacked(base, tokenId.toString()));
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _tokenOwners.contains(tokenId);
    }

    /**
        @notice Get the balance of an account's Tokens.
        @param account  The address of the token holder
        @param tokenId     ID of the Token
        @return        The owner's balance of the Token type requested
     */

    function balanceOf(address account, uint256 tokenId) public view override returns (uint256) {
        require(_exists(tokenId), "ERC1155Metadata: balance query for nonexistent token");
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[tokenId][account];
    }


    /**
        @notice Get the balance of multiple account/token pairs
        @param accounts The addresses of the token holders
        @param ids    ID of the Tokens
        @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
     */

    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    )
        public
        view
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            require(accounts[i] != address(0), "ERC1155: batch balance query for the zero address");
            batchBalances[i] = _balances[ids[i]][accounts[i]];
        }

        return batchBalances;
    }

    /**
        @notice Enable or disable approval for a third party ("operator") to manage all of the caller's tokens.
        @dev MUST emit the ApprovalForAll event on success.
        @param operator  Address to add to the set of authorized operators
        @param approved  True if the operator is approved, false to revoke approval
    */

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
        @notice Queries the approval status of an operator for a given owner.
        @param account     The owner of the Tokens
        @param operator  Address of authorized operator
        @return           True if the operator is approved, false if not
    */

    function isApprovedForAll(address account, address operator) public view override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
        @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
        MUST revert on any other error.
        MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
        After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenId      ID of the token type
        @param amount   Transfer amount
        @param data    Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
    */    

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        uint256 amount,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        require( _balances[tokenId][from] >= amount,"ERC1155: insufficient balance for transfer");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(tokenId), _asSingletonArray(amount), data);
        
        _balances[tokenId][from] = _balances[tokenId][from] - amount;
        _balances[tokenId][to] = _balances[tokenId][to] + amount;

        emit TransferSingle(operator, from, to, tokenId, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, tokenId, amount, data);
    }

    /**
        @notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if length of `_ids` is not the same as length of `_values`.
        MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient.
        MUST revert on any other error.
        MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
        Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
        After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenIds     IDs of each token type (order and length must match _values array)
        @param amounts  Transfer amounts per token type (order and length must match _ids array)
        @param data    Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to`
    */

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, tokenIds, amounts, data);

        for (uint256 i = 0; i < tokenIds.length; ++i) {
            uint256 tokenId = tokenIds[i];
            uint256 amount = amounts[i];
            require( _balances[tokenId][from] >= amount,"ERC1155: insufficient balance for transfer");
            _balances[tokenId][from] = _balances[tokenId][from] - amount;
            _balances[tokenId][to] = _balances[tokenId][to] + amount;
        }

        emit TransferBatch(operator, from, to, tokenIds, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, tokenIds, amounts, data);
    }



    /**
        * @dev Internal function to mint a new token.
        * Reverts if the given token ID already exists.
        * @param tokenId uint256 ID of the token to be minted
        * @param _supply uint256 supply of the token to be minted
        * @param _uri string memory URI of the token to be minted
        * @param _fee uint256 royalty of the token to be minted
    */

    function _mint(uint256 tokenId, uint256 _supply, string memory _uri, uint256 _fee) internal {
        require(!_exists(tokenId), "ERC1155: token already minted");
        require(_supply != 0, "Supply should be positive");
        require(bytes(_uri).length > 0, "uri should be set");

        creators[tokenId] = msg.sender;
        _tokenOwners.set(tokenId, msg.sender);
        _royaltyFee[tokenId] = _fee;
        _balances[tokenId][msg.sender] = _supply;
        _setTokenURI(tokenId, _uri);

        emit TransferSingle(msg.sender, address(0x0), msg.sender, tokenId, _supply);
        emit URI(_uri, tokenId);
    }

    /**
        * @dev version of {_mint}.
        *
        * Requirements:
        *
        * - `tokenIds` and `amounts` must have the same length.
    */

    function _mintBatch(address to, uint256[] memory tokenIds, uint256[] memory amounts, bytes memory data) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, tokenIds, amounts, data);

        for (uint i = 0; i < tokenIds.length; i++) {
            _balances[tokenIds[i]][to] = amounts[i] + _balances[tokenIds[i]][to];
        }

        emit TransferBatch(operator, address(0), to, tokenIds, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, tokenIds, amounts, data);
    }

    /**
        * @dev Internal function to burn a specific token.
        * Reverts if the token does not exist.
        * Deprecated, use {ERC721-_burn} instead.
        * @param account owner of the token to burn
        * @param tokenId uint256 ID of the token being burned
        * @param amount uint256 amount of supply being burned
    */    

    function _burn(address account, uint256 tokenId, uint256 amount) internal virtual {
        require(_exists(tokenId), "ERC1155Metadata: burn query for nonexistent token");
        require(account != address(0), "ERC1155: burn from the zero address");
        require( _balances[tokenId][account] >= amount,"ERC1155: insufficient balance for transfer");
        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(tokenId), _asSingletonArray(amount), "");

        _balances[tokenId][account] = _balances[tokenId][account] - amount;


        emit TransferSingle(operator, account, address(0), tokenId, amount);
    }


    /**
        * @dev version of {_burn}.
        * Requirements:
        * - `ids` and `amounts` must have the same length.
    */

    function _burnBatch(address account, uint256[] memory tokenIds, uint256[] memory amounts) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), tokenIds, amounts, "");

        for (uint i = 0; i < tokenIds.length; i++) {
        require( _balances[tokenIds[i]][account] >= amounts[i],"ERC1155: insufficient balance for transfer");
            _balances[tokenIds[i]][account] = _balances[tokenIds[i]][account] - amounts[i];
        }

        emit TransferBatch(operator, account, address(0), tokenIds, amounts);
    }


    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        internal virtual
    { }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 tokenId,
        uint256 amount,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, tokenId, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, tokenIds, amounts, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

contract SandStorm is ERC1155 {

    uint256 newItemId = 1;
    address public owner;
    mapping(uint256 => bool) private usedNonce;

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

    struct Sign {
        uint8 v;
        bytes32 r;
        bytes32 s;
        uint256 nonce;
    }

    constructor (string memory name, string memory symbol) ERC1155 (name, symbol) {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /** @dev change the Ownership from current owner to newOwner address
        @param newOwner : newOwner address */    

    function transferOwnership(address newOwner) external onlyOwner returns(bool){
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        owner = newOwner;
        emit OwnershipTransferred(owner, newOwner);
        return true;
    }

    /** @dev verify the tokenURI that should be verified by owner of the contract.
        *requirements: signer must be owner of the contract
        @param tokenURI string memory URI of token to be minted.
        @param sign struct combination of uint8, bytes32, bytes 32 are v, r, s.
        note : sign value must be in the order of v, r, s.

    */

    function verifySign(string memory tokenURI, address caller, Sign memory sign) internal view {
        bytes32 hash = keccak256(abi.encodePacked(this, caller, tokenURI, sign.nonce));
        require(owner == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), sign.v, sign.r, sign.s), "Owner sign verification failed");
    }

    function mint(string memory uri, uint256 supply, uint256 fee, Sign memory sign)  external {
        require(!usedNonce[sign.nonce], "Nonce : Invalid Nonce");
        usedNonce[sign.nonce] = true;
        verifySign(uri, _msgSender(), sign);
        _mint(newItemId, supply, uri,fee);
        newItemId = newItemId + 1;
    }

    function setBaseURI(string memory _baseURI) external onlyOwner{
         _setTokenURIPrefix(_baseURI);
    }

    function burn(uint256 tokenId, uint256 supply) external {
        _burn(msg.sender, tokenId, supply);
    }

    function burnBatch(uint256[] memory tokenIds, uint256[] memory amounts) external {
        _burnBatch(msg.sender, tokenIds, amounts);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"}],"name":"tokenBaseURI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"},{"components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"internalType":"struct SandStorm.Sign","name":"sign","type":"tuple"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"royaltyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURIPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60e0604052602260808181529062002c4960a0398051620000299160059160209091019062000164565b506001600b553480156200003c57600080fd5b5060405162002c6b38038062002c6b8339810160408190526200005f91620002bd565b8181620000736301ffc9a760e01b620000e0565b81516200008890600990602085019062000164565b5080516200009e90600a90602084019062000164565b50620000b1636cdb3d1360e11b620000e0565b620000c36303a24d0760e21b620000e0565b5050600c80546001600160a01b0319163317905550620003779050565b6001600160e01b031980821614156200013f5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054620001729062000324565b90600052602060002090601f016020900481019282620001965760008555620001e1565b82601f10620001b157805160ff1916838001178555620001e1565b82800160010185558215620001e1579182015b82811115620001e1578251825591602001919060010190620001c4565b50620001ef929150620001f3565b5090565b5b80821115620001ef5760008155600101620001f4565b600082601f8301126200021b578081fd5b81516001600160401b038082111562000238576200023862000361565b604051601f8301601f19908116603f0116810190828211818310171562000263576200026362000361565b816040528381526020925086838588010111156200027f578485fd5b8491505b83821015620002a2578582018301518183018401529082019062000283565b83821115620002b357848385830101525b9695505050505050565b60008060408385031215620002d0578182fd5b82516001600160401b0380821115620002e7578384fd5b620002f5868387016200020a565b935060208501519150808211156200030b578283fd5b506200031a858286016200020a565b9150509250929050565b600181811c908216806200033957607f821691505b602082108114156200035b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6128c280620003876000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c8063a22cb465116100ad578063c87b56dd11610071578063c87b56dd1461028c578063d48e638a1461029f578063e985e9c5146102c8578063f242432a14610304578063f2fde38b1461031757600080fd5b8063a22cb4651461022b578063b390c0ab1461023e578063c0ac998314610251578063c3c7945514610259578063c57dc2351461026c57600080fd5b80634e1273f4116100f45780634e1273f4146101b257806355f804b3146101d257806383ca4b6f146101e55780638da5cb5b146101f857806395d89b411461022357600080fd5b8062fdd58e1461012557806301ffc9a71461014b57806306fdde03146101885780632eb2c2d61461019d575b600080fd5b610138610133366004612070565b61032a565b6040519081526020015b60405180910390f35b6101786101593660046121ac565b6001600160e01b03191660009081526020819052604090205460ff1690565b6040519015158152602001610142565b610190610435565b60405161014291906124ba565b6101b06101ab366004611f2f565b6104c7565b005b6101c56101c0366004612099565b610748565b6040516101429190612479565b6101b06101e03660046121e4565b61097a565b6101b06101f3366004612163565b6109e0565b600c5461020b906001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101906109ef565b6101b0610239366004612036565b6109fe565b6101b061024c3660046122d3565b610ad5565b610190610ae0565b6101b0610267366004612216565b610b6e565b61013861027a3660046122bb565b60009081526002602052604090205490565b61019061029a3660046122bb565b610c1e565b61020b6102ad3660046122bb565b6000908152600160205260409020546001600160a01b031690565b6101786102d6366004611efd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6101b0610312366004611fd4565b610e14565b610178610325366004611ee3565b610ff1565b600061033582611105565b6103a35760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661040d5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161039a565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b606060098054610444906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610470906126d8565b80156104bd5780601f10610492576101008083540402835291602001916104bd565b820191906000526020600020905b8154815290600101906020018083116104a057829003601f168201915b5050505050905090565b81518351146104e85760405162461bcd60e51b815260040161039a906125e7565b6001600160a01b03841661050e5760405162461bcd60e51b815260040161039a90612515565b6001600160a01b03851633148061052a575061052a85336102d6565b6105915760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161039a565b3360005b84518110156106da5760008582815181106105c057634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106105ec57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526003835260408082206001600160a01b038e168352909352919091205490915081111561063c5760405162461bcd60e51b815260040161039a9061259d565b60008281526003602090815260408083206001600160a01b038d16845290915290205461066a90829061267e565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106a2908290612652565b60009283526003602090815260408085206001600160a01b038c16865290915290922091909155506106d381612764565b9050610595565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161072a92919061248c565b60405180910390a4610740818787878787611118565b505050505050565b606081518351146107ad5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161039a565b600083516001600160401b038111156107d657634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107ff578160200160208202803683370190505b50905060005b84518110156109725760006001600160a01b031685828151811061083957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108b25760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161039a565b600360008583815181106108d657634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061090e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061095757634e487b7160e01b600052603260045260246000fd5b602090810291909101015261096b81612764565b9050610805565b509392505050565b600c546001600160a01b031633146109d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6109dd8161128c565b50565b6109eb3383836112da565b5050565b6060600a8054610444906126d8565b336001600160a01b0383161415610a695760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161039a565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109eb338383611545565b60058054610aed906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b19906126d8565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b505050505081565b60608101516000908152600d602052604090205460ff1615610bca5760405162461bcd60e51b81526020600482015260156024820152744e6f6e6365203a20496e76616c6964204e6f6e636560581b604482015260640161039a565b60608101516000908152600d60205260409020805460ff19166001179055610bf984610bf33390565b836116db565b610c07600b5484868561182a565b600b54610c15906001612652565b600b5550505050565b6060610c2982611105565b610c8e5760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b606482015260840161039a565b60008281526006602052604081208054610ca7906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd3906126d8565b8015610d205780601f10610cf557610100808354040283529160200191610d20565b820191906000526020600020905b815481529060010190602001808311610d0357829003601f168201915b50505050509050600060058054610d36906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d62906126d8565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b50505050509050805160001415610dc7575092915050565b815115610df9578082604051602001610de19291906123a7565b60405160208183030381529060405292505050919050565b80610e03856119f0565b604051602001610de19291906123a7565b6001600160a01b038416610e3a5760405162461bcd60e51b815260040161039a90612515565b6001600160a01b038516331480610e565750610e5685336102d6565b610eb45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161039a565b60008381526003602090815260408083206001600160a01b0389168452909152902054821115610ef65760405162461bcd60e51b815260040161039a9061259d565b33610f16818787610f0688611b22565b610f0f88611b22565b5050505050565b60008481526003602090815260408083206001600160a01b038a168452909152902054610f4490849061267e565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f7c908490612652565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610740818787878787611b7b565b600c546000906001600160a01b0316331461104e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6001600160a01b0382166110b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039a565b600c80546001600160a01b0319166001600160a01b03841690811790915560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35060015b919050565b6000611112600783611c45565b92915050565b6001600160a01b0384163b156107405760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061115c90899089908890889088906004016123d6565b602060405180830381600087803b15801561117657600080fd5b505af19250505080156111a6575060408051601f3d908101601f191682019092526111a3918101906121c8565b60015b611253576111b26127d5565b806308c379a014156111ec57506111c76127ed565b806111d257506111ee565b8060405162461bcd60e51b815260040161039a91906124ba565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039a565b6001600160e01b0319811663bc197c8160e01b146112835760405162461bcd60e51b815260040161039a906124cd565b50505050505050565b805161129f906005906020840190611d51565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc306816040516112cf91906124ba565b60405180910390a150565b6001600160a01b0383166113005760405162461bcd60e51b815260040161039a9061255a565b80518251146113215760405162461bcd60e51b815260040161039a906125e7565b604080516020810190915260009081905233905b83518110156114e65782818151811061135e57634e487b7160e01b600052603260045260246000fd5b60200260200101516003600086848151811061138a57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000205410156113e25760405162461bcd60e51b815260040161039a9061259d565b82818151811061140257634e487b7160e01b600052603260045260246000fd5b60200260200101516003600086848151811061142e57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002054611472919061267e565b6003600086848151811061149657634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208190555080806114de90612764565b915050611335565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161153792919061248c565b60405180910390a450505050565b61154e82611105565b6115b45760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b606482015260840161039a565b6001600160a01b0383166115da5760405162461bcd60e51b815260040161039a9061255a565b60008281526003602090815260408083206001600160a01b038716845290915290205481111561161c5760405162461bcd60e51b815260040161039a9061259d565b3361164c8185600061162d87611b22565b61163687611b22565b5050604080516020810190915260009052505050565b60008381526003602090815260408083206001600160a01b038816845290915290205461167a90839061267e565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101611537565b600030838584606001516040516020016116f8949392919061235a565b60405160208183030381529060405280519060200120905060018160405160200161174f91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa1580156117bb573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506118245760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c65640000604482015260640161039a565b50505050565b61183384611105565b156118805760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e746564000000604482015260640161039a565b826118cd5760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f73697469766500000000000000604482015260640161039a565b60008251116119125760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b604482015260640161039a565b600084815260016020526040902080546001600160a01b03191633908117909155611941906007908690611c60565b5060008481526002602090815260408083208490556003825280832033845290915290208390556119728483611c7e565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516119e291906124ba565b60405180910390a250505050565b606081611a145750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a3e5780611a2881612764565b9150611a379050600a8361266a565b9150611a18565b6000816001600160401b03811115611a6657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a90576020820181803683370190505b5090506000611aa060018461267e565b90508593505b8315611b1957611ab7600a8561277f565b611ac2906030612652565b60f81b8282611ad0816126c1565b935081518110611af057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611b12600a8561266a565b9350611aa6565b50949350505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611b6a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107405760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611bbf9089908990889088908890600401612434565b602060405180830381600087803b158015611bd957600080fd5b505af1925050508015611c09575060408051601f3d908101601f19168201909252611c06918101906121c8565b60015b611c15576111b26127d5565b6001600160e01b0319811663f23a6e6160e01b146112835760405162461bcd60e51b815260040161039a906124cd565b600081815260018301602052604081205415155b9392505050565b6000611c7684846001600160a01b038516611ca2565b949350505050565b60008281526006602090815260409091208251611c9d92840190611d51565b505050565b600082815260018401602052604081205480611d07575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611c59565b8285611d1460018461267e565b81548110611d3257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050611c59565b828054611d5d906126d8565b90600052602060002090601f016020900481019282611d7f5760008555611dc5565b82601f10611d9857805160ff1916838001178555611dc5565b82800160010185558215611dc5579182015b82811115611dc5578251825591602001919060010190611daa565b50611dd1929150611dd5565b5090565b5b80821115611dd15760008155600101611dd6565b80356001600160a01b038116811461110057600080fd5b600082601f830112611e11578081fd5b81356020611e1e8261262f565b604051611e2b8282612738565b8381528281019150858301600585901b87018401881015611e4a578586fd5b855b85811015611e6857813584529284019290840190600101611e4c565b5090979650505050505050565b600082601f830112611e85578081fd5b81356001600160401b03811115611e9e57611e9e6127bf565b604051611eb5601f8301601f191660200182612738565b818152846020838601011115611ec9578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611ef4578081fd5b611c5982611dea565b60008060408385031215611f0f578081fd5b611f1883611dea565b9150611f2660208401611dea565b90509250929050565b600080600080600060a08688031215611f46578081fd5b611f4f86611dea565b9450611f5d60208701611dea565b935060408601356001600160401b0380821115611f78578283fd5b611f8489838a01611e01565b94506060880135915080821115611f99578283fd5b611fa589838a01611e01565b93506080880135915080821115611fba578283fd5b50611fc788828901611e75565b9150509295509295909350565b600080600080600060a08688031215611feb578081fd5b611ff486611dea565b945061200260208701611dea565b9350604086013592506060860135915060808601356001600160401b0381111561202a578182fd5b611fc788828901611e75565b60008060408385031215612048578182fd5b61205183611dea565b915060208301358015158114612065578182fd5b809150509250929050565b60008060408385031215612082578182fd5b61208b83611dea565b946020939093013593505050565b600080604083850312156120ab578182fd5b82356001600160401b03808211156120c1578384fd5b818501915085601f8301126120d4578384fd5b813560206120e18261262f565b6040516120ee8282612738565b8381528281019150858301600585901b870184018b101561210d578889fd5b8896505b848710156121365761212281611dea565b835260019690960195918301918301612111565b509650508601359250508082111561214c578283fd5b5061215985828601611e01565b9150509250929050565b60008060408385031215612175578182fd5b82356001600160401b038082111561218b578384fd5b61219786838701611e01565b9350602085013591508082111561214c578283fd5b6000602082840312156121bd578081fd5b8135611c5981612876565b6000602082840312156121d9578081fd5b8151611c5981612876565b6000602082840312156121f5578081fd5b81356001600160401b0381111561220a578182fd5b611c7684828501611e75565b60008060008084860360e081121561222c578283fd5b85356001600160401b03811115612241578384fd5b61224d88828901611e75565b95505060208601359350604086013592506080605f198201121561226f578182fd5b5060405161227c81612713565b606086013560ff8116811461228f578283fd5b81526080860135602082015260a0860135604082015260c0909501356060860152509194909350909190565b6000602082840312156122cc578081fd5b5035919050565b600080604083850312156122e5578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561232357815187529582019590820190600101612307565b509495945050505050565b60008151808452612346816020860160208601612695565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff19808760601b168352808660601b166014840152508351612391816028850160208801612695565b6028920191820192909252604801949350505050565b600083516123b9818460208801612695565b8351908301906123cd818360208801612695565b01949350505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612402908301866122f4565b828103606084015261241481866122f4565b90508281036080840152612428818561232e565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061246e9083018461232e565b979650505050505050565b602081526000611c5960208301846122f4565b60408152600061249f60408301856122f4565b82810360208401526124b181856122f4565b95945050505050565b602081526000611c59602083018461232e565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b03821115612648576126486127bf565b5060051b60200190565b6000821982111561266557612665612793565b500190565b600082612679576126796127a9565b500490565b60008282101561269057612690612793565b500390565b60005b838110156126b0578181015183820152602001612698565b838111156118245750506000910152565b6000816126d0576126d0612793565b506000190190565b600181811c908216806126ec57607f821691505b6020821081141561270d57634e487b7160e01b600052602260045260246000fd5b50919050565b608081018181106001600160401b0382111715612732576127326127bf565b60405250565b601f8201601f191681016001600160401b038111828210171561275d5761275d6127bf565b6040525050565b600060001982141561277857612778612793565b5060010190565b60008261278e5761278e6127a9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156127ea57600481823e5160e01c5b90565b600060443d10156127fb5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561282a57505050505090565b82850191508151818111156128425750505050505090565b843d870101602082850101111561285c5750505050505090565b61286b60208286010187612738565b509095945050505050565b6001600160e01b0319811681146109dd57600080fdfea2646970667358221220c36d4ffb8a6a45e8b98c33bbce66eb126eb4bfe4e4d19d991ab79d3189ecb02a64736f6c6343000804003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000953616e6453746f726d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004534d544100000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101205760003560e01c8063a22cb465116100ad578063c87b56dd11610071578063c87b56dd1461028c578063d48e638a1461029f578063e985e9c5146102c8578063f242432a14610304578063f2fde38b1461031757600080fd5b8063a22cb4651461022b578063b390c0ab1461023e578063c0ac998314610251578063c3c7945514610259578063c57dc2351461026c57600080fd5b80634e1273f4116100f45780634e1273f4146101b257806355f804b3146101d257806383ca4b6f146101e55780638da5cb5b146101f857806395d89b411461022357600080fd5b8062fdd58e1461012557806301ffc9a71461014b57806306fdde03146101885780632eb2c2d61461019d575b600080fd5b610138610133366004612070565b61032a565b6040519081526020015b60405180910390f35b6101786101593660046121ac565b6001600160e01b03191660009081526020819052604090205460ff1690565b6040519015158152602001610142565b610190610435565b60405161014291906124ba565b6101b06101ab366004611f2f565b6104c7565b005b6101c56101c0366004612099565b610748565b6040516101429190612479565b6101b06101e03660046121e4565b61097a565b6101b06101f3366004612163565b6109e0565b600c5461020b906001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101906109ef565b6101b0610239366004612036565b6109fe565b6101b061024c3660046122d3565b610ad5565b610190610ae0565b6101b0610267366004612216565b610b6e565b61013861027a3660046122bb565b60009081526002602052604090205490565b61019061029a3660046122bb565b610c1e565b61020b6102ad3660046122bb565b6000908152600160205260409020546001600160a01b031690565b6101786102d6366004611efd565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6101b0610312366004611fd4565b610e14565b610178610325366004611ee3565b610ff1565b600061033582611105565b6103a35760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661040d5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b606482015260840161039a565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b606060098054610444906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610470906126d8565b80156104bd5780601f10610492576101008083540402835291602001916104bd565b820191906000526020600020905b8154815290600101906020018083116104a057829003601f168201915b5050505050905090565b81518351146104e85760405162461bcd60e51b815260040161039a906125e7565b6001600160a01b03841661050e5760405162461bcd60e51b815260040161039a90612515565b6001600160a01b03851633148061052a575061052a85336102d6565b6105915760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161039a565b3360005b84518110156106da5760008582815181106105c057634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008583815181106105ec57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008481526003835260408082206001600160a01b038e168352909352919091205490915081111561063c5760405162461bcd60e51b815260040161039a9061259d565b60008281526003602090815260408083206001600160a01b038d16845290915290205461066a90829061267e565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106a2908290612652565b60009283526003602090815260408085206001600160a01b038c16865290915290922091909155506106d381612764565b9050610595565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161072a92919061248c565b60405180910390a4610740818787878787611118565b505050505050565b606081518351146107ad5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161039a565b600083516001600160401b038111156107d657634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107ff578160200160208202803683370190505b50905060005b84518110156109725760006001600160a01b031685828151811061083957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156108b25760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b606482015260840161039a565b600360008583815181106108d657634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061090e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205482828151811061095757634e487b7160e01b600052603260045260246000fd5b602090810291909101015261096b81612764565b9050610805565b509392505050565b600c546001600160a01b031633146109d45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6109dd8161128c565b50565b6109eb3383836112da565b5050565b6060600a8054610444906126d8565b336001600160a01b0383161415610a695760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161039a565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6109eb338383611545565b60058054610aed906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b19906126d8565b8015610b665780601f10610b3b57610100808354040283529160200191610b66565b820191906000526020600020905b815481529060010190602001808311610b4957829003601f168201915b505050505081565b60608101516000908152600d602052604090205460ff1615610bca5760405162461bcd60e51b81526020600482015260156024820152744e6f6e6365203a20496e76616c6964204e6f6e636560581b604482015260640161039a565b60608101516000908152600d60205260409020805460ff19166001179055610bf984610bf33390565b836116db565b610c07600b5484868561182a565b600b54610c15906001612652565b600b5550505050565b6060610c2982611105565b610c8e5760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b606482015260840161039a565b60008281526006602052604081208054610ca7906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd3906126d8565b8015610d205780601f10610cf557610100808354040283529160200191610d20565b820191906000526020600020905b815481529060010190602001808311610d0357829003601f168201915b50505050509050600060058054610d36906126d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610d62906126d8565b8015610daf5780601f10610d8457610100808354040283529160200191610daf565b820191906000526020600020905b815481529060010190602001808311610d9257829003601f168201915b50505050509050805160001415610dc7575092915050565b815115610df9578082604051602001610de19291906123a7565b60405160208183030381529060405292505050919050565b80610e03856119f0565b604051602001610de19291906123a7565b6001600160a01b038416610e3a5760405162461bcd60e51b815260040161039a90612515565b6001600160a01b038516331480610e565750610e5685336102d6565b610eb45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161039a565b60008381526003602090815260408083206001600160a01b0389168452909152902054821115610ef65760405162461bcd60e51b815260040161039a9061259d565b33610f16818787610f0688611b22565b610f0f88611b22565b5050505050565b60008481526003602090815260408083206001600160a01b038a168452909152902054610f4490849061267e565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f7c908490612652565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610740818787878787611b7b565b600c546000906001600160a01b0316331461104e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161039a565b6001600160a01b0382166110b35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039a565b600c80546001600160a01b0319166001600160a01b03841690811790915560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35060015b919050565b6000611112600783611c45565b92915050565b6001600160a01b0384163b156107405760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061115c90899089908890889088906004016123d6565b602060405180830381600087803b15801561117657600080fd5b505af19250505080156111a6575060408051601f3d908101601f191682019092526111a3918101906121c8565b60015b611253576111b26127d5565b806308c379a014156111ec57506111c76127ed565b806111d257506111ee565b8060405162461bcd60e51b815260040161039a91906124ba565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039a565b6001600160e01b0319811663bc197c8160e01b146112835760405162461bcd60e51b815260040161039a906124cd565b50505050505050565b805161129f906005906020840190611d51565b507f5514cc7324ac64a875ba50a1849367d39c8b030fe0f563c3c7142984552bc306816040516112cf91906124ba565b60405180910390a150565b6001600160a01b0383166113005760405162461bcd60e51b815260040161039a9061255a565b80518251146113215760405162461bcd60e51b815260040161039a906125e7565b604080516020810190915260009081905233905b83518110156114e65782818151811061135e57634e487b7160e01b600052603260045260246000fd5b60200260200101516003600086848151811061138a57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000205410156113e25760405162461bcd60e51b815260040161039a9061259d565b82818151811061140257634e487b7160e01b600052603260045260246000fd5b60200260200101516003600086848151811061142e57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b0316815260200190815260200160002054611472919061267e565b6003600086848151811061149657634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b031681526020019081526020016000208190555080806114de90612764565b915050611335565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161153792919061248c565b60405180910390a450505050565b61154e82611105565b6115b45760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b606482015260840161039a565b6001600160a01b0383166115da5760405162461bcd60e51b815260040161039a9061255a565b60008281526003602090815260408083206001600160a01b038716845290915290205481111561161c5760405162461bcd60e51b815260040161039a9061259d565b3361164c8185600061162d87611b22565b61163687611b22565b5050604080516020810190915260009052505050565b60008381526003602090815260408083206001600160a01b038816845290915290205461167a90839061267e565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f629101611537565b600030838584606001516040516020016116f8949392919061235a565b60405160208183030381529060405280519060200120905060018160405160200161174f91907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f19818403018152828252805160209182012086518783015188850151600087529386018086529290925260ff16928401929092526060830191909152608082015260a0016020604051602081039080840390855afa1580156117bb573d6000803e3d6000fd5b5050604051601f190151600c546001600160a01b0390811691161490506118245760405162461bcd60e51b815260206004820152601e60248201527f4f776e6572207369676e20766572696669636174696f6e206661696c65640000604482015260640161039a565b50505050565b61183384611105565b156118805760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e746564000000604482015260640161039a565b826118cd5760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f73697469766500000000000000604482015260640161039a565b60008251116119125760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b604482015260640161039a565b600084815260016020526040902080546001600160a01b03191633908117909155611941906007908690611c60565b5060008481526002602090815260408083208490556003825280832033845290915290208390556119728483611c7e565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516119e291906124ba565b60405180910390a250505050565b606081611a145750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611a3e5780611a2881612764565b9150611a379050600a8361266a565b9150611a18565b6000816001600160401b03811115611a6657634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a90576020820181803683370190505b5090506000611aa060018461267e565b90508593505b8315611b1957611ab7600a8561277f565b611ac2906030612652565b60f81b8282611ad0816126c1565b935081518110611af057634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611b12600a8561266a565b9350611aa6565b50949350505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611b6a57634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107405760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611bbf9089908990889088908890600401612434565b602060405180830381600087803b158015611bd957600080fd5b505af1925050508015611c09575060408051601f3d908101601f19168201909252611c06918101906121c8565b60015b611c15576111b26127d5565b6001600160e01b0319811663f23a6e6160e01b146112835760405162461bcd60e51b815260040161039a906124cd565b600081815260018301602052604081205415155b9392505050565b6000611c7684846001600160a01b038516611ca2565b949350505050565b60008281526006602090815260409091208251611c9d92840190611d51565b505050565b600082815260018401602052604081205480611d07575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611c59565b8285611d1460018461267e565b81548110611d3257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201600101819055506000915050611c59565b828054611d5d906126d8565b90600052602060002090601f016020900481019282611d7f5760008555611dc5565b82601f10611d9857805160ff1916838001178555611dc5565b82800160010185558215611dc5579182015b82811115611dc5578251825591602001919060010190611daa565b50611dd1929150611dd5565b5090565b5b80821115611dd15760008155600101611dd6565b80356001600160a01b038116811461110057600080fd5b600082601f830112611e11578081fd5b81356020611e1e8261262f565b604051611e2b8282612738565b8381528281019150858301600585901b87018401881015611e4a578586fd5b855b85811015611e6857813584529284019290840190600101611e4c565b5090979650505050505050565b600082601f830112611e85578081fd5b81356001600160401b03811115611e9e57611e9e6127bf565b604051611eb5601f8301601f191660200182612738565b818152846020838601011115611ec9578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611ef4578081fd5b611c5982611dea565b60008060408385031215611f0f578081fd5b611f1883611dea565b9150611f2660208401611dea565b90509250929050565b600080600080600060a08688031215611f46578081fd5b611f4f86611dea565b9450611f5d60208701611dea565b935060408601356001600160401b0380821115611f78578283fd5b611f8489838a01611e01565b94506060880135915080821115611f99578283fd5b611fa589838a01611e01565b93506080880135915080821115611fba578283fd5b50611fc788828901611e75565b9150509295509295909350565b600080600080600060a08688031215611feb578081fd5b611ff486611dea565b945061200260208701611dea565b9350604086013592506060860135915060808601356001600160401b0381111561202a578182fd5b611fc788828901611e75565b60008060408385031215612048578182fd5b61205183611dea565b915060208301358015158114612065578182fd5b809150509250929050565b60008060408385031215612082578182fd5b61208b83611dea565b946020939093013593505050565b600080604083850312156120ab578182fd5b82356001600160401b03808211156120c1578384fd5b818501915085601f8301126120d4578384fd5b813560206120e18261262f565b6040516120ee8282612738565b8381528281019150858301600585901b870184018b101561210d578889fd5b8896505b848710156121365761212281611dea565b835260019690960195918301918301612111565b509650508601359250508082111561214c578283fd5b5061215985828601611e01565b9150509250929050565b60008060408385031215612175578182fd5b82356001600160401b038082111561218b578384fd5b61219786838701611e01565b9350602085013591508082111561214c578283fd5b6000602082840312156121bd578081fd5b8135611c5981612876565b6000602082840312156121d9578081fd5b8151611c5981612876565b6000602082840312156121f5578081fd5b81356001600160401b0381111561220a578182fd5b611c7684828501611e75565b60008060008084860360e081121561222c578283fd5b85356001600160401b03811115612241578384fd5b61224d88828901611e75565b95505060208601359350604086013592506080605f198201121561226f578182fd5b5060405161227c81612713565b606086013560ff8116811461228f578283fd5b81526080860135602082015260a0860135604082015260c0909501356060860152509194909350909190565b6000602082840312156122cc578081fd5b5035919050565b600080604083850312156122e5578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561232357815187529582019590820190600101612307565b509495945050505050565b60008151808452612346816020860160208601612695565b601f01601f19169290920160200192915050565b60006bffffffffffffffffffffffff19808760601b168352808660601b166014840152508351612391816028850160208801612695565b6028920191820192909252604801949350505050565b600083516123b9818460208801612695565b8351908301906123cd818360208801612695565b01949350505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612402908301866122f4565b828103606084015261241481866122f4565b90508281036080840152612428818561232e565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061246e9083018461232e565b979650505050505050565b602081526000611c5960208301846122f4565b60408152600061249f60408301856122f4565b82810360208401526124b181856122f4565b95945050505050565b602081526000611c59602083018461232e565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b03821115612648576126486127bf565b5060051b60200190565b6000821982111561266557612665612793565b500190565b600082612679576126796127a9565b500490565b60008282101561269057612690612793565b500390565b60005b838110156126b0578181015183820152602001612698565b838111156118245750506000910152565b6000816126d0576126d0612793565b506000190190565b600181811c908216806126ec57607f821691505b6020821081141561270d57634e487b7160e01b600052602260045260246000fd5b50919050565b608081018181106001600160401b0382111715612732576127326127bf565b60405250565b601f8201601f191681016001600160401b038111828210171561275d5761275d6127bf565b6040525050565b600060001982141561277857612778612793565b5060010190565b60008261278e5761278e6127a9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156127ea57600481823e5160e01c5b90565b600060443d10156127fb5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561282a57505050505090565b82850191508151818111156128425750505050505090565b843d870101602082850101111561285c5750505050505090565b61286b60208286010187612738565b509095945050505050565b6001600160e01b0319811681146109dd57600080fdfea2646970667358221220c36d4ffb8a6a45e8b98c33bbce66eb126eb4bfe4e4d19d991ab79d3189ecb02a64736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000953616e6453746f726d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004534d544100000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): SandStorm
Arg [1] : symbol (string): SMTA

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 53616e6453746f726d0000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 534d544100000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

32148:2445:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18633:325;;;;;;:::i;:::-;;:::i;:::-;;;22780:25:1;;;22768:2;22753:18;18633:325:0;;;;;;;;12151:142;;;;;;:::i;:::-;-1:-1:-1;;;;;;12252:33:0;12228:4;12252:33;;;;;;;;;;;;;;12151:142;;;;13250:14:1;;13243:22;13225:41;;13213:2;13198:18;12151:142:0;13180:92:1;15929:100:0;;;:::i;:::-;;;;;;;:::i;24858:1281::-;;;;;;:::i;:::-;;:::i;:::-;;19268:634;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34214:110::-;;;;;;:::i;:::-;;:::i;34449:141::-;;;;;;:::i;:::-;;:::i;32215:20::-;;;;;-1:-1:-1;;;;;32215:20:0;;;;;;-1:-1:-1;;;;;10909:32:1;;;10891:51;;10879:2;10864:18;32215:20:0;10846:102:1;16037:104:0;;;:::i;20264:311::-;;;;;;:::i;:::-;;:::i;34332:109::-;;;;;;:::i;:::-;;:::i;15248:67::-;;;:::i;33876:330::-;;;;;;:::i;:::-;;:::i;16695:121::-;;;;;;:::i;:::-;16761:7;16788:20;;;:11;:20;;;;;;;16695:121;17684:556;;;;;;:::i;:::-;;:::i;16989:126::-;;;;;;:::i;:::-;17063:7;17090:17;;;:8;:17;;;;;;-1:-1:-1;;;;;17090:17:0;;16989:126;20864:160;;;;;;:::i;:::-;-1:-1:-1;;;;;20979:27:0;;;20955:4;20979:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;20864:160;22187:1020;;;;;;:::i;:::-;;:::i;32869:271::-;;;;;;:::i;:::-;;:::i;18633:325::-;18716:7;18744:16;18752:7;18744;:16::i;:::-;18736:81;;;;-1:-1:-1;;;18736:81:0;;18185:2:1;18736:81:0;;;18167:21:1;18224:2;18204:18;;;18197:30;18263:34;18243:18;;;18236:62;-1:-1:-1;;;18314:18:1;;;18307:50;18374:19;;18736:81:0;;;;;;;;;-1:-1:-1;;;;;18836:21:0;;18828:77;;;;-1:-1:-1;;;18828:77:0;;14936:2:1;18828:77:0;;;14918:21:1;14975:2;14955:18;;;14948:30;15014:34;14994:18;;;14987:62;-1:-1:-1;;;15065:18:1;;;15058:41;15116:19;;18828:77:0;14908:233:1;18828:77:0;-1:-1:-1;18923:18:0;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;18923:27:0;;;;;;;;;;;;18633:325::o;15929:100::-;15983:13;16016:5;16009:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15929:100;:::o;24858:1281::-;25133:7;:14;25114:8;:15;:33;25106:86;;;;-1:-1:-1;;;25106:86:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25211:16:0;;25203:66;;;;-1:-1:-1;;;25203:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25302:20:0;;11643:10;25302:20;;:60;;-1:-1:-1;25326:36:0;25343:4;11643:10;20864:160;:::i;25326:36::-;25280:160;;;;-1:-1:-1;;;25280:160:0;;17407:2:1;25280:160:0;;;17389:21:1;17446:2;17426:18;;;17419:30;17485:34;17465:18;;;17458:62;-1:-1:-1;;;17536:18:1;;;17529:48;17594:19;;25280:160:0;17379:240:1;25280:160:0;11643:10;25453:16;25575:394;25599:8;:15;25595:1;:19;25575:394;;;25636:15;25654:8;25663:1;25654:11;;;;;;-1:-1:-1;;;25654:11:0;;;;;;;;;;;;;;;25636:29;;25680:14;25697:7;25705:1;25697:10;;;;;;-1:-1:-1;;;25697:10:0;;;;;;;;;;;;;;;;;;;;25731:18;;;;:9;:18;;;;;;-1:-1:-1;;;;;25731:24:0;;;;;;;;;;;;25697:10;;-1:-1:-1;25731:34:0;-1:-1:-1;25731:34:0;25722:89;;;;-1:-1:-1;;;25722:89:0;;;;;;;:::i;:::-;25853:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;25853:24:0;;;;;;;;;;:33;;25880:6;;25853:33;:::i;:::-;25826:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;25826:24:0;;;;;;;;;;:60;;;;25926:22;;;;;;:31;;25951:6;;25926:31;:::i;:::-;25901:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;25901:22:0;;;;;;;;;;:56;;;;-1:-1:-1;25616:3:0;;;:::i;:::-;;;25575:394;;;;26016:2;-1:-1:-1;;;;;25986:52:0;26010:4;-1:-1:-1;;;;;25986:52:0;26000:8;-1:-1:-1;;;;;25986:52:0;;26020:8;26030:7;25986:52;;;;;;;:::i;:::-;;;;;;;;26051:80;26087:8;26097:4;26103:2;26107:8;26117:7;26126:4;26051:35;:80::i;:::-;24858:1281;;;;;;:::o;19268:634::-;19432:16;19493:3;:10;19474:8;:15;:29;19466:83;;;;-1:-1:-1;;;19466:83:0;;20963:2:1;19466:83:0;;;20945:21:1;21002:2;20982:18;;;20975:30;21041:34;21021:18;;;21014:62;-1:-1:-1;;;21092:18:1;;;21085:39;21141:19;;19466:83:0;20935:231:1;19466:83:0;19562:30;19609:8;:15;-1:-1:-1;;;;;19595:30:0;;;;;-1:-1:-1;;;19595:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19595:30:0;;19562:63;;19643:9;19638:224;19662:8;:15;19658:1;:19;19638:224;;;19730:1;-1:-1:-1;;;;;19707:25:0;:8;19716:1;19707:11;;;;;;-1:-1:-1;;;19707:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19707:25:0;;;19699:87;;;;-1:-1:-1;;;19699:87:0;;15348:2:1;19699:87:0;;;15330:21:1;15387:2;15367:18;;;15360:30;15426:34;15406:18;;;15399:62;-1:-1:-1;;;15477:18:1;;;15470:47;15534:19;;19699:87:0;15320:239:1;19699:87:0;19820:9;:17;19830:3;19834:1;19830:6;;;;;;-1:-1:-1;;;19830:6:0;;;;;;;;;;;;;;;19820:17;;;;;;;;;;;:30;19838:8;19847:1;19838:11;;;;;;-1:-1:-1;;;19838:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19820:30:0;-1:-1:-1;;;;;19820:30:0;;;;;;;;;;;;;19801:13;19815:1;19801:16;;;;;;-1:-1:-1;;;19801:16:0;;;;;;;;;;;;;;;;;;:49;19679:3;;;:::i;:::-;;;19638:224;;;-1:-1:-1;19881:13:0;19268:634;-1:-1:-1;;;19268:634:0:o;34214:110::-;32658:5;;-1:-1:-1;;;;;32658:5:0;32667:10;32658:19;32650:64;;;;-1:-1:-1;;;32650:64:0;;19421:2:1;32650:64:0;;;19403:21:1;;;19440:18;;;19433:30;19499:34;19479:18;;;19472:62;19551:18;;32650:64:0;19393:182:1;32650:64:0;34288:28:::1;34307:8;34288:18;:28::i;:::-;34214:110:::0;:::o;34449:141::-;34541:41;34552:10;34564:8;34574:7;34541:10;:41::i;:::-;34449:141;;:::o;16037:104::-;16093:13;16126:7;16119:14;;;;;:::i;20264:311::-;11643:10;-1:-1:-1;;;;;20367:24:0;;;;20359:78;;;;-1:-1:-1;;;20359:78:0;;20553:2:1;20359:78:0;;;20535:21:1;20592:2;20572:18;;;20565:30;20631:34;20611:18;;;20604:62;-1:-1:-1;;;20682:18:1;;;20675:39;20731:19;;20359:78:0;20525:231:1;20359:78:0;11643:10;20450:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;20450:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;20450:53:0;;;;;;;;;;20519:48;;13225:41:1;;;20450:42:0;;11643:10;20519:48;;13198:18:1;20519:48:0;;;;;;;20264:311;;:::o;34332:109::-;34399:34;34405:10;34417:7;34426:6;34399:5;:34::i;15248:67::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33876:330::-;33996:10;;;;33986:21;;;;:9;:21;;;;;;;;33985:22;33977:56;;;;-1:-1:-1;;;33977:56:0;;21373:2:1;33977:56:0;;;21355:21:1;21412:2;21392:18;;;21385:30;-1:-1:-1;;;21431:18:1;;;21424:51;21492:18;;33977:56:0;21345:171:1;33977:56:0;34054:10;;;;34044:21;;;;:9;:21;;;;;:28;;-1:-1:-1;;34044:28:0;34068:4;34044:28;;;34083:35;34094:3;34099:12;11643:10;;11547:115;34099:12;34113:4;34083:10;:35::i;:::-;34129:33;34135:9;;34146:6;34154:3;34158;34129:5;:33::i;:::-;34185:9;;:13;;34197:1;34185:13;:::i;:::-;34173:9;:25;-1:-1:-1;;;;33876:330:0:o;17684:556::-;17757:13;17791:16;17799:7;17791;:16::i;:::-;17783:77;;;;-1:-1:-1;;;17783:77:0;;19782:2:1;17783:77:0;;;19764:21:1;19821:2;19801:18;;;19794:30;19860:34;19840:18;;;19833:62;-1:-1:-1;;;19911:18:1;;;19904:46;19967:19;;17783:77:0;19754:238:1;17783:77:0;17871:23;17897:19;;;:10;:19;;;;;17871:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17927:18;17948:14;17927:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17985:4;17979:18;18001:1;17979:23;17975:72;;;-1:-1:-1;18026:9:0;17684:556;-1:-1:-1;;17684:556:0:o;17975:72::-;18061:23;;:27;18057:108;;18136:4;18142:9;18119:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18105:48;;;;17684:556;;;:::o;18057:108::-;18206:4;18212:18;:7;:16;:18::i;:::-;18189:42;;;;;;;;;:::i;22187:1020::-;-1:-1:-1;;;;;22418:16:0;;22410:66;;;;-1:-1:-1;;;22410:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22509:20:0;;11643:10;22509:20;;:60;;-1:-1:-1;22533:36:0;22550:4;11643:10;20864:160;:::i;22533:36::-;22487:151;;;;-1:-1:-1;;;22487:151:0;;16173:2:1;22487:151:0;;;16155:21:1;16212:2;16192:18;;;16185:30;16251:34;16231:18;;;16224:62;-1:-1:-1;;;16302:18:1;;;16295:39;16351:19;;22487:151:0;16145:231:1;22487:151:0;22658:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;22658:24:0;;;;;;;;;;:34;-1:-1:-1;22658:34:0;22649:89;;;;-1:-1:-1;;;22649:89:0;;;;;;;:::i;:::-;11643:10;22795:101;11643:10;22826:4;22832:2;22836:26;22854:7;22836:17;:26::i;:::-;22864:25;22882:6;22864:17;:25::i;:::-;24858:1281;;;;;;22795:101;22944:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;22944:24:0;;;;;;;;;;:33;;22971:6;;22944:33;:::i;:::-;22917:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;22917:24:0;;;;;;;;;;:60;;;;23013:22;;;;;;:31;;23038:6;;23013:31;:::i;:::-;22988:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;22988:22:0;;;;;;;;;;;;;:56;;;;23062:51;;22990:25:1;;;23031:18;;;23024:34;;;23062:51:0;;;;;;;;;22963:18:1;23062:51:0;;;;;;;23126:73;23157:8;23167:4;23173:2;23177:7;23186:6;23194:4;23126:30;:73::i;32869:271::-;32658:5;;32941:4;;-1:-1:-1;;;;;32658:5:0;32667:10;32658:19;32650:64;;;;-1:-1:-1;;;32650:64:0;;19421:2:1;32650:64:0;;;19403:21:1;;;19440:18;;;19433:30;19499:34;19479:18;;;19472:62;19551:18;;32650:64:0;19393:182:1;32650:64:0;-1:-1:-1;;;;;32965:22:0;::::1;32957:73;;;::::0;-1:-1:-1;;;32957:73:0;;15766:2:1;32957:73:0::1;::::0;::::1;15748:21:1::0;15805:2;15785:18;;;15778:30;15844:34;15824:18;;;15817:62;-1:-1:-1;;;15895:18:1;;;15888:36;15941:19;;32957:73:0::1;15738:228:1::0;32957:73:0::1;33041:5;:16:::0;;-1:-1:-1;;;;;;33041:16:0::1;-1:-1:-1::0;;;;;33041:16:0;::::1;::::0;;::::1;::::0;;;33073:37:::1;::::0;33041:16;;33073:37:::1;::::0;-1:-1:-1;;33073:37:0::1;-1:-1:-1::0;33128:4:0::1;32725:1;32869:271:::0;;;:::o;18248:127::-;18313:4;18337:30;:12;18359:7;18337:21;:30::i;:::-;18330:37;18248:127;-1:-1:-1;;18248:127:0:o;31126:809::-;-1:-1:-1;;;;;31385:13:0;;12651:20;12690:8;31381:547;;31421:84;;-1:-1:-1;;;31421:84:0;;-1:-1:-1;;;;;31421:43:0;;;;;:84;;31465:8;;31475:4;;31481:8;;31491:7;;31500:4;;31421:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31421:84:0;;;;;;;;-1:-1:-1;;31421:84:0;;;;;;;;;;;;:::i;:::-;;;31417:500;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;31790:6;31783:14;;-1:-1:-1;;;31783:14:0;;;;;;;;:::i;31417:500::-;;;31839:62;;-1:-1:-1;;;31839:62:0;;14106:2:1;31839:62:0;;;14088:21:1;14145:2;14125:18;;;14118:30;14184:34;14164:18;;;14157:62;-1:-1:-1;;;14235:18:1;;;14228:50;14295:19;;31839:62:0;14078:242:1;31417:500:0;-1:-1:-1;;;;;;31555:64:0;;-1:-1:-1;;;31555:64:0;31551:163;;31644:50;;-1:-1:-1;;;31644:50:0;;;;;;;:::i;31551:163::-;31506:223;31126:809;;;;;;:::o;17299:164::-;17378:32;;;;:14;;:32;;;;;:::i;:::-;;17426:29;17439:15;17426:29;;;;;;:::i;:::-;;;;;;;;17299:164;:::o;29312:775::-;-1:-1:-1;;;;;29438:21:0;;29430:69;;;;-1:-1:-1;;;29430:69:0;;;;;;;:::i;:::-;29537:7;:14;29518:8;:15;:33;29510:86;;;;-1:-1:-1;;;29510:86:0;;;;;;;:::i;:::-;29653:74;;;;;;;;;29609:16;29653:74;;;;11643:10;;29740:259;29761:8;:15;29757:1;:19;29740:259;;;29838:7;29846:1;29838:10;;;;;;-1:-1:-1;;;29838:10:0;;;;;;;;;;;;;;;29803:9;:22;29813:8;29822:1;29813:11;;;;;;-1:-1:-1;;;29813:11:0;;;;;;;;;;;;;;;29803:22;;;;;;;;;;;:31;29826:7;-1:-1:-1;;;;;29803:31:0;-1:-1:-1;;;;;29803:31:0;;;;;;;;;;;;;:45;;29794:100;;;;-1:-1:-1;;;29794:100:0;;;;;;;:::i;:::-;29977:7;29985:1;29977:10;;;;;;-1:-1:-1;;;29977:10:0;;;;;;;;;;;;;;;29943:9;:22;29953:8;29962:1;29953:11;;;;;;-1:-1:-1;;;29953:11:0;;;;;;;;;;;;;;;29943:22;;;;;;;;;;;:31;29966:7;-1:-1:-1;;;;;29943:31:0;-1:-1:-1;;;;;29943:31:0;;;;;;;;;;;;;:44;;;;:::i;:::-;29909:9;:22;29919:8;29928:1;29919:11;;;;;;-1:-1:-1;;;29919:11:0;;;;;;;;;;;;;;;29909:22;;;;;;;;;;;:31;29932:7;-1:-1:-1;;;;;29909:31:0;-1:-1:-1;;;;;29909:31:0;;;;;;;;;;;;:78;;;;29778:3;;;;;:::i;:::-;;;;29740:259;;;;30057:1;-1:-1:-1;;;;;30016:63:0;30040:7;-1:-1:-1;;;;;30016:63:0;30030:8;-1:-1:-1;;;;;30016:63:0;;30061:8;30071:7;30016:63;;;;;;;:::i;:::-;;;;;;;;29312:775;;;;:::o;28474:688::-;28575:16;28583:7;28575;:16::i;:::-;28567:78;;;;-1:-1:-1;;;28567:78:0;;16583:2:1;28567:78:0;;;16565:21:1;16622:2;16602:18;;;16595:30;16661:34;16641:18;;;16634:62;-1:-1:-1;;;16712:18:1;;;16705:47;16769:19;;28567:78:0;16555:239:1;28567:78:0;-1:-1:-1;;;;;28664:21:0;;28656:69;;;;-1:-1:-1;;;28656:69:0;;;;;;;:::i;:::-;28745:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;28745:27:0;;;;;;;;;;:37;-1:-1:-1;28745:37:0;28736:92;;;;-1:-1:-1;;;28736:92:0;;;;;;;:::i;:::-;11643:10;28883:110;11643:10;28914:7;28839:16;28935:26;28953:7;28935:17;:26::i;:::-;28963:25;28981:6;28963:17;:25::i;:::-;-1:-1:-1;;28883:110:0;;;;;;;;;-1:-1:-1;28883:110:0;;-1:-1:-1;;;24858:1281:0;28883:110;29036:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;29036:27:0;;;;;;;;;;:36;;29066:6;;29036:36;:::i;:::-;29006:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;29006:27:0;;;;;;;;;;;;:66;;;;29092:62;;22990:25:1;;;23031:18;;;23024:34;;;29006:18:0;;29092:62;;;;;22963:18:1;29092:62:0;22945:119:1;33512:356:0;33615:12;33657:4;33663:6;33671:8;33681:4;:10;;;33640:52;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33630:63;;;;;;33615:78;;33721:104;33794:4;33741:58;;;;;;;10602:66:1;10590:79;;10694:2;10685:12;;10678:28;;;;10731:2;10722:12;;10580:160;33741:58:0;;;;-1:-1:-1;;33741:58:0;;;;;;;;;33731:69;;33741:58;33731:69;;;;33802:6;;33810;;;;33818;;;;33802;33721:104;;;;;;;;13504:25:1;;;;13577:4;13565:17;13545:18;;;13538:45;;;;13599:18;;;13592:34;;;;13642:18;;;13635:34;13476:19;;33721:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33721:104:0;;-1:-1:-1;;33721:104:0;;33712:5;;-1:-1:-1;;;;;33712:5:0;;;:113;;;;-1:-1:-1;33704:156:0;;;;-1:-1:-1;;;33704:156:0;;17826:2:1;33704:156:0;;;17808:21:1;17865:2;17845:18;;;17838:30;17904:32;17884:18;;;17877:60;17954:18;;33704:156:0;17798:180:1;33704:156:0;33512:356;;;;:::o;26544:634::-;26656:16;26664:7;26656;:16::i;:::-;26655:17;26647:59;;;;-1:-1:-1;;;26647:59:0;;22132:2:1;26647:59:0;;;22114:21:1;22171:2;22151:18;;;22144:30;22210:31;22190:18;;;22183:59;22259:18;;26647:59:0;22104:179:1;26647:59:0;26725:12;26717:50;;;;-1:-1:-1;;;26717:50:0;;20199:2:1;26717:50:0;;;20181:21:1;20238:2;20218:18;;;20211:30;20277:27;20257:18;;;20250:55;20322:18;;26717:50:0;20171:175:1;26717:50:0;26807:1;26792:4;26786:18;:22;26778:52;;;;-1:-1:-1;;;26778:52:0;;22490:2:1;26778:52:0;;;22472:21:1;22529:2;22509:18;;;22502:30;-1:-1:-1;;;22548:18:1;;;22541:47;22605:18;;26778:52:0;22462:167:1;26778:52:0;26843:17;;;;:8;:17;;;;;:30;;-1:-1:-1;;;;;;26843:30:0;26863:10;26843:30;;;;;;26884:37;;:12;;26852:7;;26884:16;:37::i;:::-;-1:-1:-1;26932:20:0;;;;:11;:20;;;;;;;;:27;;;26970:9;:18;;;;;26989:10;26970:30;;;;;;;:40;;;27021:27;26944:7;27043:4;27021:12;:27::i;:::-;27066:70;;;22990:25:1;;;23046:2;23031:18;;23024:34;;;27107:10:0;;27101:3;;27107:10;;27066:70;;22963:18:1;27066:70:0;;;;;;;27162:7;27152:18;27156:4;27152:18;;;;;;:::i;:::-;;;;;;;;26544:634;;;;:::o;91:557::-;147:13;179:10;175:53;;-1:-1:-1;;206:10:0;;;;;;;;;;;;-1:-1:-1;;;206:10:0;;;;;91:557::o;175:53::-;253:5;238:12;294:78;301:9;;294:78;;327:8;;;;:::i;:::-;;-1:-1:-1;350:10:0;;-1:-1:-1;358:2:0;350:10;;:::i;:::-;;;294:78;;;382:19;414:6;-1:-1:-1;;;;;404:17:0;;;;;-1:-1:-1;;;404:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;404:17:0;-1:-1:-1;382:39:0;-1:-1:-1;432:13:0;448:10;457:1;448:6;:10;:::i;:::-;432:26;;476:5;469:12;;492:117;499:9;;492:117;;561:9;568:2;561:4;:9;:::i;:::-;556:14;;:2;:14;:::i;:::-;543:29;;525:6;532:7;;;;:::i;:::-;;;525:15;;;;;;-1:-1:-1;;;525:15:0;;;;;;;;;;;;:47;-1:-1:-1;;;;;525:47:0;;;;;;;;-1:-1:-1;587:10:0;595:2;587:10;;:::i;:::-;;;492:117;;;-1:-1:-1;633:6:0;91:557;-1:-1:-1;;;;91:557:0:o;31943:198::-;32063:16;;;32077:1;32063:16;;;;;;;;;32009;;32038:22;;32063:16;;;;;;;;;;;;-1:-1:-1;32063:16:0;32038:41;;32101:7;32090:5;32096:1;32090:8;;;;;;-1:-1:-1;;;32090:8:0;;;;;;;;;;;;;;;;;;:18;32128:5;31943:198;-1:-1:-1;;31943:198:0:o;30346:772::-;-1:-1:-1;;;;;30580:13:0;;12651:20;12690:8;30576:535;;30616:77;;-1:-1:-1;;;30616:77:0;;-1:-1:-1;;;;;30616:38:0;;;;;:77;;30655:8;;30665:4;;30671:7;;30680:6;;30688:4;;30616:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30616:77:0;;;;;;;;-1:-1:-1;;30616:77:0;;;;;;;;;;;;:::i;:::-;;;30612:488;;;;:::i;:::-;-1:-1:-1;;;;;;30743:59:0;;-1:-1:-1;;;30743:59:0;30739:158;;30827:50;;-1:-1:-1;;;30827:50:0;;;;;;;:::i;3938:151::-;4022:4;2129:17;;;:12;;;:17;;;;;;:22;;4046:35;4039:42;3938:151;-1:-1:-1;;;3938:151:0:o;3595:185::-;3684:4;3708:64;3713:3;3733;-1:-1:-1;;;;;3747:23:0;;3708:4;:64::i;:::-;3701:71;3595:185;-1:-1:-1;;;;3595:185:0:o;16405:111::-;16483:19;;;;:10;:19;;;;;;;;:25;;;;;;;;:::i;:::-;;16405:111;;:::o;873:470::-;949:4;985:17;;;:12;;;:17;;;;;;1019:13;1015:321;;-1:-1:-1;;1104:38:0;;;;;;;;;;;;;;;;;;1086:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;1178:19;;1158:17;;;:12;;;:17;;;;;;;:39;1212:11;;1015:321;1292:5;1256:3;1269:12;1280:1;1269:8;:12;:::i;:::-;1256:26;;;;;;-1:-1:-1;;;1256:26:0;;;;;;;;;;;;;;;;;;;:33;;:41;;;;1319:5;1312:12;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:755;246:5;299:3;292:4;284:6;280:17;276:27;266:2;;321:5;314;307:20;266:2;361:6;348:20;387:4;410:43;450:2;410:43;:::i;:::-;482:2;476:9;494:31;522:2;514:6;494:31;:::i;:::-;560:18;;;594:15;;;;-1:-1:-1;629:15:1;;;679:1;675:10;;;663:23;;659:32;;656:41;-1:-1:-1;653:2:1;;;714:5;707;700:20;653:2;740:5;754:163;768:2;765:1;762:9;754:163;;;825:17;;813:30;;863:12;;;;895;;;;786:1;779:9;754:163;;;-1:-1:-1;935:6:1;;256:691;-1:-1:-1;;;;;;;256:691:1:o;952:575::-;994:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1069:5;1062;1055:20;1014:2;1109:6;1096:20;-1:-1:-1;;;;;1131:2:1;1128:26;1125:2;;;1157:18;;:::i;:::-;1206:2;1200:9;1218:67;1273:2;1254:13;;-1:-1:-1;;1250:27:1;1279:4;1246:38;1200:9;1218:67;:::i;:::-;1309:2;1301:6;1294:18;1355:3;1348:4;1343:2;1335:6;1331:15;1327:26;1324:35;1321:2;;;1376:5;1369;1362:20;1321:2;1444;1437:4;1429:6;1425:17;1418:4;1410:6;1406:17;1393:54;1467:15;;;1484:4;1463:26;1456:41;;;;1471:6;1004:523;-1:-1:-1;;1004:523:1:o;1532:196::-;1591:6;1644:2;1632:9;1623:7;1619:23;1615:32;1612:2;;;1665:6;1657;1650:22;1612:2;1693:29;1712:9;1693:29;:::i;1733:270::-;1801:6;1809;1862:2;1850:9;1841:7;1837:23;1833:32;1830:2;;;1883:6;1875;1868:22;1830:2;1911:29;1930:9;1911:29;:::i;:::-;1901:39;;1959:38;1993:2;1982:9;1978:18;1959:38;:::i;:::-;1949:48;;1820:183;;;;;:::o;2008:983::-;2162:6;2170;2178;2186;2194;2247:3;2235:9;2226:7;2222:23;2218:33;2215:2;;;2269:6;2261;2254:22;2215:2;2297:29;2316:9;2297:29;:::i;:::-;2287:39;;2345:38;2379:2;2368:9;2364:18;2345:38;:::i;:::-;2335:48;;2434:2;2423:9;2419:18;2406:32;-1:-1:-1;;;;;2498:2:1;2490:6;2487:14;2484:2;;;2519:6;2511;2504:22;2484:2;2547:61;2600:7;2591:6;2580:9;2576:22;2547:61;:::i;:::-;2537:71;;2661:2;2650:9;2646:18;2633:32;2617:48;;2690:2;2680:8;2677:16;2674:2;;;2711:6;2703;2696:22;2674:2;2739:63;2794:7;2783:8;2772:9;2768:24;2739:63;:::i;:::-;2729:73;;2855:3;2844:9;2840:19;2827:33;2811:49;;2885:2;2875:8;2872:16;2869:2;;;2906:6;2898;2891:22;2869:2;;2934:51;2977:7;2966:8;2955:9;2951:24;2934:51;:::i;:::-;2924:61;;;2205:786;;;;;;;;:::o;2996:626::-;3100:6;3108;3116;3124;3132;3185:3;3173:9;3164:7;3160:23;3156:33;3153:2;;;3207:6;3199;3192:22;3153:2;3235:29;3254:9;3235:29;:::i;:::-;3225:39;;3283:38;3317:2;3306:9;3302:18;3283:38;:::i;:::-;3273:48;;3368:2;3357:9;3353:18;3340:32;3330:42;;3419:2;3408:9;3404:18;3391:32;3381:42;;3474:3;3463:9;3459:19;3446:33;-1:-1:-1;;;;;3494:6:1;3491:30;3488:2;;;3539:6;3531;3524:22;3488:2;3567:49;3608:7;3599:6;3588:9;3584:22;3567:49;:::i;3627:367::-;3692:6;3700;3753:2;3741:9;3732:7;3728:23;3724:32;3721:2;;;3774:6;3766;3759:22;3721:2;3802:29;3821:9;3802:29;:::i;:::-;3792:39;;3881:2;3870:9;3866:18;3853:32;3928:5;3921:13;3914:21;3907:5;3904:32;3894:2;;3955:6;3947;3940:22;3894:2;3983:5;3973:15;;;3711:283;;;;;:::o;3999:264::-;4067:6;4075;4128:2;4116:9;4107:7;4103:23;4099:32;4096:2;;;4149:6;4141;4134:22;4096:2;4177:29;4196:9;4177:29;:::i;:::-;4167:39;4253:2;4238:18;;;;4225:32;;-1:-1:-1;;;4086:177:1:o;4268:1274::-;4386:6;4394;4447:2;4435:9;4426:7;4422:23;4418:32;4415:2;;;4468:6;4460;4453:22;4415:2;4513:9;4500:23;-1:-1:-1;;;;;4583:2:1;4575:6;4572:14;4569:2;;;4604:6;4596;4589:22;4569:2;4647:6;4636:9;4632:22;4622:32;;4692:7;4685:4;4681:2;4677:13;4673:27;4663:2;;4719:6;4711;4704:22;4663:2;4760;4747:16;4782:4;4805:43;4845:2;4805:43;:::i;:::-;4877:2;4871:9;4889:31;4917:2;4909:6;4889:31;:::i;:::-;4955:18;;;4989:15;;;;-1:-1:-1;5024:11:1;;;5066:1;5062:10;;;5054:19;;5050:28;;5047:41;-1:-1:-1;5044:2:1;;;5106:6;5098;5091:22;5044:2;5133:6;5124:15;;5148:169;5162:2;5159:1;5156:9;5148:169;;;5219:23;5238:3;5219:23;:::i;:::-;5207:36;;5180:1;5173:9;;;;;5263:12;;;;5295;;5148:169;;;-1:-1:-1;5336:6:1;-1:-1:-1;;5380:18:1;;5367:32;;-1:-1:-1;;5411:16:1;;;5408:2;;;5445:6;5437;5430:22;5408:2;;5473:63;5528:7;5517:8;5506:9;5502:24;5473:63;:::i;:::-;5463:73;;;4405:1137;;;;;:::o;5547:625::-;5665:6;5673;5726:2;5714:9;5705:7;5701:23;5697:32;5694:2;;;5747:6;5739;5732:22;5694:2;5792:9;5779:23;-1:-1:-1;;;;;5862:2:1;5854:6;5851:14;5848:2;;;5883:6;5875;5868:22;5848:2;5911:61;5964:7;5955:6;5944:9;5940:22;5911:61;:::i;:::-;5901:71;;6025:2;6014:9;6010:18;5997:32;5981:48;;6054:2;6044:8;6041:16;6038:2;;;6075:6;6067;6060:22;6177:255;6235:6;6288:2;6276:9;6267:7;6263:23;6259:32;6256:2;;;6309:6;6301;6294:22;6256:2;6353:9;6340:23;6372:30;6396:5;6372:30;:::i;6437:259::-;6506:6;6559:2;6547:9;6538:7;6534:23;6530:32;6527:2;;;6580:6;6572;6565:22;6527:2;6617:9;6611:16;6636:30;6660:5;6636:30;:::i;6701:341::-;6770:6;6823:2;6811:9;6802:7;6798:23;6794:32;6791:2;;;6844:6;6836;6829:22;6791:2;6889:9;6876:23;-1:-1:-1;;;;;6914:6:1;6911:30;6908:2;;;6959:6;6951;6944:22;6908:2;6987:49;7028:7;7019:6;7008:9;7004:22;6987:49;:::i;7047:1062::-;7165:6;7173;7181;7189;7233:9;7224:7;7220:23;7263:3;7259:2;7255:12;7252:2;;;7285:6;7277;7270:22;7252:2;7330:9;7317:23;-1:-1:-1;;;;;7355:6:1;7352:30;7349:2;;;7400:6;7392;7385:22;7349:2;7428:49;7469:7;7460:6;7449:9;7445:22;7428:49;:::i;:::-;7418:59;-1:-1:-1;;7524:2:1;7509:18;;7496:32;;-1:-1:-1;7575:2:1;7560:18;;7547:32;;-1:-1:-1;7613:4:1;-1:-1:-1;;7595:16:1;;7591:27;7588:2;;;7636:6;7628;7621:22;7588:2;;7674;7668:9;7686:32;7711:6;7686:32;:::i;:::-;7768:2;7757:9;7753:18;7740:32;7812:4;7805:5;7801:16;7794:5;7791:27;7781:2;;7837:6;7829;7822:22;7781:2;7855:21;;7937:4;7922:20;;7909:34;7904:2;7892:15;;7885:59;8005:3;7990:19;;7977:33;7972:2;7960:15;;7953:58;8072:3;8057:19;;;8044:33;8039:2;8027:15;;8020:58;-1:-1:-1;7200:909:1;;;;-1:-1:-1;7200:909:1;;7862:6;7200:909::o;8114:190::-;8173:6;8226:2;8214:9;8205:7;8201:23;8197:32;8194:2;;;8247:6;8239;8232:22;8194:2;-1:-1:-1;8275:23:1;;8184:120;-1:-1:-1;8184:120:1:o;8309:258::-;8377:6;8385;8438:2;8426:9;8417:7;8413:23;8409:32;8406:2;;;8459:6;8451;8444:22;8406:2;-1:-1:-1;;8487:23:1;;;8557:2;8542:18;;;8529:32;;-1:-1:-1;8396:171:1:o;8572:437::-;8625:3;8663:5;8657:12;8690:6;8685:3;8678:19;8716:4;8745:2;8740:3;8736:12;8729:19;;8782:2;8775:5;8771:14;8803:3;8815:169;8829:6;8826:1;8823:13;8815:169;;;8890:13;;8878:26;;8924:12;;;;8959:15;;;;8851:1;8844:9;8815:169;;;-1:-1:-1;9000:3:1;;8633:376;-1:-1:-1;;;;;8633:376:1:o;9014:257::-;9055:3;9093:5;9087:12;9120:6;9115:3;9108:19;9136:63;9192:6;9185:4;9180:3;9176:14;9169:4;9162:5;9158:16;9136:63;:::i;:::-;9253:2;9232:15;-1:-1:-1;;9228:29:1;9219:39;;;;9260:4;9215:50;;9063:208;-1:-1:-1;;9063:208:1:o;9276:604::-;9509:3;9541:26;9537:31;9610:2;9601:6;9597:2;9593:15;9589:24;9584:3;9577:37;9665:2;9656:6;9652:2;9648:15;9644:24;9639:2;9634:3;9630:12;9623:46;;9698:6;9692:13;9714:62;9769:6;9764:2;9759:3;9755:12;9748:4;9740:6;9736:17;9714:62;:::i;:::-;9835:2;9795:16;;9827:11;;;9820:27;;;;9871:2;9863:11;;9517:363;-1:-1:-1;;;;9517:363:1:o;9885:470::-;10064:3;10102:6;10096:13;10118:53;10164:6;10159:3;10152:4;10144:6;10140:17;10118:53;:::i;:::-;10234:13;;10193:16;;;;10256:57;10234:13;10193:16;10290:4;10278:17;;10256:57;:::i;:::-;10329:20;;10072:283;-1:-1:-1;;;;10072:283:1:o;10953:826::-;-1:-1:-1;;;;;11350:15:1;;;11332:34;;11402:15;;11397:2;11382:18;;11375:43;11312:3;11449:2;11434:18;;11427:31;;;11275:4;;11481:57;;11518:19;;11510:6;11481:57;:::i;:::-;11586:9;11578:6;11574:22;11569:2;11558:9;11554:18;11547:50;11620:44;11657:6;11649;11620:44;:::i;:::-;11606:58;;11713:9;11705:6;11701:22;11695:3;11684:9;11680:19;11673:51;11741:32;11766:6;11758;11741:32;:::i;:::-;11733:40;11284:495;-1:-1:-1;;;;;;;;11284:495:1:o;11784:560::-;-1:-1:-1;;;;;12081:15:1;;;12063:34;;12133:15;;12128:2;12113:18;;12106:43;12180:2;12165:18;;12158:34;;;12223:2;12208:18;;12201:34;;;12043:3;12266;12251:19;;12244:32;;;12006:4;;12293:45;;12318:19;;12310:6;12293:45;:::i;:::-;12285:53;12015:329;-1:-1:-1;;;;;;;12015:329:1:o;12349:261::-;12528:2;12517:9;12510:21;12491:4;12548:56;12600:2;12589:9;12585:18;12577:6;12548:56;:::i;12615:465::-;12872:2;12861:9;12854:21;12835:4;12898:56;12950:2;12939:9;12935:18;12927:6;12898:56;:::i;:::-;13002:9;12994:6;12990:22;12985:2;12974:9;12970:18;12963:50;13030:44;13067:6;13059;13030:44;:::i;:::-;13022:52;12844:236;-1:-1:-1;;;;;12844:236:1:o;13680:219::-;13829:2;13818:9;13811:21;13792:4;13849:44;13889:2;13878:9;13874:18;13866:6;13849:44;:::i;14325:404::-;14527:2;14509:21;;;14566:2;14546:18;;;14539:30;14605:34;14600:2;14585:18;;14578:62;-1:-1:-1;;;14671:2:1;14656:18;;14649:38;14719:3;14704:19;;14499:230::o;16799:401::-;17001:2;16983:21;;;17040:2;17020:18;;;17013:30;17079:34;17074:2;17059:18;;17052:62;-1:-1:-1;;;17145:2:1;17130:18;;17123:35;17190:3;17175:19;;16973:227::o;18404:399::-;18606:2;18588:21;;;18645:2;18625:18;;;18618:30;18684:34;18679:2;18664:18;;18657:62;-1:-1:-1;;;18750:2:1;18735:18;;18728:33;18793:3;18778:19;;18578:225::o;18808:406::-;19010:2;18992:21;;;19049:2;19029:18;;;19022:30;19088:34;19083:2;19068:18;;19061:62;-1:-1:-1;;;19154:2:1;19139:18;;19132:40;19204:3;19189:19;;18982:232::o;21521:404::-;21723:2;21705:21;;;21762:2;21742:18;;;21735:30;21801:34;21796:2;21781:18;;21774:62;-1:-1:-1;;;21867:2:1;21852:18;;21845:38;21915:3;21900:19;;21695:230::o;23069:183::-;23129:4;-1:-1:-1;;;;;23154:6:1;23151:30;23148:2;;;23184:18;;:::i;:::-;-1:-1:-1;23229:1:1;23225:14;23241:4;23221:25;;23138:114::o;23257:128::-;23297:3;23328:1;23324:6;23321:1;23318:13;23315:2;;;23334:18;;:::i;:::-;-1:-1:-1;23370:9:1;;23305:80::o;23390:120::-;23430:1;23456;23446:2;;23461:18;;:::i;:::-;-1:-1:-1;23495:9:1;;23436:74::o;23515:125::-;23555:4;23583:1;23580;23577:8;23574:2;;;23588:18;;:::i;:::-;-1:-1:-1;23625:9:1;;23564:76::o;23645:258::-;23717:1;23727:113;23741:6;23738:1;23735:13;23727:113;;;23817:11;;;23811:18;23798:11;;;23791:39;23763:2;23756:10;23727:113;;;23858:6;23855:1;23852:13;23849:2;;;-1:-1:-1;;23893:1:1;23875:16;;23868:27;23698:205::o;23908:136::-;23947:3;23975:5;23965:2;;23984:18;;:::i;:::-;-1:-1:-1;;;24020:18:1;;23955:89::o;24049:380::-;24128:1;24124:12;;;;24171;;;24192:2;;24246:4;24238:6;24234:17;24224:27;;24192:2;24299;24291:6;24288:14;24268:18;24265:38;24262:2;;;24345:10;24340:3;24336:20;24333:1;24326:31;24380:4;24377:1;24370:15;24408:4;24405:1;24398:15;24262:2;;24104:325;;;:::o;24434:225::-;24520:4;24512:6;24508:17;24591:6;24579:10;24576:22;-1:-1:-1;;;;;24543:10:1;24540:34;24537:62;24534:2;;;24602:18;;:::i;:::-;24638:2;24631:22;-1:-1:-1;24480:179:1:o;24664:249::-;24774:2;24755:13;;-1:-1:-1;;24751:27:1;24739:40;;-1:-1:-1;;;;;24794:34:1;;24830:22;;;24791:62;24788:2;;;24856:18;;:::i;:::-;24892:2;24885:22;-1:-1:-1;;24711:202:1:o;24918:135::-;24957:3;-1:-1:-1;;24978:17:1;;24975:2;;;24998:18;;:::i;:::-;-1:-1:-1;25045:1:1;25034:13;;24965:88::o;25058:112::-;25090:1;25116;25106:2;;25121:18;;:::i;:::-;-1:-1:-1;25155:9:1;;25096:74::o;25175:127::-;25236:10;25231:3;25227:20;25224:1;25217:31;25267:4;25264:1;25257:15;25291:4;25288:1;25281:15;25307:127;25368:10;25363:3;25359:20;25356:1;25349:31;25399:4;25396:1;25389:15;25423:4;25420:1;25413:15;25439:127;25500:10;25495:3;25491:20;25488:1;25481:31;25531:4;25528:1;25521:15;25555:4;25552:1;25545:15;25571:185;25606:3;25648:1;25630:16;25627:23;25624:2;;;25698:1;25693:3;25688;25673:27;25729:10;25724:3;25720:20;25624:2;25614:142;:::o;25761:671::-;25800:3;25842:4;25824:16;25821:26;25818:2;;;25808:624;:::o;25818:2::-;25884;25878:9;-1:-1:-1;;25949:16:1;25945:25;;25942:1;25878:9;25921:50;26000:4;25994:11;26024:16;-1:-1:-1;;;;;26130:2:1;26123:4;26115:6;26111:17;26108:25;26103:2;26095:6;26092:14;26089:45;26086:2;;;26137:5;;;;;25808:624;:::o;26086:2::-;26174:6;26168:4;26164:17;26153:28;;26210:3;26204:10;26237:2;26229:6;26226:14;26223:2;;;26243:5;;;;;;25808:624;:::o;26223:2::-;26327;26308:16;26302:4;26298:27;26294:36;26287:4;26278:6;26273:3;26269:16;26265:27;26262:69;26259:2;;;26334:5;;;;;;25808:624;:::o;26259:2::-;26350:57;26401:4;26392:6;26384;26380:19;26376:30;26370:4;26350:57;:::i;:::-;-1:-1:-1;26423:3:1;;25808:624;-1:-1:-1;;;;;25808:624:1:o;26437:131::-;-1:-1:-1;;;;;;26511:32:1;;26501:43;;26491:2;;26558:1;26555;26548:12

Swarm Source

ipfs://c36d4ffb8a6a45e8b98c33bbce66eb126eb4bfe4e4d19d991ab79d3189ecb02a

Block Transaction 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
[ 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.