Contract 0xCF205808Ed36593aa40a44F10c7f7C2F67d4A4d4 21

 
Txn Hash Method
Block
From
To
Value
0x56167c6fc7bdde0ab1362bb45d3a5235083f48123600b61b5c754c14c0fc7a7cBuy Shares132307442024-04-16 7:00:354 secs ago0x333993b8f396bd4d8c10e16c18b8ab65ba2e7221 IN  Friend.tech: Shares0 ETH0.0000009500440.016634903
0x719fdc75037148dcad5c652a1119352512eb9a4a48ab1ea5aa3a00efba6547dfBuy Shares132307432024-04-16 7:00:336 secs ago0x0950f584f089325c53bf53141d3c354728f77993 IN  Friend.tech: Shares0 ETH0.0000009091650.01664819
0x699a2c7161d5085f9a04e7c188c0ea0035100103ed387d225841b88e259e5825Buy Shares132307422024-04-16 7:00:318 secs ago0xcbdd7d84ab792126783bce41e8878e1dc193404c IN  Friend.tech: Shares0 ETH0.0000009083290.016632512
0xe1aa3a1ed88da747517fc95eb638cf20cdd77a55974a41a2e255a0a4e714be61Buy Shares132307422024-04-16 7:00:318 secs ago0xb7c7f141580ae03e86c999394a5f335999f987a8 IN  Friend.tech: Shares0 ETH0.00000094960.016632512
0x3d4da1132877fb5ae7838625ce8307e03623096c2ec033b875ff1b539978270cBuy Shares132307402024-04-16 7:00:2712 secs ago0x96ac13e676c142967ae63a0d8d13d644b9fe3319 IN  Friend.tech: Shares0 ETH0.0000009118460.016654059
0x81864e0895172e9379d77c11cdcd6d1ba3bdd589db1cadeb3248206e1d8acd9bBuy Shares132307402024-04-16 7:00:2712 secs ago0x66386e2726e2bc64d75efc711db6faab5108886d IN  Friend.tech: Shares0 ETH0.000000953730.016654059
0xb6aa66b3dc5f528b7a1dd5e9a3c3a0b0c8c290b34789efd3735f1f790bcb5309Buy Shares132307382024-04-16 7:00:2316 secs ago0xade49ceb50b282699cb0dc031577b6142850c3e4 IN  Friend.tech: Shares0 ETH0.0000009055880.016536709
0xb64fe35f86537bbaa08e0bf1bc3febe11eb4bbdcc16079269cbaa4b434dea8d0Buy Shares132307382024-04-16 7:00:2316 secs ago0x117d7e8a5abe6daba96ce746fe0b5a39f1bf365b IN  Friend.tech: Shares0 ETH0.0000009471790.016536709
0xbfcd22c358045dd067e3c30bec6da551c72cb775995e54622e908e815932a31aBuy Shares132307372024-04-16 7:00:2118 secs ago0xf44c211cb67f7f61972da4032ea348bf42798405 IN  Friend.tech: Shares0 ETH0.000000905270.016526072
0xc8a75a5ac2cdb0356fb19392bcf059cc068bbc2cb0911211f514be1a9210b28cBuy Shares132307362024-04-16 7:00:1920 secs ago0xa5c0767292e74db32d18b8d83fef98154e6d4818 IN  Friend.tech: Shares0 ETH0.0000009480080.016551565
0x8e6320fa5c07be0bf0f0292e5ab8f68c3f5bae1b71cb62a64fef1a32f67dfa06Buy Shares132307352024-04-16 7:00:1722 secs ago0xe567d0dedaa418af8fc0b1d6670acf0f174b1c17 IN  Friend.tech: Shares0 ETH0.0000009075770.016551514
0x863cfc61a5ac63f2a50f60a1203b50b301463987fe5c57577848328f049e5d85Buy Shares132307352024-04-16 7:00:1722 secs ago0x8a695730844e95eb150ef578c39e1ff41b0f2f48 IN  Friend.tech: Shares0 ETH0.0000009490860.016551514
0x9a447ebddf8ccbadb86579be4f93d30472de01d1ee18904e70c1cb26c1ade496Buy Shares132307332024-04-16 7:00:1326 secs ago0xa09d7ece0ba9010d85c0265357e0703b1e1d07bf IN  Friend.tech: Shares0 ETH0.0000009091140.016577897
0x108fc01105479fd1dc2efccbba9c552e3c2611f127cc4b88e110fabfae3b7f5eBuy Shares132307332024-04-16 7:00:1326 secs ago0x7c9ddb680ba9737eef2d60648ff53a0cb09dfa10 IN  Friend.tech: Shares0 ETH0.0000009505590.016577897
0x17864734d384a7f500cd33750e6f0cd70b3799ec275495e381bdaab6d72d1875Buy Shares132307322024-04-16 7:00:1128 secs ago0xb55c693c3fffc0c021e67d111c03f5c49ec46551 IN  Friend.tech: Shares0 ETH0.0000009103870.016601757
0x21d847279266b7f7ed0ab65750cdcea98130de4a9eb98692fad9d7da7298c9fdBuy Shares132307322024-04-16 7:00:1128 secs ago0x3f43529a63f17b58764babc36ce70f509b62b6d0 IN  Friend.tech: Shares0 ETH0.0000009518910.016601757
0xa38d1e21c0c421a7ca59fbb3c7aee72a2cb60be8d455d55b16b357fbac8045d7Buy Shares132307302024-04-16 7:00:0732 secs ago0x1c2b7bcb161f1810e8a58992e2d21f31450e7775 IN  Friend.tech: Shares0 ETH0.0000009121690.016635175
0x3d516932a248aa029f882eafdb2f52bf02361f0e5bef4d3756bba99e3b566cceBuy Shares132307302024-04-16 7:00:0732 secs ago0x625ae52dd8ea8eb1f6d619a19403b180d4f9fb04 IN  Friend.tech: Shares0 ETH0.0000009537570.016635175
0x1b71c90f5bb2c32ae8d4c066d4ba669387cba135587488888ddbcfe34b956612Buy Shares132307292024-04-16 7:00:0534 secs ago0x3350b37b0d272b80bbfab4678f15666b20f530a4 IN  Friend.tech: Shares0 ETH0.0000009554070.016641087
0x3b6c68fb15739824f28598d0d0b73d567d2dd5f96aacc0c025fe957af3cc930aBuy Shares132307282024-04-16 7:00:0336 secs ago0x4c49907b0d24def926649cd0b9607d8dec4ecde1 IN  Friend.tech: Shares0 ETH0.0000009143670.016651627
0x3e652c9a5bc397b42f87176970f0c97f02f00632482b64326bf0048719ee502dBuy Shares132307272024-04-16 7:00:0138 secs ago0xe07796c4133718488819f0a7a7d43771d9e893e4 IN  Friend.tech: Shares0 ETH0.0000009489340.016525147
0xebc4edde5f251925c9c4fe9a5fbf665cdf21ce8c07640ede15403fbff2d0cb40Buy Shares132307272024-04-16 7:00:0138 secs ago0x43351800cf61b8f4ad8daf4810a78e74ae9b0319 IN  Friend.tech: Shares0 ETH0.0000009072860.016525147
0x012c29869523deda4f2aac02cf48927bc286dde7a96e865ee1f67199e3c84714Buy Shares132307252024-04-16 6:59:5742 secs ago0x33830493d20160a4584a172417f900933500fbf9 IN  Friend.tech: Shares0 ETH0.0000009509420.016561102
0x2d76de808ed750b7328bdf14730506bb01f152c79d88a501f987bec076159460Buy Shares132307252024-04-16 6:59:5742 secs ago0x3bfadde4814d806daf0eca8bbd2e3218f1710485 IN  Friend.tech: Shares0 ETH0.0000009095390.016561102
0x0694fe7b8e4ff19e86ab802b4e21c99a55d8a17f5a919d4ac2e1aa2c5016bec1Buy Shares132307242024-04-16 6:59:5544 secs ago0xc2386ac67e8da77d4c934ac99fa1114e659c57c6 IN  Friend.tech: Shares0 ETH0.0000009513230.016594343
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x467fb2ad9e3087f42c393e2989ea2bb65366bb00ba1578a47e5d4dc566617351132307082024-04-16 6:59:231 min ago Friend.tech: Shares0xd83f2c23d38de8f640639becf497c3ffc5d589d90.000078125 ETH
0x467fb2ad9e3087f42c393e2989ea2bb65366bb00ba1578a47e5d4dc566617351132307082024-04-16 6:59:231 min ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000078125 ETH
0x467fb2ad9e3087f42c393e2989ea2bb65366bb00ba1578a47e5d4dc566617351132307082024-04-16 6:59:231 min ago Friend.tech: Shares0xb1bd043a8efa346b9b0def53617840820c9755830.00140625 ETH
0x4a24e8557e08811352725532abb271c1642f80cf5f16815a162671a8fde335bf132307022024-04-16 6:59:111 min ago Friend.tech: Shares0xb1351254bff2ecb665ea107343cdd4a77f79bf200.0021125 ETH
0x4a24e8557e08811352725532abb271c1642f80cf5f16815a162671a8fde335bf132307022024-04-16 6:59:111 min ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.0021125 ETH
0xe308675eda7e6e307ddd80afd394a781121bcdb92dfeb99dea7587db4b259099132306972024-04-16 6:59:011 min ago Friend.tech: Shares0x71405938701e33cb0ba66c9d29a9b6991a12e0530.000028125 ETH
0xe308675eda7e6e307ddd80afd394a781121bcdb92dfeb99dea7587db4b259099132306972024-04-16 6:59:011 min ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000028125 ETH
0xaee8508af303b84ccebec656fcc7d7ea72ac4e149d63411fdfecfb1c613cf8f3132306962024-04-16 6:58:591 min ago Friend.tech: Shares0x1f03591060d9e794adb9e679652c929ad40dad4e0.0000125 ETH
0xaee8508af303b84ccebec656fcc7d7ea72ac4e149d63411fdfecfb1c613cf8f3132306962024-04-16 6:58:591 min ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.0000125 ETH
0xb5ee561b89596c073babd76d96c0eac4dceeebfa9fe7d1836e8adf7fb7a1b4b4132306952024-04-16 6:58:571 min ago Friend.tech: Shares0x1f03591060d9e794adb9e679652c929ad40dad4e0.000003125 ETH
0xb5ee561b89596c073babd76d96c0eac4dceeebfa9fe7d1836e8adf7fb7a1b4b4132306952024-04-16 6:58:571 min ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000003125 ETH
0xb5ee561b89596c073babd76d96c0eac4dceeebfa9fe7d1836e8adf7fb7a1b4b4132306952024-04-16 6:58:571 min ago 0x7198fe13fe2dade17c0fda963925f8ab86965f9a Friend.tech: Shares0.00006875 ETH
0x08abd47f9729de76447c9271b214de5b46f9b8e1b60f9527424014a559471fed132306922024-04-16 6:58:511 min ago Friend.tech: Shares0x71405938701e33cb0ba66c9d29a9b6991a12e0530.0000125 ETH
0x08abd47f9729de76447c9271b214de5b46f9b8e1b60f9527424014a559471fed132306922024-04-16 6:58:511 min ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.0000125 ETH
0x133f97e91b110e44599f4d21c755ffef3fcf6332e41e5bb05d9adb1ebb8d7e74132306872024-04-16 6:58:411 min ago Friend.tech: Shares0x2fd0be13438a96c9c0a7d119bc94eb3c7414fe4f0.00005 ETH
0x133f97e91b110e44599f4d21c755ffef3fcf6332e41e5bb05d9adb1ebb8d7e74132306872024-04-16 6:58:411 min ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.00005 ETH
0xf0bf4550f3612c5baa5682ec243313a17e65e8fe9ee29fca505f869944a0d04b132306852024-04-16 6:58:372 mins ago Friend.tech: Shares0x71405938701e33cb0ba66c9d29a9b6991a12e0530.000003125 ETH
0xf0bf4550f3612c5baa5682ec243313a17e65e8fe9ee29fca505f869944a0d04b132306852024-04-16 6:58:372 mins ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000003125 ETH
0xf5c9ba5159e2cb46d90b79cd6cdb4f633794c00df67ebba730c26b5a56d29b26132306802024-04-16 6:58:272 mins ago Friend.tech: Shares0x2d832ba528d626679fff5539e360b5aebd21225e0.0000125 ETH
0xf5c9ba5159e2cb46d90b79cd6cdb4f633794c00df67ebba730c26b5a56d29b26132306802024-04-16 6:58:272 mins ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.0000125 ETH
0xf5c9ba5159e2cb46d90b79cd6cdb4f633794c00df67ebba730c26b5a56d29b26132306802024-04-16 6:58:272 mins ago Friend.tech: Shares0xb1bd043a8efa346b9b0def53617840820c9755830.000225 ETH
0x7645b816a835febfa93261cc59b1ee8e59c3e611488b9fc33400938210009a76132306712024-04-16 6:58:092 mins ago Friend.tech: Shares0x2fd0be13438a96c9c0a7d119bc94eb3c7414fe4f0.000028125 ETH
0x7645b816a835febfa93261cc59b1ee8e59c3e611488b9fc33400938210009a76132306712024-04-16 6:58:092 mins ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.000028125 ETH
0xe3451d2c4f8d454b34ae86718dd9d838243bdf79aafbe673b5845057a5adc67d132306552024-04-16 6:57:373 mins ago Friend.tech: Shares0x648531234c426e734aa4765a8859d384e969b7b60.058653125 ETH
0xe3451d2c4f8d454b34ae86718dd9d838243bdf79aafbe673b5845057a5adc67d132306552024-04-16 6:57:373 mins ago Friend.tech: Shares 0x831be9e08185eba7d88aab1efc059336babef4300.058653125 ETH
[ Download CSV Export 
Latest 14 Deposits
L2 Txn Hash L1 Deposit Txn Value Token
0x4baaaa6c29a88d46d0d9f67ab1d53516564fe2a5998abae0dd99a3158fd07cd32023-09-19 20:57:35209 days 10 hrs ago0xb5b828efc15cd890655c8c268079c4b80658d88646f27cc9e7f89dfd904ee74c0.0396 Ether (ETH)
0xd299eb59c1902bfd494a2562acac83101fa5fded6767a4af746058e9623b1fc52023-09-18 21:58:35210 days 9 hrs ago0xc3c43b3b3760954c17ea2c3bee9e4a8246c94fa7142f954e4c63fc17b7a53eea0.20796875 Ether (ETH)
0x005442b78f501f07de3af58ccc58089fab9c4a41d07bc659d0ddf2f5c1e0ea6d2023-09-18 21:36:11210 days 9 hrs ago0x071940e5fe57627f42eeb92197dad0cbf2ca30544544331152f1dab2c97e1b060.20796875 Ether (ETH)
0x04fddb5f3520110f6625a9544e07b7cd6a85ce9434580f020633381c0187dbe42023-09-18 18:56:41210 days 12 hrs ago0xd72017ac2b3ca11fa08cc6dae57356a36918c438ce4a3f60b65f2c46d77664f70.0044 Ether (ETH)
0x6912c690ddbd56f345af0ca05c967ad28b6e9ea814d8cc0cc00b12f68302a5922023-09-18 18:16:41210 days 12 hrs ago0xa8f9cbf487f25670362f7ec642b35b9886896a65d82531fc1f581a801649e3e40.00336875 Ether (ETH)
0xd9c0f17ee50376a7159c93f2329eb220d785322730441d26f63672dba5ec4f0d2023-09-18 17:58:03210 days 13 hrs ago0xf3048a1ec317d51371f40ab2b7b9e706a781dc5104491e74e431c39082ded60e0.01161875 Ether (ETH)
0xdcbf63cab94cc25bd047b5592a1c8e2b8be6fba65fda6ebd3c52e2856230e6572023-09-18 17:54:27210 days 13 hrs ago0x71df21f4ff13379d49553a02052b83760ed9d2733dddefe10576564b4956a5a20.01546875 Ether (ETH)
0xddc381dbb25b558fb847b8122fe04e17805d14e55ad6efa9c7d41dab00a7acbd2023-09-18 17:19:39210 days 13 hrs ago0xfbd011e42ca5233ae2267b5fbd0a32d2d34c4fb135536d38d0580dfc4ebbfe0d0.013475 Ether (ETH)
0x28dce24b28c04461ae27d16c7279c346ce358e48cdd0ffd2ed225b1ca6be18412023-09-17 21:10:43211 days 9 hrs ago0x374721d7842a45eb6f7afb5a7767759871b6f1a8392512187f8738047370d95d0.013475 Ether (ETH)
0xb6384071b3948d4676c91a44582bf3e3637d954be26caa9d08bf60f882fc044e2023-09-17 21:03:21211 days 9 hrs ago0x694e2ec382f0f6773af3b658f839dd6f3c24c8abac17e33c1ba2fcee3984ef560.01161875 Ether (ETH)
0xdc4a7ecaeb11af99c4431e2c56621843b7df8d13eb79603bed4c562707a0d42c2023-09-17 18:20:25211 days 12 hrs ago0xf36f9ba6424dd96ce297ae27a378b148f3aa77f926ddfad764ddcd95fb7db88f0.01161875 Ether (ETH)
0xd39fa51228d8849a4460cda99c462af04dc641916456222072a448bdc0932ab82023-09-17 17:53:01211 days 13 hrs ago0x8541abf9ac887ff2fc5e83f37f344b1c58a1d94f2c6d3acca1e7513ed825ffa60.01161875 Ether (ETH)
0x49a0f6b168a98706b5a7df73502c9595a8297843ab481664ec00ffc0f8ea9fa72023-09-15 6:49:59214 days 10 mins ago0xcaa937044b6ed8bee17e23c4e99c5dba8e9020f95683a6ac275fb6698344a3c90.00034375 Ether (ETH)
0x45e4423403c9b7b42088ab5803fa879fb0334706589e54eda842c71bf94f50902023-09-15 6:20:35214 days 40 mins ago0x0021b176097d77ce9ac1e44953476f51a14f02257284c838ed23a69c6029fc280.0003125 Ether (ETH)
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FriendtechSharesV1

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at basescan.org on 2023-08-10
*/

// File: contracts/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: contracts/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/FriendtechShares.sol



pragma solidity >=0.8.2 <0.9.0;


// TODO: Events, final pricing model, 

contract FriendtechSharesV1 is Ownable {
    address public protocolFeeDestination;
    uint256 public protocolFeePercent;
    uint256 public subjectFeePercent;

    event Trade(address trader, address subject, bool isBuy, uint256 shareAmount, uint256 ethAmount, uint256 protocolEthAmount, uint256 subjectEthAmount, uint256 supply);

    // SharesSubject => (Holder => Balance)
    mapping(address => mapping(address => uint256)) public sharesBalance;

    // SharesSubject => Supply
    mapping(address => uint256) public sharesSupply;

    function setFeeDestination(address _feeDestination) public onlyOwner {
        protocolFeeDestination = _feeDestination;
    }

    function setProtocolFeePercent(uint256 _feePercent) public onlyOwner {
        protocolFeePercent = _feePercent;
    }

    function setSubjectFeePercent(uint256 _feePercent) public onlyOwner {
        subjectFeePercent = _feePercent;
    }

    function getPrice(uint256 supply, uint256 amount) public pure returns (uint256) {
        uint256 sum1 = supply == 0 ? 0 : (supply - 1 )* (supply) * (2 * (supply - 1) + 1) / 6;
        uint256 sum2 = supply == 0 && amount == 1 ? 0 : (supply - 1 + amount) * (supply + amount) * (2 * (supply - 1 + amount) + 1) / 6;
        uint256 summation = sum2 - sum1;
        return summation * 1 ether / 16000;
    }

    function getBuyPrice(address sharesSubject, uint256 amount) public view returns (uint256) {
        return getPrice(sharesSupply[sharesSubject], amount);
    }

    function getSellPrice(address sharesSubject, uint256 amount) public view returns (uint256) {
        return getPrice(sharesSupply[sharesSubject] - amount, amount);
    }

    function getBuyPriceAfterFee(address sharesSubject, uint256 amount) public view returns (uint256) {
        uint256 price = getBuyPrice(sharesSubject, amount);
        uint256 protocolFee = price * protocolFeePercent / 1 ether;
        uint256 subjectFee = price * subjectFeePercent / 1 ether;
        return price + protocolFee + subjectFee;
    }

    function getSellPriceAfterFee(address sharesSubject, uint256 amount) public view returns (uint256) {
        uint256 price = getSellPrice(sharesSubject, amount);
        uint256 protocolFee = price * protocolFeePercent / 1 ether;
        uint256 subjectFee = price * subjectFeePercent / 1 ether;
        return price - protocolFee - subjectFee;
    }

    function buyShares(address sharesSubject, uint256 amount) public payable {
        uint256 supply = sharesSupply[sharesSubject];
        require(supply > 0 || sharesSubject == msg.sender, "Only the shares' subject can buy the first share");
        uint256 price = getPrice(supply, amount);
        uint256 protocolFee = price * protocolFeePercent / 1 ether;
        uint256 subjectFee = price * subjectFeePercent / 1 ether;
        require(msg.value >= price + protocolFee + subjectFee, "Insufficient payment");
        sharesBalance[sharesSubject][msg.sender] = sharesBalance[sharesSubject][msg.sender] + amount;
        sharesSupply[sharesSubject] = supply + amount;
        emit Trade(msg.sender, sharesSubject, true, amount, price, protocolFee, subjectFee, supply + amount);
        (bool success1, ) = protocolFeeDestination.call{value: protocolFee}("");
        (bool success2, ) = sharesSubject.call{value: subjectFee}("");
        require(success1 && success2, "Unable to send funds");
    }

    function sellShares(address sharesSubject, uint256 amount) public payable {
        uint256 supply = sharesSupply[sharesSubject];
        require(supply > amount, "Cannot sell the last share");
        uint256 price = getPrice(supply - amount, amount);
        uint256 protocolFee = price * protocolFeePercent / 1 ether;
        uint256 subjectFee = price * subjectFeePercent / 1 ether;
        require(sharesBalance[sharesSubject][msg.sender] >= amount, "Insufficient shares");
        sharesBalance[sharesSubject][msg.sender] = sharesBalance[sharesSubject][msg.sender] - amount;
        sharesSupply[sharesSubject] = supply - amount;
        emit Trade(msg.sender, sharesSubject, false, amount, price, protocolFee, subjectFee, supply - amount);
        (bool success1, ) = msg.sender.call{value: price - protocolFee - subjectFee}("");
        (bool success2, ) = protocolFeeDestination.call{value: protocolFee}("");
        (bool success3, ) = sharesSubject.call{value: subjectFee}("");
        require(success1 && success2 && success3, "Unable to send funds");
    }
}

Contract Security Audit

Contract ABI

[{"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":false,"internalType":"address","name":"trader","type":"address"},{"indexed":false,"internalType":"address","name":"subject","type":"address"},{"indexed":false,"internalType":"bool","name":"isBuy","type":"bool"},{"indexed":false,"internalType":"uint256","name":"shareAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"protocolEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"subjectEthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"supply","type":"uint256"}],"name":"Trade","type":"event"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyShares","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"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":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeeDestination","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protocolFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sellShares","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeDestination","type":"address"}],"name":"setFeeDestination","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"}],"name":"setProtocolFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"}],"name":"setSubjectFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"sharesBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sharesSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"subjectFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b508061010d6000396000f3fe6080604052600436106101095760003560e01c8063715018a611610095578063b51d053411610064578063b51d053414610382578063d6e6eb9f1461039e578063f2fde38b146103c9578063f9931be0146103f2578063fbe532341461042f57610109565b8063715018a6146102da5780638da5cb5b146102f15780639ae717811461031c578063a49834211461035957610109565b80634635256e116100dc5780634635256e146101f05780634ce7957c1461022d5780635a8a764e146102585780635cf4ee91146102815780636945b123146102be57610109565b8063020235ff1461010e5780630f026f6d1461014b5780632267a89c1461018857806324dc441d146101c5575b600080fd5b34801561011a57600080fd5b506101356004803603810190610130919061140d565b610458565b6040516101429190611466565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d91906114ad565b61047d565b60405161017f9190611466565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa91906114ad565b6104f8565b6040516101bc9190611466565b60405180910390f35b3480156101d157600080fd5b506101da610573565b6040516101e79190611466565b60405180910390f35b3480156101fc57600080fd5b50610217600480360381019061021291906114ad565b610579565b6040516102249190611466565b60405180910390f35b34801561023957600080fd5b506102426105cc565b60405161024f91906114fc565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190611517565b6105f2565b005b34801561028d57600080fd5b506102a860048036038101906102a39190611544565b610604565b6040516102b59190611466565b60405180910390f35b6102d860048036038101906102d391906114ad565b61073a565b005b3480156102e657600080fd5b506102ef610b9d565b005b3480156102fd57600080fd5b50610306610bb1565b60405161031391906114fc565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e91906114ad565b610bda565b6040516103509190611466565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190611517565b610c38565b005b61039c600480360381019061039791906114ad565b610c4a565b005b3480156103aa57600080fd5b506103b3611173565b6040516103c09190611466565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190611584565b611179565b005b3480156103fe57600080fd5b5061041960048036038101906104149190611584565b6111fc565b6040516104269190611466565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190611584565b611214565b005b6004602052816000526040600020602052806000526040600020600091509150505481565b60008061048a8484610579565b90506000670de0b6b3a7640000600254836104a591906115e0565b6104af9190611651565b90506000670de0b6b3a7640000600354846104ca91906115e0565b6104d49190611651565b90508082846104e39190611682565b6104ed9190611682565b935050505092915050565b6000806105058484610bda565b90506000670de0b6b3a76400006002548361052091906115e0565b61052a9190611651565b90506000670de0b6b3a76400006003548461054591906115e0565b61054f9190611651565b905080828461055e91906116b6565b61056891906116b6565b935050505092915050565b60035481565b60006105c4600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610604565b905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105fa611260565b8060038190555050565b600080600084146106665760066001808661061f91906116b6565b600261062b91906115e0565b6106359190611682565b8560018761064391906116b6565b61064d91906115e0565b61065791906115e0565b6106619190611651565b610669565b60005b90506000808514801561067c5750600184145b6106f957600660018560018861069291906116b6565b61069c9190611682565b60026106a891906115e0565b6106b29190611682565b85876106be9190611682565b866001896106cc91906116b6565b6106d69190611682565b6106e091906115e0565b6106ea91906115e0565b6106f49190611651565b6106fc565b60005b90506000828261070c91906116b6565b9050613e80670de0b6b3a76400008261072591906115e0565b61072f9190611651565b935050505092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111806107b857503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee9061176d565b60405180910390fd5b60006108038284610604565b90506000670de0b6b3a76400006002548361081e91906115e0565b6108289190611651565b90506000670de0b6b3a76400006003548461084391906115e0565b61084d9190611651565b905080828461085c9190611682565b6108669190611682565b3410156108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f906117d9565b60405180910390fd5b84600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109309190611682565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084846109bc9190611682565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c333876001888787878c8c610a349190611682565b604051610a48989796959493929190611814565b60405180910390a16000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051610a98906118c3565b60006040518083038185875af1925050503d8060008114610ad5576040519150601f19603f3d011682016040523d82523d6000602084013e610ada565b606091505b5050905060008773ffffffffffffffffffffffffffffffffffffffff1683604051610b04906118c3565b60006040518083038185875af1925050503d8060008114610b41576040519150601f19603f3d011682016040523d82523d6000602084013e610b46565b606091505b50509050818015610b545750805b610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a90611924565b60405180910390fd5b5050505050505050565b610ba5611260565b610baf60006112de565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610c3082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c2a91906116b6565b83610604565b905092915050565b610c40611260565b8060028190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818111610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790611990565b60405180910390fd5b6000610ce78383610ce191906116b6565b84610604565b90506000670de0b6b3a764000060025483610d0291906115e0565b610d0c9190611651565b90506000670de0b6b3a764000060035484610d2791906115e0565b610d319190611651565b905084600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de9906119fc565b60405180910390fd5b84600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7a91906116b6565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508484610f0691906116b6565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c333876000888787878c8c610f7e91906116b6565b604051610f92989796959493929190611814565b60405180910390a160003373ffffffffffffffffffffffffffffffffffffffff16828486610fc091906116b6565b610fca91906116b6565b604051610fd6906118c3565b60006040518083038185875af1925050503d8060008114611013576040519150601f19603f3d011682016040523d82523d6000602084013e611018565b606091505b505090506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611064906118c3565b60006040518083038185875af1925050503d80600081146110a1576040519150601f19603f3d011682016040523d82523d6000602084013e6110a6565b606091505b5050905060008873ffffffffffffffffffffffffffffffffffffffff16846040516110d0906118c3565b60006040518083038185875af1925050503d806000811461110d576040519150601f19603f3d011682016040523d82523d6000602084013e611112565b606091505b505090508280156111205750815b80156111295750805b611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90611924565b60405180910390fd5b505050505050505050565b60025481565b611181611260565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790611a8e565b60405180910390fd5b6111f9816112de565b50565b60056020528060005260406000206000915090505481565b61121c611260565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112686113a2565b73ffffffffffffffffffffffffffffffffffffffff16611286610bb1565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390611afa565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113da826113af565b9050919050565b6113ea816113cf565b81146113f557600080fd5b50565b600081359050611407816113e1565b92915050565b60008060408385031215611424576114236113aa565b5b6000611432858286016113f8565b9250506020611443858286016113f8565b9150509250929050565b6000819050919050565b6114608161144d565b82525050565b600060208201905061147b6000830184611457565b92915050565b61148a8161144d565b811461149557600080fd5b50565b6000813590506114a781611481565b92915050565b600080604083850312156114c4576114c36113aa565b5b60006114d2858286016113f8565b92505060206114e385828601611498565b9150509250929050565b6114f6816113cf565b82525050565b600060208201905061151160008301846114ed565b92915050565b60006020828403121561152d5761152c6113aa565b5b600061153b84828501611498565b91505092915050565b6000806040838503121561155b5761155a6113aa565b5b600061156985828601611498565b925050602061157a85828601611498565b9150509250929050565b60006020828403121561159a576115996113aa565b5b60006115a8848285016113f8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115eb8261144d565b91506115f68361144d565b92508282026116048161144d565b9150828204841483151761161b5761161a6115b1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061165c8261144d565b91506116678361144d565b92508261167757611676611622565b5b828204905092915050565b600061168d8261144d565b91506116988361144d565b92508282019050808211156116b0576116af6115b1565b5b92915050565b60006116c18261144d565b91506116cc8361144d565b92508282039050818111156116e4576116e36115b1565b5b92915050565b600082825260208201905092915050565b7f4f6e6c79207468652073686172657327207375626a6563742063616e2062757960008201527f2074686520666972737420736861726500000000000000000000000000000000602082015250565b60006117576030836116ea565b9150611762826116fb565b604082019050919050565b600060208201905081810360008301526117868161174a565b9050919050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b60006117c36014836116ea565b91506117ce8261178d565b602082019050919050565b600060208201905081810360008301526117f2816117b6565b9050919050565b60008115159050919050565b61180e816117f9565b82525050565b60006101008201905061182a600083018b6114ed565b611837602083018a6114ed565b6118446040830189611805565b6118516060830188611457565b61185e6080830187611457565b61186b60a0830186611457565b61187860c0830185611457565b61188560e0830184611457565b9998505050505050505050565b600081905092915050565b50565b60006118ad600083611892565b91506118b88261189d565b600082019050919050565b60006118ce826118a0565b9150819050919050565b7f556e61626c6520746f2073656e642066756e6473000000000000000000000000600082015250565b600061190e6014836116ea565b9150611919826118d8565b602082019050919050565b6000602082019050818103600083015261193d81611901565b9050919050565b7f43616e6e6f742073656c6c20746865206c617374207368617265000000000000600082015250565b600061197a601a836116ea565b915061198582611944565b602082019050919050565b600060208201905081810360008301526119a98161196d565b9050919050565b7f496e73756666696369656e742073686172657300000000000000000000000000600082015250565b60006119e66013836116ea565b91506119f1826119b0565b602082019050919050565b60006020820190508181036000830152611a15816119d9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611a786026836116ea565b9150611a8382611a1c565b604082019050919050565b60006020820190508181036000830152611aa781611a6b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ae46020836116ea565b9150611aef82611aae565b602082019050919050565b60006020820190508181036000830152611b1381611ad7565b905091905056fea2646970667358221220cebed752f67094eaf80084d89578d96bc6f4fdbc3356576a982a1a23262a11e864736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101095760003560e01c8063715018a611610095578063b51d053411610064578063b51d053414610382578063d6e6eb9f1461039e578063f2fde38b146103c9578063f9931be0146103f2578063fbe532341461042f57610109565b8063715018a6146102da5780638da5cb5b146102f15780639ae717811461031c578063a49834211461035957610109565b80634635256e116100dc5780634635256e146101f05780634ce7957c1461022d5780635a8a764e146102585780635cf4ee91146102815780636945b123146102be57610109565b8063020235ff1461010e5780630f026f6d1461014b5780632267a89c1461018857806324dc441d146101c5575b600080fd5b34801561011a57600080fd5b506101356004803603810190610130919061140d565b610458565b6040516101429190611466565b60405180910390f35b34801561015757600080fd5b50610172600480360381019061016d91906114ad565b61047d565b60405161017f9190611466565b60405180910390f35b34801561019457600080fd5b506101af60048036038101906101aa91906114ad565b6104f8565b6040516101bc9190611466565b60405180910390f35b3480156101d157600080fd5b506101da610573565b6040516101e79190611466565b60405180910390f35b3480156101fc57600080fd5b50610217600480360381019061021291906114ad565b610579565b6040516102249190611466565b60405180910390f35b34801561023957600080fd5b506102426105cc565b60405161024f91906114fc565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190611517565b6105f2565b005b34801561028d57600080fd5b506102a860048036038101906102a39190611544565b610604565b6040516102b59190611466565b60405180910390f35b6102d860048036038101906102d391906114ad565b61073a565b005b3480156102e657600080fd5b506102ef610b9d565b005b3480156102fd57600080fd5b50610306610bb1565b60405161031391906114fc565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e91906114ad565b610bda565b6040516103509190611466565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b9190611517565b610c38565b005b61039c600480360381019061039791906114ad565b610c4a565b005b3480156103aa57600080fd5b506103b3611173565b6040516103c09190611466565b60405180910390f35b3480156103d557600080fd5b506103f060048036038101906103eb9190611584565b611179565b005b3480156103fe57600080fd5b5061041960048036038101906104149190611584565b6111fc565b6040516104269190611466565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190611584565b611214565b005b6004602052816000526040600020602052806000526040600020600091509150505481565b60008061048a8484610579565b90506000670de0b6b3a7640000600254836104a591906115e0565b6104af9190611651565b90506000670de0b6b3a7640000600354846104ca91906115e0565b6104d49190611651565b90508082846104e39190611682565b6104ed9190611682565b935050505092915050565b6000806105058484610bda565b90506000670de0b6b3a76400006002548361052091906115e0565b61052a9190611651565b90506000670de0b6b3a76400006003548461054591906115e0565b61054f9190611651565b905080828461055e91906116b6565b61056891906116b6565b935050505092915050565b60035481565b60006105c4600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610604565b905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105fa611260565b8060038190555050565b600080600084146106665760066001808661061f91906116b6565b600261062b91906115e0565b6106359190611682565b8560018761064391906116b6565b61064d91906115e0565b61065791906115e0565b6106619190611651565b610669565b60005b90506000808514801561067c5750600184145b6106f957600660018560018861069291906116b6565b61069c9190611682565b60026106a891906115e0565b6106b29190611682565b85876106be9190611682565b866001896106cc91906116b6565b6106d69190611682565b6106e091906115e0565b6106ea91906115e0565b6106f49190611651565b6106fc565b60005b90506000828261070c91906116b6565b9050613e80670de0b6b3a76400008261072591906115e0565b61072f9190611651565b935050505092915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111806107b857503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee9061176d565b60405180910390fd5b60006108038284610604565b90506000670de0b6b3a76400006002548361081e91906115e0565b6108289190611651565b90506000670de0b6b3a76400006003548461084391906115e0565b61084d9190611651565b905080828461085c9190611682565b6108669190611682565b3410156108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f906117d9565b60405180910390fd5b84600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109309190611682565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084846109bc9190611682565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c333876001888787878c8c610a349190611682565b604051610a48989796959493929190611814565b60405180910390a16000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051610a98906118c3565b60006040518083038185875af1925050503d8060008114610ad5576040519150601f19603f3d011682016040523d82523d6000602084013e610ada565b606091505b5050905060008773ffffffffffffffffffffffffffffffffffffffff1683604051610b04906118c3565b60006040518083038185875af1925050503d8060008114610b41576040519150601f19603f3d011682016040523d82523d6000602084013e610b46565b606091505b50509050818015610b545750805b610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a90611924565b60405180910390fd5b5050505050505050565b610ba5611260565b610baf60006112de565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610c3082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c2a91906116b6565b83610604565b905092915050565b610c40611260565b8060028190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818111610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790611990565b60405180910390fd5b6000610ce78383610ce191906116b6565b84610604565b90506000670de0b6b3a764000060025483610d0291906115e0565b610d0c9190611651565b90506000670de0b6b3a764000060035484610d2791906115e0565b610d319190611651565b905084600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de9906119fc565b60405180910390fd5b84600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7a91906116b6565b600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508484610f0691906116b6565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c333876000888787878c8c610f7e91906116b6565b604051610f92989796959493929190611814565b60405180910390a160003373ffffffffffffffffffffffffffffffffffffffff16828486610fc091906116b6565b610fca91906116b6565b604051610fd6906118c3565b60006040518083038185875af1925050503d8060008114611013576040519150601f19603f3d011682016040523d82523d6000602084013e611018565b606091505b505090506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611064906118c3565b60006040518083038185875af1925050503d80600081146110a1576040519150601f19603f3d011682016040523d82523d6000602084013e6110a6565b606091505b5050905060008873ffffffffffffffffffffffffffffffffffffffff16846040516110d0906118c3565b60006040518083038185875af1925050503d806000811461110d576040519150601f19603f3d011682016040523d82523d6000602084013e611112565b606091505b505090508280156111205750815b80156111295750805b611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90611924565b60405180910390fd5b505050505050505050565b60025481565b611181611260565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790611a8e565b60405180910390fd5b6111f9816112de565b50565b60056020528060005260406000206000915090505481565b61121c611260565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6112686113a2565b73ffffffffffffffffffffffffffffffffffffffff16611286610bb1565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390611afa565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113da826113af565b9050919050565b6113ea816113cf565b81146113f557600080fd5b50565b600081359050611407816113e1565b92915050565b60008060408385031215611424576114236113aa565b5b6000611432858286016113f8565b9250506020611443858286016113f8565b9150509250929050565b6000819050919050565b6114608161144d565b82525050565b600060208201905061147b6000830184611457565b92915050565b61148a8161144d565b811461149557600080fd5b50565b6000813590506114a781611481565b92915050565b600080604083850312156114c4576114c36113aa565b5b60006114d2858286016113f8565b92505060206114e385828601611498565b9150509250929050565b6114f6816113cf565b82525050565b600060208201905061151160008301846114ed565b92915050565b60006020828403121561152d5761152c6113aa565b5b600061153b84828501611498565b91505092915050565b6000806040838503121561155b5761155a6113aa565b5b600061156985828601611498565b925050602061157a85828601611498565b9150509250929050565b60006020828403121561159a576115996113aa565b5b60006115a8848285016113f8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115eb8261144d565b91506115f68361144d565b92508282026116048161144d565b9150828204841483151761161b5761161a6115b1565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061165c8261144d565b91506116678361144d565b92508261167757611676611622565b5b828204905092915050565b600061168d8261144d565b91506116988361144d565b92508282019050808211156116b0576116af6115b1565b5b92915050565b60006116c18261144d565b91506116cc8361144d565b92508282039050818111156116e4576116e36115b1565b5b92915050565b600082825260208201905092915050565b7f4f6e6c79207468652073686172657327207375626a6563742063616e2062757960008201527f2074686520666972737420736861726500000000000000000000000000000000602082015250565b60006117576030836116ea565b9150611762826116fb565b604082019050919050565b600060208201905081810360008301526117868161174a565b9050919050565b7f496e73756666696369656e74207061796d656e74000000000000000000000000600082015250565b60006117c36014836116ea565b91506117ce8261178d565b602082019050919050565b600060208201905081810360008301526117f2816117b6565b9050919050565b60008115159050919050565b61180e816117f9565b82525050565b60006101008201905061182a600083018b6114ed565b611837602083018a6114ed565b6118446040830189611805565b6118516060830188611457565b61185e6080830187611457565b61186b60a0830186611457565b61187860c0830185611457565b61188560e0830184611457565b9998505050505050505050565b600081905092915050565b50565b60006118ad600083611892565b91506118b88261189d565b600082019050919050565b60006118ce826118a0565b9150819050919050565b7f556e61626c6520746f2073656e642066756e6473000000000000000000000000600082015250565b600061190e6014836116ea565b9150611919826118d8565b602082019050919050565b6000602082019050818103600083015261193d81611901565b9050919050565b7f43616e6e6f742073656c6c20746865206c617374207368617265000000000000600082015250565b600061197a601a836116ea565b915061198582611944565b602082019050919050565b600060208201905081810360008301526119a98161196d565b9050919050565b7f496e73756666696369656e742073686172657300000000000000000000000000600082015250565b60006119e66013836116ea565b91506119f1826119b0565b602082019050919050565b60006020820190508181036000830152611a15816119d9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611a786026836116ea565b9150611a8382611a1c565b604082019050919050565b60006020820190508181036000830152611aa781611a6b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611ae46020836116ea565b9150611aef82611aae565b602082019050919050565b60006020820190508181036000830152611b1381611ad7565b905091905056fea2646970667358221220cebed752f67094eaf80084d89578d96bc6f4fdbc3356576a982a1a23262a11e864736f6c63430008120033

Deployed ByteCode Sourcemap

3678:4541:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4068:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5388:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5749:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3808:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5040:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3724:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4497:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4623:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6112:1013;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2735:103;;;;;;;;;;;;;:::i;:::-;;2087:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5209:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4369:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7133:1083;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3768:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2993:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4177:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4233:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4068:68;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5388:353::-;5477:7;5497:13;5513:34;5525:13;5540:6;5513:11;:34::i;:::-;5497:50;;5558:19;5609:7;5588:18;;5580:5;:26;;;;:::i;:::-;:36;;;;:::i;:::-;5558:58;;5627:18;5676:7;5656:17;;5648:5;:25;;;;:::i;:::-;:35;;;;:::i;:::-;5627:56;;5723:10;5709:11;5701:5;:19;;;;:::i;:::-;:32;;;;:::i;:::-;5694:39;;;;;5388:353;;;;:::o;5749:355::-;5839:7;5859:13;5875:35;5888:13;5903:6;5875:12;:35::i;:::-;5859:51;;5921:19;5972:7;5951:18;;5943:5;:26;;;;:::i;:::-;:36;;;;:::i;:::-;5921:58;;5990:18;6039:7;6019:17;;6011:5;:25;;;;:::i;:::-;:35;;;;:::i;:::-;5990:56;;6086:10;6072:11;6064:5;:19;;;;:::i;:::-;:32;;;;:::i;:::-;6057:39;;;;;5749:355;;;;:::o;3808:32::-;;;;:::o;5040:161::-;5121:7;5148:45;5157:12;:27;5170:13;5157:27;;;;;;;;;;;;;;;;5186:6;5148:8;:45::i;:::-;5141:52;;5040:161;;;;:::o;3724:37::-;;;;;;;;;;;;;:::o;4497:118::-;1973:13;:11;:13::i;:::-;4596:11:::1;4576:17;:31;;;;4497:118:::0;:::o;4623:409::-;4694:7;4714:12;4739:1;4729:6;:11;:70;;4798:1;4793;4788;4779:6;:10;;;;:::i;:::-;4774:1;:16;;;;:::i;:::-;:20;;;;:::i;:::-;4763:6;4757:1;4748:6;:10;;;;:::i;:::-;4747:23;;;;:::i;:::-;:48;;;;:::i;:::-;:52;;;;:::i;:::-;4729:70;;;4743:1;4729:70;4714:85;;4810:12;4835:1;4825:6;:11;:26;;;;;4850:1;4840:6;:11;4825:26;:112;;4936:1;4931;4921:6;4917:1;4908:6;:10;;;;:::i;:::-;:19;;;;:::i;:::-;4903:1;:25;;;;:::i;:::-;:29;;;;:::i;:::-;4892:6;4883;:15;;;;:::i;:::-;4872:6;4868:1;4859:6;:10;;;;:::i;:::-;:19;;;;:::i;:::-;4858:41;;;;:::i;:::-;:75;;;;:::i;:::-;:79;;;;:::i;:::-;4825:112;;;4854:1;4825:112;4810:127;;4948:17;4975:4;4968;:11;;;;:::i;:::-;4948:31;;5019:5;5009:7;4997:9;:19;;;;:::i;:::-;:27;;;;:::i;:::-;4990:34;;;;;4623:409;;;;:::o;6112:1013::-;6196:14;6213:12;:27;6226:13;6213:27;;;;;;;;;;;;;;;;6196:44;;6268:1;6259:6;:10;:41;;;;6290:10;6273:27;;:13;:27;;;6259:41;6251:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;6364:13;6380:24;6389:6;6397;6380:8;:24::i;:::-;6364:40;;6415:19;6466:7;6445:18;;6437:5;:26;;;;:::i;:::-;:36;;;;:::i;:::-;6415:58;;6484:18;6533:7;6513:17;;6505:5;:25;;;;:::i;:::-;:35;;;;:::i;:::-;6484:56;;6594:10;6580:11;6572:5;:19;;;;:::i;:::-;:32;;;;:::i;:::-;6559:9;:45;;6551:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;6726:6;6683:13;:28;6697:13;6683:28;;;;;;;;;;;;;;;:40;6712:10;6683:40;;;;;;;;;;;;;;;;:49;;;;:::i;:::-;6640:13;:28;6654:13;6640:28;;;;;;;;;;;;;;;:40;6669:10;6640:40;;;;;;;;;;;;;;;:92;;;;6782:6;6773;:15;;;;:::i;:::-;6743:12;:27;6756:13;6743:27;;;;;;;;;;;;;;;:45;;;;6804:95;6810:10;6822:13;6837:4;6843:6;6851:5;6858:11;6871:10;6892:6;6883;:15;;;;:::i;:::-;6804:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;6911:13;6930:22;;;;;;;;;;;:27;;6965:11;6930:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6910:71;;;6993:13;7012;:18;;7038:10;7012:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6992:61;;;7072:8;:20;;;;;7084:8;7072:20;7064:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;6185:940;;;;;;6112:1013;;:::o;2735:103::-;1973:13;:11;:13::i;:::-;2800:30:::1;2827:1;2800:18;:30::i;:::-;2735:103::o:0;2087:87::-;2133:7;2160:6;;;;;;;;;;;2153:13;;2087:87;:::o;5209:171::-;5291:7;5318:54;5357:6;5327:12;:27;5340:13;5327:27;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;5365:6;5318:8;:54::i;:::-;5311:61;;5209:171;;;;:::o;4369:120::-;1973:13;:11;:13::i;:::-;4470:11:::1;4449:18;:32;;;;4369:120:::0;:::o;7133:1083::-;7218:14;7235:12;:27;7248:13;7235:27;;;;;;;;;;;;;;;;7218:44;;7290:6;7281;:15;7273:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;7338:13;7354:33;7372:6;7363;:15;;;;:::i;:::-;7380:6;7354:8;:33::i;:::-;7338:49;;7398:19;7449:7;7428:18;;7420:5;:26;;;;:::i;:::-;:36;;;;:::i;:::-;7398:58;;7467:18;7516:7;7496:17;;7488:5;:25;;;;:::i;:::-;:35;;;;:::i;:::-;7467:56;;7586:6;7542:13;:28;7556:13;7542:28;;;;;;;;;;;;;;;:40;7571:10;7542:40;;;;;;;;;;;;;;;;:50;;7534:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;7713:6;7670:13;:28;7684:13;7670:28;;;;;;;;;;;;;;;:40;7699:10;7670:40;;;;;;;;;;;;;;;;:49;;;;:::i;:::-;7627:13;:28;7641:13;7627:28;;;;;;;;;;;;;;;:40;7656:10;7627:40;;;;;;;;;;;;;;;:92;;;;7769:6;7760;:15;;;;:::i;:::-;7730:12;:27;7743:13;7730:27;;;;;;;;;;;;;;;:45;;;;7791:96;7797:10;7809:13;7824:5;7831:6;7839:5;7846:11;7859:10;7880:6;7871;:15;;;;:::i;:::-;7791:96;;;;;;;;;;;;;:::i;:::-;;;;;;;;7899:13;7918:10;:15;;7963:10;7949:11;7941:5;:19;;;;:::i;:::-;:32;;;;:::i;:::-;7918:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7898:80;;;7990:13;8009:22;;;;;;;;;;;:27;;8044:11;8009:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7989:71;;;8072:13;8091;:18;;8117:10;8091:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8071:61;;;8151:8;:20;;;;;8163:8;8151:20;:32;;;;;8175:8;8151:32;8143:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7207:1009;;;;;;;7133:1083;;:::o;3768:33::-;;;;:::o;2993:201::-;1973:13;:11;:13::i;:::-;3102:1:::1;3082:22;;:8;:22;;::::0;3074:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3158:28;3177:8;3158:18;:28::i;:::-;2993:201:::0;:::o;4177:47::-;;;;;;;;;;;;;;;;;:::o;4233:128::-;1973:13;:11;:13::i;:::-;4338:15:::1;4313:22;;:40;;;;;;;;;;;;;;;;;;4233:128:::0;:::o;2252:132::-;2327:12;:10;:12::i;:::-;2316:23;;:7;:5;:7::i;:::-;:23;;;2308:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2252:132::o;3354:191::-;3428:16;3447:6;;;;;;;;;;;3428:25;;3473:8;3464:6;;:17;;;;;;;;;;;;;;;;;;3528:8;3497:40;;3518:8;3497:40;;;;;;;;;;;;3417:128;3354:191;:::o;659:98::-;712:7;739:10;732:17;;659:98;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:474::-;909:6;917;966:2;954:9;945:7;941:23;937:32;934:119;;;972:79;;:::i;:::-;934:119;1092:1;1117:53;1162:7;1153:6;1142:9;1138:22;1117:53;:::i;:::-;1107:63;;1063:117;1219:2;1245:53;1290:7;1281:6;1270:9;1266:22;1245:53;:::i;:::-;1235:63;;1190:118;841:474;;;;;:::o;1321:77::-;1358:7;1387:5;1376:16;;1321:77;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:222::-;1621:4;1659:2;1648:9;1644:18;1636:26;;1672:71;1740:1;1729:9;1725:17;1716:6;1672:71;:::i;:::-;1528:222;;;;:::o;1756:122::-;1829:24;1847:5;1829:24;:::i;:::-;1822:5;1819:35;1809:63;;1868:1;1865;1858:12;1809:63;1756:122;:::o;1884:139::-;1930:5;1968:6;1955:20;1946:29;;1984:33;2011:5;1984:33;:::i;:::-;1884:139;;;;:::o;2029:474::-;2097:6;2105;2154:2;2142:9;2133:7;2129:23;2125:32;2122:119;;;2160:79;;:::i;:::-;2122:119;2280:1;2305:53;2350:7;2341:6;2330:9;2326:22;2305:53;:::i;:::-;2295:63;;2251:117;2407:2;2433:53;2478:7;2469:6;2458:9;2454:22;2433:53;:::i;:::-;2423:63;;2378:118;2029:474;;;;;:::o;2509:118::-;2596:24;2614:5;2596:24;:::i;:::-;2591:3;2584:37;2509:118;;:::o;2633:222::-;2726:4;2764:2;2753:9;2749:18;2741:26;;2777:71;2845:1;2834:9;2830:17;2821:6;2777:71;:::i;:::-;2633:222;;;;:::o;2861:329::-;2920:6;2969:2;2957:9;2948:7;2944:23;2940:32;2937:119;;;2975:79;;:::i;:::-;2937:119;3095:1;3120:53;3165:7;3156:6;3145:9;3141:22;3120:53;:::i;:::-;3110:63;;3066:117;2861:329;;;;:::o;3196:474::-;3264:6;3272;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3574:2;3600:53;3645:7;3636:6;3625:9;3621:22;3600:53;:::i;:::-;3590:63;;3545:118;3196:474;;;;;:::o;3676:329::-;3735:6;3784:2;3772:9;3763:7;3759:23;3755:32;3752:119;;;3790:79;;:::i;:::-;3752:119;3910:1;3935:53;3980:7;3971:6;3960:9;3956:22;3935:53;:::i;:::-;3925:63;;3881:117;3676:329;;;;:::o;4011:180::-;4059:77;4056:1;4049:88;4156:4;4153:1;4146:15;4180:4;4177:1;4170:15;4197:410;4237:7;4260:20;4278:1;4260:20;:::i;:::-;4255:25;;4294:20;4312:1;4294:20;:::i;:::-;4289:25;;4349:1;4346;4342:9;4371:30;4389:11;4371:30;:::i;:::-;4360:41;;4550:1;4541:7;4537:15;4534:1;4531:22;4511:1;4504:9;4484:83;4461:139;;4580:18;;:::i;:::-;4461:139;4245:362;4197:410;;;;:::o;4613:180::-;4661:77;4658:1;4651:88;4758:4;4755:1;4748:15;4782:4;4779:1;4772:15;4799:185;4839:1;4856:20;4874:1;4856:20;:::i;:::-;4851:25;;4890:20;4908:1;4890:20;:::i;:::-;4885:25;;4929:1;4919:35;;4934:18;;:::i;:::-;4919:35;4976:1;4973;4969:9;4964:14;;4799:185;;;;:::o;4990:191::-;5030:3;5049:20;5067:1;5049:20;:::i;:::-;5044:25;;5083:20;5101:1;5083:20;:::i;:::-;5078:25;;5126:1;5123;5119:9;5112:16;;5147:3;5144:1;5141:10;5138:36;;;5154:18;;:::i;:::-;5138:36;4990:191;;;;:::o;5187:194::-;5227:4;5247:20;5265:1;5247:20;:::i;:::-;5242:25;;5281:20;5299:1;5281:20;:::i;:::-;5276:25;;5325:1;5322;5318:9;5310:17;;5349:1;5343:4;5340:11;5337:37;;;5354:18;;:::i;:::-;5337:37;5187:194;;;;:::o;5387:169::-;5471:11;5505:6;5500:3;5493:19;5545:4;5540:3;5536:14;5521:29;;5387:169;;;;:::o;5562:235::-;5702:34;5698:1;5690:6;5686:14;5679:58;5771:18;5766:2;5758:6;5754:15;5747:43;5562:235;:::o;5803:366::-;5945:3;5966:67;6030:2;6025:3;5966:67;:::i;:::-;5959:74;;6042:93;6131:3;6042:93;:::i;:::-;6160:2;6155:3;6151:12;6144:19;;5803:366;;;:::o;6175:419::-;6341:4;6379:2;6368:9;6364:18;6356:26;;6428:9;6422:4;6418:20;6414:1;6403:9;6399:17;6392:47;6456:131;6582:4;6456:131;:::i;:::-;6448:139;;6175:419;;;:::o;6600:170::-;6740:22;6736:1;6728:6;6724:14;6717:46;6600:170;:::o;6776:366::-;6918:3;6939:67;7003:2;6998:3;6939:67;:::i;:::-;6932:74;;7015:93;7104:3;7015:93;:::i;:::-;7133:2;7128:3;7124:12;7117:19;;6776:366;;;:::o;7148:419::-;7314:4;7352:2;7341:9;7337:18;7329:26;;7401:9;7395:4;7391:20;7387:1;7376:9;7372:17;7365:47;7429:131;7555:4;7429:131;:::i;:::-;7421:139;;7148:419;;;:::o;7573:90::-;7607:7;7650:5;7643:13;7636:21;7625:32;;7573:90;;;:::o;7669:109::-;7750:21;7765:5;7750:21;:::i;:::-;7745:3;7738:34;7669:109;;:::o;7784:985::-;8067:4;8105:3;8094:9;8090:19;8082:27;;8119:71;8187:1;8176:9;8172:17;8163:6;8119:71;:::i;:::-;8200:72;8268:2;8257:9;8253:18;8244:6;8200:72;:::i;:::-;8282:66;8344:2;8333:9;8329:18;8320:6;8282:66;:::i;:::-;8358:72;8426:2;8415:9;8411:18;8402:6;8358:72;:::i;:::-;8440:73;8508:3;8497:9;8493:19;8484:6;8440:73;:::i;:::-;8523;8591:3;8580:9;8576:19;8567:6;8523:73;:::i;:::-;8606;8674:3;8663:9;8659:19;8650:6;8606:73;:::i;:::-;8689;8757:3;8746:9;8742:19;8733:6;8689:73;:::i;:::-;7784:985;;;;;;;;;;;:::o;8775:147::-;8876:11;8913:3;8898:18;;8775:147;;;;:::o;8928:114::-;;:::o;9048:398::-;9207:3;9228:83;9309:1;9304:3;9228:83;:::i;:::-;9221:90;;9320:93;9409:3;9320:93;:::i;:::-;9438:1;9433:3;9429:11;9422:18;;9048:398;;;:::o;9452:379::-;9636:3;9658:147;9801:3;9658:147;:::i;:::-;9651:154;;9822:3;9815:10;;9452:379;;;:::o;9837:170::-;9977:22;9973:1;9965:6;9961:14;9954:46;9837:170;:::o;10013:366::-;10155:3;10176:67;10240:2;10235:3;10176:67;:::i;:::-;10169:74;;10252:93;10341:3;10252:93;:::i;:::-;10370:2;10365:3;10361:12;10354:19;;10013:366;;;:::o;10385:419::-;10551:4;10589:2;10578:9;10574:18;10566:26;;10638:9;10632:4;10628:20;10624:1;10613:9;10609:17;10602:47;10666:131;10792:4;10666:131;:::i;:::-;10658:139;;10385:419;;;:::o;10810:176::-;10950:28;10946:1;10938:6;10934:14;10927:52;10810:176;:::o;10992:366::-;11134:3;11155:67;11219:2;11214:3;11155:67;:::i;:::-;11148:74;;11231:93;11320:3;11231:93;:::i;:::-;11349:2;11344:3;11340:12;11333:19;;10992:366;;;:::o;11364:419::-;11530:4;11568:2;11557:9;11553:18;11545:26;;11617:9;11611:4;11607:20;11603:1;11592:9;11588:17;11581:47;11645:131;11771:4;11645:131;:::i;:::-;11637:139;;11364:419;;;:::o;11789:169::-;11929:21;11925:1;11917:6;11913:14;11906:45;11789:169;:::o;11964:366::-;12106:3;12127:67;12191:2;12186:3;12127:67;:::i;:::-;12120:74;;12203:93;12292:3;12203:93;:::i;:::-;12321:2;12316:3;12312:12;12305:19;;11964:366;;;:::o;12336:419::-;12502:4;12540:2;12529:9;12525:18;12517:26;;12589:9;12583:4;12579:20;12575:1;12564:9;12560:17;12553:47;12617:131;12743:4;12617:131;:::i;:::-;12609:139;;12336:419;;;:::o;12761:225::-;12901:34;12897:1;12889:6;12885:14;12878:58;12970:8;12965:2;12957:6;12953:15;12946:33;12761:225;:::o;12992:366::-;13134:3;13155:67;13219:2;13214:3;13155:67;:::i;:::-;13148:74;;13231:93;13320:3;13231:93;:::i;:::-;13349:2;13344:3;13340:12;13333:19;;12992:366;;;:::o;13364:419::-;13530:4;13568:2;13557:9;13553:18;13545:26;;13617:9;13611:4;13607:20;13603:1;13592:9;13588:17;13581:47;13645:131;13771:4;13645:131;:::i;:::-;13637:139;;13364:419;;;:::o;13789:182::-;13929:34;13925:1;13917:6;13913:14;13906:58;13789:182;:::o;13977:366::-;14119:3;14140:67;14204:2;14199:3;14140:67;:::i;:::-;14133:74;;14216:93;14305:3;14216:93;:::i;:::-;14334:2;14329:3;14325:12;14318:19;;13977:366;;;:::o;14349:419::-;14515:4;14553:2;14542:9;14538:18;14530:26;;14602:9;14596:4;14592:20;14588:1;14577:9;14573:17;14566:47;14630:131;14756:4;14630:131;:::i;:::-;14622:139;;14349:419;;;:::o

Swarm Source

ipfs://cebed752f67094eaf80084d89578d96bc6f4fdbc3356576a982a1a23262a11e8
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.