MATIC Price: $0.743584 (+8.58%)
Gas: 39 GWei
 
Transaction Hash
Method
Block
From
To
Value
Add Record571892232024-05-20 15:48:3121 hrs ago1716220111IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0111263239.64864204
Add Record569233372024-05-13 14:31:327 days ago1715610692IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0168375960.00076015
Add Record567714912024-05-09 18:29:1011 days ago1715279350IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0086993131.00000007
Add Record566557422024-05-06 19:37:5814 days ago1715024278IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0092605533.00000003
Add Record566557392024-05-06 19:37:5214 days ago1715024272IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0126280345.00000104
Add Record566191042024-05-05 20:25:1815 days ago1714940718IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0084186930.00000002
Add Record564934342024-05-02 12:15:4219 days ago1714652142IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0155234555.31782462
Add Record564718782024-05-01 21:45:2519 days ago1714599925IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0084187530.00024026
Add Record563134412024-04-27 13:17:3324 days ago1714223853IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0127009645.25988522
Add Record560861782024-04-21 13:51:4829 days ago1713707508IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0199813371.2034974
Add Record556669652024-04-10 14:35:0240 days ago1712759702IN
0x762Ee18D...Ce9B5E555
0 MATIC0.07661142273.00478998
Add Record556289902024-04-09 13:58:2341 days ago1712671103IN
0x762Ee18D...Ce9B5E555
0 MATIC0.06924302246.74749217
Add Record556289862024-04-09 13:58:1541 days ago1712671095IN
0x762Ee18D...Ce9B5E555
0 MATIC0.06346909226.17209847
Add Record556228332024-04-09 10:07:5042 days ago1712657270IN
0x762Ee18D...Ce9B5E555
0 MATIC0.02992132106.62463936
Add Record556227342024-04-09 10:04:1842 days ago1712657058IN
0x762Ee18D...Ce9B5E555
0 MATIC0.03159334112.58286073
Add Record554084032024-04-03 19:13:1447 days ago1712171594IN
0x762Ee18D...Ce9B5E555
0 MATIC0.06299107224.46867018
Add Record551709692024-03-28 9:12:2154 days ago1711617141IN
0x762Ee18D...Ce9B5E555
0 MATIC0.03849611137.18089929
Add Record549421422024-03-22 6:43:2560 days ago1711089805IN
0x762Ee18D...Ce9B5E555
0 MATIC0.0157415256.09493857
Add Record549267402024-03-21 20:27:4660 days ago1711052866IN
0x762Ee18D...Ce9B5E555
0 MATIC0.09821805350
Add Record549266842024-03-21 20:25:1460 days ago1711052714IN
0x762Ee18D...Ce9B5E555
0 MATIC0.09821805350
Add Record548891872024-03-20 19:58:4761 days ago1710964727IN
0x762Ee18D...Ce9B5E555
0 MATIC0.002009636.75
0x60806040548780142024-03-20 12:45:3362 days ago1710938733IN
 Create: horodatagedotorg
0 MATIC0.120222268.24897466

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

Contract Source Code Verified (Exact Match)

Contract Name:
horodatagedotorg

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at polygonscan.com on 2024-03-20
*/

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.3.0/contracts/utils/cryptography/ECDSA.sol



pragma solidity ^0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

// File: horodatage_org.sol


pragma solidity ^0.8.0;

// Import de la bibliothèque de hachage

// File: horodatage_org.sol


pragma solidity ^0.8.0;


contract horodatagedotorg {

    using ECDSA for bytes32;

    struct Record {
        string userDeclarant;
        string data;
        string certificate;
        uint timestamp;
    }

    Record[] public records;
    address public owner;
    mapping(address => bool) public authorizedUsers;

    constructor() {
        owner = msg.sender;
        authorizedUsers[msg.sender] = true;
    }

    modifier onlyAuthorized() {
        require(msg.sender == owner || authorizedUsers[msg.sender], "Adresse non autorisee");
        _;
    }

    function addRecord(string memory _userDeclarant, string memory _data, string memory _certificate) public onlyAuthorized {
        Record memory newRecord;
        newRecord.userDeclarant = _userDeclarant;
        newRecord.data = _data;
        newRecord.certificate = _certificate;
        newRecord.timestamp = block.timestamp;
        records.push(newRecord);
    }

    function getRecord(uint _index) public view returns (string memory userDeclarant, string memory data, string memory certificate, uint timestamp) {
        require(_index < records.length, "L'indice est hors limites");
        Record storage storedRecord = records[_index];
        userDeclarant = storedRecord.userDeclarant;
        data = storedRecord.data;
        certificate = storedRecord.certificate;
        timestamp = storedRecord.timestamp;
    }

    function getRecordCount() public view returns (uint) {
        return records.length;
    }

    function addUser(address _user) public onlyAuthorized {
        authorizedUsers[_user] = true;
    }

    function removeUser(address _user) public onlyAuthorized {
        require(_user != owner, "Le proprietaire ne peut pas etre supprime");
        authorizedUsers[_user] = false;
    }

    function searchRecordsByData(string memory _data) public view returns (string[] memory userDeclarant, string[] memory certificates, uint[] memory timestamps) {
        string[] memory matchingUserDeclaration;
        string[] memory matchingCertificates;
        uint[] memory matchingTimestamps;

        for (uint i = 0; i < records.length; i++) {
            if (keccak256(abi.encodePacked(records[i].data)) == keccak256(abi.encodePacked(_data))) {
                matchingUserDeclaration = pushString(matchingUserDeclaration, records[i].userDeclarant);
                matchingCertificates = pushString(matchingCertificates, records[i].certificate);
                matchingTimestamps = pushUint(matchingTimestamps, records[i].timestamp);
            }
        }

        return (matchingUserDeclaration, matchingCertificates, matchingTimestamps);
    }

    function searchRecordsByUserDeclarant(string memory _userDeclarant) public view returns (string[] memory dataValues, string[] memory certificates, uint[] memory timestamps) {
        string[] memory matchingDataValues;
        string[] memory matchingCertificates;
        uint[] memory matchingTimestamps;

        for (uint i = 0; i < records.length; i++) {
            if (keccak256(abi.encodePacked(records[i].userDeclarant)) == keccak256(abi.encodePacked(_userDeclarant))) {
                matchingDataValues = pushString(matchingDataValues, records[i].data);
                matchingCertificates = pushString(matchingCertificates, records[i].certificate);
                matchingTimestamps = pushUint(matchingTimestamps, records[i].timestamp);
            }
        }

        return (matchingDataValues, matchingCertificates, matchingTimestamps);
    }

    function pushString(string[] memory array, string memory element) internal pure returns (string[] memory) {
        string[] memory newArray = new string[](array.length + 1);
        for (uint i = 0; i < array.length; i++) {
            newArray[i] = array[i];
        }
        newArray[array.length] = element;
        return newArray;
    }

    function pushUint(uint[] memory array, uint element) internal pure returns (uint[] memory) {
        uint[] memory newArray = new uint[](array.length + 1);
        for (uint i = 0; i < array.length; i++) {
            newArray[i] = array[i];
        }
        newArray[array.length] = element;
        return newArray;
    }

    function calculateHashKeccak(string memory data) public pure returns (bytes32) {
        bytes memory dataBytes = bytes(data);
        bytes32 hash = keccak256(dataBytes);
        return hash;
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"string","name":"_userDeclarant","type":"string"},{"internalType":"string","name":"_data","type":"string"},{"internalType":"string","name":"_certificate","type":"string"}],"name":"addRecord","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"data","type":"string"}],"name":"calculateHashKeccak","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getRecord","outputs":[{"internalType":"string","name":"userDeclarant","type":"string"},{"internalType":"string","name":"data","type":"string"},{"internalType":"string","name":"certificate","type":"string"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRecordCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"records","outputs":[{"internalType":"string","name":"userDeclarant","type":"string"},{"internalType":"string","name":"data","type":"string"},{"internalType":"string","name":"certificate","type":"string"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_data","type":"string"}],"name":"searchRecordsByData","outputs":[{"internalType":"string[]","name":"userDeclarant","type":"string[]"},{"internalType":"string[]","name":"certificates","type":"string[]"},{"internalType":"uint256[]","name":"timestamps","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_userDeclarant","type":"string"}],"name":"searchRecordsByUserDeclarant","outputs":[{"internalType":"string[]","name":"dataValues","type":"string[]"},{"internalType":"string[]","name":"certificates","type":"string[]"},{"internalType":"uint256[]","name":"timestamps","type":"uint256[]"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b503360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611e14806100b25f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c80638da5cb5b1161006f5780638da5cb5b146101795780639857518814610197578063c7b3d094146101b3578063ca267f28146101e5578063d7b7c5b114610203578063f069590e14610235576100a7565b806303e9e609146100ab5780631828983a146100de578063344610671461010e5780633f723c6214610141578063421b2d8b1461015d575b5f80fd5b6100c560048036038101906100c091906111e3565b610265565b6040516100d594939291906112a7565b60405180910390f35b6100f860048036038101906100f39190611359565b610488565b604051610105919061139e565b60405180910390f35b610128600480360381019061012391906111e3565b6104a5565b60405161013894939291906112a7565b60405180910390f35b61015b600480360381019061015691906114e3565b610671565b005b61017760048036038101906101729190611359565b6107f7565b005b61018161092f565b60405161018e9190611596565b60405180910390f35b6101b160048036038101906101ac9190611359565b610954565b005b6101cd60048036038101906101c891906115af565b610b1a565b6040516101dc939291906117b0565b60405180910390f35b6101ed610d5c565b6040516101fa91906117fa565b60405180910390f35b61021d600480360381019061021891906115af565b610d67565b60405161022c939291906117b0565b60405180910390f35b61024f600480360381019061024a91906115af565b610fa9565b60405161025c919061182b565b60405180910390f35b60608060605f808054905085106102b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a89061188e565b60405180910390fd5b5f8086815481106102c5576102c46118ac565b5b905f5260205f2090600402019050805f0180546102e190611906565b80601f016020809104026020016040519081016040528092919081815260200182805461030d90611906565b80156103585780601f1061032f57610100808354040283529160200191610358565b820191905f5260205f20905b81548152906001019060200180831161033b57829003601f168201915b5050505050945080600101805461036e90611906565b80601f016020809104026020016040519081016040528092919081815260200182805461039a90611906565b80156103e55780601f106103bc576101008083540402835291602001916103e5565b820191905f5260205f20905b8154815290600101906020018083116103c857829003601f168201915b505050505093508060020180546103fb90611906565b80601f016020809104026020016040519081016040528092919081815260200182805461042790611906565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b5050505050925080600301549150509193509193565b6002602052805f5260405f205f915054906101000a900460ff1681565b5f81815481106104b3575f80fd5b905f5260205f2090600402015f91509050805f0180546104d290611906565b80601f01602080910402602001604051908101604052809291908181526020018280546104fe90611906565b80156105495780601f1061052057610100808354040283529160200191610549565b820191905f5260205f20905b81548152906001019060200180831161052c57829003601f168201915b50505050509080600101805461055e90611906565b80601f016020809104026020016040519081016040528092919081815260200182805461058a90611906565b80156105d55780601f106105ac576101008083540402835291602001916105d5565b820191905f5260205f20905b8154815290600101906020018083116105b857829003601f168201915b5050505050908060020180546105ea90611906565b80601f016020809104026020016040519081016040528092919081815260200182805461061690611906565b80156106615780601f1061063857610100808354040283529160200191610661565b820191905f5260205f20905b81548152906001019060200180831161064457829003601f168201915b5050505050908060030154905084565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610712575060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074890611980565b60405180910390fd5b610759611178565b83815f0181905250828160200181905250818160400181905250428160600181815250505f81908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f0190816107b89190611b3b565b5060208201518160010190816107ce9190611b3b565b5060408201518160020190816107e49190611b3b565b5060608201518160030155505050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610898575060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce90611980565b60405180910390fd5b600160025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109f5575060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90611980565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba90611c7a565b60405180910390fd5b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6060806060806060805f5b5f80549050811015610d485787604051602001610b429190611cd2565b604051602081830303815290604052805190602001205f8281548110610b6b57610b6a6118ac565b5b905f5260205f2090600402015f01604051602001610b899190611d68565b6040516020818303038152906040528051906020012003610d3b57610c56845f8381548110610bbb57610bba6118ac565b5b905f5260205f2090600402016001018054610bd590611906565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0190611906565b8015610c4c5780601f10610c2357610100808354040283529160200191610c4c565b820191905f5260205f20905b815481529060010190602001808311610c2f57829003601f168201915b5050505050610fc3565b9350610d0a835f8381548110610c6f57610c6e6118ac565b5b905f5260205f2090600402016002018054610c8990611906565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb590611906565b8015610d005780601f10610cd757610100808354040283529160200191610d00565b820191905f5260205f20905b815481529060010190602001808311610ce357829003601f168201915b5050505050610fc3565b9250610d38825f8381548110610d2357610d226118ac565b5b905f5260205f2090600402016003015461109f565b91505b8080600101915050610b25565b508282829550955095505050509193909250565b5f8080549050905090565b6060806060806060805f5b5f80549050811015610f955787604051602001610d8f9190611cd2565b604051602081830303815290604052805190602001205f8281548110610db857610db76118ac565b5b905f5260205f209060040201600101604051602001610dd79190611d68565b6040516020818303038152906040528051906020012003610f8857610ea3845f8381548110610e0957610e086118ac565b5b905f5260205f2090600402015f018054610e2290611906565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4e90611906565b8015610e995780601f10610e7057610100808354040283529160200191610e99565b820191905f5260205f20905b815481529060010190602001808311610e7c57829003601f168201915b5050505050610fc3565b9350610f57835f8381548110610ebc57610ebb6118ac565b5b905f5260205f2090600402016002018054610ed690611906565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0290611906565b8015610f4d5780601f10610f2457610100808354040283529160200191610f4d565b820191905f5260205f20905b815481529060010190602001808311610f3057829003601f168201915b5050505050610fc3565b9250610f85825f8381548110610f7057610f6f6118ac565b5b905f5260205f2090600402016003015461109f565b91505b8080600101915050610d72565b508282829550955095505050509193909250565b5f808290505f818051906020012090508092505050919050565b60605f60018451610fd49190611dab565b67ffffffffffffffff811115610fed57610fec6113bf565b5b60405190808252806020026020018201604052801561102057816020015b606081526020019060019003908161100b5790505b5090505f5b845181101561107457848181518110611041576110406118ac565b5b602002602001015182828151811061105c5761105b6118ac565b5b60200260200101819052508080600101915050611025565b50828185518151811061108a576110896118ac565b5b60200260200101819052508091505092915050565b60605f600184516110b09190611dab565b67ffffffffffffffff8111156110c9576110c86113bf565b5b6040519080825280602002602001820160405280156110f75781602001602082028036833780820191505090505b5090505f5b845181101561114c57848181518110611118576111176118ac565b5b6020026020010151828281518110611133576111326118ac565b5b60200260200101818152505080806001019150506110fc565b508281855181518110611162576111616118ac565b5b6020026020010181815250508091505092915050565b60405180608001604052806060815260200160608152602001606081526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6111c2816111b0565b81146111cc575f80fd5b50565b5f813590506111dd816111b9565b92915050565b5f602082840312156111f8576111f76111a8565b5b5f611205848285016111cf565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561124557808201518184015260208101905061122a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61126a8261120e565b6112748185611218565b9350611284818560208601611228565b61128d81611250565b840191505092915050565b6112a1816111b0565b82525050565b5f6080820190508181035f8301526112bf8187611260565b905081810360208301526112d38186611260565b905081810360408301526112e78185611260565b90506112f66060830184611298565b95945050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611328826112ff565b9050919050565b6113388161131e565b8114611342575f80fd5b50565b5f813590506113538161132f565b92915050565b5f6020828403121561136e5761136d6111a8565b5b5f61137b84828501611345565b91505092915050565b5f8115159050919050565b61139881611384565b82525050565b5f6020820190506113b15f83018461138f565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6113f582611250565b810181811067ffffffffffffffff82111715611414576114136113bf565b5b80604052505050565b5f61142661119f565b905061143282826113ec565b919050565b5f67ffffffffffffffff821115611451576114506113bf565b5b61145a82611250565b9050602081019050919050565b828183375f83830152505050565b5f61148761148284611437565b61141d565b9050828152602081018484840111156114a3576114a26113bb565b5b6114ae848285611467565b509392505050565b5f82601f8301126114ca576114c96113b7565b5b81356114da848260208601611475565b91505092915050565b5f805f606084860312156114fa576114f96111a8565b5b5f84013567ffffffffffffffff811115611517576115166111ac565b5b611523868287016114b6565b935050602084013567ffffffffffffffff811115611544576115436111ac565b5b611550868287016114b6565b925050604084013567ffffffffffffffff811115611571576115706111ac565b5b61157d868287016114b6565b9150509250925092565b6115908161131e565b82525050565b5f6020820190506115a95f830184611587565b92915050565b5f602082840312156115c4576115c36111a8565b5b5f82013567ffffffffffffffff8111156115e1576115e06111ac565b5b6115ed848285016114b6565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6116398261120e565b611643818561161f565b9350611653818560208601611228565b61165c81611250565b840191505092915050565b5f611672838361162f565b905092915050565b5f602082019050919050565b5f611690826115f6565b61169a8185611600565b9350836020820285016116ac85611610565b805f5b858110156116e757848403895281516116c88582611667565b94506116d38361167a565b925060208a019950506001810190506116af565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61172b816111b0565b82525050565b5f61173c8383611722565b60208301905092915050565b5f602082019050919050565b5f61175e826116f9565b6117688185611703565b935061177383611713565b805f5b838110156117a357815161178a8882611731565b975061179583611748565b925050600181019050611776565b5085935050505092915050565b5f6060820190508181035f8301526117c88186611686565b905081810360208301526117dc8185611686565b905081810360408301526117f08184611754565b9050949350505050565b5f60208201905061180d5f830184611298565b92915050565b5f819050919050565b61182581611813565b82525050565b5f60208201905061183e5f83018461181c565b92915050565b7f4c27696e646963652065737420686f7273206c696d69746573000000000000005f82015250565b5f611878601983611218565b915061188382611844565b602082019050919050565b5f6020820190508181035f8301526118a58161186c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061191d57607f821691505b6020821081036119305761192f6118d9565b5b50919050565b7f41647265737365206e6f6e206175746f726973656500000000000000000000005f82015250565b5f61196a601583611218565b915061197582611936565b602082019050919050565b5f6020820190508181035f8301526119978161195e565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026119fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826119bf565b611a0486836119bf565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611a3f611a3a611a35846111b0565b611a1c565b6111b0565b9050919050565b5f819050919050565b611a5883611a25565b611a6c611a6482611a46565b8484546119cb565b825550505050565b5f90565b611a80611a74565b611a8b818484611a4f565b505050565b5b81811015611aae57611aa35f82611a78565b600181019050611a91565b5050565b601f821115611af357611ac48161199e565b611acd846119b0565b81016020851015611adc578190505b611af0611ae8856119b0565b830182611a90565b50505b505050565b5f82821c905092915050565b5f611b135f1984600802611af8565b1980831691505092915050565b5f611b2b8383611b04565b9150826002028217905092915050565b611b448261120e565b67ffffffffffffffff811115611b5d57611b5c6113bf565b5b611b678254611906565b611b72828285611ab2565b5f60209050601f831160018114611ba3575f8415611b91578287015190505b611b9b8582611b20565b865550611c02565b601f198416611bb18661199e565b5f5b82811015611bd857848901518255600182019150602085019450602081019050611bb3565b86831015611bf55784890151611bf1601f891682611b04565b8355505b6001600288020188555050505b505050505050565b7f4c652070726f707269657461697265206e6520706575742070617320657472655f8201527f207375707072696d650000000000000000000000000000000000000000000000602082015250565b5f611c64602983611218565b9150611c6f82611c0a565b604082019050919050565b5f6020820190508181035f830152611c9181611c58565b9050919050565b5f81905092915050565b5f611cac8261120e565b611cb68185611c98565b9350611cc6818560208601611228565b80840191505092915050565b5f611cdd8284611ca2565b915081905092915050565b5f8154611cf481611906565b611cfe8186611c98565b9450600182165f8114611d185760018114611d2d57611d5f565b60ff1983168652811515820286019350611d5f565b611d368561199e565b5f5b83811015611d5757815481890152600182019150602081019050611d38565b838801955050505b50505092915050565b5f611d738284611ce8565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611db5826111b0565b9150611dc0836111b0565b9250828201905080821115611dd857611dd7611d7e565b5b9291505056fea26469706673582212201b586709b641bd80fd09c95e897a4bb5376527ae41f4f6984b4469845edeab7b64736f6c63430008180033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100a7575f3560e01c80638da5cb5b1161006f5780638da5cb5b146101795780639857518814610197578063c7b3d094146101b3578063ca267f28146101e5578063d7b7c5b114610203578063f069590e14610235576100a7565b806303e9e609146100ab5780631828983a146100de578063344610671461010e5780633f723c6214610141578063421b2d8b1461015d575b5f80fd5b6100c560048036038101906100c091906111e3565b610265565b6040516100d594939291906112a7565b60405180910390f35b6100f860048036038101906100f39190611359565b610488565b604051610105919061139e565b60405180910390f35b610128600480360381019061012391906111e3565b6104a5565b60405161013894939291906112a7565b60405180910390f35b61015b600480360381019061015691906114e3565b610671565b005b61017760048036038101906101729190611359565b6107f7565b005b61018161092f565b60405161018e9190611596565b60405180910390f35b6101b160048036038101906101ac9190611359565b610954565b005b6101cd60048036038101906101c891906115af565b610b1a565b6040516101dc939291906117b0565b60405180910390f35b6101ed610d5c565b6040516101fa91906117fa565b60405180910390f35b61021d600480360381019061021891906115af565b610d67565b60405161022c939291906117b0565b60405180910390f35b61024f600480360381019061024a91906115af565b610fa9565b60405161025c919061182b565b60405180910390f35b60608060605f808054905085106102b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a89061188e565b60405180910390fd5b5f8086815481106102c5576102c46118ac565b5b905f5260205f2090600402019050805f0180546102e190611906565b80601f016020809104026020016040519081016040528092919081815260200182805461030d90611906565b80156103585780601f1061032f57610100808354040283529160200191610358565b820191905f5260205f20905b81548152906001019060200180831161033b57829003601f168201915b5050505050945080600101805461036e90611906565b80601f016020809104026020016040519081016040528092919081815260200182805461039a90611906565b80156103e55780601f106103bc576101008083540402835291602001916103e5565b820191905f5260205f20905b8154815290600101906020018083116103c857829003601f168201915b505050505093508060020180546103fb90611906565b80601f016020809104026020016040519081016040528092919081815260200182805461042790611906565b80156104725780601f1061044957610100808354040283529160200191610472565b820191905f5260205f20905b81548152906001019060200180831161045557829003601f168201915b5050505050925080600301549150509193509193565b6002602052805f5260405f205f915054906101000a900460ff1681565b5f81815481106104b3575f80fd5b905f5260205f2090600402015f91509050805f0180546104d290611906565b80601f01602080910402602001604051908101604052809291908181526020018280546104fe90611906565b80156105495780601f1061052057610100808354040283529160200191610549565b820191905f5260205f20905b81548152906001019060200180831161052c57829003601f168201915b50505050509080600101805461055e90611906565b80601f016020809104026020016040519081016040528092919081815260200182805461058a90611906565b80156105d55780601f106105ac576101008083540402835291602001916105d5565b820191905f5260205f20905b8154815290600101906020018083116105b857829003601f168201915b5050505050908060020180546105ea90611906565b80601f016020809104026020016040519081016040528092919081815260200182805461061690611906565b80156106615780601f1061063857610100808354040283529160200191610661565b820191905f5260205f20905b81548152906001019060200180831161064457829003601f168201915b5050505050908060030154905084565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610712575060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074890611980565b60405180910390fd5b610759611178565b83815f0181905250828160200181905250818160400181905250428160600181815250505f81908060018154018082558091505060019003905f5260205f2090600402015f909190919091505f820151815f0190816107b89190611b3b565b5060208201518160010190816107ce9190611b3b565b5060408201518160020190816107e49190611b3b565b5060608201518160030155505050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610898575060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6108d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ce90611980565b60405180910390fd5b600160025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109f5575060025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b610a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2b90611980565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba90611c7a565b60405180910390fd5b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6060806060806060805f5b5f80549050811015610d485787604051602001610b429190611cd2565b604051602081830303815290604052805190602001205f8281548110610b6b57610b6a6118ac565b5b905f5260205f2090600402015f01604051602001610b899190611d68565b6040516020818303038152906040528051906020012003610d3b57610c56845f8381548110610bbb57610bba6118ac565b5b905f5260205f2090600402016001018054610bd590611906565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0190611906565b8015610c4c5780601f10610c2357610100808354040283529160200191610c4c565b820191905f5260205f20905b815481529060010190602001808311610c2f57829003601f168201915b5050505050610fc3565b9350610d0a835f8381548110610c6f57610c6e6118ac565b5b905f5260205f2090600402016002018054610c8990611906565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb590611906565b8015610d005780601f10610cd757610100808354040283529160200191610d00565b820191905f5260205f20905b815481529060010190602001808311610ce357829003601f168201915b5050505050610fc3565b9250610d38825f8381548110610d2357610d226118ac565b5b905f5260205f2090600402016003015461109f565b91505b8080600101915050610b25565b508282829550955095505050509193909250565b5f8080549050905090565b6060806060806060805f5b5f80549050811015610f955787604051602001610d8f9190611cd2565b604051602081830303815290604052805190602001205f8281548110610db857610db76118ac565b5b905f5260205f209060040201600101604051602001610dd79190611d68565b6040516020818303038152906040528051906020012003610f8857610ea3845f8381548110610e0957610e086118ac565b5b905f5260205f2090600402015f018054610e2290611906565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4e90611906565b8015610e995780601f10610e7057610100808354040283529160200191610e99565b820191905f5260205f20905b815481529060010190602001808311610e7c57829003601f168201915b5050505050610fc3565b9350610f57835f8381548110610ebc57610ebb6118ac565b5b905f5260205f2090600402016002018054610ed690611906565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0290611906565b8015610f4d5780601f10610f2457610100808354040283529160200191610f4d565b820191905f5260205f20905b815481529060010190602001808311610f3057829003601f168201915b5050505050610fc3565b9250610f85825f8381548110610f7057610f6f6118ac565b5b905f5260205f2090600402016003015461109f565b91505b8080600101915050610d72565b508282829550955095505050509193909250565b5f808290505f818051906020012090508092505050919050565b60605f60018451610fd49190611dab565b67ffffffffffffffff811115610fed57610fec6113bf565b5b60405190808252806020026020018201604052801561102057816020015b606081526020019060019003908161100b5790505b5090505f5b845181101561107457848181518110611041576110406118ac565b5b602002602001015182828151811061105c5761105b6118ac565b5b60200260200101819052508080600101915050611025565b50828185518151811061108a576110896118ac565b5b60200260200101819052508091505092915050565b60605f600184516110b09190611dab565b67ffffffffffffffff8111156110c9576110c86113bf565b5b6040519080825280602002602001820160405280156110f75781602001602082028036833780820191505090505b5090505f5b845181101561114c57848181518110611118576111176118ac565b5b6020026020010151828281518110611133576111326118ac565b5b60200260200101818152505080806001019150506110fc565b508281855181518110611162576111616118ac565b5b6020026020010181815250508091505092915050565b60405180608001604052806060815260200160608152602001606081526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6111c2816111b0565b81146111cc575f80fd5b50565b5f813590506111dd816111b9565b92915050565b5f602082840312156111f8576111f76111a8565b5b5f611205848285016111cf565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561124557808201518184015260208101905061122a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61126a8261120e565b6112748185611218565b9350611284818560208601611228565b61128d81611250565b840191505092915050565b6112a1816111b0565b82525050565b5f6080820190508181035f8301526112bf8187611260565b905081810360208301526112d38186611260565b905081810360408301526112e78185611260565b90506112f66060830184611298565b95945050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611328826112ff565b9050919050565b6113388161131e565b8114611342575f80fd5b50565b5f813590506113538161132f565b92915050565b5f6020828403121561136e5761136d6111a8565b5b5f61137b84828501611345565b91505092915050565b5f8115159050919050565b61139881611384565b82525050565b5f6020820190506113b15f83018461138f565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6113f582611250565b810181811067ffffffffffffffff82111715611414576114136113bf565b5b80604052505050565b5f61142661119f565b905061143282826113ec565b919050565b5f67ffffffffffffffff821115611451576114506113bf565b5b61145a82611250565b9050602081019050919050565b828183375f83830152505050565b5f61148761148284611437565b61141d565b9050828152602081018484840111156114a3576114a26113bb565b5b6114ae848285611467565b509392505050565b5f82601f8301126114ca576114c96113b7565b5b81356114da848260208601611475565b91505092915050565b5f805f606084860312156114fa576114f96111a8565b5b5f84013567ffffffffffffffff811115611517576115166111ac565b5b611523868287016114b6565b935050602084013567ffffffffffffffff811115611544576115436111ac565b5b611550868287016114b6565b925050604084013567ffffffffffffffff811115611571576115706111ac565b5b61157d868287016114b6565b9150509250925092565b6115908161131e565b82525050565b5f6020820190506115a95f830184611587565b92915050565b5f602082840312156115c4576115c36111a8565b5b5f82013567ffffffffffffffff8111156115e1576115e06111ac565b5b6115ed848285016114b6565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6116398261120e565b611643818561161f565b9350611653818560208601611228565b61165c81611250565b840191505092915050565b5f611672838361162f565b905092915050565b5f602082019050919050565b5f611690826115f6565b61169a8185611600565b9350836020820285016116ac85611610565b805f5b858110156116e757848403895281516116c88582611667565b94506116d38361167a565b925060208a019950506001810190506116af565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61172b816111b0565b82525050565b5f61173c8383611722565b60208301905092915050565b5f602082019050919050565b5f61175e826116f9565b6117688185611703565b935061177383611713565b805f5b838110156117a357815161178a8882611731565b975061179583611748565b925050600181019050611776565b5085935050505092915050565b5f6060820190508181035f8301526117c88186611686565b905081810360208301526117dc8185611686565b905081810360408301526117f08184611754565b9050949350505050565b5f60208201905061180d5f830184611298565b92915050565b5f819050919050565b61182581611813565b82525050565b5f60208201905061183e5f83018461181c565b92915050565b7f4c27696e646963652065737420686f7273206c696d69746573000000000000005f82015250565b5f611878601983611218565b915061188382611844565b602082019050919050565b5f6020820190508181035f8301526118a58161186c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061191d57607f821691505b6020821081036119305761192f6118d9565b5b50919050565b7f41647265737365206e6f6e206175746f726973656500000000000000000000005f82015250565b5f61196a601583611218565b915061197582611936565b602082019050919050565b5f6020820190508181035f8301526119978161195e565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026119fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826119bf565b611a0486836119bf565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611a3f611a3a611a35846111b0565b611a1c565b6111b0565b9050919050565b5f819050919050565b611a5883611a25565b611a6c611a6482611a46565b8484546119cb565b825550505050565b5f90565b611a80611a74565b611a8b818484611a4f565b505050565b5b81811015611aae57611aa35f82611a78565b600181019050611a91565b5050565b601f821115611af357611ac48161199e565b611acd846119b0565b81016020851015611adc578190505b611af0611ae8856119b0565b830182611a90565b50505b505050565b5f82821c905092915050565b5f611b135f1984600802611af8565b1980831691505092915050565b5f611b2b8383611b04565b9150826002028217905092915050565b611b448261120e565b67ffffffffffffffff811115611b5d57611b5c6113bf565b5b611b678254611906565b611b72828285611ab2565b5f60209050601f831160018114611ba3575f8415611b91578287015190505b611b9b8582611b20565b865550611c02565b601f198416611bb18661199e565b5f5b82811015611bd857848901518255600182019150602085019450602081019050611bb3565b86831015611bf55784890151611bf1601f891682611b04565b8355505b6001600288020188555050505b505050505050565b7f4c652070726f707269657461697265206e6520706575742070617320657472655f8201527f207375707072696d650000000000000000000000000000000000000000000000602082015250565b5f611c64602983611218565b9150611c6f82611c0a565b604082019050919050565b5f6020820190508181035f830152611c9181611c58565b9050919050565b5f81905092915050565b5f611cac8261120e565b611cb68185611c98565b9350611cc6818560208601611228565b80840191505092915050565b5f611cdd8284611ca2565b915081905092915050565b5f8154611cf481611906565b611cfe8186611c98565b9450600182165f8114611d185760018114611d2d57611d5f565b60ff1983168652811515820286019350611d5f565b611d368561199e565b5f5b83811015611d5757815481890152600182019150602081019050611d38565b838801955050505b50505092915050565b5f611d738284611ce8565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611db5826111b0565b9150611dc0836111b0565b9250828201905080821115611dd857611dd7611d7e565b5b9291505056fea26469706673582212201b586709b641bd80fd09c95e897a4bb5376527ae41f4f6984b4469845edeab7b64736f6c63430008180033

Deployed Bytecode Sourcemap

9225:4498:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10178:463;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;9486:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9429:23;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;9795:375;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10750:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9459:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10860:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11932:875;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;10649:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11053:871;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13512:202;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10178:463;10231:27;10260:18;10280:25;10307:14;10351:7;:14;;;;10342:6;:23;10334:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;10406:27;10436:7;10444:6;10436:15;;;;;;;;:::i;:::-;;;;;;;;;;;;10406:45;;10478:12;:26;;10462:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10522:12;:17;;10515:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10564:12;:24;;10550:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10611:12;:22;;;10599:34;;10323:318;10178:463;;;;;:::o;9486:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;9429:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9795:375::-;9705:5;;;;;;;;;;;9691:19;;:10;:19;;;:50;;;;9714:15;:27;9730:10;9714:27;;;;;;;;;;;;;;;;;;;;;;;;;9691:50;9683:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;9926:23:::1;;:::i;:::-;9986:14;9960:9;:23;;:40;;;;10028:5;10011:9;:14;;:22;;;;10068:12;10044:9;:21;;:36;;;;10113:15;10091:9;:19;;:37;;;::::0;::::1;10139:7;10152:9;10139:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;9915:255;9795:375:::0;;;:::o;10750:102::-;9705:5;;;;;;;;;;;9691:19;;:10;:19;;;:50;;;;9714:15;:27;9730:10;9714:27;;;;;;;;;;;;;;;;;;;;;;;;;9691:50;9683:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;10840:4:::1;10815:15;:22;10831:5;10815:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;10750:102:::0;:::o;9459:20::-;;;;;;;;;;;;;:::o;10860:185::-;9705:5;;;;;;;;;;;9691:19;;:10;:19;;;:50;;;;9714:15;:27;9730:10;9714:27;;;;;;;;;;;;;;;;;;;;;;;;;9691:50;9683:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;10945:5:::1;;;;;;;;;;;10936:14;;:5;:14;;::::0;10928:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11032:5;11007:15;:22;11023:5;11007:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;10860:185:::0;:::o;11932:875::-;12021:26;12049:28;12079:24;12116:34;12161:36;12208:32;12258:6;12253:465;12274:7;:14;;;;12270:1;:18;12253:465;;;12398:14;12381:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;12371:43;;;;;;12341:7;12349:1;12341:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:24;;12324:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;12314:53;;;;;;:100;12310:397;;12456:47;12467:18;12487:7;12495:1;12487:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:15;;12456:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:47::i;:::-;12435:68;;12545:56;12556:20;12578:7;12586:1;12578:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;12545:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:56::i;:::-;12522:79;;12641:50;12650:18;12670:7;12678:1;12670:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:20;;;12641:8;:50::i;:::-;12620:71;;12310:397;12290:3;;;;;;;12253:465;;;;12738:18;12758:20;12780:18;12730:69;;;;;;;;;11932:875;;;;;:::o;10649:93::-;10696:4;10720:7;:14;;;;10713:21;;10649:93;:::o;11053:871::-;11124:29;11155:28;11185:24;11222:39;11272:36;11319:32;11369:6;11364:466;11385:7;:14;;;;11381:1;:18;11364:466;;;11500:5;11483:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;11473:34;;;;;;11452:7;11460:1;11452:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:15;;11435:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;11425:44;;;;;;:82;11421:398;;11554:61;11565:23;11590:7;11598:1;11590:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:24;;11554:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:61::i;:::-;11528:87;;11657:56;11668:20;11690:7;11698:1;11690:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;11657:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:56::i;:::-;11634:79;;11753:50;11762:18;11782:7;11790:1;11782:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:20;;;11753:8;:50::i;:::-;11732:71;;11421:398;11401:3;;;;;;;11364:466;;;;11850:23;11875:20;11897:18;11842:74;;;;;;;;;11053:871;;;;;:::o;13512:202::-;13582:7;13602:22;13633:4;13602:36;;13649:12;13674:9;13664:20;;;;;;13649:35;;13702:4;13695:11;;;;13512:202;;;:::o;12815:350::-;12904:15;12932:24;12987:1;12972:5;:12;:16;;;;:::i;:::-;12959:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12932:57;;13005:6;13000:89;13021:5;:12;13017:1;:16;13000:89;;;13069:5;13075:1;13069:8;;;;;;;;:::i;:::-;;;;;;;;13055;13064:1;13055:11;;;;;;;;:::i;:::-;;;;;;;:22;;;;13035:3;;;;;;;13000:89;;;;13124:7;13099:8;13108:5;:12;13099:22;;;;;;;;:::i;:::-;;;;;;;:32;;;;13149:8;13142:15;;;12815:350;;;;:::o;13173:331::-;13249:13;13275:22;13326:1;13311:5;:12;:16;;;;:::i;:::-;13300:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13275:53;;13344:6;13339:89;13360:5;:12;13356:1;:16;13339:89;;;13408:5;13414:1;13408:8;;;;;;;;:::i;:::-;;;;;;;;13394;13403:1;13394:11;;;;;;;;:::i;:::-;;;;;;;:22;;;;;13374:3;;;;;;;13339:89;;;;13463:7;13438:8;13447:5;:12;13438:22;;;;;;;;:::i;:::-;;;;;;;:32;;;;;13488:8;13481:15;;;13173:331;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:118::-;2135:24;2153:5;2135:24;:::i;:::-;2130:3;2123:37;2048:118;;:::o;2172:826::-;2409:4;2447:3;2436:9;2432:19;2424:27;;2497:9;2491:4;2487:20;2483:1;2472:9;2468:17;2461:47;2525:78;2598:4;2589:6;2525:78;:::i;:::-;2517:86;;2650:9;2644:4;2640:20;2635:2;2624:9;2620:18;2613:48;2678:78;2751:4;2742:6;2678:78;:::i;:::-;2670:86;;2803:9;2797:4;2793:20;2788:2;2777:9;2773:18;2766:48;2831:78;2904:4;2895:6;2831:78;:::i;:::-;2823:86;;2919:72;2987:2;2976:9;2972:18;2963:6;2919:72;:::i;:::-;2172:826;;;;;;;:::o;3004:126::-;3041:7;3081:42;3074:5;3070:54;3059:65;;3004:126;;;:::o;3136:96::-;3173:7;3202:24;3220:5;3202:24;:::i;:::-;3191:35;;3136:96;;;:::o;3238:122::-;3311:24;3329:5;3311:24;:::i;:::-;3304:5;3301:35;3291:63;;3350:1;3347;3340:12;3291:63;3238:122;:::o;3366:139::-;3412:5;3450:6;3437:20;3428:29;;3466:33;3493:5;3466:33;:::i;:::-;3366:139;;;;:::o;3511:329::-;3570:6;3619:2;3607:9;3598:7;3594:23;3590:32;3587:119;;;3625:79;;:::i;:::-;3587:119;3745:1;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3716:117;3511:329;;;;:::o;3846:90::-;3880:7;3923:5;3916:13;3909:21;3898:32;;3846:90;;;:::o;3942:109::-;4023:21;4038:5;4023:21;:::i;:::-;4018:3;4011:34;3942:109;;:::o;4057:210::-;4144:4;4182:2;4171:9;4167:18;4159:26;;4195:65;4257:1;4246:9;4242:17;4233:6;4195:65;:::i;:::-;4057:210;;;;:::o;4273:117::-;4382:1;4379;4372:12;4396:117;4505:1;4502;4495:12;4519:180;4567:77;4564:1;4557:88;4664:4;4661:1;4654:15;4688:4;4685:1;4678:15;4705:281;4788:27;4810:4;4788:27;:::i;:::-;4780:6;4776:40;4918:6;4906:10;4903:22;4882:18;4870:10;4867:34;4864:62;4861:88;;;4929:18;;:::i;:::-;4861:88;4969:10;4965:2;4958:22;4748:238;4705:281;;:::o;4992:129::-;5026:6;5053:20;;:::i;:::-;5043:30;;5082:33;5110:4;5102:6;5082:33;:::i;:::-;4992:129;;;:::o;5127:308::-;5189:4;5279:18;5271:6;5268:30;5265:56;;;5301:18;;:::i;:::-;5265:56;5339:29;5361:6;5339:29;:::i;:::-;5331:37;;5423:4;5417;5413:15;5405:23;;5127:308;;;:::o;5441:146::-;5538:6;5533:3;5528;5515:30;5579:1;5570:6;5565:3;5561:16;5554:27;5441:146;;;:::o;5593:425::-;5671:5;5696:66;5712:49;5754:6;5712:49;:::i;:::-;5696:66;:::i;:::-;5687:75;;5785:6;5778:5;5771:21;5823:4;5816:5;5812:16;5861:3;5852:6;5847:3;5843:16;5840:25;5837:112;;;5868:79;;:::i;:::-;5837:112;5958:54;6005:6;6000:3;5995;5958:54;:::i;:::-;5677:341;5593:425;;;;;:::o;6038:340::-;6094:5;6143:3;6136:4;6128:6;6124:17;6120:27;6110:122;;6151:79;;:::i;:::-;6110:122;6268:6;6255:20;6293:79;6368:3;6360:6;6353:4;6345:6;6341:17;6293:79;:::i;:::-;6284:88;;6100:278;6038:340;;;;:::o;6384:1159::-;6491:6;6499;6507;6556:2;6544:9;6535:7;6531:23;6527:32;6524:119;;;6562:79;;:::i;:::-;6524:119;6710:1;6699:9;6695:17;6682:31;6740:18;6732:6;6729:30;6726:117;;;6762:79;;:::i;:::-;6726:117;6867:63;6922:7;6913:6;6902:9;6898:22;6867:63;:::i;:::-;6857:73;;6653:287;7007:2;6996:9;6992:18;6979:32;7038:18;7030:6;7027:30;7024:117;;;7060:79;;:::i;:::-;7024:117;7165:63;7220:7;7211:6;7200:9;7196:22;7165:63;:::i;:::-;7155:73;;6950:288;7305:2;7294:9;7290:18;7277:32;7336:18;7328:6;7325:30;7322:117;;;7358:79;;:::i;:::-;7322:117;7463:63;7518:7;7509:6;7498:9;7494:22;7463:63;:::i;:::-;7453:73;;7248:288;6384:1159;;;;;:::o;7549:118::-;7636:24;7654:5;7636:24;:::i;:::-;7631:3;7624:37;7549:118;;:::o;7673:222::-;7766:4;7804:2;7793:9;7789:18;7781:26;;7817:71;7885:1;7874:9;7870:17;7861:6;7817:71;:::i;:::-;7673:222;;;;:::o;7901:509::-;7970:6;8019:2;8007:9;7998:7;7994:23;7990:32;7987:119;;;8025:79;;:::i;:::-;7987:119;8173:1;8162:9;8158:17;8145:31;8203:18;8195:6;8192:30;8189:117;;;8225:79;;:::i;:::-;8189:117;8330:63;8385:7;8376:6;8365:9;8361:22;8330:63;:::i;:::-;8320:73;;8116:287;7901:509;;;;:::o;8416:124::-;8493:6;8527:5;8521:12;8511:22;;8416:124;;;:::o;8546:194::-;8655:11;8689:6;8684:3;8677:19;8729:4;8724:3;8720:14;8705:29;;8546:194;;;;:::o;8746:142::-;8823:4;8846:3;8838:11;;8876:4;8871:3;8867:14;8859:22;;8746:142;;;:::o;8894:159::-;8968:11;9002:6;8997:3;8990:19;9042:4;9037:3;9033:14;9018:29;;8894:159;;;;:::o;9059:357::-;9137:3;9165:39;9198:5;9165:39;:::i;:::-;9220:61;9274:6;9269:3;9220:61;:::i;:::-;9213:68;;9290:65;9348:6;9343:3;9336:4;9329:5;9325:16;9290:65;:::i;:::-;9380:29;9402:6;9380:29;:::i;:::-;9375:3;9371:39;9364:46;;9141:275;9059:357;;;;:::o;9422:196::-;9511:10;9546:66;9608:3;9600:6;9546:66;:::i;:::-;9532:80;;9422:196;;;;:::o;9624:123::-;9704:4;9736;9731:3;9727:14;9719:22;;9624:123;;;:::o;9781:991::-;9920:3;9949:64;10007:5;9949:64;:::i;:::-;10029:96;10118:6;10113:3;10029:96;:::i;:::-;10022:103;;10151:3;10196:4;10188:6;10184:17;10179:3;10175:27;10226:66;10286:5;10226:66;:::i;:::-;10315:7;10346:1;10331:396;10356:6;10353:1;10350:13;10331:396;;;10427:9;10421:4;10417:20;10412:3;10405:33;10478:6;10472:13;10506:84;10585:4;10570:13;10506:84;:::i;:::-;10498:92;;10613:70;10676:6;10613:70;:::i;:::-;10603:80;;10712:4;10707:3;10703:14;10696:21;;10391:336;10378:1;10375;10371:9;10366:14;;10331:396;;;10335:14;10743:4;10736:11;;10763:3;10756:10;;9925:847;;;;;9781:991;;;;:::o;10778:114::-;10845:6;10879:5;10873:12;10863:22;;10778:114;;;:::o;10898:184::-;10997:11;11031:6;11026:3;11019:19;11071:4;11066:3;11062:14;11047:29;;10898:184;;;;:::o;11088:132::-;11155:4;11178:3;11170:11;;11208:4;11203:3;11199:14;11191:22;;11088:132;;;:::o;11226:108::-;11303:24;11321:5;11303:24;:::i;:::-;11298:3;11291:37;11226:108;;:::o;11340:179::-;11409:10;11430:46;11472:3;11464:6;11430:46;:::i;:::-;11508:4;11503:3;11499:14;11485:28;;11340:179;;;;:::o;11525:113::-;11595:4;11627;11622:3;11618:14;11610:22;;11525:113;;;:::o;11674:732::-;11793:3;11822:54;11870:5;11822:54;:::i;:::-;11892:86;11971:6;11966:3;11892:86;:::i;:::-;11885:93;;12002:56;12052:5;12002:56;:::i;:::-;12081:7;12112:1;12097:284;12122:6;12119:1;12116:13;12097:284;;;12198:6;12192:13;12225:63;12284:3;12269:13;12225:63;:::i;:::-;12218:70;;12311:60;12364:6;12311:60;:::i;:::-;12301:70;;12157:224;12144:1;12141;12137:9;12132:14;;12097:284;;;12101:14;12397:3;12390:10;;11798:608;;;11674:732;;;;:::o;12412:975::-;12751:4;12789:2;12778:9;12774:18;12766:26;;12838:9;12832:4;12828:20;12824:1;12813:9;12809:17;12802:47;12866:128;12989:4;12980:6;12866:128;:::i;:::-;12858:136;;13041:9;13035:4;13031:20;13026:2;13015:9;13011:18;13004:48;13069:128;13192:4;13183:6;13069:128;:::i;:::-;13061:136;;13244:9;13238:4;13234:20;13229:2;13218:9;13214:18;13207:48;13272:108;13375:4;13366:6;13272:108;:::i;:::-;13264:116;;12412:975;;;;;;:::o;13393:222::-;13486:4;13524:2;13513:9;13509:18;13501:26;;13537:71;13605:1;13594:9;13590:17;13581:6;13537:71;:::i;:::-;13393:222;;;;:::o;13621:77::-;13658:7;13687:5;13676:16;;13621:77;;;:::o;13704:118::-;13791:24;13809:5;13791:24;:::i;:::-;13786:3;13779:37;13704:118;;:::o;13828:222::-;13921:4;13959:2;13948:9;13944:18;13936:26;;13972:71;14040:1;14029:9;14025:17;14016:6;13972:71;:::i;:::-;13828:222;;;;:::o;14056:175::-;14196:27;14192:1;14184:6;14180:14;14173:51;14056:175;:::o;14237:366::-;14379:3;14400:67;14464:2;14459:3;14400:67;:::i;:::-;14393:74;;14476:93;14565:3;14476:93;:::i;:::-;14594:2;14589:3;14585:12;14578:19;;14237:366;;;:::o;14609:419::-;14775:4;14813:2;14802:9;14798:18;14790:26;;14862:9;14856:4;14852:20;14848:1;14837:9;14833:17;14826:47;14890:131;15016:4;14890:131;:::i;:::-;14882:139;;14609:419;;;:::o;15034:180::-;15082:77;15079:1;15072:88;15179:4;15176:1;15169:15;15203:4;15200:1;15193:15;15220:180;15268:77;15265:1;15258:88;15365:4;15362:1;15355:15;15389:4;15386:1;15379:15;15406:320;15450:6;15487:1;15481:4;15477:12;15467:22;;15534:1;15528:4;15524:12;15555:18;15545:81;;15611:4;15603:6;15599:17;15589:27;;15545:81;15673:2;15665:6;15662:14;15642:18;15639:38;15636:84;;15692:18;;:::i;:::-;15636:84;15457:269;15406:320;;;:::o;15732:171::-;15872:23;15868:1;15860:6;15856:14;15849:47;15732:171;:::o;15909:366::-;16051:3;16072:67;16136:2;16131:3;16072:67;:::i;:::-;16065:74;;16148:93;16237:3;16148:93;:::i;:::-;16266:2;16261:3;16257:12;16250:19;;15909:366;;;:::o;16281:419::-;16447:4;16485:2;16474:9;16470:18;16462:26;;16534:9;16528:4;16524:20;16520:1;16509:9;16505:17;16498:47;16562:131;16688:4;16562:131;:::i;:::-;16554:139;;16281:419;;;:::o;16706:141::-;16755:4;16778:3;16770:11;;16801:3;16798:1;16791:14;16835:4;16832:1;16822:18;16814:26;;16706:141;;;:::o;16853:93::-;16890:6;16937:2;16932;16925:5;16921:14;16917:23;16907:33;;16853:93;;;:::o;16952:107::-;16996:8;17046:5;17040:4;17036:16;17015:37;;16952:107;;;;:::o;17065:393::-;17134:6;17184:1;17172:10;17168:18;17207:97;17237:66;17226:9;17207:97;:::i;:::-;17325:39;17355:8;17344:9;17325:39;:::i;:::-;17313:51;;17397:4;17393:9;17386:5;17382:21;17373:30;;17446:4;17436:8;17432:19;17425:5;17422:30;17412:40;;17141:317;;17065:393;;;;;:::o;17464:60::-;17492:3;17513:5;17506:12;;17464:60;;;:::o;17530:142::-;17580:9;17613:53;17631:34;17640:24;17658:5;17640:24;:::i;:::-;17631:34;:::i;:::-;17613:53;:::i;:::-;17600:66;;17530:142;;;:::o;17678:75::-;17721:3;17742:5;17735:12;;17678:75;;;:::o;17759:269::-;17869:39;17900:7;17869:39;:::i;:::-;17930:91;17979:41;18003:16;17979:41;:::i;:::-;17971:6;17964:4;17958:11;17930:91;:::i;:::-;17924:4;17917:105;17835:193;17759:269;;;:::o;18034:73::-;18079:3;18034:73;:::o;18113:189::-;18190:32;;:::i;:::-;18231:65;18289:6;18281;18275:4;18231:65;:::i;:::-;18166:136;18113:189;;:::o;18308:186::-;18368:120;18385:3;18378:5;18375:14;18368:120;;;18439:39;18476:1;18469:5;18439:39;:::i;:::-;18412:1;18405:5;18401:13;18392:22;;18368:120;;;18308:186;;:::o;18500:543::-;18601:2;18596:3;18593:11;18590:446;;;18635:38;18667:5;18635:38;:::i;:::-;18719:29;18737:10;18719:29;:::i;:::-;18709:8;18705:44;18902:2;18890:10;18887:18;18884:49;;;18923:8;18908:23;;18884:49;18946:80;19002:22;19020:3;19002:22;:::i;:::-;18992:8;18988:37;18975:11;18946:80;:::i;:::-;18605:431;;18590:446;18500:543;;;:::o;19049:117::-;19103:8;19153:5;19147:4;19143:16;19122:37;;19049:117;;;;:::o;19172:169::-;19216:6;19249:51;19297:1;19293:6;19285:5;19282:1;19278:13;19249:51;:::i;:::-;19245:56;19330:4;19324;19320:15;19310:25;;19223:118;19172:169;;;;:::o;19346:295::-;19422:4;19568:29;19593:3;19587:4;19568:29;:::i;:::-;19560:37;;19630:3;19627:1;19623:11;19617:4;19614:21;19606:29;;19346:295;;;;:::o;19646:1395::-;19763:37;19796:3;19763:37;:::i;:::-;19865:18;19857:6;19854:30;19851:56;;;19887:18;;:::i;:::-;19851:56;19931:38;19963:4;19957:11;19931:38;:::i;:::-;20016:67;20076:6;20068;20062:4;20016:67;:::i;:::-;20110:1;20134:4;20121:17;;20166:2;20158:6;20155:14;20183:1;20178:618;;;;20840:1;20857:6;20854:77;;;20906:9;20901:3;20897:19;20891:26;20882:35;;20854:77;20957:67;21017:6;21010:5;20957:67;:::i;:::-;20951:4;20944:81;20813:222;20148:887;;20178:618;20230:4;20226:9;20218:6;20214:22;20264:37;20296:4;20264:37;:::i;:::-;20323:1;20337:208;20351:7;20348:1;20345:14;20337:208;;;20430:9;20425:3;20421:19;20415:26;20407:6;20400:42;20481:1;20473:6;20469:14;20459:24;;20528:2;20517:9;20513:18;20500:31;;20374:4;20371:1;20367:12;20362:17;;20337:208;;;20573:6;20564:7;20561:19;20558:179;;;20631:9;20626:3;20622:19;20616:26;20674:48;20716:4;20708:6;20704:17;20693:9;20674:48;:::i;:::-;20666:6;20659:64;20581:156;20558:179;20783:1;20779;20771:6;20767:14;20763:22;20757:4;20750:36;20185:611;;;20148:887;;19738:1303;;;19646:1395;;:::o;21047:228::-;21187:34;21183:1;21175:6;21171:14;21164:58;21256:11;21251:2;21243:6;21239:15;21232:36;21047:228;:::o;21281:366::-;21423:3;21444:67;21508:2;21503:3;21444:67;:::i;:::-;21437:74;;21520:93;21609:3;21520:93;:::i;:::-;21638:2;21633:3;21629:12;21622:19;;21281:366;;;:::o;21653:419::-;21819:4;21857:2;21846:9;21842:18;21834:26;;21906:9;21900:4;21896:20;21892:1;21881:9;21877:17;21870:47;21934:131;22060:4;21934:131;:::i;:::-;21926:139;;21653:419;;;:::o;22078:148::-;22180:11;22217:3;22202:18;;22078:148;;;;:::o;22232:390::-;22338:3;22366:39;22399:5;22366:39;:::i;:::-;22421:89;22503:6;22498:3;22421:89;:::i;:::-;22414:96;;22519:65;22577:6;22572:3;22565:4;22558:5;22554:16;22519:65;:::i;:::-;22609:6;22604:3;22600:16;22593:23;;22342:280;22232:390;;;;:::o;22628:275::-;22760:3;22782:95;22873:3;22864:6;22782:95;:::i;:::-;22775:102;;22894:3;22887:10;;22628:275;;;;:::o;22933:874::-;23036:3;23073:5;23067:12;23102:36;23128:9;23102:36;:::i;:::-;23154:89;23236:6;23231:3;23154:89;:::i;:::-;23147:96;;23274:1;23263:9;23259:17;23290:1;23285:166;;;;23465:1;23460:341;;;;23252:549;;23285:166;23369:4;23365:9;23354;23350:25;23345:3;23338:38;23431:6;23424:14;23417:22;23409:6;23405:35;23400:3;23396:45;23389:52;;23285:166;;23460:341;23527:38;23559:5;23527:38;:::i;:::-;23587:1;23601:154;23615:6;23612:1;23609:13;23601:154;;;23689:7;23683:14;23679:1;23674:3;23670:11;23663:35;23739:1;23730:7;23726:15;23715:26;;23637:4;23634:1;23630:12;23625:17;;23601:154;;;23784:6;23779:3;23775:16;23768:23;;23467:334;;23252:549;;23040:767;;22933:874;;;;:::o;23813:269::-;23942:3;23964:92;24052:3;24043:6;23964:92;:::i;:::-;23957:99;;24073:3;24066:10;;23813:269;;;;:::o;24088:180::-;24136:77;24133:1;24126:88;24233:4;24230:1;24223:15;24257:4;24254:1;24247:15;24274:191;24314:3;24333:20;24351:1;24333:20;:::i;:::-;24328:25;;24367:20;24385:1;24367:20;:::i;:::-;24362:25;;24410:1;24407;24403:9;24396:16;;24431:3;24428:1;24425:10;24422:36;;;24438:18;;:::i;:::-;24422:36;24274:191;;;;:::o

Swarm Source

ipfs://1b586709b641bd80fd09c95e897a4bb5376527ae41f4f6984b4469845edeab7b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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