Ape Curtis Testnet

Contract

0x463E49C3e4E59AAb7872b677e929EDCcb9540956

Overview

APE Balance

Ape Curtis LogoApe Curtis LogoApe Curtis Logo0 APE

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Store Traits128013832024-11-21 18:12:20144 days ago1732212740IN
0x463E49C3...cb9540956
0 APE0.00000340.01
Store Pixel Data128013822024-11-21 18:12:19144 days ago1732212739IN
0x463E49C3...cb9540956
0 APE0.000018330.01

Parent Transaction Hash Block From To
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GobsDataSource

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at curtis.apescan.io on 2024-11-21
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @title GobsDataSource
 * @notice Stores RGBA pixel data and generates SVGs for on-chain Goblin images.
 */
contract GobsDataSource {
    address payable internal deployer;
    bool private contractSealed = false;
    string internal constant SVG_HEADER = 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.2" viewBox="0 0 29 29">';
    string internal constant SVG_FOOTER = '</svg>';


    struct Trait {
        string traitType;
        string value;
    }

    struct GobData {
        bytes pixelData; // Row-major RGBA data (29x29 pixels, 3364 bytes)
        Trait[] traits;  // Array of traits for the token
    }

    

    mapping(uint256 => GobData) private gobData; // Stores data for each Goblin

    modifier onlyDeployer() {
        require(msg.sender == deployer, "Only deployer.");
        _;
    }

    modifier unsealed() {
        require(!contractSealed, "Contract is sealed.");
        _;
    }

    constructor() {
        deployer = payable(msg.sender);
    }

    /**
     * @notice Seal the contract to prevent further modifications.
     */
    function sealContract() external onlyDeployer unsealed {
        contractSealed = true;
    }

    /**
     * @notice Store RGBA pixel data for a Goblin.
     * @param tokenId The ID of the Goblin (0 <= tokenId < 2222).
     * @param pixelData The RGBA data (row-major order, 29x29 pixels, 3364 bytes).
     */
    function storePixelData(uint256 tokenId, bytes memory pixelData) external onlyDeployer unsealed {
        require(tokenId < 2222, "Invalid tokenId");
        require(pixelData.length == 29 * 29 * 3, "Invalid pixel data length");
        gobData[tokenId].pixelData = pixelData;
    }

   function storeTraits(uint256 tokenId, Trait[] memory traits) external onlyDeployer {
        delete gobData[tokenId].traits; // Clear existing traits
        for (uint256 i = 0; i < traits.length; i++) {
            gobData[tokenId].traits.push(traits[i]);
        }
    }


    // Retrieve traits for a token
    function getTraits(uint256 tokenId) external view returns (Trait[] memory) {
        require(gobData[tokenId].traits.length > 0, "Traits not set");
        return gobData[tokenId].traits;
    }
    /**
     * @notice Retrieve RGBA pixel data for a Goblin.
     * @param tokenId The ID of the Goblin.
     * @return The RGBA pixel data.
     */
    function getGobData(uint256 tokenId) external view returns (bytes memory) {
        require(tokenId < 2222, "Invalid tokenId");
        require(gobData[tokenId].pixelData.length > 0, "Pixel data not set");
        return gobData[tokenId].pixelData;
    }

    /**
     * @notice Generate the SVG for a Goblin from its pixel data.
     * @param tokenId The ID of the Goblin.
     */
    function getGobSVG(uint256 tokenId) external view returns (string memory svg) {
        require(tokenId < 2222, "Invalid tokenId");
        bytes memory pixels = gobData[tokenId].pixelData;
        require(pixels.length > 0, "Pixel data not set");

        svg = string(abi.encodePacked(SVG_HEADER));

        for (uint y = 0; y < 29; y++) {
            for (uint x = 0; x < 29; x++) {
                uint p = (y * 29 + x) * 3;
                string memory color = rgbToHex(uint8(pixels[p]), uint8(pixels[p + 1]), uint8(pixels[p + 2]));
                svg = string(abi.encodePacked(svg,
                    '<rect x="', toString(x), '" y="', toString(y),
                    '" width="1" height="1" shape-rendering="crispEdges" fill="', color, '"/>'));
            }
        }

        svg = string(abi.encodePacked(svg, SVG_FOOTER));
    }

   /**
     * @notice Convert RGB values to a hex color string.
     * @param r The red value.
     * @param g The green value.
     * @param b The blue value.
     * @return The hex color string.
     */
    function rgbToHex(uint8 r, uint8 g, uint8 b) internal pure returns (string memory) {
        bytes16 hexSymbols = "0123456789abcdef";
        bytes memory buffer = new bytes(7); // "#RRGGBB"
        buffer[0] = "#";
        buffer[1] = hexSymbols[r >> 4];
        buffer[2] = hexSymbols[r & 0xF];
        buffer[3] = hexSymbols[g >> 4];
        buffer[4] = hexSymbols[g & 0xF];
        buffer[5] = hexSymbols[b >> 4];
        buffer[6] = hexSymbols[b & 0xF];
        return string(buffer);
    }
    /**
     * @notice Convert a slice of bytes to a uint32.
     * @param data The byte array.
     * @param index The starting index.
     * @return The uint32 representation of the RGBA value.
     */
    function toUint32(bytes memory data, uint256 index) internal pure returns (uint32) {
        return uint32(
            uint8(data[index]) << 24 |
            uint8(data[index + 1]) << 16 |
            uint8(data[index + 2]) << 8 |
            uint8(data[index + 3])
        );
    }


    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getGobData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getGobSVG","outputs":[{"internalType":"string","name":"svg","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTraits","outputs":[{"components":[{"internalType":"string","name":"traitType","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct GobsDataSource.Trait[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sealContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"pixelData","type":"bytes"}],"name":"storePixelData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"string","name":"traitType","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct GobsDataSource.Trait[]","name":"traits","type":"tuple[]"}],"name":"storeTraits","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040525f8060146101000a81548160ff0219169083151502179055503480156027575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506121f4806100745f395ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c80633efabdf41461006457806368bd580e14610094578063997c51d21461009e578063b44606f9146100ba578063dcd83a18146100ea578063e1dc076114610106575b5f80fd5b61007e6004803603810190610079919061107f565b610136565b60405161008b919061111a565b60405180910390f35b61009c61040e565b005b6100b860048036038101906100b391906113d5565b610506565b005b6100d460048036038101906100cf919061107f565b610650565b6040516100e19190611481565b60405180910390f35b61010460048036038101906100ff919061153f565b610798565b005b610120600480360381019061011b919061107f565b610922565b60405161012d91906116dd565b60405180910390f35b60606108ae821061017c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017390611747565b60405180910390fd5b5f60015f8481526020019081526020015f205f01805461019b90611792565b80601f01602080910402602001604051908101604052809291908181526020018280546101c790611792565b80156102125780601f106101e957610100808354040283529160200191610212565b820191905f5260205f20905b8154815290600101906020018083116101f557829003601f168201915b505050505090505f81511161025c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102539061180c565b60405180910390fd5b6040518060a001604052806062815260200161215d606291396040516020016102859190611864565b60405160208183030381529060405291505f5b601d8110156103ae575f5b601d8110156103a0575f600382601d856102bd91906118a7565b6102c791906118e8565b6102d191906118a7565b90505f6103578583815181106102ea576102e961191b565b5b602001015160f81c60f81b60f81c8660018561030691906118e8565b815181106103175761031661191b565b5b602001015160f81c60f81b60f81c8760028661033391906118e8565b815181106103445761034361191b565b5b602001015160f81c60f81b60f81c610b0a565b90508561036384610e35565b61036c86610e35565b836040516020016103809493929190611a96565b6040516020818303038152906040529550505080806001019150506102a3565b508080600101915050610298565b50816040518060400160405280600681526020017f3c2f7376673e00000000000000000000000000000000000000000000000000008152506040516020016103f7929190611aff565b604051602081830303815290604052915050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461049b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049290611b6c565b60405180910390fd5b5f60149054906101000a900460ff16156104ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e190611bd4565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058a90611b6c565b60405180910390fd5b60015f8381526020019081526020015f206001015f6105b29190610f8e565b5f5b815181101561064b5760015f8481526020019081526020015f206001018282815181106105e4576105e361191b565b5b6020026020010151908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816106259190611d8f565b50602082015181600101908161063b9190611d8f565b50505080806001019150506105b4565b505050565b60606108ae8210610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d90611747565b60405180910390fd5b5f60015f8481526020019081526020015f205f0180546106b590611792565b9050116106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee9061180c565b60405180910390fd5b60015f8381526020019081526020015f205f01805461071590611792565b80601f016020809104026020016040519081016040528092919081815260200182805461074190611792565b801561078c5780601f106107635761010080835404028352916020019161078c565b820191905f5260205f20905b81548152906001019060200180831161076f57829003601f168201915b50505050509050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081c90611b6c565b60405180910390fd5b5f60149054906101000a900460ff1615610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90611bd4565b60405180910390fd5b6108ae82106108b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108af90611747565b60405180910390fd5b6109db8151146108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f490611ea8565b60405180910390fd5b8060015f8481526020019081526020015f205f01908161091d9190611f1e565b505050565b60605f60015f8481526020019081526020015f20600101805490501161097d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097490612037565b60405180910390fd5b60015f8381526020019081526020015f20600101805480602002602001604051908101604052809291908181526020015f905b82821015610aff578382905f5260205f2090600202016040518060400160405290815f820180546109e090611792565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90611792565b8015610a575780601f10610a2e57610100808354040283529160200191610a57565b820191905f5260205f20905b815481529060010190602001808311610a3a57829003601f168201915b50505050508152602001600182018054610a7090611792565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c90611792565b8015610ae75780601f10610abe57610100808354040283529160200191610ae7565b820191905f5260205f20905b815481529060010190602001808311610aca57829003601f168201915b505050505081525050815260200190600101906109b0565b505050509050919050565b60605f7f303132333435363738396162636465660000000000000000000000000000000090505f600767ffffffffffffffff811115610b4c57610b4b61113e565b5b6040519080825280601f01601f191660200182016040528015610b7e5781602001600182028036833780820191505090505b5090507f2300000000000000000000000000000000000000000000000000000000000000815f81518110610bb557610bb461191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508160048760ff16901c60ff1660108110610c0057610bff61191b565b5b1a60f81b81600181518110610c1857610c1761191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535081600f871660ff1660108110610c5f57610c5e61191b565b5b1a60f81b81600281518110610c7757610c7661191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508160048660ff16901c60ff1660108110610cc257610cc161191b565b5b1a60f81b81600381518110610cda57610cd961191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535081600f861660ff1660108110610d2157610d2061191b565b5b1a60f81b81600481518110610d3957610d3861191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508160048560ff16901c60ff1660108110610d8457610d8361191b565b5b1a60f81b81600581518110610d9c57610d9b61191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535081600f851660ff1660108110610de357610de261191b565b5b1a60f81b81600681518110610dfb57610dfa61191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535080925050509392505050565b60605f8203610e7b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610f89565b5f8290505f5b5f8214610eaa578080610e9390612055565b915050600a82610ea391906120c9565b9150610e81565b5f8167ffffffffffffffff811115610ec557610ec461113e565b5b6040519080825280601f01601f191660200182016040528015610ef75781602001600182028036833780820191505090505b5090505b5f8514610f8257600182610f0f91906120f9565b9150600a85610f1e919061212c565b6030610f2a91906118e8565b60f81b818381518110610f4057610f3f61191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85610f7b91906120c9565b9450610efb565b8093505050505b919050565b5080545f8255600202905f5260205f2090810190610fac9190610faf565b50565b5b80821115610fdf575f8082015f610fc79190610fe3565b600182015f610fd69190610fe3565b50600201610fb0565b5090565b508054610fef90611792565b5f825580601f10611000575061101d565b601f0160209004905f5260205f209081019061101c9190611020565b5b50565b5b80821115611037575f815f905550600101611021565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61105e8161104c565b8114611068575f80fd5b50565b5f8135905061107981611055565b92915050565b5f6020828403121561109457611093611044565b5b5f6110a18482850161106b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6110ec826110aa565b6110f681856110b4565b93506111068185602086016110c4565b61110f816110d2565b840191505092915050565b5f6020820190508181035f83015261113281846110e2565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611174826110d2565b810181811067ffffffffffffffff821117156111935761119261113e565b5b80604052505050565b5f6111a561103b565b90506111b1828261116b565b919050565b5f67ffffffffffffffff8211156111d0576111cf61113e565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561120b5761120a61113e565b5b611214826110d2565b9050602081019050919050565b828183375f83830152505050565b5f61124161123c846111f1565b61119c565b90508281526020810184848401111561125d5761125c6111ed565b5b611268848285611221565b509392505050565b5f82601f8301126112845761128361113a565b5b813561129484826020860161122f565b91505092915050565b5f604082840312156112b2576112b16111e5565b5b6112bc604061119c565b90505f82013567ffffffffffffffff8111156112db576112da6111e9565b5b6112e784828501611270565b5f83015250602082013567ffffffffffffffff81111561130a576113096111e9565b5b61131684828501611270565b60208301525092915050565b5f61133461132f846111b6565b61119c565b90508083825260208201905060208402830185811115611357576113566111e1565b5b835b8181101561139e57803567ffffffffffffffff81111561137c5761137b61113a565b5b808601611389898261129d565b85526020850194505050602081019050611359565b5050509392505050565b5f82601f8301126113bc576113bb61113a565b5b81356113cc848260208601611322565b91505092915050565b5f80604083850312156113eb576113ea611044565b5b5f6113f88582860161106b565b925050602083013567ffffffffffffffff81111561141957611418611048565b5b611425858286016113a8565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f6114538261142f565b61145d8185611439565b935061146d8185602086016110c4565b611476816110d2565b840191505092915050565b5f6020820190508181035f8301526114998184611449565b905092915050565b5f67ffffffffffffffff8211156114bb576114ba61113e565b5b6114c4826110d2565b9050602081019050919050565b5f6114e36114de846114a1565b61119c565b9050828152602081018484840111156114ff576114fe6111ed565b5b61150a848285611221565b509392505050565b5f82601f8301126115265761152561113a565b5b81356115368482602086016114d1565b91505092915050565b5f806040838503121561155557611554611044565b5b5f6115628582860161106b565b925050602083013567ffffffffffffffff81111561158357611582611048565b5b61158f85828601611512565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6115dc826110aa565b6115e681856115c2565b93506115f68185602086016110c4565b6115ff816110d2565b840191505092915050565b5f604083015f8301518482035f86015261162482826115d2565b9150506020830151848203602086015261163e82826115d2565b9150508091505092915050565b5f611656838361160a565b905092915050565b5f602082019050919050565b5f61167482611599565b61167e81856115a3565b935083602082028501611690856115b3565b805f5b858110156116cb57848403895281516116ac858261164b565b94506116b78361165e565b925060208a01995050600181019050611693565b50829750879550505050505092915050565b5f6020820190508181035f8301526116f5818461166a565b905092915050565b7f496e76616c696420746f6b656e496400000000000000000000000000000000005f82015250565b5f611731600f836110b4565b915061173c826116fd565b602082019050919050565b5f6020820190508181035f83015261175e81611725565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806117a957607f821691505b6020821081036117bc576117bb611765565b5b50919050565b7f506978656c2064617461206e6f742073657400000000000000000000000000005f82015250565b5f6117f66012836110b4565b9150611801826117c2565b602082019050919050565b5f6020820190508181035f830152611823816117ea565b9050919050565b5f81905092915050565b5f61183e826110aa565b611848818561182a565b93506118588185602086016110c4565b80840191505092915050565b5f61186f8284611834565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6118b18261104c565b91506118bc8361104c565b92508282026118ca8161104c565b915082820484148315176118e1576118e061187a565b5b5092915050565b5f6118f28261104c565b91506118fd8361104c565b92508282019050808211156119155761191461187a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f3c7265637420783d2200000000000000000000000000000000000000000000005f82015250565b5f61197c60098361182a565b915061198782611948565b600982019050919050565b7f2220793d220000000000000000000000000000000000000000000000000000005f82015250565b5f6119c660058361182a565b91506119d182611992565b600582019050919050565b7f222077696474683d223122206865696768743d2231222073686170652d72656e5f8201527f646572696e673d2263726973704564676573222066696c6c3d22000000000000602082015250565b5f611a36603a8361182a565b9150611a41826119dc565b603a82019050919050565b7f222f3e00000000000000000000000000000000000000000000000000000000005f82015250565b5f611a8060038361182a565b9150611a8b82611a4c565b600382019050919050565b5f611aa18287611834565b9150611aac82611970565b9150611ab88286611834565b9150611ac3826119ba565b9150611acf8285611834565b9150611ada82611a2a565b9150611ae68284611834565b9150611af182611a74565b915081905095945050505050565b5f611b0a8285611834565b9150611b168284611834565b91508190509392505050565b7f4f6e6c79206465706c6f7965722e0000000000000000000000000000000000005f82015250565b5f611b56600e836110b4565b9150611b6182611b22565b602082019050919050565b5f6020820190508181035f830152611b8381611b4a565b9050919050565b7f436f6e7472616374206973207365616c65642e000000000000000000000000005f82015250565b5f611bbe6013836110b4565b9150611bc982611b8a565b602082019050919050565b5f6020820190508181035f830152611beb81611bb2565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611c4e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c13565b611c588683611c13565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611c93611c8e611c898461104c565b611c70565b61104c565b9050919050565b5f819050919050565b611cac83611c79565b611cc0611cb882611c9a565b848454611c1f565b825550505050565b5f90565b611cd4611cc8565b611cdf818484611ca3565b505050565b5b81811015611d0257611cf75f82611ccc565b600181019050611ce5565b5050565b601f821115611d4757611d1881611bf2565b611d2184611c04565b81016020851015611d30578190505b611d44611d3c85611c04565b830182611ce4565b50505b505050565b5f82821c905092915050565b5f611d675f1984600802611d4c565b1980831691505092915050565b5f611d7f8383611d58565b9150826002028217905092915050565b611d98826110aa565b67ffffffffffffffff811115611db157611db061113e565b5b611dbb8254611792565b611dc6828285611d06565b5f60209050601f831160018114611df7575f8415611de5578287015190505b611def8582611d74565b865550611e56565b601f198416611e0586611bf2565b5f5b82811015611e2c57848901518255600182019150602085019450602081019050611e07565b86831015611e495784890151611e45601f891682611d58565b8355505b6001600288020188555050505b505050505050565b7f496e76616c696420706978656c2064617461206c656e677468000000000000005f82015250565b5f611e926019836110b4565b9150611e9d82611e5e565b602082019050919050565b5f6020820190508181035f830152611ebf81611e86565b9050919050565b5f819050815f5260205f209050919050565b601f821115611f1957611eea81611ec6565b611ef384611c04565b81016020851015611f02578190505b611f16611f0e85611c04565b830182611ce4565b50505b505050565b611f278261142f565b67ffffffffffffffff811115611f4057611f3f61113e565b5b611f4a8254611792565b611f55828285611ed8565b5f60209050601f831160018114611f86575f8415611f74578287015190505b611f7e8582611d74565b865550611fe5565b601f198416611f9486611ec6565b5f5b82811015611fbb57848901518255600182019150602085019450602081019050611f96565b86831015611fd85784890151611fd4601f891682611d58565b8355505b6001600288020188555050505b505050505050565b7f547261697473206e6f74207365740000000000000000000000000000000000005f82015250565b5f612021600e836110b4565b915061202c82611fed565b602082019050919050565b5f6020820190508181035f83015261204e81612015565b9050919050565b5f61205f8261104c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120915761209061187a565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6120d38261104c565b91506120de8361104c565b9250826120ee576120ed61209c565b5b828204905092915050565b5f6121038261104c565b915061210e8361104c565b92508282039050818111156121265761212561187a565b5b92915050565b5f6121368261104c565b91506121418361104c565b9250826121515761215061209c565b5b82820690509291505056fe646174613a696d6167652f7376672b786d6c3b757466382c3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076657273696f6e3d22312e32222076696577426f783d22302030203239203239223ea26469706673582212208c96beeb22ce56f6ad3b30e7be8753891dfc4fb45ce16a59f292765fc4a82f5b64736f6c634300081a0033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80633efabdf41461006457806368bd580e14610094578063997c51d21461009e578063b44606f9146100ba578063dcd83a18146100ea578063e1dc076114610106575b5f80fd5b61007e6004803603810190610079919061107f565b610136565b60405161008b919061111a565b60405180910390f35b61009c61040e565b005b6100b860048036038101906100b391906113d5565b610506565b005b6100d460048036038101906100cf919061107f565b610650565b6040516100e19190611481565b60405180910390f35b61010460048036038101906100ff919061153f565b610798565b005b610120600480360381019061011b919061107f565b610922565b60405161012d91906116dd565b60405180910390f35b60606108ae821061017c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161017390611747565b60405180910390fd5b5f60015f8481526020019081526020015f205f01805461019b90611792565b80601f01602080910402602001604051908101604052809291908181526020018280546101c790611792565b80156102125780601f106101e957610100808354040283529160200191610212565b820191905f5260205f20905b8154815290600101906020018083116101f557829003601f168201915b505050505090505f81511161025c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102539061180c565b60405180910390fd5b6040518060a001604052806062815260200161215d606291396040516020016102859190611864565b60405160208183030381529060405291505f5b601d8110156103ae575f5b601d8110156103a0575f600382601d856102bd91906118a7565b6102c791906118e8565b6102d191906118a7565b90505f6103578583815181106102ea576102e961191b565b5b602001015160f81c60f81b60f81c8660018561030691906118e8565b815181106103175761031661191b565b5b602001015160f81c60f81b60f81c8760028661033391906118e8565b815181106103445761034361191b565b5b602001015160f81c60f81b60f81c610b0a565b90508561036384610e35565b61036c86610e35565b836040516020016103809493929190611a96565b6040516020818303038152906040529550505080806001019150506102a3565b508080600101915050610298565b50816040518060400160405280600681526020017f3c2f7376673e00000000000000000000000000000000000000000000000000008152506040516020016103f7929190611aff565b604051602081830303815290604052915050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461049b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049290611b6c565b60405180910390fd5b5f60149054906101000a900460ff16156104ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e190611bd4565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058a90611b6c565b60405180910390fd5b60015f8381526020019081526020015f206001015f6105b29190610f8e565b5f5b815181101561064b5760015f8481526020019081526020015f206001018282815181106105e4576105e361191b565b5b6020026020010151908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816106259190611d8f565b50602082015181600101908161063b9190611d8f565b50505080806001019150506105b4565b505050565b60606108ae8210610696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068d90611747565b60405180910390fd5b5f60015f8481526020019081526020015f205f0180546106b590611792565b9050116106f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ee9061180c565b60405180910390fd5b60015f8381526020019081526020015f205f01805461071590611792565b80601f016020809104026020016040519081016040528092919081815260200182805461074190611792565b801561078c5780601f106107635761010080835404028352916020019161078c565b820191905f5260205f20905b81548152906001019060200180831161076f57829003601f168201915b50505050509050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081c90611b6c565b60405180910390fd5b5f60149054906101000a900460ff1615610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90611bd4565b60405180910390fd5b6108ae82106108b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108af90611747565b60405180910390fd5b6109db8151146108fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f490611ea8565b60405180910390fd5b8060015f8481526020019081526020015f205f01908161091d9190611f1e565b505050565b60605f60015f8481526020019081526020015f20600101805490501161097d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097490612037565b60405180910390fd5b60015f8381526020019081526020015f20600101805480602002602001604051908101604052809291908181526020015f905b82821015610aff578382905f5260205f2090600202016040518060400160405290815f820180546109e090611792565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90611792565b8015610a575780601f10610a2e57610100808354040283529160200191610a57565b820191905f5260205f20905b815481529060010190602001808311610a3a57829003601f168201915b50505050508152602001600182018054610a7090611792565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9c90611792565b8015610ae75780601f10610abe57610100808354040283529160200191610ae7565b820191905f5260205f20905b815481529060010190602001808311610aca57829003601f168201915b505050505081525050815260200190600101906109b0565b505050509050919050565b60605f7f303132333435363738396162636465660000000000000000000000000000000090505f600767ffffffffffffffff811115610b4c57610b4b61113e565b5b6040519080825280601f01601f191660200182016040528015610b7e5781602001600182028036833780820191505090505b5090507f2300000000000000000000000000000000000000000000000000000000000000815f81518110610bb557610bb461191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508160048760ff16901c60ff1660108110610c0057610bff61191b565b5b1a60f81b81600181518110610c1857610c1761191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535081600f871660ff1660108110610c5f57610c5e61191b565b5b1a60f81b81600281518110610c7757610c7661191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508160048660ff16901c60ff1660108110610cc257610cc161191b565b5b1a60f81b81600381518110610cda57610cd961191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535081600f861660ff1660108110610d2157610d2061191b565b5b1a60f81b81600481518110610d3957610d3861191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508160048560ff16901c60ff1660108110610d8457610d8361191b565b5b1a60f81b81600581518110610d9c57610d9b61191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535081600f851660ff1660108110610de357610de261191b565b5b1a60f81b81600681518110610dfb57610dfa61191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535080925050509392505050565b60605f8203610e7b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610f89565b5f8290505f5b5f8214610eaa578080610e9390612055565b915050600a82610ea391906120c9565b9150610e81565b5f8167ffffffffffffffff811115610ec557610ec461113e565b5b6040519080825280601f01601f191660200182016040528015610ef75781602001600182028036833780820191505090505b5090505b5f8514610f8257600182610f0f91906120f9565b9150600a85610f1e919061212c565b6030610f2a91906118e8565b60f81b818381518110610f4057610f3f61191b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85610f7b91906120c9565b9450610efb565b8093505050505b919050565b5080545f8255600202905f5260205f2090810190610fac9190610faf565b50565b5b80821115610fdf575f8082015f610fc79190610fe3565b600182015f610fd69190610fe3565b50600201610fb0565b5090565b508054610fef90611792565b5f825580601f10611000575061101d565b601f0160209004905f5260205f209081019061101c9190611020565b5b50565b5b80821115611037575f815f905550600101611021565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61105e8161104c565b8114611068575f80fd5b50565b5f8135905061107981611055565b92915050565b5f6020828403121561109457611093611044565b5b5f6110a18482850161106b565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6110ec826110aa565b6110f681856110b4565b93506111068185602086016110c4565b61110f816110d2565b840191505092915050565b5f6020820190508181035f83015261113281846110e2565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611174826110d2565b810181811067ffffffffffffffff821117156111935761119261113e565b5b80604052505050565b5f6111a561103b565b90506111b1828261116b565b919050565b5f67ffffffffffffffff8211156111d0576111cf61113e565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561120b5761120a61113e565b5b611214826110d2565b9050602081019050919050565b828183375f83830152505050565b5f61124161123c846111f1565b61119c565b90508281526020810184848401111561125d5761125c6111ed565b5b611268848285611221565b509392505050565b5f82601f8301126112845761128361113a565b5b813561129484826020860161122f565b91505092915050565b5f604082840312156112b2576112b16111e5565b5b6112bc604061119c565b90505f82013567ffffffffffffffff8111156112db576112da6111e9565b5b6112e784828501611270565b5f83015250602082013567ffffffffffffffff81111561130a576113096111e9565b5b61131684828501611270565b60208301525092915050565b5f61133461132f846111b6565b61119c565b90508083825260208201905060208402830185811115611357576113566111e1565b5b835b8181101561139e57803567ffffffffffffffff81111561137c5761137b61113a565b5b808601611389898261129d565b85526020850194505050602081019050611359565b5050509392505050565b5f82601f8301126113bc576113bb61113a565b5b81356113cc848260208601611322565b91505092915050565b5f80604083850312156113eb576113ea611044565b5b5f6113f88582860161106b565b925050602083013567ffffffffffffffff81111561141957611418611048565b5b611425858286016113a8565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f6114538261142f565b61145d8185611439565b935061146d8185602086016110c4565b611476816110d2565b840191505092915050565b5f6020820190508181035f8301526114998184611449565b905092915050565b5f67ffffffffffffffff8211156114bb576114ba61113e565b5b6114c4826110d2565b9050602081019050919050565b5f6114e36114de846114a1565b61119c565b9050828152602081018484840111156114ff576114fe6111ed565b5b61150a848285611221565b509392505050565b5f82601f8301126115265761152561113a565b5b81356115368482602086016114d1565b91505092915050565b5f806040838503121561155557611554611044565b5b5f6115628582860161106b565b925050602083013567ffffffffffffffff81111561158357611582611048565b5b61158f85828601611512565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6115dc826110aa565b6115e681856115c2565b93506115f68185602086016110c4565b6115ff816110d2565b840191505092915050565b5f604083015f8301518482035f86015261162482826115d2565b9150506020830151848203602086015261163e82826115d2565b9150508091505092915050565b5f611656838361160a565b905092915050565b5f602082019050919050565b5f61167482611599565b61167e81856115a3565b935083602082028501611690856115b3565b805f5b858110156116cb57848403895281516116ac858261164b565b94506116b78361165e565b925060208a01995050600181019050611693565b50829750879550505050505092915050565b5f6020820190508181035f8301526116f5818461166a565b905092915050565b7f496e76616c696420746f6b656e496400000000000000000000000000000000005f82015250565b5f611731600f836110b4565b915061173c826116fd565b602082019050919050565b5f6020820190508181035f83015261175e81611725565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806117a957607f821691505b6020821081036117bc576117bb611765565b5b50919050565b7f506978656c2064617461206e6f742073657400000000000000000000000000005f82015250565b5f6117f66012836110b4565b9150611801826117c2565b602082019050919050565b5f6020820190508181035f830152611823816117ea565b9050919050565b5f81905092915050565b5f61183e826110aa565b611848818561182a565b93506118588185602086016110c4565b80840191505092915050565b5f61186f8284611834565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6118b18261104c565b91506118bc8361104c565b92508282026118ca8161104c565b915082820484148315176118e1576118e061187a565b5b5092915050565b5f6118f28261104c565b91506118fd8361104c565b92508282019050808211156119155761191461187a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f3c7265637420783d2200000000000000000000000000000000000000000000005f82015250565b5f61197c60098361182a565b915061198782611948565b600982019050919050565b7f2220793d220000000000000000000000000000000000000000000000000000005f82015250565b5f6119c660058361182a565b91506119d182611992565b600582019050919050565b7f222077696474683d223122206865696768743d2231222073686170652d72656e5f8201527f646572696e673d2263726973704564676573222066696c6c3d22000000000000602082015250565b5f611a36603a8361182a565b9150611a41826119dc565b603a82019050919050565b7f222f3e00000000000000000000000000000000000000000000000000000000005f82015250565b5f611a8060038361182a565b9150611a8b82611a4c565b600382019050919050565b5f611aa18287611834565b9150611aac82611970565b9150611ab88286611834565b9150611ac3826119ba565b9150611acf8285611834565b9150611ada82611a2a565b9150611ae68284611834565b9150611af182611a74565b915081905095945050505050565b5f611b0a8285611834565b9150611b168284611834565b91508190509392505050565b7f4f6e6c79206465706c6f7965722e0000000000000000000000000000000000005f82015250565b5f611b56600e836110b4565b9150611b6182611b22565b602082019050919050565b5f6020820190508181035f830152611b8381611b4a565b9050919050565b7f436f6e7472616374206973207365616c65642e000000000000000000000000005f82015250565b5f611bbe6013836110b4565b9150611bc982611b8a565b602082019050919050565b5f6020820190508181035f830152611beb81611bb2565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611c4e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c13565b611c588683611c13565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611c93611c8e611c898461104c565b611c70565b61104c565b9050919050565b5f819050919050565b611cac83611c79565b611cc0611cb882611c9a565b848454611c1f565b825550505050565b5f90565b611cd4611cc8565b611cdf818484611ca3565b505050565b5b81811015611d0257611cf75f82611ccc565b600181019050611ce5565b5050565b601f821115611d4757611d1881611bf2565b611d2184611c04565b81016020851015611d30578190505b611d44611d3c85611c04565b830182611ce4565b50505b505050565b5f82821c905092915050565b5f611d675f1984600802611d4c565b1980831691505092915050565b5f611d7f8383611d58565b9150826002028217905092915050565b611d98826110aa565b67ffffffffffffffff811115611db157611db061113e565b5b611dbb8254611792565b611dc6828285611d06565b5f60209050601f831160018114611df7575f8415611de5578287015190505b611def8582611d74565b865550611e56565b601f198416611e0586611bf2565b5f5b82811015611e2c57848901518255600182019150602085019450602081019050611e07565b86831015611e495784890151611e45601f891682611d58565b8355505b6001600288020188555050505b505050505050565b7f496e76616c696420706978656c2064617461206c656e677468000000000000005f82015250565b5f611e926019836110b4565b9150611e9d82611e5e565b602082019050919050565b5f6020820190508181035f830152611ebf81611e86565b9050919050565b5f819050815f5260205f209050919050565b601f821115611f1957611eea81611ec6565b611ef384611c04565b81016020851015611f02578190505b611f16611f0e85611c04565b830182611ce4565b50505b505050565b611f278261142f565b67ffffffffffffffff811115611f4057611f3f61113e565b5b611f4a8254611792565b611f55828285611ed8565b5f60209050601f831160018114611f86575f8415611f74578287015190505b611f7e8582611d74565b865550611fe5565b601f198416611f9486611ec6565b5f5b82811015611fbb57848901518255600182019150602085019450602081019050611f96565b86831015611fd85784890151611fd4601f891682611d58565b8355505b6001600288020188555050505b505050505050565b7f547261697473206e6f74207365740000000000000000000000000000000000005f82015250565b5f612021600e836110b4565b915061202c82611fed565b602082019050919050565b5f6020820190508181035f83015261204e81612015565b9050919050565b5f61205f8261104c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120915761209061187a565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6120d38261104c565b91506120de8361104c565b9250826120ee576120ed61209c565b5b828204905092915050565b5f6121038261104c565b915061210e8361104c565b92508282039050818111156121265761212561187a565b5b92915050565b5f6121368261104c565b91506121418361104c565b9250826121515761215061209c565b5b82820690509291505056fe646174613a696d6167652f7376672b786d6c3b757466382c3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076657273696f6e3d22312e32222076696577426f783d22302030203239203239223ea26469706673582212208c96beeb22ce56f6ad3b30e7be8753891dfc4fb45ce16a59f292765fc4a82f5b64736f6c634300081a0033

Deployed Bytecode Sourcemap

178:5548:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2897:861;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1204:95;;;:::i;:::-;;1821:277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2501:258;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1528:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2144:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2897:861;2956:17;3004:4;2994:7;:14;2986:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3039:19;3061:7;:16;3069:7;3061:16;;;;;;;;;;;:26;;3039:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3122:1;3106:6;:13;:17;3098:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;3189:10;;;;;;;;;;;;;;;;;3172:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;3159:42;;3219:6;3214:477;3235:2;3231:1;:6;3214:477;;;3264:6;3259:421;3280:2;3276:1;:6;3259:421;;;3308:6;3332:1;3327;3322:2;3318:1;:6;;;;:::i;:::-;:10;;;;:::i;:::-;3317:16;;;;:::i;:::-;3308:25;;3352:19;3374:70;3389:6;3396:1;3389:9;;;;;;;;:::i;:::-;;;;;;;;;;3383:16;;3407:6;3418:1;3414;:5;;;;:::i;:::-;3407:13;;;;;;;;:::i;:::-;;;;;;;;;;3401:20;;3429:6;3440:1;3436;:5;;;;:::i;:::-;3429:13;;;;;;;;:::i;:::-;;;;;;;;;;3423:20;;3374:8;:70::i;:::-;3352:92;;3493:3;3532:11;3541:1;3532:8;:11::i;:::-;3554;3563:1;3554:8;:11::i;:::-;3650:5;3476:187;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3463:201;;3289:391;;3284:3;;;;;;;3259:421;;;;3239:3;;;;;;;3214:477;;;;3733:3;3738:10;;;;;;;;;;;;;;;;;3716:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3703:47;;2975:783;2897:861;;;:::o;1204:95::-;886:8;;;;;;;;;;872:22;;:10;:22;;;864:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;981:14:::1;;;;;;;;;;;980:15;972:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1287:4:::2;1270:14;;:21;;;;;;;;;;;;;;;;;;1204:95::o:0;1821:277::-;886:8;;;;;;;;;;872:22;;:10;:22;;;864:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1922:7:::1;:16;1930:7;1922:16;;;;;;;;;;;:23;;;1915:30;;;;:::i;:::-;1986:9;1981:110;2005:6;:13;2001:1;:17;1981:110;;;2040:7;:16;2048:7;2040:16;;;;;;;;;;;:23;;2069:6;2076:1;2069:9;;;;;;;;:::i;:::-;;;;;;;;2040:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;2020:3;;;;;;;1981:110;;;;1821:277:::0;;:::o;2501:258::-;2561:12;2604:4;2594:7;:14;2586:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;2683:1;2647:7;:16;2655:7;2647:16;;;;;;;;;;;:26;;:33;;;;;:::i;:::-;;;:37;2639:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2725:7;:16;2733:7;2725:16;;;;;;;;;;;:26;;2718:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2501:258;;;:::o;1528:286::-;886:8;;;;;;;;;;872:22;;:10;:22;;;864:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;981:14:::1;;;;;;;;;;;980:15;972:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1653:4:::2;1643:7;:14;1635:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;1716:11;1696:9;:16;:31;1688:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;1797:9;1768:7;:16;1776:7;1768:16;;;;;;;;;;;:26;;:38;;;;;;:::i;:::-;;1528:286:::0;;:::o;2144:196::-;2203:14;2271:1;2238:7;:16;2246:7;2238:16;;;;;;;;;;;:23;;:30;;;;:34;2230:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2309:7;:16;2317:7;2309:16;;;;;;;;;;;:23;;2302:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2144:196;;;:::o;3978:506::-;4046:13;4072:18;:39;;;4122:19;4154:1;4144:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4122:34;;4180:15;:6;4187:1;4180:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;4218:10;4234:1;4229;:6;;;;4218:18;;;;;;;;;:::i;:::-;;;;;4206:6;4213:1;4206:9;;;;;;;;:::i;:::-;;;;;:30;;;;;;;;;;;4259:10;4274:3;4270:1;:7;4259:19;;;;;;;;;:::i;:::-;;;;;4247:6;4254:1;4247:9;;;;;;;;:::i;:::-;;;;;:31;;;;;;;;;;;4301:10;4317:1;4312;:6;;;;4301:18;;;;;;;;;:::i;:::-;;;;;4289:6;4296:1;4289:9;;;;;;;;:::i;:::-;;;;;:30;;;;;;;;;;;4342:10;4357:3;4353:1;:7;4342:19;;;;;;;;;:::i;:::-;;;;;4330:6;4337:1;4330:9;;;;;;;;:::i;:::-;;;;;:31;;;;;;;;;;;4384:10;4400:1;4395;:6;;;;4384:18;;;;;;;;;:::i;:::-;;;;;4372:6;4379:1;4372:9;;;;;;;;:::i;:::-;;;;;:30;;;;;;;;;;;4425:10;4440:3;4436:1;:7;4425:19;;;;;;;;;:::i;:::-;;;;;4413:6;4420:1;4413:9;;;;;;;;:::i;:::-;;;;;:31;;;;;;;;;;;4469:6;4455:21;;;;3978:506;;;;;:::o;5000:723::-;5056:13;5286:1;5277:5;:10;5273:53;;5304:10;;;;;;;;;;;;;;;;;;;;;5273:53;5336:12;5351:5;5336:20;;5367:14;5392:78;5407:1;5399:4;:9;5392:78;;5425:8;;;;;:::i;:::-;;;;5456:2;5448:10;;;;;:::i;:::-;;;5392:78;;;5480:19;5512:6;5502:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5480:39;;5530:154;5546:1;5537:5;:10;5530:154;;5574:1;5564:11;;;;;:::i;:::-;;;5641:2;5633:5;:10;;;;:::i;:::-;5620:2;:24;;;;:::i;:::-;5607:39;;5590:6;5597;5590:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5670:2;5661:11;;;;;:::i;:::-;;;5530:154;;;5708:6;5694:21;;;;;5000:723;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::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:139::-;1394:6;1389:3;1384;1378:23;1435:1;1426:6;1421:3;1417:16;1410:27;1305:139;;;:::o;1450:102::-;1491:6;1542:2;1538:7;1533:2;1526:5;1522:14;1518:28;1508:38;;1450:102;;;:::o;1558:377::-;1646:3;1674:39;1707:5;1674:39;:::i;:::-;1729:71;1793:6;1788:3;1729:71;:::i;:::-;1722:78;;1809:65;1867:6;1862:3;1855:4;1848:5;1844:16;1809:65;:::i;:::-;1899:29;1921:6;1899:29;:::i;:::-;1894:3;1890:39;1883:46;;1650:285;1558:377;;;;:::o;1941:313::-;2054:4;2092:2;2081:9;2077:18;2069:26;;2141:9;2135:4;2131:20;2127:1;2116:9;2112:17;2105:47;2169:78;2242:4;2233:6;2169:78;:::i;:::-;2161:86;;1941:313;;;;:::o;2260:117::-;2369:1;2366;2359:12;2383:180;2431:77;2428:1;2421:88;2528:4;2525:1;2518:15;2552:4;2549:1;2542:15;2569:281;2652:27;2674:4;2652:27;:::i;:::-;2644:6;2640:40;2782:6;2770:10;2767:22;2746:18;2734:10;2731:34;2728:62;2725:88;;;2793:18;;:::i;:::-;2725:88;2833:10;2829:2;2822:22;2612:238;2569:281;;:::o;2856:129::-;2890:6;2917:20;;:::i;:::-;2907:30;;2946:33;2974:4;2966:6;2946:33;:::i;:::-;2856:129;;;:::o;2991:332::-;3089:4;3179:18;3171:6;3168:30;3165:56;;;3201:18;;:::i;:::-;3165:56;3251:4;3243:6;3239:17;3231:25;;3311:4;3305;3301:15;3293:23;;2991:332;;;:::o;3329:117::-;3438:1;3435;3428:12;3452:117;3561:1;3558;3551:12;3575:117;3684:1;3681;3674:12;3698:117;3807:1;3804;3797:12;3821:308;3883:4;3973:18;3965:6;3962:30;3959:56;;;3995:18;;:::i;:::-;3959:56;4033:29;4055:6;4033:29;:::i;:::-;4025:37;;4117:4;4111;4107:15;4099:23;;3821:308;;;:::o;4135:148::-;4233:6;4228:3;4223;4210:30;4274:1;4265:6;4260:3;4256:16;4249:27;4135:148;;;:::o;4289:425::-;4367:5;4392:66;4408:49;4450:6;4408:49;:::i;:::-;4392:66;:::i;:::-;4383:75;;4481:6;4474:5;4467:21;4519:4;4512:5;4508:16;4557:3;4548:6;4543:3;4539:16;4536:25;4533:112;;;4564:79;;:::i;:::-;4533:112;4654:54;4701:6;4696:3;4691;4654:54;:::i;:::-;4373:341;4289:425;;;;;:::o;4734:340::-;4790:5;4839:3;4832:4;4824:6;4820:17;4816:27;4806:122;;4847:79;;:::i;:::-;4806:122;4964:6;4951:20;4989:79;5064:3;5056:6;5049:4;5041:6;5037:17;4989:79;:::i;:::-;4980:88;;4796:278;4734:340;;;;:::o;5115:916::-;5185:5;5229:4;5217:9;5212:3;5208:19;5204:30;5201:117;;;5237:79;;:::i;:::-;5201:117;5336:21;5352:4;5336:21;:::i;:::-;5327:30;;5449:1;5438:9;5434:17;5421:31;5479:18;5471:6;5468:30;5465:117;;;5501:79;;:::i;:::-;5465:117;5621:59;5676:3;5667:6;5656:9;5652:22;5621:59;:::i;:::-;5614:4;5607:5;5603:16;5596:85;5367:325;5780:2;5769:9;5765:18;5752:32;5811:18;5803:6;5800:30;5797:117;;;5833:79;;:::i;:::-;5797:117;5953:59;6008:3;5999:6;5988:9;5984:22;5953:59;:::i;:::-;5946:4;5939:5;5935:16;5928:85;5702:322;5115:916;;;;:::o;6074:978::-;6191:5;6216:102;6232:85;6310:6;6232:85;:::i;:::-;6216:102;:::i;:::-;6207:111;;6338:5;6367:6;6360:5;6353:21;6401:4;6394:5;6390:16;6383:23;;6454:4;6446:6;6442:17;6434:6;6430:30;6483:3;6475:6;6472:15;6469:122;;;6502:79;;:::i;:::-;6469:122;6617:6;6600:446;6634:6;6629:3;6626:15;6600:446;;;6723:3;6710:17;6759:18;6746:11;6743:35;6740:122;;;6781:79;;:::i;:::-;6740:122;6905:11;6897:6;6893:24;6943:58;6997:3;6985:10;6943:58;:::i;:::-;6938:3;6931:71;7031:4;7026:3;7022:14;7015:21;;6676:370;;6660:4;6655:3;6651:14;6644:21;;6600:446;;;6604:21;6197:855;;6074:978;;;;;:::o;7095:412::-;7187:5;7236:3;7229:4;7221:6;7217:17;7213:27;7203:122;;7244:79;;:::i;:::-;7203:122;7361:6;7348:20;7386:115;7497:3;7489:6;7482:4;7474:6;7470:17;7386:115;:::i;:::-;7377:124;;7193:314;7095:412;;;;:::o;7513:726::-;7627:6;7635;7684:2;7672:9;7663:7;7659:23;7655:32;7652:119;;;7690:79;;:::i;:::-;7652:119;7810:1;7835:53;7880:7;7871:6;7860:9;7856:22;7835:53;:::i;:::-;7825:63;;7781:117;7965:2;7954:9;7950:18;7937:32;7996:18;7988:6;7985:30;7982:117;;;8018:79;;:::i;:::-;7982:117;8123:99;8214:7;8205:6;8194:9;8190:22;8123:99;:::i;:::-;8113:109;;7908:324;7513:726;;;;;:::o;8245:98::-;8296:6;8330:5;8324:12;8314:22;;8245:98;;;:::o;8349:168::-;8432:11;8466:6;8461:3;8454:19;8506:4;8501:3;8497:14;8482:29;;8349:168;;;;:::o;8523:373::-;8609:3;8637:38;8669:5;8637:38;:::i;:::-;8691:70;8754:6;8749:3;8691:70;:::i;:::-;8684:77;;8770:65;8828:6;8823:3;8816:4;8809:5;8805:16;8770:65;:::i;:::-;8860:29;8882:6;8860:29;:::i;:::-;8855:3;8851:39;8844:46;;8613:283;8523:373;;;;:::o;8902:309::-;9013:4;9051:2;9040:9;9036:18;9028:26;;9100:9;9094:4;9090:20;9086:1;9075:9;9071:17;9064:47;9128:76;9199:4;9190:6;9128:76;:::i;:::-;9120:84;;8902:309;;;;:::o;9217:307::-;9278:4;9368:18;9360:6;9357:30;9354:56;;;9390:18;;:::i;:::-;9354:56;9428:29;9450:6;9428:29;:::i;:::-;9420:37;;9512:4;9506;9502:15;9494:23;;9217:307;;;:::o;9530:423::-;9607:5;9632:65;9648:48;9689:6;9648:48;:::i;:::-;9632:65;:::i;:::-;9623:74;;9720:6;9713:5;9706:21;9758:4;9751:5;9747:16;9796:3;9787:6;9782:3;9778:16;9775:25;9772:112;;;9803:79;;:::i;:::-;9772:112;9893:54;9940:6;9935:3;9930;9893:54;:::i;:::-;9613:340;9530:423;;;;;:::o;9972:338::-;10027:5;10076:3;10069:4;10061:6;10057:17;10053:27;10043:122;;10084:79;;:::i;:::-;10043:122;10201:6;10188:20;10226:78;10300:3;10292:6;10285:4;10277:6;10273:17;10226:78;:::i;:::-;10217:87;;10033:277;9972:338;;;;:::o;10316:652::-;10393:6;10401;10450:2;10438:9;10429:7;10425:23;10421:32;10418:119;;;10456:79;;:::i;:::-;10418:119;10576:1;10601:53;10646:7;10637:6;10626:9;10622:22;10601:53;:::i;:::-;10591:63;;10547:117;10731:2;10720:9;10716:18;10703:32;10762:18;10754:6;10751:30;10748:117;;;10784:79;;:::i;:::-;10748:117;10889:62;10943:7;10934:6;10923:9;10919:22;10889:62;:::i;:::-;10879:72;;10674:287;10316:652;;;;;:::o;10974:135::-;11062:6;11096:5;11090:12;11080:22;;10974:135;;;:::o;11115:205::-;11235:11;11269:6;11264:3;11257:19;11309:4;11304:3;11300:14;11285:29;;11115:205;;;;:::o;11326:153::-;11414:4;11437:3;11429:11;;11467:4;11462:3;11458:14;11450:22;;11326:153;;;:::o;11485:159::-;11559:11;11593:6;11588:3;11581:19;11633:4;11628:3;11624:14;11609:29;;11485:159;;;;:::o;11650:357::-;11728:3;11756:39;11789:5;11756:39;:::i;:::-;11811:61;11865:6;11860:3;11811:61;:::i;:::-;11804:68;;11881:65;11939:6;11934:3;11927:4;11920:5;11916:16;11881:65;:::i;:::-;11971:29;11993:6;11971:29;:::i;:::-;11966:3;11962:39;11955:46;;11732:275;11650:357;;;;:::o;12079:665::-;12180:3;12216:4;12211:3;12207:14;12308:4;12301:5;12297:16;12291:23;12361:3;12355:4;12351:14;12344:4;12339:3;12335:14;12328:38;12387:73;12455:4;12441:12;12387:73;:::i;:::-;12379:81;;12231:240;12554:4;12547:5;12543:16;12537:23;12607:3;12601:4;12597:14;12590:4;12585:3;12581:14;12574:38;12633:73;12701:4;12687:12;12633:73;:::i;:::-;12625:81;;12481:236;12734:4;12727:11;;12185:559;12079:665;;;;:::o;12750:240::-;12861:10;12896:88;12980:3;12972:6;12896:88;:::i;:::-;12882:102;;12750:240;;;;:::o;12996:134::-;13087:4;13119;13114:3;13110:14;13102:22;;12996:134;;;:::o;13206:1079::-;13367:3;13396:75;13465:5;13396:75;:::i;:::-;13487:107;13587:6;13582:3;13487:107;:::i;:::-;13480:114;;13620:3;13665:4;13657:6;13653:17;13648:3;13644:27;13695:77;13766:5;13695:77;:::i;:::-;13795:7;13826:1;13811:429;13836:6;13833:1;13830:13;13811:429;;;13907:9;13901:4;13897:20;13892:3;13885:33;13958:6;13952:13;13986:106;14087:4;14072:13;13986:106;:::i;:::-;13978:114;;14115:81;14189:6;14115:81;:::i;:::-;14105:91;;14225:4;14220:3;14216:14;14209:21;;13871:369;13858:1;13855;13851:9;13846:14;;13811:429;;;13815:14;14256:4;14249:11;;14276:3;14269:10;;13372:913;;;;;13206:1079;;;;:::o;14291:457::-;14476:4;14514:2;14503:9;14499:18;14491:26;;14563:9;14557:4;14553:20;14549:1;14538:9;14534:17;14527:47;14591:150;14736:4;14727:6;14591:150;:::i;:::-;14583:158;;14291:457;;;;:::o;14754:165::-;14894:17;14890:1;14882:6;14878:14;14871:41;14754:165;:::o;14925:366::-;15067:3;15088:67;15152:2;15147:3;15088:67;:::i;:::-;15081:74;;15164:93;15253:3;15164:93;:::i;:::-;15282:2;15277:3;15273:12;15266:19;;14925:366;;;:::o;15297:419::-;15463:4;15501:2;15490:9;15486:18;15478:26;;15550:9;15544:4;15540:20;15536:1;15525:9;15521:17;15514:47;15578:131;15704:4;15578:131;:::i;:::-;15570:139;;15297:419;;;:::o;15722:180::-;15770:77;15767:1;15760:88;15867:4;15864:1;15857:15;15891:4;15888:1;15881:15;15908:320;15952:6;15989:1;15983:4;15979:12;15969:22;;16036:1;16030:4;16026:12;16057:18;16047:81;;16113:4;16105:6;16101:17;16091:27;;16047:81;16175:2;16167:6;16164:14;16144:18;16141:38;16138:84;;16194:18;;:::i;:::-;16138:84;15959:269;15908:320;;;:::o;16234:168::-;16374:20;16370:1;16362:6;16358:14;16351:44;16234:168;:::o;16408:366::-;16550:3;16571:67;16635:2;16630:3;16571:67;:::i;:::-;16564:74;;16647:93;16736:3;16647:93;:::i;:::-;16765:2;16760:3;16756:12;16749:19;;16408:366;;;:::o;16780:419::-;16946:4;16984:2;16973:9;16969:18;16961:26;;17033:9;17027:4;17023:20;17019:1;17008:9;17004:17;16997:47;17061:131;17187:4;17061:131;:::i;:::-;17053:139;;16780:419;;;:::o;17205:148::-;17307:11;17344:3;17329:18;;17205:148;;;;:::o;17359:390::-;17465:3;17493:39;17526:5;17493:39;:::i;:::-;17548:89;17630:6;17625:3;17548:89;:::i;:::-;17541:96;;17646:65;17704:6;17699:3;17692:4;17685:5;17681:16;17646:65;:::i;:::-;17736:6;17731:3;17727:16;17720:23;;17469:280;17359:390;;;;:::o;17755:275::-;17887:3;17909:95;18000:3;17991:6;17909:95;:::i;:::-;17902:102;;18021:3;18014:10;;17755:275;;;;:::o;18036:180::-;18084:77;18081:1;18074:88;18181:4;18178:1;18171:15;18205:4;18202:1;18195:15;18222:410;18262:7;18285:20;18303:1;18285:20;:::i;:::-;18280:25;;18319:20;18337:1;18319:20;:::i;:::-;18314:25;;18374:1;18371;18367:9;18396:30;18414:11;18396:30;:::i;:::-;18385:41;;18575:1;18566:7;18562:15;18559:1;18556:22;18536:1;18529:9;18509:83;18486:139;;18605:18;;:::i;:::-;18486:139;18270:362;18222:410;;;;:::o;18638:191::-;18678:3;18697:20;18715:1;18697:20;:::i;:::-;18692:25;;18731:20;18749:1;18731:20;:::i;:::-;18726:25;;18774:1;18771;18767:9;18760:16;;18795:3;18792:1;18789:10;18786:36;;;18802:18;;:::i;:::-;18786:36;18638:191;;;;:::o;18835:180::-;18883:77;18880:1;18873:88;18980:4;18977:1;18970:15;19004:4;19001:1;18994:15;19021:214;19161:66;19157:1;19149:6;19145:14;19138:90;19021:214;:::o;19241:400::-;19401:3;19422:84;19504:1;19499:3;19422:84;:::i;:::-;19415:91;;19515:93;19604:3;19515:93;:::i;:::-;19633:1;19628:3;19624:11;19617:18;;19241:400;;;:::o;19647:214::-;19787:66;19783:1;19775:6;19771:14;19764:90;19647:214;:::o;19867:400::-;20027:3;20048:84;20130:1;20125:3;20048:84;:::i;:::-;20041:91;;20141:93;20230:3;20141:93;:::i;:::-;20259:1;20254:3;20250:11;20243:18;;19867:400;;;:::o;20273:315::-;20413:66;20409:1;20401:6;20397:14;20390:90;20514:66;20509:2;20501:6;20497:15;20490:91;20273:315;:::o;20594:402::-;20754:3;20775:85;20857:2;20852:3;20775:85;:::i;:::-;20768:92;;20869:93;20958:3;20869:93;:::i;:::-;20987:2;20982:3;20978:12;20971:19;;20594:402;;;:::o;21002:214::-;21142:66;21138:1;21130:6;21126:14;21119:90;21002:214;:::o;21222:400::-;21382:3;21403:84;21485:1;21480:3;21403:84;:::i;:::-;21396:91;;21496:93;21585:3;21496:93;:::i;:::-;21614:1;21609:3;21605:11;21598:18;;21222:400;;;:::o;21628:1819::-;22308:3;22330:95;22421:3;22412:6;22330:95;:::i;:::-;22323:102;;22442:148;22586:3;22442:148;:::i;:::-;22435:155;;22607:95;22698:3;22689:6;22607:95;:::i;:::-;22600:102;;22719:148;22863:3;22719:148;:::i;:::-;22712:155;;22884:95;22975:3;22966:6;22884:95;:::i;:::-;22877:102;;22996:148;23140:3;22996:148;:::i;:::-;22989:155;;23161:95;23252:3;23243:6;23161:95;:::i;:::-;23154:102;;23273:148;23417:3;23273:148;:::i;:::-;23266:155;;23438:3;23431:10;;21628:1819;;;;;;;:::o;23453:435::-;23633:3;23655:95;23746:3;23737:6;23655:95;:::i;:::-;23648:102;;23767:95;23858:3;23849:6;23767:95;:::i;:::-;23760:102;;23879:3;23872:10;;23453:435;;;;;:::o;23894:164::-;24034:16;24030:1;24022:6;24018:14;24011:40;23894:164;:::o;24064:366::-;24206:3;24227:67;24291:2;24286:3;24227:67;:::i;:::-;24220:74;;24303:93;24392:3;24303:93;:::i;:::-;24421:2;24416:3;24412:12;24405:19;;24064:366;;;:::o;24436:419::-;24602:4;24640:2;24629:9;24625:18;24617:26;;24689:9;24683:4;24679:20;24675:1;24664:9;24660:17;24653:47;24717:131;24843:4;24717:131;:::i;:::-;24709:139;;24436:419;;;:::o;24861:169::-;25001:21;24997:1;24989:6;24985:14;24978:45;24861:169;:::o;25036:366::-;25178:3;25199:67;25263:2;25258:3;25199:67;:::i;:::-;25192:74;;25275:93;25364:3;25275:93;:::i;:::-;25393:2;25388:3;25384:12;25377:19;;25036:366;;;:::o;25408:419::-;25574:4;25612:2;25601:9;25597:18;25589:26;;25661:9;25655:4;25651:20;25647:1;25636:9;25632:17;25625:47;25689:131;25815:4;25689:131;:::i;:::-;25681:139;;25408:419;;;:::o;25833:141::-;25882:4;25905:3;25897:11;;25928:3;25925:1;25918:14;25962:4;25959:1;25949:18;25941:26;;25833:141;;;:::o;25980:93::-;26017:6;26064:2;26059;26052:5;26048:14;26044:23;26034:33;;25980:93;;;:::o;26079:107::-;26123:8;26173:5;26167:4;26163:16;26142:37;;26079:107;;;;:::o;26192:393::-;26261:6;26311:1;26299:10;26295:18;26334:97;26364:66;26353:9;26334:97;:::i;:::-;26452:39;26482:8;26471:9;26452:39;:::i;:::-;26440:51;;26524:4;26520:9;26513:5;26509:21;26500:30;;26573:4;26563:8;26559:19;26552:5;26549:30;26539:40;;26268:317;;26192:393;;;;;:::o;26591:60::-;26619:3;26640:5;26633:12;;26591:60;;;:::o;26657:142::-;26707:9;26740:53;26758:34;26767:24;26785:5;26767:24;:::i;:::-;26758:34;:::i;:::-;26740:53;:::i;:::-;26727:66;;26657:142;;;:::o;26805:75::-;26848:3;26869:5;26862:12;;26805:75;;;:::o;26886:269::-;26996:39;27027:7;26996:39;:::i;:::-;27057:91;27106:41;27130:16;27106:41;:::i;:::-;27098:6;27091:4;27085:11;27057:91;:::i;:::-;27051:4;27044:105;26962:193;26886:269;;;:::o;27161:73::-;27206:3;27161:73;:::o;27240:189::-;27317:32;;:::i;:::-;27358:65;27416:6;27408;27402:4;27358:65;:::i;:::-;27293:136;27240:189;;:::o;27435:186::-;27495:120;27512:3;27505:5;27502:14;27495:120;;;27566:39;27603:1;27596:5;27566:39;:::i;:::-;27539:1;27532:5;27528:13;27519:22;;27495:120;;;27435:186;;:::o;27627:543::-;27728:2;27723:3;27720:11;27717:446;;;27762:38;27794:5;27762:38;:::i;:::-;27846:29;27864:10;27846:29;:::i;:::-;27836:8;27832:44;28029:2;28017:10;28014:18;28011:49;;;28050:8;28035:23;;28011:49;28073:80;28129:22;28147:3;28129:22;:::i;:::-;28119:8;28115:37;28102:11;28073:80;:::i;:::-;27732:431;;27717:446;27627:543;;;:::o;28176:117::-;28230:8;28280:5;28274:4;28270:16;28249:37;;28176:117;;;;:::o;28299:169::-;28343:6;28376:51;28424:1;28420:6;28412:5;28409:1;28405:13;28376:51;:::i;:::-;28372:56;28457:4;28451;28447:15;28437:25;;28350:118;28299:169;;;;:::o;28473:295::-;28549:4;28695:29;28720:3;28714:4;28695:29;:::i;:::-;28687:37;;28757:3;28754:1;28750:11;28744:4;28741:21;28733:29;;28473:295;;;;:::o;28773:1395::-;28890:37;28923:3;28890:37;:::i;:::-;28992:18;28984:6;28981:30;28978:56;;;29014:18;;:::i;:::-;28978:56;29058:38;29090:4;29084:11;29058:38;:::i;:::-;29143:67;29203:6;29195;29189:4;29143:67;:::i;:::-;29237:1;29261:4;29248:17;;29293:2;29285:6;29282:14;29310:1;29305:618;;;;29967:1;29984:6;29981:77;;;30033:9;30028:3;30024:19;30018:26;30009:35;;29981:77;30084:67;30144:6;30137:5;30084:67;:::i;:::-;30078:4;30071:81;29940:222;29275:887;;29305:618;29357:4;29353:9;29345:6;29341:22;29391:37;29423:4;29391:37;:::i;:::-;29450:1;29464:208;29478:7;29475:1;29472:14;29464:208;;;29557:9;29552:3;29548:19;29542:26;29534:6;29527:42;29608:1;29600:6;29596:14;29586:24;;29655:2;29644:9;29640:18;29627:31;;29501:4;29498:1;29494:12;29489:17;;29464:208;;;29700:6;29691:7;29688:19;29685:179;;;29758:9;29753:3;29749:19;29743:26;29801:48;29843:4;29835:6;29831:17;29820:9;29801:48;:::i;:::-;29793:6;29786:64;29708:156;29685:179;29910:1;29906;29898:6;29894:14;29890:22;29884:4;29877:36;29312:611;;;29275:887;;28865:1303;;;28773:1395;;:::o;30174:175::-;30314:27;30310:1;30302:6;30298:14;30291:51;30174:175;:::o;30355:366::-;30497:3;30518:67;30582:2;30577:3;30518:67;:::i;:::-;30511:74;;30594:93;30683:3;30594:93;:::i;:::-;30712:2;30707:3;30703:12;30696:19;;30355:366;;;:::o;30727:419::-;30893:4;30931:2;30920:9;30916:18;30908:26;;30980:9;30974:4;30970:20;30966:1;30955:9;30951:17;30944:47;31008:131;31134:4;31008:131;:::i;:::-;31000:139;;30727:419;;;:::o;31152:140::-;31200:4;31223:3;31215:11;;31246:3;31243:1;31236:14;31280:4;31277:1;31267:18;31259:26;;31152:140;;;:::o;31298:541::-;31398:2;31393:3;31390:11;31387:445;;;31432:37;31463:5;31432:37;:::i;:::-;31515:29;31533:10;31515:29;:::i;:::-;31505:8;31501:44;31698:2;31686:10;31683:18;31680:49;;;31719:8;31704:23;;31680:49;31742:80;31798:22;31816:3;31798:22;:::i;:::-;31788:8;31784:37;31771:11;31742:80;:::i;:::-;31402:430;;31387:445;31298:541;;;:::o;31845:1390::-;31960:36;31992:3;31960:36;:::i;:::-;32061:18;32053:6;32050:30;32047:56;;;32083:18;;:::i;:::-;32047:56;32127:38;32159:4;32153:11;32127:38;:::i;:::-;32212:66;32271:6;32263;32257:4;32212:66;:::i;:::-;32305:1;32329:4;32316:17;;32361:2;32353:6;32350:14;32378:1;32373:617;;;;33034:1;33051:6;33048:77;;;33100:9;33095:3;33091:19;33085:26;33076:35;;33048:77;33151:67;33211:6;33204:5;33151:67;:::i;:::-;33145:4;33138:81;33007:222;32343:886;;32373:617;32425:4;32421:9;32413:6;32409:22;32459:36;32490:4;32459:36;:::i;:::-;32517:1;32531:208;32545:7;32542:1;32539:14;32531:208;;;32624:9;32619:3;32615:19;32609:26;32601:6;32594:42;32675:1;32667:6;32663:14;32653:24;;32722:2;32711:9;32707:18;32694:31;;32568:4;32565:1;32561:12;32556:17;;32531:208;;;32767:6;32758:7;32755:19;32752:179;;;32825:9;32820:3;32816:19;32810:26;32868:48;32910:4;32902:6;32898:17;32887:9;32868:48;:::i;:::-;32860:6;32853:64;32775:156;32752:179;32977:1;32973;32965:6;32961:14;32957:22;32951:4;32944:36;32380:610;;;32343:886;;31935:1300;;;31845:1390;;:::o;33241:164::-;33381:16;33377:1;33369:6;33365:14;33358:40;33241:164;:::o;33411:366::-;33553:3;33574:67;33638:2;33633:3;33574:67;:::i;:::-;33567:74;;33650:93;33739:3;33650:93;:::i;:::-;33768:2;33763:3;33759:12;33752:19;;33411:366;;;:::o;33783:419::-;33949:4;33987:2;33976:9;33972:18;33964:26;;34036:9;34030:4;34026:20;34022:1;34011:9;34007:17;34000:47;34064:131;34190:4;34064:131;:::i;:::-;34056:139;;33783:419;;;:::o;34208:233::-;34247:3;34270:24;34288:5;34270:24;:::i;:::-;34261:33;;34316:66;34309:5;34306:77;34303:103;;34386:18;;:::i;:::-;34303:103;34433:1;34426:5;34422:13;34415:20;;34208:233;;;:::o;34447:180::-;34495:77;34492:1;34485:88;34592:4;34589:1;34582:15;34616:4;34613:1;34606:15;34633:185;34673:1;34690:20;34708:1;34690:20;:::i;:::-;34685:25;;34724:20;34742:1;34724:20;:::i;:::-;34719:25;;34763:1;34753:35;;34768:18;;:::i;:::-;34753:35;34810:1;34807;34803:9;34798:14;;34633:185;;;;:::o;34824:194::-;34864:4;34884:20;34902:1;34884:20;:::i;:::-;34879:25;;34918:20;34936:1;34918:20;:::i;:::-;34913:25;;34962:1;34959;34955:9;34947:17;;34986:1;34980:4;34977:11;34974:37;;;34991:18;;:::i;:::-;34974:37;34824:194;;;;:::o;35024:176::-;35056:1;35073:20;35091:1;35073:20;:::i;:::-;35068:25;;35107:20;35125:1;35107:20;:::i;:::-;35102:25;;35146:1;35136:35;;35151:18;;:::i;:::-;35136:35;35192:1;35189;35185:9;35180:14;;35024:176;;;;:::o

Swarm Source

ipfs://8c96beeb22ce56f6ad3b30e7be8753891dfc4fb45ce16a59f292765fc4a82f5b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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.