ETH Price: $2,679.28 (+3.45%)

Contract

0x2AD82A4E39Bac43A54DdfE6f94980AAf0D1409eF
Transaction Hash
Method
Block
From
To
Buy1180063672024-03-28 7:38:31321 days ago1711611511IN
0x2AD82A4E...f0D1409eF
1.177296260024904 ETH0.0000065625090.02961876
Buy1166235282024-02-25 7:23:53353 days ago1708845833IN
0x2AD82A4E...f0D1409eF
3.5277015012201 ETH0.0000411789290.00368548
Buy1141760242023-12-30 15:40:25410 days ago1703950825IN
0x2AD82A4E...f0D1409eF
3.166896099385137 ETH0.000035485560.00593759
Buy1141729802023-12-30 13:58:57410 days ago1703944737IN
0x2AD82A4E...f0D1409eF
1.751320404303082 ETH0.0000246833710.00546296
Buy1141335552023-12-29 16:04:47411 days ago1703865887IN
0x2AD82A4E...f0D1409eF
2.21553149296411 ETH0.0000712495560.00331226
Buy1139565152023-12-25 13:43:27415 days ago1703511807IN
0x2AD82A4E...f0D1409eF
1.231752667089021 ETH0.0001149595190.00428969
Buy1137387442023-12-20 12:44:25420 days ago1703076265IN
0x2AD82A4E...f0D1409eF
2.251378983 ETH0.0000971333520.00972898
Buy1136441532023-12-18 8:11:23422 days ago1702887083IN
0x2AD82A4E...f0D1409eF
1.355605876724127 ETH0.0000562580270.02438981
Buy1136441462023-12-18 8:11:09422 days ago1702887069IN
0x2AD82A4E...f0D1409eF
1.355605876724127 ETH0.0000566472190.02443541
Buy1136425462023-12-18 7:17:49422 days ago1702883869IN
0x2AD82A4E...f0D1409eF
1.357639739471967 ETH0.0000480715850.00910027
Buy1135964572023-12-17 5:41:31423 days ago1702791691IN
0x2AD82A4E...f0D1409eF
1.587920602018317 ETH0.0000486679830.0062864
Buy1135946612023-12-17 4:41:39423 days ago1702788099IN
0x2AD82A4E...f0D1409eF
1.568258038151133 ETH0.0000484294620.00758681
Buy1135945782023-12-17 4:38:53423 days ago1702787933IN
0x2AD82A4E...f0D1409eF
6.076595409364788 ETH0.0000549995950.00595823
Buy1135923452023-12-17 3:24:27423 days ago1702783467IN
0x2AD82A4E...f0D1409eF
4.346988982937559 ETH0.0000546194580.00543622
Buy1135921912023-12-17 3:19:19423 days ago1702783159IN
0x2AD82A4E...f0D1409eF
1.410989306957853 ETH0.0000540877730.00620999
Buy1135583652023-12-16 8:31:47424 days ago1702715507IN
0x2AD82A4E...f0D1409eF
1.403682465216381 ETH0.0000748367950.00667621
Buy1135449652023-12-16 1:05:07424 days ago1702688707IN
0x2AD82A4E...f0D1409eF
1.424143956365277 ETH0.0000773273690.00546799
Buy1135411632023-12-15 22:58:23424 days ago1702681103IN
0x2AD82A4E...f0D1409eF
2.857799390902554 ETH0.0000770154140.00614386
Buy1135301202023-12-15 16:50:17425 days ago1702659017IN
0x2AD82A4E...f0D1409eF
1.036118537180897 ETH0.0002263171130.1149557
Buy1135267822023-12-15 14:59:01425 days ago1702652341IN
0x2AD82A4E...f0D1409eF
1.496459026982157 ETH0.0001059021250.00595632
Buy1135247472023-12-15 13:51:11425 days ago1702648271IN
0x2AD82A4E...f0D1409eF
3.048301520881338 ETH0.0000812005090.0100917
Buy1135241862023-12-15 13:32:29425 days ago1702647149IN
0x2AD82A4E...f0D1409eF
2.192457500048371 ETH0.0000916302670.00654366
Buy1135239012023-12-15 13:22:59425 days ago1702646579IN
0x2AD82A4E...f0D1409eF
1.471243482037581 ETH0.0000900107910.00586956
Buy1135233542023-12-15 13:04:45425 days ago1702645485IN
0x2AD82A4E...f0D1409eF
1.1271792 ETH0.0001346326630.00617108
Buy1135187862023-12-15 10:32:29425 days ago1702636349IN
0x2AD82A4E...f0D1409eF
1.859981552116989 ETH0.0000768143450.00541172
VIEW ADVANCED FILTER

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
1317954642025-02-10 12:15:052 days ago1739189705
0x2AD82A4E...f0D1409eF
0.000008 ETH
1317780442025-02-10 2:34:252 days ago1739154865
0x2AD82A4E...f0D1409eF
0.003118309676875 ETH
1317780442025-02-10 2:34:252 days ago1739154865
0x2AD82A4E...f0D1409eF
0.065484503214375 ETH
1312747672025-01-29 10:58:3114 days ago1738148311
0x2AD82A4E...f0D1409eF
0.000001 ETH
1308871632025-01-20 11:38:2323 days ago1737373103
0x2AD82A4E...f0D1409eF
0.000001 ETH
1308270952025-01-19 2:16:0724 days ago1737252967
0x2AD82A4E...f0D1409eF
0.000697356034171 ETH
1308270952025-01-19 2:16:0724 days ago1737252967
0x2AD82A4E...f0D1409eF
0.013249764649265 ETH
1308133612025-01-18 18:38:1925 days ago1737225499
0x2AD82A4E...f0D1409eF
0.000007 ETH
1308133542025-01-18 18:38:0525 days ago1737225485
0x2AD82A4E...f0D1409eF
0.000001 ETH
1307986462025-01-18 10:27:4925 days ago1737196069
0x2AD82A4E...f0D1409eF
0.0055689264 ETH
1307986462025-01-18 10:27:4925 days ago1737196069
0x2AD82A4E...f0D1409eF
0.1058096016 ETH
1307889572025-01-18 5:04:5125 days ago1737176691
0x2AD82A4E...f0D1409eF
0.001050670605164 ETH
1307889572025-01-18 5:04:5125 days ago1737176691
0x2AD82A4E...f0D1409eF
0.019962741498117 ETH
1305417902025-01-12 11:45:5731 days ago1736682357
0x2AD82A4E...f0D1409eF
0.000781869287968 ETH
1305417902025-01-12 11:45:5731 days ago1736682357
0x2AD82A4E...f0D1409eF
0.014855516471406 ETH
1304045912025-01-09 7:32:3934 days ago1736407959
0x2AD82A4E...f0D1409eF
0.000026 ETH
1304045912025-01-09 7:32:3934 days ago1736407959
0x2AD82A4E...f0D1409eF
0.000494 ETH
1304045822025-01-09 7:32:2134 days ago1736407941
0x2AD82A4E...f0D1409eF
0.000027 ETH
1304045822025-01-09 7:32:2134 days ago1736407941
0x2AD82A4E...f0D1409eF
0.000513 ETH
1304045742025-01-09 7:32:0534 days ago1736407925
0x2AD82A4E...f0D1409eF
0.000037 ETH
1304045742025-01-09 7:32:0534 days ago1736407925
0x2AD82A4E...f0D1409eF
0.000703 ETH
1304045632025-01-09 7:31:4334 days ago1736407903
0x2AD82A4E...f0D1409eF
0.0000369699103 ETH
1304045632025-01-09 7:31:4334 days ago1736407903
0x2AD82A4E...f0D1409eF
0.0007024282957 ETH
1304045502025-01-09 7:31:1734 days ago1736407877
0x2AD82A4E...f0D1409eF
0.00006644901456 ETH
1304045502025-01-09 7:31:1734 days ago1736407877
0x2AD82A4E...f0D1409eF
0.00126253127664 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Bodhi

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 2 : Bodhi.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import {ERC1155} from "solmate/src/tokens/ERC1155.sol";
error Unauthorized();

contract Bodhi is ERC1155 {
    event Create(uint256 indexed assetId, address indexed sender, string arTxId);
    event Remove(uint256 indexed assetId, address indexed sender);
    event Trade(
        TradeType indexed tradeType,
        uint256 indexed assetId,
        address indexed sender,
        uint256 tokenAmount,
        uint256 ethAmount,
        uint256 creatorFee
    );

    struct Asset {
        uint256 id;
        string arTxId; // arweave transaction id
        address creator;
    }

    uint256 public assetIndex;
    mapping(uint256 => Asset) public assets;
    mapping(address => uint256[]) public userAssets;
    mapping(bytes32 => uint256) public txToAssetId;
    mapping(uint256 => uint256) public totalSupply;
    mapping(uint256 => uint256) public pool;
    uint256 public constant CREATOR_PREMINT = 1 ether; // 1e18
    uint256 public constant CREATOR_FEE_PERCENT = 0.05 ether; // 5%

    enum TradeType {
        Mint,
        Buy,
        Sell
    } // = 0, 1, 2

    function create(string calldata arTxId) public {
        bytes32 txHash = keccak256(abi.encodePacked(arTxId));
        require(txToAssetId[txHash] == 0, "Asset already exists");
        uint256 newAssetId = assetIndex;
        assets[newAssetId] = Asset(newAssetId, arTxId, msg.sender);
        userAssets[msg.sender].push(newAssetId);
        txToAssetId[txHash] = newAssetId;
        totalSupply[newAssetId] += CREATOR_PREMINT;
        assetIndex = newAssetId + 1;
        _mint(msg.sender, newAssetId, CREATOR_PREMINT, "");
        emit Create(newAssetId, msg.sender, arTxId);
        emit Trade(TradeType.Mint, newAssetId, msg.sender, CREATOR_PREMINT, 0, 0);
    }

    function remove(uint256 assetId) public {
        Asset memory asset = assets[assetId];
        if (asset.creator != msg.sender) {
            revert Unauthorized();
        }
        delete txToAssetId[keccak256(abi.encodePacked(asset.arTxId))];
        delete assets[assetId];
        emit Remove(assetId, msg.sender);
    }

    function getAssetIdsByAddress(address addr) public view returns (uint256[] memory) {
        return userAssets[addr];
    }

    function _curve(uint256 x) private pure returns (uint256) {
        return x <= CREATOR_PREMINT ? 0 : ((x - CREATOR_PREMINT) * (x - CREATOR_PREMINT) * (x - CREATOR_PREMINT));
    }

    function getPrice(uint256 supply, uint256 amount) public pure returns (uint256) {
        return (_curve(supply + amount) - _curve(supply)) / 1 ether / 1 ether / 50_000;
    }

    function getBuyPrice(uint256 assetId, uint256 amount) public view returns (uint256) {
        return getPrice(totalSupply[assetId], amount);
    }

    function getSellPrice(uint256 assetId, uint256 amount) public view returns (uint256) {
        return getPrice(totalSupply[assetId] - amount, amount);
    }

    function getBuyPriceAfterFee(uint256 assetId, uint256 amount) public view returns (uint256) {
        uint256 price = getBuyPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        return price + creatorFee;
    }

    function getSellPriceAfterFee(uint256 assetId, uint256 amount) public view returns (uint256) {
        uint256 price = getSellPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        return price - creatorFee;
    }

    function buy(uint256 assetId, uint256 amount) public payable {
        require(assetId < assetIndex, "Asset does not exist");
        uint256 price = getBuyPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        require(msg.value >= price + creatorFee, "Insufficient payment");
        totalSupply[assetId] += amount;
        pool[assetId] += price;
        _mint(msg.sender, assetId, amount, "");
        emit Trade(TradeType.Buy, assetId, msg.sender, amount, price, creatorFee);
        (bool creatorFeeSent, ) = payable(assets[assetId].creator).call{value: creatorFee}("");
        require(creatorFeeSent, "Failed to send Ether");
    }

    function sell(uint256 assetId, uint256 amount) public {
        require(assetId < assetIndex, "Asset does not exist");
        require(balanceOf[msg.sender][assetId] >= amount, "Insufficient balance");
        uint256 supply = totalSupply[assetId];
        require(supply - amount >= CREATOR_PREMINT, "Supply not allowed below premint amount");
        uint256 price = getSellPrice(assetId, amount);
        uint256 creatorFee = (price * CREATOR_FEE_PERCENT) / 1 ether;
        _burn(msg.sender, assetId, amount);
        totalSupply[assetId] = supply - amount;
        pool[assetId] -= price;
        emit Trade(TradeType.Sell, assetId, msg.sender, amount, price, creatorFee);
        (bool sent, ) = payable(msg.sender).call{value: price - creatorFee}("");
        (bool creatorFeeSent, ) = payable(assets[assetId].creator).call{value: creatorFee}("");
        require(sent && creatorFeeSent, "Failed to send Ether");
    }

    function uri(uint256 id) public view override returns (string memory) {
        return assets[id].arTxId;
    }
}

File 2 of 2 : ERC1155.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Minimalist and gas efficient standard ERC1155 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155 {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 amount
    );

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] amounts
    );

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    /*//////////////////////////////////////////////////////////////
                             ERC1155 STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(address => mapping(uint256 => uint256)) public balanceOf;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*//////////////////////////////////////////////////////////////
                             METADATA LOGIC
    //////////////////////////////////////////////////////////////*/

    function uri(uint256 id) public view virtual returns (string memory);

    /*//////////////////////////////////////////////////////////////
                              ERC1155 LOGIC
    //////////////////////////////////////////////////////////////*/

    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) public virtual {
        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        balanceOf[from][id] -= amount;
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, from, to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, from, id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) public virtual {
        require(ids.length == amounts.length, "LENGTH_MISMATCH");

        require(msg.sender == from || isApprovedForAll[from][msg.sender], "NOT_AUTHORIZED");

        // Storing these outside the loop saves ~15 gas per iteration.
        uint256 id;
        uint256 amount;

        for (uint256 i = 0; i < ids.length; ) {
            id = ids[i];
            amount = amounts[i];

            balanceOf[from][id] -= amount;
            balanceOf[to][id] += amount;

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, from, ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function balanceOfBatch(address[] calldata owners, uint256[] calldata ids)
        public
        view
        virtual
        returns (uint256[] memory balances)
    {
        require(owners.length == ids.length, "LENGTH_MISMATCH");

        balances = new uint256[](owners.length);

        // Unchecked because the only math done is incrementing
        // the array index counter which cannot possibly overflow.
        unchecked {
            for (uint256 i = 0; i < owners.length; ++i) {
                balances[i] = balanceOf[owners[i]][ids[i]];
            }
        }
    }

    /*//////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
            interfaceId == 0x0e89341c; // ERC165 Interface ID for ERC1155MetadataURI
    }

    /*//////////////////////////////////////////////////////////////
                        INTERNAL MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        balanceOf[to][id] += amount;

        emit TransferSingle(msg.sender, address(0), to, id, amount);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155Received(msg.sender, address(0), id, amount, data) ==
                    ERC1155TokenReceiver.onERC1155Received.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchMint(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[to][ids[i]] += amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, address(0), to, ids, amounts);

        require(
            to.code.length == 0
                ? to != address(0)
                : ERC1155TokenReceiver(to).onERC1155BatchReceived(msg.sender, address(0), ids, amounts, data) ==
                    ERC1155TokenReceiver.onERC1155BatchReceived.selector,
            "UNSAFE_RECIPIENT"
        );
    }

    function _batchBurn(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        uint256 idsLength = ids.length; // Saves MLOADs.

        require(idsLength == amounts.length, "LENGTH_MISMATCH");

        for (uint256 i = 0; i < idsLength; ) {
            balanceOf[from][ids[i]] -= amounts[i];

            // An array can't have a total length
            // larger than the max uint256 value.
            unchecked {
                ++i;
            }
        }

        emit TransferBatch(msg.sender, from, address(0), ids, amounts);
    }

    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        balanceOf[from][id] -= amount;

        emit TransferSingle(msg.sender, from, address(0), id, amount);
    }
}

/// @notice A generic interface for a contract which properly accepts ERC1155 tokens.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC1155.sol)
abstract contract ERC1155TokenReceiver {
    function onERC1155Received(
        address,
        address,
        uint256,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155Received.selector;
    }

    function onERC1155BatchReceived(
        address,
        address,
        uint256[] calldata,
        uint256[] calldata,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC1155TokenReceiver.onERC1155BatchReceived.selector;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"uint256","name":"assetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"arTxId","type":"string"}],"name":"Create","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"Remove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum Bodhi.TradeType","name":"tradeType","type":"uint8"},{"indexed":true,"internalType":"uint256","name":"assetId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"creatorFee","type":"uint256"}],"name":"Trade","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":"amounts","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":"amount","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"},{"inputs":[],"name":"CREATOR_FEE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CREATOR_PREMINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"assetIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"assets","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"arTxId","type":"string"},{"internalType":"address","name":"creator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"arTxId","type":"string"}],"name":"create","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAssetIdsByAddress","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"}],"name":"remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","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":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assetId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sell","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"txToAssetId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50613c4d806100206000396000f3fe6080604052600436106101805760003560e01c8063b6a46b3b116100d1578063d79875eb1161008a578063e0e1b2c011610064578063e0e1b2c01461060a578063e985e9c514610647578063f242432a14610684578063fe313112146106ad57610180565b8063d79875eb1461058b578063da23eb63146105b4578063e07b098a146105df57610180565b8063b6a46b3b14610450578063bd85b03914610479578063c157253d146104b6578063cd9c7121146104f3578063cf35bdd014610530578063d6febde81461056f57610180565b80634e1273f41161013e5780637ffb25ac116101185780637ffb25ac146103825780639477d85d146103ad578063a22cb465146103ea578063b5dfd7351461041357610180565b80634e1273f4146102cb5780635cf4ee91146103085780636a8a69aa1461034557610180565b8062fdd58e1461018557806301ffc9a7146101c2578063063a741f146101ff5780630e89341c1461023c5780632eb2c2d6146102795780634cc82215146102a2575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a79190612693565b6106ea565b6040516101b991906126e2565b60405180910390f35b3480156101ce57600080fd5b506101e960048036038101906101e49190612755565b61070f565b6040516101f6919061279d565b60405180910390f35b34801561020b57600080fd5b50610226600480360381019061022191906127b8565b6107a1565b60405161023391906126e2565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e91906127f8565b6107f0565b60405161027091906128b5565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612992565b610898565b005b3480156102ae57600080fd5b506102c960048036038101906102c491906127f8565b610cf4565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190612ac4565b610f4f565b6040516102ff9190612c03565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906127b8565b6110b8565b60405161033c91906126e2565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612693565b611114565b60405161037991906126e2565b60405180910390f35b34801561038e57600080fd5b50610397611145565b6040516103a491906126e2565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906127b8565b611151565b6040516103e191906126e2565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612c51565b611183565b005b34801561041f57600080fd5b5061043a60048036038101906104359190612c91565b611280565b6040516104479190612c03565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612d14565b611317565b005b34801561048557600080fd5b506104a0600480360381019061049b91906127f8565b611640565b6040516104ad91906126e2565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d891906127b8565b611658565b6040516104ea91906126e2565b60405180910390f35b3480156104ff57600080fd5b5061051a600480360381019061051591906127b8565b61167f565b60405161052791906126e2565b60405180910390f35b34801561053c57600080fd5b50610557600480360381019061055291906127f8565b6116ce565b60405161056693929190612d70565b60405180910390f35b610589600480360381019061058491906127b8565b6117a0565b005b34801561059757600080fd5b506105b260048036038101906105ad91906127b8565b611a29565b005b3480156105c057600080fd5b506105c9611dce565b6040516105d691906126e2565b60405180910390f35b3480156105eb57600080fd5b506105f4611dd9565b60405161060191906126e2565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190612de4565b611ddf565b60405161063e91906126e2565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190612e11565b611df7565b60405161067b919061279d565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612e51565b611e26565b005b3480156106b957600080fd5b506106d460048036038101906106cf91906127f8565b6121d9565b6040516106e191906126e2565b60405180910390f35b6000602052816000526040600020602052806000526040600020600091509150505481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076a575063d9b67a2660e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079a5750630e89341c60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000806107ae8484611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836107ce9190612f1a565b6107d89190612f8b565b905080826107e69190612fbc565b9250505092915050565b60606003600083815260200190815260200160002060010180546108139061301f565b80601f016020809104026020016040519081016040528092919081815260200182805461083f9061301f565b801561088c5780601f106108615761010080835404028352916020019161088c565b820191906000526020600020905b81548152906001019060200180831161086f57829003601f168201915b50505050509050919050565b8383905086869050146108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d79061309c565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109a05750600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613108565b60405180910390fd5b60008060005b88889050811015610aff57888882818110610a0357610a02613128565b5b905060200201359250868682818110610a1f57610a1e613128565b5b905060200201359150816000808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610a879190613157565b92505081905550816000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610aed9190612fbc565b925050819055508060010190506109e5565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b604051610b7a94939291906131f5565b60405180910390a460008973ffffffffffffffffffffffffffffffffffffffff163b14610c775763bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168973ffffffffffffffffffffffffffffffffffffffff1663bc197c81338d8c8c8c8c8c8c6040518963ffffffff1660e01b8152600401610c0f98979695949392919061327d565b6020604051808303816000875af1158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c529190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ca9565b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613379565b60405180910390fd5b50505050505050505050565b60006003600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054610d2e9061301f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a9061301f565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090503373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008260200151604051602001610e8a91906133d5565b6040516020818303038152906040528051906020012081526020019081526020016000206000905560036000838152602001908152602001600020600080820160009055600182016000610ede9190612598565b6002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550503373ffffffffffffffffffffffffffffffffffffffff16827fe52b7042a48e37bfb277e8a210794950be40bfaedea374e2dfbe0c6edff8791d60405160405180910390a35050565b6060828290508585905014610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f909061309c565b60405180910390fd5b8484905067ffffffffffffffff811115610fb657610fb56133ec565b5b604051908082528060200260200182016040528015610fe45781602001602082028036833780820191505090505b50905060005b858590508110156110af5760008087878481811061100b5761100a613128565b5b90506020020160208101906110209190612c91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061106f5761106e613128565b5b9050602002013581526020019081526020016000205482828151811061109857611097613128565b5b602002602001018181525050806001019050610fea565b50949350505050565b600061c350670de0b6b3a7640000806110d0866121f1565b6110e486886110df9190612fbc565b6121f1565b6110ee9190613157565b6110f89190612f8b565b6111029190612f8b565b61110c9190612f8b565b905092915050565b6004602052816000526040600020818154811061113057600080fd5b90600052602060002001600091509150505481565b670de0b6b3a764000081565b600061117b8260066000868152602001908152602001600020546111759190613157565b836110b8565b905092915050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611274919061279d565b60405180910390a35050565b6060600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561130b57602002820191906000526020600020905b8154815260200190600101908083116112f7575b50505050509050919050565b6000828260405160200161132c929190613440565b604051602081830303815290604052805190602001209050600060056000838152602001908152602001600020541461139a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611391906134a5565b60405180910390fd5b60006002549050604051806060016040528082815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020013373ffffffffffffffffffffffffffffffffffffffff16815250600360008381526020019081526020016000206000820151816000015560208201518160010190816114489190613671565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055806005600084815260200190815260200160002081905550670de0b6b3a764000060066000838152602001908152602001600020600082825461153c9190612fbc565b925050819055506001816115509190612fbc565b6002819055506115793382670de0b6b3a764000060405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16817fb683691564ab594b1f9e9db91abaf085736871256a4741baa41bf30cb9d4f23686866040516115c2929190613770565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff1681600060028111156115f6576115f5613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e670de0b6b3a7640000600080604051611632939291906137fe565b60405180910390a450505050565b60066020528060005260406000206000915090505481565b60006116776006600085815260200190815260200160002054836110b8565b905092915050565b60008061168c8484611151565b90506000670de0b6b3a764000066b1a2bc2ec50000836116ac9190612f1a565b6116b69190612f8b565b905080826116c49190613157565b9250505092915050565b60036020528060005260406000206000915090508060000154908060010180546116f79061301f565b80601f01602080910402602001604051908101604052809291908181526020018280546117239061301f565b80156117705780601f1061174557610100808354040283529160200191611770565b820191906000526020600020905b81548152906001019060200180831161175357829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60025482106117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613881565b60405180910390fd5b60006117f08383611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836118109190612f1a565b61181a9190612f8b565b905080826118289190612fbc565b34101561186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906138ed565b60405180910390fd5b8260066000868152602001908152602001600020600082825461188d9190612fbc565b92505081905550816007600086815260200190815260200160002060008282546118b79190612fbc565b925050819055506118d933858560405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16846001600281111561190557611904613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e8686866040516119389392919061390d565b60405180910390a460006003600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161199c90613975565b60006040518083038185875af1925050503d80600081146119d9576040519150601f19603f3d011682016040523d82523d6000602084013e6119de565b606091505b5050905080611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a19906139d6565b60405180910390fd5b5050505050565b6002548210611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613881565b60405180910390fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020541015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690613a42565b60405180910390fd5b600060066000848152602001908152602001600020549050670de0b6b3a76400008282611b2c9190613157565b1015611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490613ad4565b60405180910390fd5b6000611b798484611151565b90506000670de0b6b3a764000066b1a2bc2ec5000083611b999190612f1a565b611ba39190612f8b565b9050611bb03386866124ae565b8383611bbc9190613157565b600660008781526020019081526020016000208190555081600760008781526020019081526020016000206000828254611bf69190613157565b925050819055503373ffffffffffffffffffffffffffffffffffffffff1685600280811115611c2857611c27613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e878686604051611c5b9392919061390d565b60405180910390a460003373ffffffffffffffffffffffffffffffffffffffff168284611c889190613157565b604051611c9490613975565b60006040518083038185875af1925050503d8060008114611cd1576040519150601f19603f3d011682016040523d82523d6000602084013e611cd6565b606091505b5050905060006003600088815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611d3690613975565b60006040518083038185875af1925050503d8060008114611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d78565b606091505b50509050818015611d865750805b611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906139d6565b60405180910390fd5b50505050505050565b66b1a2bc2ec5000081565b60025481565b60056020528060005260406000206000915090505481565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611ee65750600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90613108565b60405180910390fd5b826000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611f849190613157565b92505081905550826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611fea9190612fbc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612067929190613af4565b60405180910390a460008573ffffffffffffffffffffffffffffffffffffffff163b146121605763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168573ffffffffffffffffffffffffffffffffffffffff1663f23a6e613389888888886040518763ffffffff1660e01b81526004016120f896959493929190613b1d565b6020604051808303816000875af1158015612117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213b9190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612192565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b6121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613379565b60405180910390fd5b505050505050565b60076020528060005260406000206000915090505481565b6000670de0b6b3a764000082111561225857670de0b6b3a7640000826122179190613157565b670de0b6b3a76400008361222b9190613157565b670de0b6b3a76400008461223f9190613157565b6122499190612f1a565b6122539190612f1a565b61225b565b60005b9050919050565b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008282546122c19190612fbc565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161233f929190613af4565b60405180910390a460008473ffffffffffffffffffffffffffffffffffffffff163b146124375763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e613360008787876040518663ffffffff1660e01b81526004016123cf959493929190613bbd565b6020604051808303816000875af11580156123ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124129190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612469565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90613379565b60405180910390fd5b50505050565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082825461250d9190613157565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62858560405161258b929190613af4565b60405180910390a4505050565b5080546125a49061301f565b6000825580601f106125b657506125d5565b601f0160209004906000526020600020908101906125d491906125d8565b5b50565b5b808211156125f15760008160009055506001016125d9565b5090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061262a826125ff565b9050919050565b61263a8161261f565b811461264557600080fd5b50565b60008135905061265781612631565b92915050565b6000819050919050565b6126708161265d565b811461267b57600080fd5b50565b60008135905061268d81612667565b92915050565b600080604083850312156126aa576126a96125f5565b5b60006126b885828601612648565b92505060206126c98582860161267e565b9150509250929050565b6126dc8161265d565b82525050565b60006020820190506126f760008301846126d3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612732816126fd565b811461273d57600080fd5b50565b60008135905061274f81612729565b92915050565b60006020828403121561276b5761276a6125f5565b5b600061277984828501612740565b91505092915050565b60008115159050919050565b61279781612782565b82525050565b60006020820190506127b2600083018461278e565b92915050565b600080604083850312156127cf576127ce6125f5565b5b60006127dd8582860161267e565b92505060206127ee8582860161267e565b9150509250929050565b60006020828403121561280e5761280d6125f5565b5b600061281c8482850161267e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561285f578082015181840152602081019050612844565b60008484015250505050565b6000601f19601f8301169050919050565b600061288782612825565b6128918185612830565b93506128a1818560208601612841565b6128aa8161286b565b840191505092915050565b600060208201905081810360008301526128cf818461287c565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126128fc576128fb6128d7565b5b8235905067ffffffffffffffff811115612919576129186128dc565b5b602083019150836020820283011115612935576129346128e1565b5b9250929050565b60008083601f840112612952576129516128d7565b5b8235905067ffffffffffffffff81111561296f5761296e6128dc565b5b60208301915083600182028301111561298b5761298a6128e1565b5b9250929050565b60008060008060008060008060a0898b0312156129b2576129b16125f5565b5b60006129c08b828c01612648565b98505060206129d18b828c01612648565b975050604089013567ffffffffffffffff8111156129f2576129f16125fa565b5b6129fe8b828c016128e6565b9650965050606089013567ffffffffffffffff811115612a2157612a206125fa565b5b612a2d8b828c016128e6565b9450945050608089013567ffffffffffffffff811115612a5057612a4f6125fa565b5b612a5c8b828c0161293c565b92509250509295985092959890939650565b60008083601f840112612a8457612a836128d7565b5b8235905067ffffffffffffffff811115612aa157612aa06128dc565b5b602083019150836020820283011115612abd57612abc6128e1565b5b9250929050565b60008060008060408587031215612ade57612add6125f5565b5b600085013567ffffffffffffffff811115612afc57612afb6125fa565b5b612b0887828801612a6e565b9450945050602085013567ffffffffffffffff811115612b2b57612b2a6125fa565b5b612b37878288016128e6565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b7a8161265d565b82525050565b6000612b8c8383612b71565b60208301905092915050565b6000602082019050919050565b6000612bb082612b45565b612bba8185612b50565b9350612bc583612b61565b8060005b83811015612bf6578151612bdd8882612b80565b9750612be883612b98565b925050600181019050612bc9565b5085935050505092915050565b60006020820190508181036000830152612c1d8184612ba5565b905092915050565b612c2e81612782565b8114612c3957600080fd5b50565b600081359050612c4b81612c25565b92915050565b60008060408385031215612c6857612c676125f5565b5b6000612c7685828601612648565b9250506020612c8785828601612c3c565b9150509250929050565b600060208284031215612ca757612ca66125f5565b5b6000612cb584828501612648565b91505092915050565b60008083601f840112612cd457612cd36128d7565b5b8235905067ffffffffffffffff811115612cf157612cf06128dc565b5b602083019150836001820283011115612d0d57612d0c6128e1565b5b9250929050565b60008060208385031215612d2b57612d2a6125f5565b5b600083013567ffffffffffffffff811115612d4957612d486125fa565b5b612d5585828601612cbe565b92509250509250929050565b612d6a8161261f565b82525050565b6000606082019050612d8560008301866126d3565b8181036020830152612d97818561287c565b9050612da66040830184612d61565b949350505050565b6000819050919050565b612dc181612dae565b8114612dcc57600080fd5b50565b600081359050612dde81612db8565b92915050565b600060208284031215612dfa57612df96125f5565b5b6000612e0884828501612dcf565b91505092915050565b60008060408385031215612e2857612e276125f5565b5b6000612e3685828601612648565b9250506020612e4785828601612648565b9150509250929050565b60008060008060008060a08789031215612e6e57612e6d6125f5565b5b6000612e7c89828a01612648565b9650506020612e8d89828a01612648565b9550506040612e9e89828a0161267e565b9450506060612eaf89828a0161267e565b935050608087013567ffffffffffffffff811115612ed057612ecf6125fa565b5b612edc89828a0161293c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f258261265d565b9150612f308361265d565b9250828202612f3e8161265d565b91508282048414831517612f5557612f54612eeb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f968261265d565b9150612fa18361265d565b925082612fb157612fb0612f5c565b5b828204905092915050565b6000612fc78261265d565b9150612fd28361265d565b9250828201905080821115612fea57612fe9612eeb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061303757607f821691505b60208210810361304a57613049612ff0565b5b50919050565b7f4c454e4754485f4d49534d415443480000000000000000000000000000000000600082015250565b6000613086600f83612830565b915061309182613050565b602082019050919050565b600060208201905081810360008301526130b581613079565b9050919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b60006130f2600e83612830565b91506130fd826130bc565b602082019050919050565b60006020820190508181036000830152613121816130e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006131628261265d565b915061316d8361265d565b925082820390508181111561318557613184612eeb565b5b92915050565b600080fd5b82818337505050565b60006131a58385612b50565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156131d8576131d761318b565b5b6020830292506131e9838584613190565b82840190509392505050565b60006040820190508181036000830152613210818688613199565b90508181036020830152613225818486613199565b905095945050505050565b600082825260208201905092915050565b82818337600083830152505050565b600061325c8385613230565b9350613269838584613241565b6132728361286b565b840190509392505050565b600060a082019050613292600083018b612d61565b61329f602083018a612d61565b81810360408301526132b281888a613199565b905081810360608301526132c7818688613199565b905081810360808301526132dc818486613250565b90509998505050505050505050565b6000815190506132fa81612729565b92915050565b600060208284031215613316576133156125f5565b5b6000613324848285016132eb565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b6000613363601083612830565b915061336e8261332d565b602082019050919050565b6000602082019050818103600083015261339281613356565b9050919050565b600081905092915050565b60006133af82612825565b6133b98185613399565b93506133c9818560208601612841565b80840191505092915050565b60006133e182846133a4565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006134278385613399565b9350613434838584613241565b82840190509392505050565b600061344d82848661341b565b91508190509392505050565b7f417373657420616c726561647920657869737473000000000000000000000000600082015250565b600061348f601483612830565b915061349a82613459565b602082019050919050565b600060208201905081810360008301526134be81613482565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826134ea565b61353186836134ea565b95508019841693508086168417925050509392505050565b6000819050919050565b600061356e6135696135648461265d565b613549565b61265d565b9050919050565b6000819050919050565b61358883613553565b61359c61359482613575565b8484546134f7565b825550505050565b600090565b6135b16135a4565b6135bc81848461357f565b505050565b5b818110156135e0576135d56000826135a9565b6001810190506135c2565b5050565b601f821115613625576135f6816134c5565b6135ff846134da565b8101602085101561360e578190505b61362261361a856134da565b8301826135c1565b50505b505050565b600082821c905092915050565b60006136486000198460080261362a565b1980831691505092915050565b60006136618383613637565b9150826002028217905092915050565b61367a82612825565b67ffffffffffffffff811115613693576136926133ec565b5b61369d825461301f565b6136a88282856135e4565b600060209050601f8311600181146136db57600084156136c9578287015190505b6136d38582613655565b86555061373b565b601f1984166136e9866134c5565b60005b82811015613711578489015182556001820191506020850194506020810190506136ec565b8683101561372e578489015161372a601f891682613637565b8355505b6001600288020188555050505b505050505050565b600061374f8385612830565b935061375c838584613241565b6137658361286b565b840190509392505050565b6000602082019050818103600083015261378b818486613743565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000819050919050565b60006137e86137e36137de846137c3565b613549565b61265d565b9050919050565b6137f8816137cd565b82525050565b600060608201905061381360008301866126d3565b61382060208301856137ef565b61382d60408301846137ef565b949350505050565b7f417373657420646f6573206e6f74206578697374000000000000000000000000600082015250565b600061386b601483612830565b915061387682613835565b602082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b60006138d7601483612830565b91506138e2826138a1565b602082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b600060608201905061392260008301866126d3565b61392f60208301856126d3565b61393c60408301846126d3565b949350505050565b600081905092915050565b50565b600061395f600083613944565b915061396a8261394f565b600082019050919050565b600061398082613952565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006139c0601483612830565b91506139cb8261398a565b602082019050919050565b600060208201905081810360008301526139ef816139b3565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613a2c601483612830565b9150613a37826139f6565b602082019050919050565b60006020820190508181036000830152613a5b81613a1f565b9050919050565b7f537570706c79206e6f7420616c6c6f7765642062656c6f77207072656d696e7460008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b6000613abe602783612830565b9150613ac982613a62565b604082019050919050565b60006020820190508181036000830152613aed81613ab1565b9050919050565b6000604082019050613b0960008301856126d3565b613b1660208301846126d3565b9392505050565b600060a082019050613b326000830189612d61565b613b3f6020830188612d61565b613b4c60408301876126d3565b613b5960608301866126d3565b8181036080830152613b6c818486613250565b9050979650505050505050565b600081519050919050565b6000613b8f82613b79565b613b998185613230565b9350613ba9818560208601612841565b613bb28161286b565b840191505092915050565b600060a082019050613bd26000830188612d61565b613bdf6020830187612d61565b613bec60408301866126d3565b613bf960608301856126d3565b8181036080830152613c0b8184613b84565b9050969550505050505056fea2646970667358221220963cee2b632c111bc5d2e853038cbfeb52f85863d3119c7c9e90b9131b1ba8a664736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101805760003560e01c8063b6a46b3b116100d1578063d79875eb1161008a578063e0e1b2c011610064578063e0e1b2c01461060a578063e985e9c514610647578063f242432a14610684578063fe313112146106ad57610180565b8063d79875eb1461058b578063da23eb63146105b4578063e07b098a146105df57610180565b8063b6a46b3b14610450578063bd85b03914610479578063c157253d146104b6578063cd9c7121146104f3578063cf35bdd014610530578063d6febde81461056f57610180565b80634e1273f41161013e5780637ffb25ac116101185780637ffb25ac146103825780639477d85d146103ad578063a22cb465146103ea578063b5dfd7351461041357610180565b80634e1273f4146102cb5780635cf4ee91146103085780636a8a69aa1461034557610180565b8062fdd58e1461018557806301ffc9a7146101c2578063063a741f146101ff5780630e89341c1461023c5780632eb2c2d6146102795780634cc82215146102a2575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a79190612693565b6106ea565b6040516101b991906126e2565b60405180910390f35b3480156101ce57600080fd5b506101e960048036038101906101e49190612755565b61070f565b6040516101f6919061279d565b60405180910390f35b34801561020b57600080fd5b50610226600480360381019061022191906127b8565b6107a1565b60405161023391906126e2565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e91906127f8565b6107f0565b60405161027091906128b5565b60405180910390f35b34801561028557600080fd5b506102a0600480360381019061029b9190612992565b610898565b005b3480156102ae57600080fd5b506102c960048036038101906102c491906127f8565b610cf4565b005b3480156102d757600080fd5b506102f260048036038101906102ed9190612ac4565b610f4f565b6040516102ff9190612c03565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a91906127b8565b6110b8565b60405161033c91906126e2565b60405180910390f35b34801561035157600080fd5b5061036c60048036038101906103679190612693565b611114565b60405161037991906126e2565b60405180910390f35b34801561038e57600080fd5b50610397611145565b6040516103a491906126e2565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf91906127b8565b611151565b6040516103e191906126e2565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c9190612c51565b611183565b005b34801561041f57600080fd5b5061043a60048036038101906104359190612c91565b611280565b6040516104479190612c03565b60405180910390f35b34801561045c57600080fd5b5061047760048036038101906104729190612d14565b611317565b005b34801561048557600080fd5b506104a0600480360381019061049b91906127f8565b611640565b6040516104ad91906126e2565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d891906127b8565b611658565b6040516104ea91906126e2565b60405180910390f35b3480156104ff57600080fd5b5061051a600480360381019061051591906127b8565b61167f565b60405161052791906126e2565b60405180910390f35b34801561053c57600080fd5b50610557600480360381019061055291906127f8565b6116ce565b60405161056693929190612d70565b60405180910390f35b610589600480360381019061058491906127b8565b6117a0565b005b34801561059757600080fd5b506105b260048036038101906105ad91906127b8565b611a29565b005b3480156105c057600080fd5b506105c9611dce565b6040516105d691906126e2565b60405180910390f35b3480156105eb57600080fd5b506105f4611dd9565b60405161060191906126e2565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190612de4565b611ddf565b60405161063e91906126e2565b60405180910390f35b34801561065357600080fd5b5061066e60048036038101906106699190612e11565b611df7565b60405161067b919061279d565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612e51565b611e26565b005b3480156106b957600080fd5b506106d460048036038101906106cf91906127f8565b6121d9565b6040516106e191906126e2565b60405180910390f35b6000602052816000526040600020602052806000526040600020600091509150505481565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076a575063d9b67a2660e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061079a5750630e89341c60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000806107ae8484611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836107ce9190612f1a565b6107d89190612f8b565b905080826107e69190612fbc565b9250505092915050565b60606003600083815260200190815260200160002060010180546108139061301f565b80601f016020809104026020016040519081016040528092919081815260200182805461083f9061301f565b801561088c5780601f106108615761010080835404028352916020019161088c565b820191906000526020600020905b81548152906001019060200180831161086f57829003601f168201915b50505050509050919050565b8383905086869050146108e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d79061309c565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109a05750600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690613108565b60405180910390fd5b60008060005b88889050811015610aff57888882818110610a0357610a02613128565b5b905060200201359250868682818110610a1f57610a1e613128565b5b905060200201359150816000808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610a879190613157565b92505081905550816000808c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206000828254610aed9190612fbc565b925050819055508060010190506109e5565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b604051610b7a94939291906131f5565b60405180910390a460008973ffffffffffffffffffffffffffffffffffffffff163b14610c775763bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168973ffffffffffffffffffffffffffffffffffffffff1663bc197c81338d8c8c8c8c8c8c6040518963ffffffff1660e01b8152600401610c0f98979695949392919061327d565b6020604051808303816000875af1158015610c2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c529190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610ca9565b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90613379565b60405180910390fd5b50505050505050505050565b60006003600083815260200190815260200160002060405180606001604052908160008201548152602001600182018054610d2e9061301f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a9061301f565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090503373ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff1614610e71576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008260200151604051602001610e8a91906133d5565b6040516020818303038152906040528051906020012081526020019081526020016000206000905560036000838152602001908152602001600020600080820160009055600182016000610ede9190612598565b6002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550503373ffffffffffffffffffffffffffffffffffffffff16827fe52b7042a48e37bfb277e8a210794950be40bfaedea374e2dfbe0c6edff8791d60405160405180910390a35050565b6060828290508585905014610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f909061309c565b60405180910390fd5b8484905067ffffffffffffffff811115610fb657610fb56133ec565b5b604051908082528060200260200182016040528015610fe45781602001602082028036833780820191505090505b50905060005b858590508110156110af5760008087878481811061100b5761100a613128565b5b90506020020160208101906110209190612c91565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061106f5761106e613128565b5b9050602002013581526020019081526020016000205482828151811061109857611097613128565b5b602002602001018181525050806001019050610fea565b50949350505050565b600061c350670de0b6b3a7640000806110d0866121f1565b6110e486886110df9190612fbc565b6121f1565b6110ee9190613157565b6110f89190612f8b565b6111029190612f8b565b61110c9190612f8b565b905092915050565b6004602052816000526040600020818154811061113057600080fd5b90600052602060002001600091509150505481565b670de0b6b3a764000081565b600061117b8260066000868152602001908152602001600020546111759190613157565b836110b8565b905092915050565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611274919061279d565b60405180910390a35050565b6060600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561130b57602002820191906000526020600020905b8154815260200190600101908083116112f7575b50505050509050919050565b6000828260405160200161132c929190613440565b604051602081830303815290604052805190602001209050600060056000838152602001908152602001600020541461139a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611391906134a5565b60405180910390fd5b60006002549050604051806060016040528082815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081526020013373ffffffffffffffffffffffffffffffffffffffff16815250600360008381526020019081526020016000206000820151816000015560208201518160010190816114489190613671565b5060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055806005600084815260200190815260200160002081905550670de0b6b3a764000060066000838152602001908152602001600020600082825461153c9190612fbc565b925050819055506001816115509190612fbc565b6002819055506115793382670de0b6b3a764000060405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16817fb683691564ab594b1f9e9db91abaf085736871256a4741baa41bf30cb9d4f23686866040516115c2929190613770565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff1681600060028111156115f6576115f5613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e670de0b6b3a7640000600080604051611632939291906137fe565b60405180910390a450505050565b60066020528060005260406000206000915090505481565b60006116776006600085815260200190815260200160002054836110b8565b905092915050565b60008061168c8484611151565b90506000670de0b6b3a764000066b1a2bc2ec50000836116ac9190612f1a565b6116b69190612f8b565b905080826116c49190613157565b9250505092915050565b60036020528060005260406000206000915090508060000154908060010180546116f79061301f565b80601f01602080910402602001604051908101604052809291908181526020018280546117239061301f565b80156117705780601f1061174557610100808354040283529160200191611770565b820191906000526020600020905b81548152906001019060200180831161175357829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b60025482106117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90613881565b60405180910390fd5b60006117f08383611658565b90506000670de0b6b3a764000066b1a2bc2ec50000836118109190612f1a565b61181a9190612f8b565b905080826118289190612fbc565b34101561186a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611861906138ed565b60405180910390fd5b8260066000868152602001908152602001600020600082825461188d9190612fbc565b92505081905550816007600086815260200190815260200160002060008282546118b79190612fbc565b925050819055506118d933858560405180602001604052806000815250612262565b3373ffffffffffffffffffffffffffffffffffffffff16846001600281111561190557611904613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e8686866040516119389392919061390d565b60405180910390a460006003600086815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161199c90613975565b60006040518083038185875af1925050503d80600081146119d9576040519150601f19603f3d011682016040523d82523d6000602084013e6119de565b606091505b5050905080611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a19906139d6565b60405180910390fd5b5050505050565b6002548210611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613881565b60405180910390fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020541015611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690613a42565b60405180910390fd5b600060066000848152602001908152602001600020549050670de0b6b3a76400008282611b2c9190613157565b1015611b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6490613ad4565b60405180910390fd5b6000611b798484611151565b90506000670de0b6b3a764000066b1a2bc2ec5000083611b999190612f1a565b611ba39190612f8b565b9050611bb03386866124ae565b8383611bbc9190613157565b600660008781526020019081526020016000208190555081600760008781526020019081526020016000206000828254611bf69190613157565b925050819055503373ffffffffffffffffffffffffffffffffffffffff1685600280811115611c2857611c27613794565b5b7f4373618509eab3295fc837b6b78ce8f6fc820f403d4a22076932311ad1e4b51e878686604051611c5b9392919061390d565b60405180910390a460003373ffffffffffffffffffffffffffffffffffffffff168284611c889190613157565b604051611c9490613975565b60006040518083038185875af1925050503d8060008114611cd1576040519150601f19603f3d011682016040523d82523d6000602084013e611cd6565b606091505b5050905060006003600088815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051611d3690613975565b60006040518083038185875af1925050503d8060008114611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d78565b606091505b50509050818015611d865750805b611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc906139d6565b60405180910390fd5b50505050505050565b66b1a2bc2ec5000081565b60025481565b60056020528060005260406000206000915090505481565b60016020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611ee65750600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90613108565b60405180910390fd5b826000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611f849190613157565b92505081905550826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000828254611fea9190612fbc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612067929190613af4565b60405180910390a460008573ffffffffffffffffffffffffffffffffffffffff163b146121605763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168573ffffffffffffffffffffffffffffffffffffffff1663f23a6e613389888888886040518763ffffffff1660e01b81526004016120f896959493929190613b1d565b6020604051808303816000875af1158015612117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213b9190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612192565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b6121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c890613379565b60405180910390fd5b505050505050565b60076020528060005260406000206000915090505481565b6000670de0b6b3a764000082111561225857670de0b6b3a7640000826122179190613157565b670de0b6b3a76400008361222b9190613157565b670de0b6b3a76400008461223f9190613157565b6122499190612f1a565b6122539190612f1a565b61225b565b60005b9050919050565b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060008282546122c19190612fbc565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161233f929190613af4565b60405180910390a460008473ffffffffffffffffffffffffffffffffffffffff163b146124375763f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff1663f23a6e613360008787876040518663ffffffff1660e01b81526004016123cf959493929190613bbd565b6020604051808303816000875af11580156123ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124129190613300565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612469565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b6124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90613379565b60405180910390fd5b50505050565b806000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020600082825461250d9190613157565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62858560405161258b929190613af4565b60405180910390a4505050565b5080546125a49061301f565b6000825580601f106125b657506125d5565b601f0160209004906000526020600020908101906125d491906125d8565b5b50565b5b808211156125f15760008160009055506001016125d9565b5090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061262a826125ff565b9050919050565b61263a8161261f565b811461264557600080fd5b50565b60008135905061265781612631565b92915050565b6000819050919050565b6126708161265d565b811461267b57600080fd5b50565b60008135905061268d81612667565b92915050565b600080604083850312156126aa576126a96125f5565b5b60006126b885828601612648565b92505060206126c98582860161267e565b9150509250929050565b6126dc8161265d565b82525050565b60006020820190506126f760008301846126d3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612732816126fd565b811461273d57600080fd5b50565b60008135905061274f81612729565b92915050565b60006020828403121561276b5761276a6125f5565b5b600061277984828501612740565b91505092915050565b60008115159050919050565b61279781612782565b82525050565b60006020820190506127b2600083018461278e565b92915050565b600080604083850312156127cf576127ce6125f5565b5b60006127dd8582860161267e565b92505060206127ee8582860161267e565b9150509250929050565b60006020828403121561280e5761280d6125f5565b5b600061281c8482850161267e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561285f578082015181840152602081019050612844565b60008484015250505050565b6000601f19601f8301169050919050565b600061288782612825565b6128918185612830565b93506128a1818560208601612841565b6128aa8161286b565b840191505092915050565b600060208201905081810360008301526128cf818461287c565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126128fc576128fb6128d7565b5b8235905067ffffffffffffffff811115612919576129186128dc565b5b602083019150836020820283011115612935576129346128e1565b5b9250929050565b60008083601f840112612952576129516128d7565b5b8235905067ffffffffffffffff81111561296f5761296e6128dc565b5b60208301915083600182028301111561298b5761298a6128e1565b5b9250929050565b60008060008060008060008060a0898b0312156129b2576129b16125f5565b5b60006129c08b828c01612648565b98505060206129d18b828c01612648565b975050604089013567ffffffffffffffff8111156129f2576129f16125fa565b5b6129fe8b828c016128e6565b9650965050606089013567ffffffffffffffff811115612a2157612a206125fa565b5b612a2d8b828c016128e6565b9450945050608089013567ffffffffffffffff811115612a5057612a4f6125fa565b5b612a5c8b828c0161293c565b92509250509295985092959890939650565b60008083601f840112612a8457612a836128d7565b5b8235905067ffffffffffffffff811115612aa157612aa06128dc565b5b602083019150836020820283011115612abd57612abc6128e1565b5b9250929050565b60008060008060408587031215612ade57612add6125f5565b5b600085013567ffffffffffffffff811115612afc57612afb6125fa565b5b612b0887828801612a6e565b9450945050602085013567ffffffffffffffff811115612b2b57612b2a6125fa565b5b612b37878288016128e6565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b7a8161265d565b82525050565b6000612b8c8383612b71565b60208301905092915050565b6000602082019050919050565b6000612bb082612b45565b612bba8185612b50565b9350612bc583612b61565b8060005b83811015612bf6578151612bdd8882612b80565b9750612be883612b98565b925050600181019050612bc9565b5085935050505092915050565b60006020820190508181036000830152612c1d8184612ba5565b905092915050565b612c2e81612782565b8114612c3957600080fd5b50565b600081359050612c4b81612c25565b92915050565b60008060408385031215612c6857612c676125f5565b5b6000612c7685828601612648565b9250506020612c8785828601612c3c565b9150509250929050565b600060208284031215612ca757612ca66125f5565b5b6000612cb584828501612648565b91505092915050565b60008083601f840112612cd457612cd36128d7565b5b8235905067ffffffffffffffff811115612cf157612cf06128dc565b5b602083019150836001820283011115612d0d57612d0c6128e1565b5b9250929050565b60008060208385031215612d2b57612d2a6125f5565b5b600083013567ffffffffffffffff811115612d4957612d486125fa565b5b612d5585828601612cbe565b92509250509250929050565b612d6a8161261f565b82525050565b6000606082019050612d8560008301866126d3565b8181036020830152612d97818561287c565b9050612da66040830184612d61565b949350505050565b6000819050919050565b612dc181612dae565b8114612dcc57600080fd5b50565b600081359050612dde81612db8565b92915050565b600060208284031215612dfa57612df96125f5565b5b6000612e0884828501612dcf565b91505092915050565b60008060408385031215612e2857612e276125f5565b5b6000612e3685828601612648565b9250506020612e4785828601612648565b9150509250929050565b60008060008060008060a08789031215612e6e57612e6d6125f5565b5b6000612e7c89828a01612648565b9650506020612e8d89828a01612648565b9550506040612e9e89828a0161267e565b9450506060612eaf89828a0161267e565b935050608087013567ffffffffffffffff811115612ed057612ecf6125fa565b5b612edc89828a0161293c565b92509250509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f258261265d565b9150612f308361265d565b9250828202612f3e8161265d565b91508282048414831517612f5557612f54612eeb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612f968261265d565b9150612fa18361265d565b925082612fb157612fb0612f5c565b5b828204905092915050565b6000612fc78261265d565b9150612fd28361265d565b9250828201905080821115612fea57612fe9612eeb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061303757607f821691505b60208210810361304a57613049612ff0565b5b50919050565b7f4c454e4754485f4d49534d415443480000000000000000000000000000000000600082015250565b6000613086600f83612830565b915061309182613050565b602082019050919050565b600060208201905081810360008301526130b581613079565b9050919050565b7f4e4f545f415554484f52495a4544000000000000000000000000000000000000600082015250565b60006130f2600e83612830565b91506130fd826130bc565b602082019050919050565b60006020820190508181036000830152613121816130e5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006131628261265d565b915061316d8361265d565b925082820390508181111561318557613184612eeb565b5b92915050565b600080fd5b82818337505050565b60006131a58385612b50565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156131d8576131d761318b565b5b6020830292506131e9838584613190565b82840190509392505050565b60006040820190508181036000830152613210818688613199565b90508181036020830152613225818486613199565b905095945050505050565b600082825260208201905092915050565b82818337600083830152505050565b600061325c8385613230565b9350613269838584613241565b6132728361286b565b840190509392505050565b600060a082019050613292600083018b612d61565b61329f602083018a612d61565b81810360408301526132b281888a613199565b905081810360608301526132c7818688613199565b905081810360808301526132dc818486613250565b90509998505050505050505050565b6000815190506132fa81612729565b92915050565b600060208284031215613316576133156125f5565b5b6000613324848285016132eb565b91505092915050565b7f554e534146455f524543495049454e5400000000000000000000000000000000600082015250565b6000613363601083612830565b915061336e8261332d565b602082019050919050565b6000602082019050818103600083015261339281613356565b9050919050565b600081905092915050565b60006133af82612825565b6133b98185613399565b93506133c9818560208601612841565b80840191505092915050565b60006133e182846133a4565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006134278385613399565b9350613434838584613241565b82840190509392505050565b600061344d82848661341b565b91508190509392505050565b7f417373657420616c726561647920657869737473000000000000000000000000600082015250565b600061348f601483612830565b915061349a82613459565b602082019050919050565b600060208201905081810360008301526134be81613482565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026135277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826134ea565b61353186836134ea565b95508019841693508086168417925050509392505050565b6000819050919050565b600061356e6135696135648461265d565b613549565b61265d565b9050919050565b6000819050919050565b61358883613553565b61359c61359482613575565b8484546134f7565b825550505050565b600090565b6135b16135a4565b6135bc81848461357f565b505050565b5b818110156135e0576135d56000826135a9565b6001810190506135c2565b5050565b601f821115613625576135f6816134c5565b6135ff846134da565b8101602085101561360e578190505b61362261361a856134da565b8301826135c1565b50505b505050565b600082821c905092915050565b60006136486000198460080261362a565b1980831691505092915050565b60006136618383613637565b9150826002028217905092915050565b61367a82612825565b67ffffffffffffffff811115613693576136926133ec565b5b61369d825461301f565b6136a88282856135e4565b600060209050601f8311600181146136db57600084156136c9578287015190505b6136d38582613655565b86555061373b565b601f1984166136e9866134c5565b60005b82811015613711578489015182556001820191506020850194506020810190506136ec565b8683101561372e578489015161372a601f891682613637565b8355505b6001600288020188555050505b505050505050565b600061374f8385612830565b935061375c838584613241565b6137658361286b565b840190509392505050565b6000602082019050818103600083015261378b818486613743565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000819050919050565b60006137e86137e36137de846137c3565b613549565b61265d565b9050919050565b6137f8816137cd565b82525050565b600060608201905061381360008301866126d3565b61382060208301856137ef565b61382d60408301846137ef565b949350505050565b7f417373657420646f6573206e6f74206578697374000000000000000000000000600082015250565b600061386b601483612830565b915061387682613835565b602082019050919050565b6000602082019050818103600083015261389a8161385e565b9050919050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b60006138d7601483612830565b91506138e2826138a1565b602082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b600060608201905061392260008301866126d3565b61392f60208301856126d3565b61393c60408301846126d3565b949350505050565b600081905092915050565b50565b600061395f600083613944565b915061396a8261394f565b600082019050919050565b600061398082613952565b9150819050919050565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b60006139c0601483612830565b91506139cb8261398a565b602082019050919050565b600060208201905081810360008301526139ef816139b3565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000613a2c601483612830565b9150613a37826139f6565b602082019050919050565b60006020820190508181036000830152613a5b81613a1f565b9050919050565b7f537570706c79206e6f7420616c6c6f7765642062656c6f77207072656d696e7460008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b6000613abe602783612830565b9150613ac982613a62565b604082019050919050565b60006020820190508181036000830152613aed81613ab1565b9050919050565b6000604082019050613b0960008301856126d3565b613b1660208301846126d3565b9392505050565b600060a082019050613b326000830189612d61565b613b3f6020830188612d61565b613b4c60408301876126d3565b613b5960608301866126d3565b8181036080830152613b6c818486613250565b9050979650505050505050565b600081519050919050565b6000613b8f82613b79565b613b998185613230565b9350613ba9818560208601612841565b613bb28161286b565b840191505092915050565b600060a082019050613bd26000830188612d61565b613bdf6020830187612d61565b613bec60408301866126d3565b613bf960608301856126d3565b8181036080830152613c0b8184613b84565b9050969550505050505056fea2646970667358221220963cee2b632c111bc5d2e853038cbfeb52f85863d3119c7c9e90b9131b1ba8a664736f6c63430008120033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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