ETH Price: $3,298.48 (+1.14%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake217272832025-01-29 2:45:112 days ago1738118711IN
0x7d531a46...bAb30706B
0 ETH0.003437882.44040642
Stake217018882025-01-25 13:42:356 days ago1737812555IN
0x7d531a46...bAb30706B
0 ETH0.000543876.05527766
Unstake216373102025-01-16 13:21:3515 days ago1737033695IN
0x7d531a46...bAb30706B
0 ETH0.0007180911
Unstake216373032025-01-16 13:20:1115 days ago1737033611IN
0x7d531a46...bAb30706B
0 ETH0.0007708911
Unstake216372962025-01-16 13:18:4715 days ago1737033527IN
0x7d531a46...bAb30706B
0 ETH0.0007708911
Unstake216372802025-01-16 13:15:3515 days ago1737033335IN
0x7d531a46...bAb30706B
0 ETH0.0007833712
Unstake216372722025-01-16 13:13:5915 days ago1737033239IN
0x7d531a46...bAb30706B
0 ETH0.0008409712
Unstake216372602025-01-16 13:11:3515 days ago1737033095IN
0x7d531a46...bAb30706B
0 ETH0.0007008110
Unstake216372072025-01-16 13:00:4715 days ago1737032447IN
0x7d531a46...bAb30706B
0 ETH0.000587529
Unstake216372022025-01-16 12:59:4715 days ago1737032387IN
0x7d531a46...bAb30706B
0 ETH0.000630729
Unstake216371822025-01-16 12:55:4715 days ago1737032147IN
0x7d531a46...bAb30706B
0 ETH0.000630629
Stake214706472024-12-24 6:49:1138 days ago1735022951IN
0x7d531a46...bAb30706B
0 ETH0.001048076.63418629
Unstake214613912024-12-22 23:43:3539 days ago1734911015IN
0x7d531a46...bAb30706B
0 ETH0.00069365.27071404
Unstake214398662024-12-19 23:31:2342 days ago1734651083IN
0x7d531a46...bAb30706B
0 ETH0.0011240317.21837843
Unstake214339172024-12-19 3:35:2343 days ago1734579323IN
0x7d531a46...bAb30706B
0 ETH0.0169825113.27085955
Unstake214222812024-12-17 12:33:1145 days ago1734438791IN
0x7d531a46...bAb30706B
0 ETH0.0037060711.49316615
Restake214081552024-12-15 13:15:3547 days ago1734268535IN
0x7d531a46...bAb30706B
0 ETH0.000536357.86983979
Unstake214046552024-12-15 1:31:5947 days ago1734226319IN
0x7d531a46...bAb30706B
0 ETH0.000562378.61466199
Unstake214046522024-12-15 1:31:2347 days ago1734226283IN
0x7d531a46...bAb30706B
0 ETH0.000623438.89590061
Unstake213749402024-12-10 21:58:3552 days ago1733867915IN
0x7d531a46...bAb30706B
0 ETH0.0037162519.94566932
Unstake213070022024-12-01 10:16:2361 days ago1733048183IN
0x7d531a46...bAb30706B
0 ETH0.0019100910.36366188
Unstake212795142024-11-27 13:53:3565 days ago1732715615IN
0x7d531a46...bAb30706B
0 ETH0.0009264414.19429063
Unstake210826982024-10-31 2:40:5992 days ago1730342459IN
0x7d531a46...bAb30706B
0 ETH0.001859098.8149239
Unstake207015182024-09-07 21:48:47146 days ago1725745727IN
0x7d531a46...bAb30706B
0 ETH0.001151732.1350732
Stake204442052024-08-02 23:42:11181 days ago1722642131IN
0x7d531a46...bAb30706B
0 ETH0.000247071.96635663
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SoulStaker

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-07-17
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: contracts/SoulStakerNew.sol



pragma solidity ^0.8.4;



interface ISoulSplicers {
    function safeTransferFrom(address,address,uint256,bytes memory) external;
    function balanceOf(address) external view returns (uint256);
}

error IncorrectOwner();
error IncorrectStakePeriod();
error StakingNotComplete();
error NotStaked();
error NotBeenStaked();
error WrongSpender();
error StakingUnavailable();
error NotEnoughRewards();

pragma solidity ^0.8.7;

contract SoulStaker is IERC721Receiver, Ownable{
    ISoulSplicers public splicerContract;
    SoulStaker public oldStakerContract;

    struct StakedNFTData {
        address owner;     
        uint32 releaseTimestamp;
        uint8 t1Rewards;
        uint8 t2Rewards;
        uint8 t3Rewards;        
    }

    bool t2StakingClosed = false;
    bool t3StakingClosed = false;
    bool earlyReleaseActive = false;
    address spendingContract = address(0);
    mapping(uint256 => StakedNFTData) public stakedNFTs;
    mapping(address => uint256) public ownerTokenCount;

    constructor() {
        splicerContract = ISoulSplicers(0xfD4BfE64fea2ce11898c4b931AFAF728778a90b4);
        oldStakerContract = SoulStaker(0xf80faba16B4757598c6FaD1Fe4134039649cB099);
    }

    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) override pure external returns (bytes4) {
        return this.onERC721Received.selector;
    }

    function stake(uint256[] calldata _tokenIds, uint8[] calldata _months) public {
        uint256 tokenCount = ownerTokenCount[msg.sender];
        bool isT2StakingClosed = t2StakingClosed;
        bool isT3StakingClosed = t3StakingClosed;
        if (earlyReleaseActive) revert StakingUnavailable();

        for (uint256 i = 0; i < _tokenIds.length; i++){
            uint8 months = _months[i];
            uint256 tokenID = _tokenIds[i];

            if (months != 1 && months != 3 && months != 5) revert IncorrectStakePeriod();
            StakedNFTData memory nftData; 
            if (stakedNFTs[tokenID].t1Rewards > 0) nftData = stakedNFTs[tokenID];
            if (months == 3 && (isT2StakingClosed || nftData.t2Rewards > 0)) revert IncorrectStakePeriod();
            if (months == 5 && (isT3StakingClosed || nftData.t3Rewards > 0)) revert IncorrectStakePeriod();
            
            splicerContract.safeTransferFrom(msg.sender, address(this), tokenID, "0x00");
            addRewards(nftData, months, tokenID);
            stakedNFTs[tokenID].releaseTimestamp = uint32(block.timestamp) + (months * 2592000);
            stakedNFTs[tokenID].owner = msg.sender;
            tokenCount += 1;
        }
        ownerTokenCount[msg.sender] = tokenCount;
    }

    function restake(uint256[] calldata _tokenIds, uint8[] calldata _months) public {
        bool isT2StakingClosed = t2StakingClosed;
        if (earlyReleaseActive) revert StakingUnavailable();

        for (uint256 i = 0; i < _tokenIds.length; i++){
            uint8 months = _months[i];
            uint256 tokenID = _tokenIds[i];
            StakedNFTData memory nftData = stakedNFTs[tokenID];

            if (nftData.owner != msg.sender) revert IncorrectOwner();
            if (block.timestamp < nftData.releaseTimestamp) revert StakingNotComplete();
            if (months != 1 && months != 3) revert IncorrectStakePeriod();
            if (months == 3 && (isT2StakingClosed || nftData.t2Rewards > 0)) revert IncorrectStakePeriod();
            
            addRewards(nftData, months, tokenID);
            stakedNFTs[tokenID].releaseTimestamp = uint32(block.timestamp) + (months * 2592000);
        }
    }

    function stakeFromOldContract(uint256[] calldata _tokenIds) public {
        if (block.timestamp > 1661983740) revert StakingUnavailable();
        uint256 tokenCount = ownerTokenCount[msg.sender];

        for (uint256 i = 0; i < _tokenIds.length; i++){
            uint256 tokenID = _tokenIds[i];
            (, uint32 releaseTimestamp, , , ) = oldStakerContract.stakedNFTs(tokenID);
            uint8 months = 0;

            if (releaseTimestamp > 1669846140) months = 5;
            else if (releaseTimestamp > 1664662140) months = 3;
            else if (releaseTimestamp > 1659478140) months = 1;
            else revert NotBeenStaked();

            StakedNFTData memory nftData;
            splicerContract.safeTransferFrom(msg.sender, address(this), tokenID, "0x00");

            addRewards(nftData, months, tokenID);
            stakedNFTs[tokenID].releaseTimestamp = releaseTimestamp;
            stakedNFTs[tokenID].owner = msg.sender;
            tokenCount += 1;
        }
        ownerTokenCount[msg.sender] = tokenCount;
    }     

    function unstake(uint256[] calldata _tokenIds) public {
        bool isEarlyRealeaseActive = earlyReleaseActive;
        uint256 ownerCount = ownerTokenCount[msg.sender];
        for (uint256 i = 0; i < _tokenIds.length; i++){
            uint256 tokenID = _tokenIds[i];
            StakedNFTData memory nftData = stakedNFTs[tokenID];
            if (stakedNFTs[tokenID].owner != msg.sender) revert IncorrectOwner();
            if (!isEarlyRealeaseActive && block.timestamp < nftData.releaseTimestamp) revert StakingNotComplete();
            splicerContract.safeTransferFrom(address(this), msg.sender, tokenID, "0x00");
            delete stakedNFTs[tokenID].owner;
            ownerCount -= 1;
        }
        ownerTokenCount[msg.sender] = ownerCount;
    }    

    function spendRewards(uint256 _tokenID, uint8 _t1, uint8 _t2, uint8 _t3) public {
        if (msg.sender != spendingContract) revert WrongSpender();
        StakedNFTData memory nftRewards = stakedNFTs[_tokenID];
        if (_t1 > nftRewards.t1Rewards || _t2 > nftRewards.t2Rewards || _t3 > nftRewards.t3Rewards) revert NotEnoughRewards();

        nftRewards.t1Rewards -= _t1;
        nftRewards.t2Rewards -= _t2;        
        nftRewards.t3Rewards -= _t3;
        stakedNFTs[_tokenID] = nftRewards;
    }    

    function setEarlyRelease(bool _earlyRelease) public onlyOwner {
        earlyReleaseActive = _earlyRelease;
    }

    function setT2End(bool _ended) public onlyOwner {
        t2StakingClosed = _ended;
    }

    function SetT3End(bool _ended) public onlyOwner {
        t3StakingClosed = _ended;
    }

    function setSpendingContract(address _contractAddress) public onlyOwner {
        spendingContract = _contractAddress;
    }

    function balanceOf(address owner) public view returns (uint256) {
        return ownerTokenCount[owner] + splicerContract.balanceOf(owner) + oldStakerContract.ownerTokenCount(owner);
    }

    function getTimeRemaining(uint256 _tokenID) public view returns (uint256) {
        StakedNFTData memory nftData = stakedNFTs[_tokenID];
        if (nftData.owner == address(0)) revert NotStaked();
        if (block.timestamp >= nftData.releaseTimestamp) return 0;
        return nftData.releaseTimestamp - block.timestamp;
    }

    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 tokenCount = ownerTokenCount[_owner];
        uint256 currentTokenId = 0;
        uint256 arrIndex = 0;
        uint256[] memory tokenIds = new uint256[](tokenCount);

        while (arrIndex < tokenCount && currentTokenId <= 2600)
        {
            if (stakedNFTs[currentTokenId].owner == _owner)
            {
                tokenIds[arrIndex] = currentTokenId;
                arrIndex++;
            }
            currentTokenId++;
        }       
        return tokenIds;
    }

    function addRewards(StakedNFTData memory _nftData, uint8 months, uint256 id) internal {
        if (months == 1) {
            if (_nftData.t1Rewards < 4) _nftData.t1Rewards += 1;
            stakedNFTs[id].t1Rewards = _nftData.t1Rewards;
            return;
        }
        if (months == 3) {
            _nftData.t1Rewards += 2;
            stakedNFTs[id].t2Rewards = 1;
            stakedNFTs[id].t1Rewards = _nftData.t1Rewards;
            return;
        }
        if (months == 5) {
            stakedNFTs[id].t3Rewards = 1;
            stakedNFTs[id].t2Rewards = 2;
            stakedNFTs[id].t1Rewards = 4;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"IncorrectOwner","type":"error"},{"inputs":[],"name":"IncorrectStakePeriod","type":"error"},{"inputs":[],"name":"NotBeenStaked","type":"error"},{"inputs":[],"name":"NotEnoughRewards","type":"error"},{"inputs":[],"name":"NotStaked","type":"error"},{"inputs":[],"name":"StakingNotComplete","type":"error"},{"inputs":[],"name":"StakingUnavailable","type":"error"},{"inputs":[],"name":"WrongSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"bool","name":"_ended","type":"bool"}],"name":"SetT3End","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"}],"name":"getTimeRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldStakerContract","outputs":[{"internalType":"contract SoulStaker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ownerTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint8[]","name":"_months","type":"uint8[]"}],"name":"restake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_earlyRelease","type":"bool"}],"name":"setEarlyRelease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"setSpendingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_ended","type":"bool"}],"name":"setT2End","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenID","type":"uint256"},{"internalType":"uint8","name":"_t1","type":"uint8"},{"internalType":"uint8","name":"_t2","type":"uint8"},{"internalType":"uint8","name":"_t3","type":"uint8"}],"name":"spendRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"splicerContract","outputs":[{"internalType":"contract ISoulSplicers","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint8[]","name":"_months","type":"uint8[]"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"stakeFromOldContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakedNFTs","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint32","name":"releaseTimestamp","type":"uint32"},{"internalType":"uint8","name":"t1Rewards","type":"uint8"},{"internalType":"uint8","name":"t2Rewards","type":"uint8"},{"internalType":"uint8","name":"t3Rewards","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]

60806040526000600260146101000a81548160ff0219169083151502179055506000600260156101000a81548160ff0219169083151502179055506000600260166101000a81548160ff0219169083151502179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a457600080fd5b50620000c5620000b96200017560201b60201c565b6200017d60201b60201c565b73fd4bfe64fea2ce11898c4b931afaf728778a90b4600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f80faba16b4757598c6fad1fe4134039649cb099600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000241565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612fed80620002516000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063954d0b55116100ad578063d021a62c11610071578063d021a62c14610343578063d635128e14610361578063dc71b1d61461037d578063e449f34114610399578063f2fde38b146103b55761012c565b8063954d0b5514610289578063b0b21f70146102a5578063b388c2eb146102c1578063b865749d146102df578063c2fb09a8146103135761012c565b80635a01b268116100f45780635a01b268146101e557806370a0823114610201578063715018a6146102315780638cd429911461023b5780638da5cb5b1461026b5761012c565b806304fe11ea1461013157806305061db61461014d578063150b7a02146101695780632e58b30b14610199578063438b6300146101b5575b600080fd5b61014b6004803603810190610146919061270d565b6103d1565b005b61016760048036038101906101629190612794565b61046a565b005b610183600480360381019061017e919061253c565b6107a4565b6040516101909190612a59565b60405180910390f35b6101b360048036038101906101ae919061268c565b6107b9565b005b6101cf60048036038101906101ca919061250f565b610b35565b6040516101dc9190612a37565b60405180910390f35b6101ff60048036038101906101fa919061250f565b610c9a565b005b61021b6004803603810190610216919061250f565b610d5a565b6040516102289190612aea565b60405180910390f35b610239610f0d565b005b6102556004803603810190610250919061273a565b610f95565b6040516102629190612aea565b60405180910390f35b610273611130565b604051610280919061297f565b60405180910390f35b6102a3600480360381019061029e919061270d565b611159565b005b6102bf60048036038101906102ba919061268c565b6111f2565b005b6102c96116f3565b6040516102d69190612a74565b60405180910390f35b6102f960048036038101906102f4919061273a565b611719565b60405161030a9594939291906129e4565b60405180910390f35b61032d6004803603810190610328919061250f565b6117a6565b60405161033a9190612aea565b60405180910390f35b61034b6117be565b6040516103589190612a8f565b60405180910390f35b61037b6004803603810190610376919061263f565b6117e4565b005b6103976004803603810190610392919061270d565b611b6a565b005b6103b360048036038101906103ae919061263f565b611c03565b005b6103cf60048036038101906103ca919061250f565b611f9e565b005b6103d9612096565b73ffffffffffffffffffffffffffffffffffffffff166103f7611130565b73ffffffffffffffffffffffffffffffffffffffff161461044d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612aca565b60405180910390fd5b80600260166101000a81548160ff02191690831515021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f1576040517f6627fd1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008681526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900460ff1660ff1660ff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460ff1660ff1660ff16815250509050806040015160ff168460ff1611806106075750806060015160ff168360ff16115b8061061b5750806080015160ff168260ff16115b15610652576040517f1e6918b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83816040018181516106649190612c98565b91509060ff16908160ff168152505082816060018181516106859190612c98565b91509060ff16908160ff168152505081816080018181516106a69190612c98565b91509060ff16908160ff1681525050806004600087815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff021916908360ff16021790555060608201518160000160196101000a81548160ff021916908360ff160217905550608082015181600001601a6101000a81548160ff021916908360ff1602179055509050505050505050565b600063150b7a0260e01b905095945050505050565b6000600260149054906101000a900460ff169050600260169054906101000a900460ff1615610814576040517fac9108a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b85859050811015610b2d57600084848381811061083757610836612e2c565b5b905060200201602081019061084c91906127fb565b9050600087878481811061086357610862612e2c565b5b9050602002013590506000600460008381526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900460ff1660ff1660ff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460ff1660ff1660ff168152505090503373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146109ca576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015163ffffffff16421015610a0e576040517f7c905e2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018360ff1614158015610a26575060038360ff1614155b15610a5d576040517f6a766a6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038360ff16148015610a7f57508480610a7e57506000816060015160ff16115b5b15610ab6576040517f6a766a6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ac181848461209e565b62278d008360ff16610ad39190612c27565b62ffffff1642610ae39190612bb6565b6004600084815260200190815260200160002060000160146101000a81548163ffffffff021916908363ffffffff1602179055505050508080610b2590612db4565b915050610817565b505050505050565b60606000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008060008367ffffffffffffffff811115610b9a57610b99612e5b565b5b604051908082528060200260200182016040528015610bc85781602001602082028036833780820191505090505b5090505b8382108015610bdd5750610a288311155b15610c8e578573ffffffffffffffffffffffffffffffffffffffff166004600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c7b5782818381518110610c6057610c5f612e2c565b5b6020026020010181815250508180610c7790612db4565b9250505b8280610c8690612db4565b935050610bcc565b80945050505050919050565b610ca2612096565b73ffffffffffffffffffffffffffffffffffffffff16610cc0611130565b73ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90612aca565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2fb09a8836040518263ffffffff1660e01b8152600401610db7919061297f565b60206040518083038186803b158015610dcf57600080fd5b505afa158015610de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e079190612767565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610e62919061297f565b60206040518083038186803b158015610e7a57600080fd5b505afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190612767565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610efc9190612b60565b610f069190612b60565b9050919050565b610f15612096565b73ffffffffffffffffffffffffffffffffffffffff16610f33611130565b73ffffffffffffffffffffffffffffffffffffffff1614610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090612aca565b60405180910390fd5b610f93600061224d565b565b600080600460008481526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900460ff1660ff1660ff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460ff1660ff1660ff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156110f6576040517f039f2e1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015163ffffffff16421061111157600091505061112b565b42816020015163ffffffff166111279190612c64565b9150505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611161612096565b73ffffffffffffffffffffffffffffffffffffffff1661117f611130565b73ffffffffffffffffffffffffffffffffffffffff16146111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc90612aca565b60405180910390fd5b80600260156101000a81548160ff02191690831515021790555050565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600260149054906101000a900460ff1690506000600260159054906101000a900460ff169050600260169054906101000a900460ff16156112a5576040517fac9108a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b878790508110156116a55760008686838181106112c8576112c7612e2c565b5b90506020020160208101906112dd91906127fb565b905060008989848181106112f4576112f3612e2c565b5b90506020020135905060018260ff1614158015611315575060038260ff1614155b8015611325575060058260ff1614155b1561135c576040517f6a766a6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611364612311565b60006004600084815260200190815260200160002060000160189054906101000a900460ff1660ff16111561148757600460008381526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900460ff1660ff1660ff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460ff1660ff1660ff168152505090505b60038360ff161480156114a9575085806114a857506000816060015160ff16115b5b156114e0576040517f6a766a6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058360ff161480156115025750848061150157506000816080015160ff16115b5b15611539576040517f6a766a6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330856040518463ffffffff1660e01b81526004016115989392919061299a565b600060405180830381600087803b1580156115b257600080fd5b505af11580156115c6573d6000803e3d6000fd5b505050506115d581848461209e565b62278d008360ff166115e79190612c27565b62ffffff16426115f79190612bb6565b6004600084815260200190815260200160002060000160146101000a81548163ffffffff021916908363ffffffff160217905550336004600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018761168d9190612b60565b9650505050808061169d90612db4565b9150506112a8565b5082600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900463ffffffff16908060000160189054906101000a900460ff16908060000160199054906101000a900460ff169080600001601a9054906101000a900460ff16905085565b60056020528060005260406000206000915090505481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b63630fdbfc421115611822576040517fac9108a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b83839050811015611b2057600084848381811061188957611888612e2c565b5b9050602002013590506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b865749d836040518263ffffffff1660e01b81526004016118ef9190612aea565b60a06040518083038186803b15801561190757600080fd5b505afa15801561191b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193f91906125c4565b5050509150506000636387d47c8263ffffffff16111561196257600590506119cc565b636338ba7c8263ffffffff16111561197d57600390506119cb565b6362e9a07c8263ffffffff16111561199857600190506119ca565b6040517fa0e34f7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b6119d4612311565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330876040518463ffffffff1660e01b8152600401611a339392919061299a565b600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b50505050611a7081838661209e565b826004600086815260200190815260200160002060000160146101000a81548163ffffffff021916908363ffffffff160217905550336004600086815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600186611b079190612b60565b9550505050508080611b1890612db4565b915050611869565b5080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b611b72612096565b73ffffffffffffffffffffffffffffffffffffffff16611b90611130565b73ffffffffffffffffffffffffffffffffffffffff1614611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90612aca565b60405180910390fd5b80600260146101000a81548160ff02191690831515021790555050565b6000600260169054906101000a900460ff1690506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b84849050811015611f53576000858583818110611c7e57611c7d612e2c565b5b9050602002013590506000600460008381526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900460ff1660ff1660ff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460ff1660ff1660ff168152505090503373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e17576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84158015611e2e5750806020015163ffffffff1642105b15611e65576040517f7c905e2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3033856040518463ffffffff1660e01b8152600401611ec49392919061299a565b600060405180830381600087803b158015611ede57600080fd5b505af1158015611ef2573d6000803e3d6000fd5b505050506004600083815260200190815260200160002060000160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600184611f3c9190612c64565b935050508080611f4b90612db4565b915050611c5e565b5080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b611fa6612096565b73ffffffffffffffffffffffffffffffffffffffff16611fc4611130565b73ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190612aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190612aaa565b60405180910390fd5b6120938161224d565b50565b600033905090565b60018260ff161415612115576004836040015160ff1610156120dd576001836040018181516120cd9190612bf0565b91509060ff16908160ff16815250505b82604001516004600083815260200190815260200160002060000160186101000a81548160ff021916908360ff160217905550612248565b60038260ff1614156121ab576002836040018181516121349190612bf0565b91509060ff16908160ff168152505060016004600083815260200190815260200160002060000160196101000a81548160ff021916908360ff16021790555082604001516004600083815260200190815260200160002060000160186101000a81548160ff021916908360ff160217905550612248565b60058260ff16141561224757600160046000838152602001908152602001600020600001601a6101000a81548160ff021916908360ff16021790555060026004600083815260200190815260200160002060000160196101000a81548160ff021916908360ff160217905550600480600083815260200190815260200160002060000160186101000a81548160ff021916908360ff1602179055505b5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff168152602001600060ff168152602001600060ff168152602001600060ff1681525090565b60008135905061237481612f44565b92915050565b60008151905061238981612f44565b92915050565b60008083601f8401126123a5576123a4612e8f565b5b8235905067ffffffffffffffff8111156123c2576123c1612e8a565b5b6020830191508360208202830111156123de576123dd612e94565b5b9250929050565b60008083601f8401126123fb576123fa612e8f565b5b8235905067ffffffffffffffff81111561241857612417612e8a565b5b60208301915083602082028301111561243457612433612e94565b5b9250929050565b60008135905061244a81612f5b565b92915050565b60008083601f84011261246657612465612e8f565b5b8235905067ffffffffffffffff81111561248357612482612e8a565b5b60208301915083600182028301111561249f5761249e612e94565b5b9250929050565b6000813590506124b581612f72565b92915050565b6000815190506124ca81612f72565b92915050565b6000815190506124df81612f89565b92915050565b6000813590506124f481612fa0565b92915050565b60008151905061250981612fa0565b92915050565b60006020828403121561252557612524612e9e565b5b600061253384828501612365565b91505092915050565b60008060008060006080868803121561255857612557612e9e565b5b600061256688828901612365565b955050602061257788828901612365565b9450506040612588888289016124a6565b935050606086013567ffffffffffffffff8111156125a9576125a8612e99565b5b6125b588828901612450565b92509250509295509295909350565b600080600080600060a086880312156125e0576125df612e9e565b5b60006125ee8882890161237a565b95505060206125ff888289016124d0565b9450506040612610888289016124fa565b9350506060612621888289016124fa565b9250506080612632888289016124fa565b9150509295509295909350565b6000806020838503121561265657612655612e9e565b5b600083013567ffffffffffffffff81111561267457612673612e99565b5b6126808582860161238f565b92509250509250929050565b600080600080604085870312156126a6576126a5612e9e565b5b600085013567ffffffffffffffff8111156126c4576126c3612e99565b5b6126d08782880161238f565b9450945050602085013567ffffffffffffffff8111156126f3576126f2612e99565b5b6126ff878288016123e5565b925092505092959194509250565b60006020828403121561272357612722612e9e565b5b60006127318482850161243b565b91505092915050565b6000602082840312156127505761274f612e9e565b5b600061275e848285016124a6565b91505092915050565b60006020828403121561277d5761277c612e9e565b5b600061278b848285016124bb565b91505092915050565b600080600080608085870312156127ae576127ad612e9e565b5b60006127bc878288016124a6565b94505060206127cd878288016124e5565b93505060406127de878288016124e5565b92505060606127ef878288016124e5565b91505092959194509250565b60006020828403121561281157612810612e9e565b5b600061281f848285016124e5565b91505092915050565b60006128348383612943565b60208301905092915050565b61284981612ccc565b82525050565b600061285a82612b15565b6128648185612b2d565b935061286f83612b05565b8060005b838110156128a05781516128878882612828565b975061289283612b20565b925050600181019050612873565b5085935050505092915050565b6128b681612cea565b82525050565b6128c581612d6c565b82525050565b6128d481612d7e565b82525050565b60006128e7602683612b4f565b91506128f282612ea3565b604082019050919050565b600061290a600483612b3e565b915061291582612ef2565b602082019050919050565b600061292d602083612b4f565b915061293882612f1b565b602082019050919050565b61294c81612d45565b82525050565b61295b81612d45565b82525050565b61296a81612d4f565b82525050565b61297981612d5f565b82525050565b60006020820190506129946000830184612840565b92915050565b60006080820190506129af6000830186612840565b6129bc6020830185612840565b6129c96040830184612952565b81810360608301526129da816128fd565b9050949350505050565b600060a0820190506129f96000830188612840565b612a066020830187612961565b612a136040830186612970565b612a206060830185612970565b612a2d6080830184612970565b9695505050505050565b60006020820190508181036000830152612a51818461284f565b905092915050565b6000602082019050612a6e60008301846128ad565b92915050565b6000602082019050612a8960008301846128bc565b92915050565b6000602082019050612aa460008301846128cb565b92915050565b60006020820190508181036000830152612ac3816128da565b9050919050565b60006020820190508181036000830152612ae381612920565b9050919050565b6000602082019050612aff6000830184612952565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612b6b82612d45565b9150612b7683612d45565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bab57612baa612dfd565b5b828201905092915050565b6000612bc182612d4f565b9150612bcc83612d4f565b92508263ffffffff03821115612be557612be4612dfd565b5b828201905092915050565b6000612bfb82612d5f565b9150612c0683612d5f565b92508260ff03821115612c1c57612c1b612dfd565b5b828201905092915050565b6000612c3282612d36565b9150612c3d83612d36565b92508162ffffff0483118215151615612c5957612c58612dfd565b5b828202905092915050565b6000612c6f82612d45565b9150612c7a83612d45565b925082821015612c8d57612c8c612dfd565b5b828203905092915050565b6000612ca382612d5f565b9150612cae83612d5f565b925082821015612cc157612cc0612dfd565b5b828203905092915050565b6000612cd782612d16565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b6000612d7782612d90565b9050919050565b6000612d8982612d90565b9050919050565b6000612d9b82612da2565b9050919050565b6000612dad82612d16565b9050919050565b6000612dbf82612d45565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612df257612df1612dfd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f3078303000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b612f4d81612ccc565b8114612f5857600080fd5b50565b612f6481612cde565b8114612f6f57600080fd5b50565b612f7b81612d45565b8114612f8657600080fd5b50565b612f9281612d4f565b8114612f9d57600080fd5b50565b612fa981612d5f565b8114612fb457600080fd5b5056fea2646970667358221220d1a870f05cfa7677c7f8f01d46b25ca947c77a20f2bd48cca0b8c01df61292ad64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063954d0b55116100ad578063d021a62c11610071578063d021a62c14610343578063d635128e14610361578063dc71b1d61461037d578063e449f34114610399578063f2fde38b146103b55761012c565b8063954d0b5514610289578063b0b21f70146102a5578063b388c2eb146102c1578063b865749d146102df578063c2fb09a8146103135761012c565b80635a01b268116100f45780635a01b268146101e557806370a0823114610201578063715018a6146102315780638cd429911461023b5780638da5cb5b1461026b5761012c565b806304fe11ea1461013157806305061db61461014d578063150b7a02146101695780632e58b30b14610199578063438b6300146101b5575b600080fd5b61014b6004803603810190610146919061270d565b6103d1565b005b61016760048036038101906101629190612794565b61046a565b005b610183600480360381019061017e919061253c565b6107a4565b6040516101909190612a59565b60405180910390f35b6101b360048036038101906101ae919061268c565b6107b9565b005b6101cf60048036038101906101ca919061250f565b610b35565b6040516101dc9190612a37565b60405180910390f35b6101ff60048036038101906101fa919061250f565b610c9a565b005b61021b6004803603810190610216919061250f565b610d5a565b6040516102289190612aea565b60405180910390f35b610239610f0d565b005b6102556004803603810190610250919061273a565b610f95565b6040516102629190612aea565b60405180910390f35b610273611130565b604051610280919061297f565b60405180910390f35b6102a3600480360381019061029e919061270d565b611159565b005b6102bf60048036038101906102ba919061268c565b6111f2565b005b6102c96116f3565b6040516102d69190612a74565b60405180910390f35b6102f960048036038101906102f4919061273a565b611719565b60405161030a9594939291906129e4565b60405180910390f35b61032d6004803603810190610328919061250f565b6117a6565b60405161033a9190612aea565b60405180910390f35b61034b6117be565b6040516103589190612a8f565b60405180910390f35b61037b6004803603810190610376919061263f565b6117e4565b005b6103976004803603810190610392919061270d565b611b6a565b005b6103b360048036038101906103ae919061263f565b611c03565b005b6103cf60048036038101906103ca919061250f565b611f9e565b005b6103d9612096565b73ffffffffffffffffffffffffffffffffffffffff166103f7611130565b73ffffffffffffffffffffffffffffffffffffffff161461044d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044490612aca565b60405180910390fd5b80600260166101000a81548160ff02191690831515021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104f1576040517f6627fd1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008681526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900460ff1660ff1660ff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460ff1660ff1660ff16815250509050806040015160ff168460ff1611806106075750806060015160ff168360ff16115b8061061b5750806080015160ff168260ff16115b15610652576040517f1e6918b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83816040018181516106649190612c98565b91509060ff16908160ff168152505082816060018181516106859190612c98565b91509060ff16908160ff168152505081816080018181516106a69190612c98565b91509060ff16908160ff1681525050806004600087815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff021916908360ff16021790555060608201518160000160196101000a81548160ff021916908360ff160217905550608082015181600001601a6101000a81548160ff021916908360ff1602179055509050505050505050565b600063150b7a0260e01b905095945050505050565b6000600260149054906101000a900460ff169050600260169054906101000a900460ff1615610814576040517fac9108a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b85859050811015610b2d57600084848381811061083757610836612e2c565b5b905060200201602081019061084c91906127fb565b9050600087878481811061086357610862612e2c565b5b9050602002013590506000600460008381526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900460ff1660ff1660ff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460ff1660ff1660ff168152505090503373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146109ca576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015163ffffffff16421015610a0e576040517f7c905e2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018360ff1614158015610a26575060038360ff1614155b15610a5d576040517f6a766a6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038360ff16148015610a7f57508480610a7e57506000816060015160ff16115b5b15610ab6576040517f6a766a6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ac181848461209e565b62278d008360ff16610ad39190612c27565b62ffffff1642610ae39190612bb6565b6004600084815260200190815260200160002060000160146101000a81548163ffffffff021916908363ffffffff1602179055505050508080610b2590612db4565b915050610817565b505050505050565b60606000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008060008367ffffffffffffffff811115610b9a57610b99612e5b565b5b604051908082528060200260200182016040528015610bc85781602001602082028036833780820191505090505b5090505b8382108015610bdd5750610a288311155b15610c8e578573ffffffffffffffffffffffffffffffffffffffff166004600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c7b5782818381518110610c6057610c5f612e2c565b5b6020026020010181815250508180610c7790612db4565b9250505b8280610c8690612db4565b935050610bcc565b80945050505050919050565b610ca2612096565b73ffffffffffffffffffffffffffffffffffffffff16610cc0611130565b73ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90612aca565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2fb09a8836040518263ffffffff1660e01b8152600401610db7919061297f565b60206040518083038186803b158015610dcf57600080fd5b505afa158015610de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e079190612767565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610e62919061297f565b60206040518083038186803b158015610e7a57600080fd5b505afa158015610e8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb29190612767565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610efc9190612b60565b610f069190612b60565b9050919050565b610f15612096565b73ffffffffffffffffffffffffffffffffffffffff16610f33611130565b73ffffffffffffffffffffffffffffffffffffffff1614610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8090612aca565b60405180910390fd5b610f93600061224d565b565b600080600460008481526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900460ff1660ff1660ff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460ff1660ff1660ff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614156110f6576040517f039f2e1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015163ffffffff16421061111157600091505061112b565b42816020015163ffffffff166111279190612c64565b9150505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611161612096565b73ffffffffffffffffffffffffffffffffffffffff1661117f611130565b73ffffffffffffffffffffffffffffffffffffffff16146111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc90612aca565b60405180910390fd5b80600260156101000a81548160ff02191690831515021790555050565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600260149054906101000a900460ff1690506000600260159054906101000a900460ff169050600260169054906101000a900460ff16156112a5576040517fac9108a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b878790508110156116a55760008686838181106112c8576112c7612e2c565b5b90506020020160208101906112dd91906127fb565b905060008989848181106112f4576112f3612e2c565b5b90506020020135905060018260ff1614158015611315575060038260ff1614155b8015611325575060058260ff1614155b1561135c576040517f6a766a6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611364612311565b60006004600084815260200190815260200160002060000160189054906101000a900460ff1660ff16111561148757600460008381526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900460ff1660ff1660ff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460ff1660ff1660ff168152505090505b60038360ff161480156114a9575085806114a857506000816060015160ff16115b5b156114e0576040517f6a766a6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058360ff161480156115025750848061150157506000816080015160ff16115b5b15611539576040517f6a766a6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330856040518463ffffffff1660e01b81526004016115989392919061299a565b600060405180830381600087803b1580156115b257600080fd5b505af11580156115c6573d6000803e3d6000fd5b505050506115d581848461209e565b62278d008360ff166115e79190612c27565b62ffffff16426115f79190612bb6565b6004600084815260200190815260200160002060000160146101000a81548163ffffffff021916908363ffffffff160217905550336004600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018761168d9190612b60565b9650505050808061169d90612db4565b9150506112a8565b5082600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900463ffffffff16908060000160189054906101000a900460ff16908060000160199054906101000a900460ff169080600001601a9054906101000a900460ff16905085565b60056020528060005260406000206000915090505481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b63630fdbfc421115611822576040517fac9108a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b83839050811015611b2057600084848381811061188957611888612e2c565b5b9050602002013590506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b865749d836040518263ffffffff1660e01b81526004016118ef9190612aea565b60a06040518083038186803b15801561190757600080fd5b505afa15801561191b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193f91906125c4565b5050509150506000636387d47c8263ffffffff16111561196257600590506119cc565b636338ba7c8263ffffffff16111561197d57600390506119cb565b6362e9a07c8263ffffffff16111561199857600190506119ca565b6040517fa0e34f7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b6119d4612311565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330876040518463ffffffff1660e01b8152600401611a339392919061299a565b600060405180830381600087803b158015611a4d57600080fd5b505af1158015611a61573d6000803e3d6000fd5b50505050611a7081838661209e565b826004600086815260200190815260200160002060000160146101000a81548163ffffffff021916908363ffffffff160217905550336004600086815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600186611b079190612b60565b9550505050508080611b1890612db4565b915050611869565b5080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b611b72612096565b73ffffffffffffffffffffffffffffffffffffffff16611b90611130565b73ffffffffffffffffffffffffffffffffffffffff1614611be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdd90612aca565b60405180910390fd5b80600260146101000a81548160ff02191690831515021790555050565b6000600260169054906101000a900460ff1690506000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b84849050811015611f53576000858583818110611c7e57611c7d612e2c565b5b9050602002013590506000600460008381526020019081526020016000206040518060a00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900460ff1660ff1660ff1681526020016000820160199054906101000a900460ff1660ff1660ff16815260200160008201601a9054906101000a900460ff1660ff1660ff168152505090503373ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e17576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84158015611e2e5750806020015163ffffffff1642105b15611e65576040517f7c905e2f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3033856040518463ffffffff1660e01b8152600401611ec49392919061299a565b600060405180830381600087803b158015611ede57600080fd5b505af1158015611ef2573d6000803e3d6000fd5b505050506004600083815260200190815260200160002060000160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600184611f3c9190612c64565b935050508080611f4b90612db4565b915050611c5e565b5080600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505050565b611fa6612096565b73ffffffffffffffffffffffffffffffffffffffff16611fc4611130565b73ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190612aca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561208a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208190612aaa565b60405180910390fd5b6120938161224d565b50565b600033905090565b60018260ff161415612115576004836040015160ff1610156120dd576001836040018181516120cd9190612bf0565b91509060ff16908160ff16815250505b82604001516004600083815260200190815260200160002060000160186101000a81548160ff021916908360ff160217905550612248565b60038260ff1614156121ab576002836040018181516121349190612bf0565b91509060ff16908160ff168152505060016004600083815260200190815260200160002060000160196101000a81548160ff021916908360ff16021790555082604001516004600083815260200190815260200160002060000160186101000a81548160ff021916908360ff160217905550612248565b60058260ff16141561224757600160046000838152602001908152602001600020600001601a6101000a81548160ff021916908360ff16021790555060026004600083815260200190815260200160002060000160196101000a81548160ff021916908360ff160217905550600480600083815260200190815260200160002060000160186101000a81548160ff021916908360ff1602179055505b5b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff168152602001600060ff168152602001600060ff168152602001600060ff1681525090565b60008135905061237481612f44565b92915050565b60008151905061238981612f44565b92915050565b60008083601f8401126123a5576123a4612e8f565b5b8235905067ffffffffffffffff8111156123c2576123c1612e8a565b5b6020830191508360208202830111156123de576123dd612e94565b5b9250929050565b60008083601f8401126123fb576123fa612e8f565b5b8235905067ffffffffffffffff81111561241857612417612e8a565b5b60208301915083602082028301111561243457612433612e94565b5b9250929050565b60008135905061244a81612f5b565b92915050565b60008083601f84011261246657612465612e8f565b5b8235905067ffffffffffffffff81111561248357612482612e8a565b5b60208301915083600182028301111561249f5761249e612e94565b5b9250929050565b6000813590506124b581612f72565b92915050565b6000815190506124ca81612f72565b92915050565b6000815190506124df81612f89565b92915050565b6000813590506124f481612fa0565b92915050565b60008151905061250981612fa0565b92915050565b60006020828403121561252557612524612e9e565b5b600061253384828501612365565b91505092915050565b60008060008060006080868803121561255857612557612e9e565b5b600061256688828901612365565b955050602061257788828901612365565b9450506040612588888289016124a6565b935050606086013567ffffffffffffffff8111156125a9576125a8612e99565b5b6125b588828901612450565b92509250509295509295909350565b600080600080600060a086880312156125e0576125df612e9e565b5b60006125ee8882890161237a565b95505060206125ff888289016124d0565b9450506040612610888289016124fa565b9350506060612621888289016124fa565b9250506080612632888289016124fa565b9150509295509295909350565b6000806020838503121561265657612655612e9e565b5b600083013567ffffffffffffffff81111561267457612673612e99565b5b6126808582860161238f565b92509250509250929050565b600080600080604085870312156126a6576126a5612e9e565b5b600085013567ffffffffffffffff8111156126c4576126c3612e99565b5b6126d08782880161238f565b9450945050602085013567ffffffffffffffff8111156126f3576126f2612e99565b5b6126ff878288016123e5565b925092505092959194509250565b60006020828403121561272357612722612e9e565b5b60006127318482850161243b565b91505092915050565b6000602082840312156127505761274f612e9e565b5b600061275e848285016124a6565b91505092915050565b60006020828403121561277d5761277c612e9e565b5b600061278b848285016124bb565b91505092915050565b600080600080608085870312156127ae576127ad612e9e565b5b60006127bc878288016124a6565b94505060206127cd878288016124e5565b93505060406127de878288016124e5565b92505060606127ef878288016124e5565b91505092959194509250565b60006020828403121561281157612810612e9e565b5b600061281f848285016124e5565b91505092915050565b60006128348383612943565b60208301905092915050565b61284981612ccc565b82525050565b600061285a82612b15565b6128648185612b2d565b935061286f83612b05565b8060005b838110156128a05781516128878882612828565b975061289283612b20565b925050600181019050612873565b5085935050505092915050565b6128b681612cea565b82525050565b6128c581612d6c565b82525050565b6128d481612d7e565b82525050565b60006128e7602683612b4f565b91506128f282612ea3565b604082019050919050565b600061290a600483612b3e565b915061291582612ef2565b602082019050919050565b600061292d602083612b4f565b915061293882612f1b565b602082019050919050565b61294c81612d45565b82525050565b61295b81612d45565b82525050565b61296a81612d4f565b82525050565b61297981612d5f565b82525050565b60006020820190506129946000830184612840565b92915050565b60006080820190506129af6000830186612840565b6129bc6020830185612840565b6129c96040830184612952565b81810360608301526129da816128fd565b9050949350505050565b600060a0820190506129f96000830188612840565b612a066020830187612961565b612a136040830186612970565b612a206060830185612970565b612a2d6080830184612970565b9695505050505050565b60006020820190508181036000830152612a51818461284f565b905092915050565b6000602082019050612a6e60008301846128ad565b92915050565b6000602082019050612a8960008301846128bc565b92915050565b6000602082019050612aa460008301846128cb565b92915050565b60006020820190508181036000830152612ac3816128da565b9050919050565b60006020820190508181036000830152612ae381612920565b9050919050565b6000602082019050612aff6000830184612952565b92915050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612b6b82612d45565b9150612b7683612d45565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bab57612baa612dfd565b5b828201905092915050565b6000612bc182612d4f565b9150612bcc83612d4f565b92508263ffffffff03821115612be557612be4612dfd565b5b828201905092915050565b6000612bfb82612d5f565b9150612c0683612d5f565b92508260ff03821115612c1c57612c1b612dfd565b5b828201905092915050565b6000612c3282612d36565b9150612c3d83612d36565b92508162ffffff0483118215151615612c5957612c58612dfd565b5b828202905092915050565b6000612c6f82612d45565b9150612c7a83612d45565b925082821015612c8d57612c8c612dfd565b5b828203905092915050565b6000612ca382612d5f565b9150612cae83612d5f565b925082821015612cc157612cc0612dfd565b5b828203905092915050565b6000612cd782612d16565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b6000612d7782612d90565b9050919050565b6000612d8982612d90565b9050919050565b6000612d9b82612da2565b9050919050565b6000612dad82612d16565b9050919050565b6000612dbf82612d45565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612df257612df1612dfd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f3078303000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b612f4d81612ccc565b8114612f5857600080fd5b50565b612f6481612cde565b8114612f6f57600080fd5b50565b612f7b81612d45565b8114612f8657600080fd5b50565b612f9281612d4f565b8114612f9d57600080fd5b50565b612fa981612d5f565b8114612fb457600080fd5b5056fea2646970667358221220d1a870f05cfa7677c7f8f01d46b25ca947c77a20f2bd48cca0b8c01df61292ad64736f6c63430008070033

Deployed Bytecode Sourcemap

4999:7902:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10646:115;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10117:517;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5796:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7310:932;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11641:600;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10967:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11101:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2639:103;;;:::i;:::-;;11299:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1988:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10868:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6012:1290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5053:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5478:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;5536:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5096:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8250:1067;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10769:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9330:775;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2897:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10646:115;2219:12;:10;:12::i;:::-;2208:23;;:7;:5;:7::i;:::-;:23;;;2200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10740:13:::1;10719:18;;:34;;;;;;;;;;;;;;;;;;10646:115:::0;:::o;10117:517::-;10226:16;;;;;;;;;;;10212:30;;:10;:30;;;10208:57;;10251:14;;;;;;;;;;;;;;10208:57;10276:31;10310:10;:20;10321:8;10310:20;;;;;;;;;;;10276:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10351:10;:20;;;10345:26;;:3;:26;;;:56;;;;10381:10;:20;;;10375:26;;:3;:26;;;10345:56;:86;;;;10411:10;:20;;;10405:26;;:3;:26;;;10345:86;10341:117;;;10440:18;;;;;;;;;;;;;;10341:117;10495:3;10471:10;:20;;:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;10533:3;10509:10;:20;;:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;10579:3;10555:10;:20;;:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;10616:10;10593;:20;10604:8;10593:20;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10197:437;10117:517;;;;:::o;5796:208::-;5940:6;5966:30;;;5959:37;;5796:208;;;;;;;:::o;7310:932::-;7401:22;7426:15;;;;;;;;;;;7401:40;;7456:18;;;;;;;;;;;7452:51;;;7483:20;;;;;;;;;;;;;;7452:51;7521:9;7516:719;7540:9;;:16;;7536:1;:20;7516:719;;;7577:12;7592:7;;7600:1;7592:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;7577:25;;7617:15;7635:9;;7645:1;7635:12;;;;;;;:::i;:::-;;;;;;;;7617:30;;7662:28;7693:10;:19;7704:7;7693:19;;;;;;;;;;;7662:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7750:10;7733:27;;:7;:13;;;:27;;;7729:56;;7769:16;;;;;;;;;;;;;;7729:56;7822:7;:24;;;7804:42;;:15;:42;7800:75;;;7855:20;;;;;;;;;;;;;;7800:75;7904:1;7894:6;:11;;;;:26;;;;;7919:1;7909:6;:11;;;;7894:26;7890:61;;;7929:22;;;;;;;;;;;;;;7890:61;7980:1;7970:6;:11;;;:59;;;;;7986:17;:42;;;;8027:1;8007:7;:17;;;:21;;;7986:42;7970:59;7966:94;;;8038:22;;;;;;;;;;;;;;7966:94;8089:36;8100:7;8109:6;8117:7;8089:10;:36::i;:::-;8215:7;8206:6;:16;;;;;;:::i;:::-;8179:44;;8186:15;8179:44;;;;:::i;:::-;8140:10;:19;8151:7;8140:19;;;;;;;;;;;:36;;;:83;;;;;;;;;;;;;;;;;;7562:673;;;7558:3;;;;;:::i;:::-;;;;7516:719;;;;7390:852;7310:932;;;;:::o;11641:600::-;11701:16;11730:18;11751:15;:23;11767:6;11751:23;;;;;;;;;;;;;;;;11730:44;;11785:22;11822:16;11853:25;11895:10;11881:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11853:53;;11919:282;11937:10;11926:8;:21;:47;;;;;11969:4;11951:14;:22;;11926:47;11919:282;;;12039:6;12003:42;;:10;:26;12014:14;12003:26;;;;;;;;;;;:32;;;;;;;;;;;;:42;;;11999:160;;;12100:14;12079:8;12088;12079:18;;;;;;;;:::i;:::-;;;;;;;:35;;;;;12133:10;;;;;:::i;:::-;;;;11999:160;12173:16;;;;;:::i;:::-;;;;11919:282;;;12225:8;12218:15;;;;;;11641:600;;;:::o;10967:126::-;2219:12;:10;:12::i;:::-;2208:23;;:7;:5;:7::i;:::-;:23;;;2200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11069:16:::1;11050;;:35;;;;;;;;;;;;;;;;;;10967:126:::0;:::o;11101:190::-;11156:7;11243:17;;;;;;;;;;;:33;;;11277:5;11243:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11208:15;;;;;;;;;;;:25;;;11234:5;11208:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11183:15;:22;11199:5;11183:22;;;;;;;;;;;;;;;;:57;;;;:::i;:::-;:100;;;;:::i;:::-;11176:107;;11101:190;;;:::o;2639:103::-;2219:12;:10;:12::i;:::-;2208:23;;:7;:5;:7::i;:::-;:23;;;2200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2704:30:::1;2731:1;2704:18;:30::i;:::-;2639:103::o:0;11299:334::-;11364:7;11384:28;11415:10;:20;11426:8;11415:20;;;;;;;;;;;11384:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11475:1;11450:27;;:7;:13;;;:27;;;11446:51;;;11486:11;;;;;;;;;;;;;;11446:51;11531:7;:24;;;11512:43;;:15;:43;11508:57;;11564:1;11557:8;;;;;11508:57;11610:15;11583:7;:24;;;:42;;;;;;:::i;:::-;11576:49;;;11299:334;;;;:::o;1988:87::-;2034:7;2061:6;;;;;;;;;;;2054:13;;1988:87;:::o;10868:91::-;2219:12;:10;:12::i;:::-;2208:23;;:7;:5;:7::i;:::-;:23;;;2200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10945:6:::1;10927:15;;:24;;;;;;;;;;;;;;;;;;10868:91:::0;:::o;6012:1290::-;6101:18;6122:15;:27;6138:10;6122:27;;;;;;;;;;;;;;;;6101:48;;6160:22;6185:15;;;;;;;;;;;6160:40;;6211:22;6236:15;;;;;;;;;;;6211:40;;6266:18;;;;;;;;;;;6262:51;;;6293:20;;;;;;;;;;;;;;6262:51;6331:9;6326:918;6350:9;;:16;;6346:1;:20;6326:918;;;6387:12;6402:7;;6410:1;6402:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6387:25;;6427:15;6445:9;;6455:1;6445:12;;;;;;;:::i;:::-;;;;;;;;6427:30;;6488:1;6478:6;:11;;;;:26;;;;;6503:1;6493:6;:11;;;;6478:26;:41;;;;;6518:1;6508:6;:11;;;;6478:41;6474:76;;;6528:22;;;;;;;;;;;;;;6474:76;6565:28;;:::i;:::-;6645:1;6613:10;:19;6624:7;6613:19;;;;;;;;;;;:29;;;;;;;;;;;;:33;;;6609:68;;;6658:10;:19;6669:7;6658:19;;;;;;;;;;;6648:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6609:68;6706:1;6696:6;:11;;;:59;;;;;6712:17;:42;;;;6753:1;6733:7;:17;;;:21;;;6712:42;6696:59;6692:94;;;6764:22;;;;;;;;;;;;;;6692:94;6815:1;6805:6;:11;;;:59;;;;;6821:17;:42;;;;6862:1;6842:7;:17;;;:21;;;6821:42;6805:59;6801:94;;;6873:22;;;;;;;;;;;;;;6801:94;6924:15;;;;;;;;;;;:32;;;6957:10;6977:4;6984:7;6924:76;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7015:36;7026:7;7035:6;7043:7;7015:10;:36::i;:::-;7141:7;7132:6;:16;;;;;;:::i;:::-;7105:44;;7112:15;7105:44;;;;:::i;:::-;7066:10;:19;7077:7;7066:19;;;;;;;;;;;:36;;;:83;;;;;;;;;;;;;;;;;;7192:10;7164;:19;7175:7;7164:19;;;;;;;;;;;:25;;;:38;;;;;;;;;;;;;;;;;;7231:1;7217:15;;;;;:::i;:::-;;;6372:872;;;6368:3;;;;;:::i;:::-;;;;6326:918;;;;7284:10;7254:15;:27;7270:10;7254:27;;;;;;;;;;;;;;;:40;;;;6090:1212;;;6012:1290;;;;:::o;5053:36::-;;;;;;;;;;;;;:::o;5478:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5536:50::-;;;;;;;;;;;;;;;;;:::o;5096:35::-;;;;;;;;;;;;;:::o;8250:1067::-;8350:10;8332:15;:28;8328:61;;;8369:20;;;;;;;;;;;;;;8328:61;8400:18;8421:15;:27;8437:10;8421:27;;;;;;;;;;;;;;;;8400:48;;8466:9;8461:798;8485:9;;:16;;8481:1;:20;8461:798;;;8522:15;8540:9;;8550:1;8540:12;;;;;;;:::i;:::-;;;;;;;;8522:30;;8570:23;8603:17;;;;;;;;;;;:28;;;8632:7;8603:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8567:73;;;;;;8655:12;8711:10;8692:16;:29;;;8688:217;;;8732:1;8723:10;;8688:217;;;8776:10;8757:16;:29;;;8753:152;;;8797:1;8788:10;;8753:152;;;8841:10;8822:16;:29;;;8818:87;;;8862:1;8853:10;;8818:87;;;8890:15;;;;;;;;;;;;;;8818:87;8753:152;8688:217;8922:28;;:::i;:::-;8965:15;;;;;;;;;;;:32;;;8998:10;9018:4;9025:7;8965:76;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9058:36;9069:7;9078:6;9086:7;9058:10;:36::i;:::-;9148:16;9109:10;:19;9120:7;9109:19;;;;;;;;;;;:36;;;:55;;;;;;;;;;;;;;;;;;9207:10;9179;:19;9190:7;9179:19;;;;;;;;;;;:25;;;:38;;;;;;;;;;;;;;;;;;9246:1;9232:15;;;;;:::i;:::-;;;8507:752;;;;8503:3;;;;;:::i;:::-;;;;8461:798;;;;9299:10;9269:15;:27;9285:10;9269:27;;;;;;;;;;;;;;;:40;;;;8317:1000;8250:1067;;:::o;10769:91::-;2219:12;:10;:12::i;:::-;2208:23;;:7;:5;:7::i;:::-;:23;;;2200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10846:6:::1;10828:15;;:24;;;;;;;;;;;;;;;;;;10769:91:::0;:::o;9330:775::-;9395:26;9424:18;;;;;;;;;;;9395:47;;9453:18;9474:15;:27;9490:10;9474:27;;;;;;;;;;;;;;;;9453:48;;9517:9;9512:535;9536:9;;:16;;9532:1;:20;9512:535;;;9573:15;9591:9;;9601:1;9591:12;;;;;;;:::i;:::-;;;;;;;;9573:30;;9618:28;9649:10;:19;9660:7;9649:19;;;;;;;;;;;9618:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9716:10;9687:39;;:10;:19;9698:7;9687:19;;;;;;;;;;;:25;;;;;;;;;;;;:39;;;9683:68;;9735:16;;;;;;;;;;;;;;9683:68;9771:21;9770:22;:68;;;;;9814:7;:24;;;9796:42;;:15;:42;9770:68;9766:101;;;9847:20;;;;;;;;;;;;;;9766:101;9882:15;;;;;;;;;;;:32;;;9923:4;9930:10;9942:7;9882:76;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9980:10;:19;9991:7;9980:19;;;;;;;;;;;:25;;;9973:32;;;;;;;;;;;10034:1;10020:15;;;;;:::i;:::-;;;9558:489;;9554:3;;;;;:::i;:::-;;;;9512:535;;;;10087:10;10057:15;:27;10073:10;10057:27;;;;;;;;;;;;;;;:40;;;;9384:721;;9330:775;;:::o;2897:201::-;2219:12;:10;:12::i;:::-;2208:23;;:7;:5;:7::i;:::-;:23;;;2200:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3006:1:::1;2986:22;;:8;:22;;;;2978:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3062:28;3081:8;3062:18;:28::i;:::-;2897:201:::0;:::o;712:98::-;765:7;792:10;785:17;;712:98;:::o;12249:649::-;12360:1;12350:6;:11;;;12346:176;;;12403:1;12382:8;:18;;;:22;;;12378:51;;;12428:1;12406:8;:18;;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;12378:51;12471:8;:18;;;12444:10;:14;12455:2;12444:14;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;12504:7;;12346:176;12546:1;12536:6;:11;;;12532:191;;;12586:1;12564:8;:18;;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;12629:1;12602:10;:14;12613:2;12602:14;;;;;;;;;;;:24;;;:28;;;;;;;;;;;;;;;;;;12672:8;:18;;;12645:10;:14;12656:2;12645:14;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;12705:7;;12532:191;12747:1;12737:6;:11;;;12733:158;;;12792:1;12765:10;:14;12776:2;12765:14;;;;;;;;;;;:24;;;:28;;;;;;;;;;;;;;;;;;12835:1;12808:10;:14;12819:2;12808:14;;;;;;;;;;;:24;;;:28;;;;;;;;;;;;;;;;;;12878:1;12851:10;:14;12862:2;12851:14;;;;;;;;;;;:24;;;:28;;;;;;;;;;;;;;;;;;12733:158;12249:649;;;;:::o;3258:191::-;3332:16;3351:6;;;;;;;;;;;3332:25;;3377:8;3368:6;;:17;;;;;;;;;;;;;;;;;;3432:8;3401:40;;3422:8;3401:40;;;;;;;;;;;;3321:128;3258:191;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;318:568::-;391:8;401:6;451:3;444:4;436:6;432:17;428:27;418:122;;459:79;;:::i;:::-;418:122;572:6;559:20;549:30;;602:18;594:6;591:30;588:117;;;624:79;;:::i;:::-;588:117;738:4;730:6;726:17;714:29;;792:3;784:4;776:6;772:17;762:8;758:32;755:41;752:128;;;799:79;;:::i;:::-;752:128;318:568;;;;;:::o;907:566::-;978:8;988:6;1038:3;1031:4;1023:6;1019:17;1015:27;1005:122;;1046:79;;:::i;:::-;1005:122;1159:6;1146:20;1136:30;;1189:18;1181:6;1178:30;1175:117;;;1211:79;;:::i;:::-;1175:117;1325:4;1317:6;1313:17;1301:29;;1379:3;1371:4;1363:6;1359:17;1349:8;1345:32;1342:41;1339:128;;;1386:79;;:::i;:::-;1339:128;907:566;;;;;:::o;1479:133::-;1522:5;1560:6;1547:20;1538:29;;1576:30;1600:5;1576:30;:::i;:::-;1479:133;;;;:::o;1631:552::-;1688:8;1698:6;1748:3;1741:4;1733:6;1729:17;1725:27;1715:122;;1756:79;;:::i;:::-;1715:122;1869:6;1856:20;1846:30;;1899:18;1891:6;1888:30;1885:117;;;1921:79;;:::i;:::-;1885:117;2035:4;2027:6;2023:17;2011:29;;2089:3;2081:4;2073:6;2069:17;2059:8;2055:32;2052:41;2049:128;;;2096:79;;:::i;:::-;2049:128;1631:552;;;;;:::o;2189:139::-;2235:5;2273:6;2260:20;2251:29;;2289:33;2316:5;2289:33;:::i;:::-;2189:139;;;;:::o;2334:143::-;2391:5;2422:6;2416:13;2407:22;;2438:33;2465:5;2438:33;:::i;:::-;2334:143;;;;:::o;2483:141::-;2539:5;2570:6;2564:13;2555:22;;2586:32;2612:5;2586:32;:::i;:::-;2483:141;;;;:::o;2630:135::-;2674:5;2712:6;2699:20;2690:29;;2728:31;2753:5;2728:31;:::i;:::-;2630:135;;;;:::o;2771:139::-;2826:5;2857:6;2851:13;2842:22;;2873:31;2898:5;2873:31;:::i;:::-;2771:139;;;;:::o;2916:329::-;2975:6;3024:2;3012:9;3003:7;2999:23;2995:32;2992:119;;;3030:79;;:::i;:::-;2992:119;3150:1;3175:53;3220:7;3211:6;3200:9;3196:22;3175:53;:::i;:::-;3165:63;;3121:117;2916:329;;;;:::o;3251:963::-;3348:6;3356;3364;3372;3380;3429:3;3417:9;3408:7;3404:23;3400:33;3397:120;;;3436:79;;:::i;:::-;3397:120;3556:1;3581:53;3626:7;3617:6;3606:9;3602:22;3581:53;:::i;:::-;3571:63;;3527:117;3683:2;3709:53;3754:7;3745:6;3734:9;3730:22;3709:53;:::i;:::-;3699:63;;3654:118;3811:2;3837:53;3882:7;3873:6;3862:9;3858:22;3837:53;:::i;:::-;3827:63;;3782:118;3967:2;3956:9;3952:18;3939:32;3998:18;3990:6;3987:30;3984:117;;;4020:79;;:::i;:::-;3984:117;4133:64;4189:7;4180:6;4169:9;4165:22;4133:64;:::i;:::-;4115:82;;;;3910:297;3251:963;;;;;;;;:::o;4220:::-;4319:6;4327;4335;4343;4351;4400:3;4388:9;4379:7;4375:23;4371:33;4368:120;;;4407:79;;:::i;:::-;4368:120;4527:1;4552:64;4608:7;4599:6;4588:9;4584:22;4552:64;:::i;:::-;4542:74;;4498:128;4665:2;4691:63;4746:7;4737:6;4726:9;4722:22;4691:63;:::i;:::-;4681:73;;4636:128;4803:2;4829:62;4883:7;4874:6;4863:9;4859:22;4829:62;:::i;:::-;4819:72;;4774:127;4940:2;4966:62;5020:7;5011:6;5000:9;4996:22;4966:62;:::i;:::-;4956:72;;4911:127;5077:3;5104:62;5158:7;5149:6;5138:9;5134:22;5104:62;:::i;:::-;5094:72;;5048:128;4220:963;;;;;;;;:::o;5189:559::-;5275:6;5283;5332:2;5320:9;5311:7;5307:23;5303:32;5300:119;;;5338:79;;:::i;:::-;5300:119;5486:1;5475:9;5471:17;5458:31;5516:18;5508:6;5505:30;5502:117;;;5538:79;;:::i;:::-;5502:117;5651:80;5723:7;5714:6;5703:9;5699:22;5651:80;:::i;:::-;5633:98;;;;5429:312;5189:559;;;;;:::o;5754:930::-;5874:6;5882;5890;5898;5947:2;5935:9;5926:7;5922:23;5918:32;5915:119;;;5953:79;;:::i;:::-;5915:119;6101:1;6090:9;6086:17;6073:31;6131:18;6123:6;6120:30;6117:117;;;6153:79;;:::i;:::-;6117:117;6266:80;6338:7;6329:6;6318:9;6314:22;6266:80;:::i;:::-;6248:98;;;;6044:312;6423:2;6412:9;6408:18;6395:32;6454:18;6446:6;6443:30;6440:117;;;6476:79;;:::i;:::-;6440:117;6589:78;6659:7;6650:6;6639:9;6635:22;6589:78;:::i;:::-;6571:96;;;;6366:311;5754:930;;;;;;;:::o;6690:323::-;6746:6;6795:2;6783:9;6774:7;6770:23;6766:32;6763:119;;;6801:79;;:::i;:::-;6763:119;6921:1;6946:50;6988:7;6979:6;6968:9;6964:22;6946:50;:::i;:::-;6936:60;;6892:114;6690:323;;;;:::o;7019:329::-;7078:6;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:53;7323:7;7314:6;7303:9;7299:22;7278:53;:::i;:::-;7268:63;;7224:117;7019:329;;;;:::o;7354:351::-;7424:6;7473:2;7461:9;7452:7;7448:23;7444:32;7441:119;;;7479:79;;:::i;:::-;7441:119;7599:1;7624:64;7680:7;7671:6;7660:9;7656:22;7624:64;:::i;:::-;7614:74;;7570:128;7354:351;;;;:::o;7711:753::-;7791:6;7799;7807;7815;7864:3;7852:9;7843:7;7839:23;7835:33;7832:120;;;7871:79;;:::i;:::-;7832:120;7991:1;8016:53;8061:7;8052:6;8041:9;8037:22;8016:53;:::i;:::-;8006:63;;7962:117;8118:2;8144:51;8187:7;8178:6;8167:9;8163:22;8144:51;:::i;:::-;8134:61;;8089:116;8244:2;8270:51;8313:7;8304:6;8293:9;8289:22;8270:51;:::i;:::-;8260:61;;8215:116;8370:2;8396:51;8439:7;8430:6;8419:9;8415:22;8396:51;:::i;:::-;8386:61;;8341:116;7711:753;;;;;;;:::o;8470:325::-;8527:6;8576:2;8564:9;8555:7;8551:23;8547:32;8544:119;;;8582:79;;:::i;:::-;8544:119;8702:1;8727:51;8770:7;8761:6;8750:9;8746:22;8727:51;:::i;:::-;8717:61;;8673:115;8470:325;;;;:::o;8801:179::-;8870:10;8891:46;8933:3;8925:6;8891:46;:::i;:::-;8969:4;8964:3;8960:14;8946:28;;8801:179;;;;:::o;8986:118::-;9073:24;9091:5;9073:24;:::i;:::-;9068:3;9061:37;8986:118;;:::o;9140:732::-;9259:3;9288:54;9336:5;9288:54;:::i;:::-;9358:86;9437:6;9432:3;9358:86;:::i;:::-;9351:93;;9468:56;9518:5;9468:56;:::i;:::-;9547:7;9578:1;9563:284;9588:6;9585:1;9582:13;9563:284;;;9664:6;9658:13;9691:63;9750:3;9735:13;9691:63;:::i;:::-;9684:70;;9777:60;9830:6;9777:60;:::i;:::-;9767:70;;9623:224;9610:1;9607;9603:9;9598:14;;9563:284;;;9567:14;9863:3;9856:10;;9264:608;;;9140:732;;;;:::o;9878:115::-;9963:23;9980:5;9963:23;:::i;:::-;9958:3;9951:36;9878:115;;:::o;9999:173::-;10107:58;10159:5;10107:58;:::i;:::-;10102:3;10095:71;9999:173;;:::o;10178:169::-;10284:56;10334:5;10284:56;:::i;:::-;10279:3;10272:69;10178:169;;:::o;10353:366::-;10495:3;10516:67;10580:2;10575:3;10516:67;:::i;:::-;10509:74;;10592:93;10681:3;10592:93;:::i;:::-;10710:2;10705:3;10701:12;10694:19;;10353:366;;;:::o;10725:363::-;10866:3;10887:65;10950:1;10945:3;10887:65;:::i;:::-;10880:72;;10961:93;11050:3;10961:93;:::i;:::-;11079:2;11074:3;11070:12;11063:19;;10725:363;;;:::o;11094:366::-;11236:3;11257:67;11321:2;11316:3;11257:67;:::i;:::-;11250:74;;11333:93;11422:3;11333:93;:::i;:::-;11451:2;11446:3;11442:12;11435:19;;11094:366;;;:::o;11466:108::-;11543:24;11561:5;11543:24;:::i;:::-;11538:3;11531:37;11466:108;;:::o;11580:118::-;11667:24;11685:5;11667:24;:::i;:::-;11662:3;11655:37;11580:118;;:::o;11704:115::-;11789:23;11806:5;11789:23;:::i;:::-;11784:3;11777:36;11704:115;;:::o;11825:112::-;11908:22;11924:5;11908:22;:::i;:::-;11903:3;11896:35;11825:112;;:::o;11943:222::-;12036:4;12074:2;12063:9;12059:18;12051:26;;12087:71;12155:1;12144:9;12140:17;12131:6;12087:71;:::i;:::-;11943:222;;;;:::o;12171:748::-;12420:4;12458:3;12447:9;12443:19;12435:27;;12472:71;12540:1;12529:9;12525:17;12516:6;12472:71;:::i;:::-;12553:72;12621:2;12610:9;12606:18;12597:6;12553:72;:::i;:::-;12635;12703:2;12692:9;12688:18;12679:6;12635:72;:::i;:::-;12754:9;12748:4;12744:20;12739:2;12728:9;12724:18;12717:48;12782:130;12907:4;12782:130;:::i;:::-;12774:138;;12171:748;;;;;;:::o;12925:636::-;13116:4;13154:3;13143:9;13139:19;13131:27;;13168:71;13236:1;13225:9;13221:17;13212:6;13168:71;:::i;:::-;13249:70;13315:2;13304:9;13300:18;13291:6;13249:70;:::i;:::-;13329:68;13393:2;13382:9;13378:18;13369:6;13329:68;:::i;:::-;13407;13471:2;13460:9;13456:18;13447:6;13407:68;:::i;:::-;13485:69;13549:3;13538:9;13534:19;13525:6;13485:69;:::i;:::-;12925:636;;;;;;;;:::o;13567:373::-;13710:4;13748:2;13737:9;13733:18;13725:26;;13797:9;13791:4;13787:20;13783:1;13772:9;13768:17;13761:47;13825:108;13928:4;13919:6;13825:108;:::i;:::-;13817:116;;13567:373;;;;:::o;13946:218::-;14037:4;14075:2;14064:9;14060:18;14052:26;;14088:69;14154:1;14143:9;14139:17;14130:6;14088:69;:::i;:::-;13946:218;;;;:::o;14170:264::-;14284:4;14322:2;14311:9;14307:18;14299:26;;14335:92;14424:1;14413:9;14409:17;14400:6;14335:92;:::i;:::-;14170:264;;;;:::o;14440:260::-;14552:4;14590:2;14579:9;14575:18;14567:26;;14603:90;14690:1;14679:9;14675:17;14666:6;14603:90;:::i;:::-;14440:260;;;;:::o;14706:419::-;14872:4;14910:2;14899:9;14895:18;14887:26;;14959:9;14953:4;14949:20;14945:1;14934:9;14930:17;14923:47;14987:131;15113:4;14987:131;:::i;:::-;14979:139;;14706:419;;;:::o;15131:::-;15297:4;15335:2;15324:9;15320:18;15312:26;;15384:9;15378:4;15374:20;15370:1;15359:9;15355:17;15348:47;15412:131;15538:4;15412:131;:::i;:::-;15404:139;;15131:419;;;:::o;15556:222::-;15649:4;15687:2;15676:9;15672:18;15664:26;;15700:71;15768:1;15757:9;15753:17;15744:6;15700:71;:::i;:::-;15556:222;;;;:::o;15865:132::-;15932:4;15955:3;15947:11;;15985:4;15980:3;15976:14;15968:22;;15865:132;;;:::o;16003:114::-;16070:6;16104:5;16098:12;16088:22;;16003:114;;;:::o;16123:113::-;16193:4;16225;16220:3;16216:14;16208:22;;16123:113;;;:::o;16242:184::-;16341:11;16375:6;16370:3;16363:19;16415:4;16410:3;16406:14;16391:29;;16242:184;;;;:::o;16432:168::-;16515:11;16549:6;16544:3;16537:19;16589:4;16584:3;16580:14;16565:29;;16432:168;;;;:::o;16606:169::-;16690:11;16724:6;16719:3;16712:19;16764:4;16759:3;16755:14;16740:29;;16606:169;;;;:::o;16781:305::-;16821:3;16840:20;16858:1;16840:20;:::i;:::-;16835:25;;16874:20;16892:1;16874:20;:::i;:::-;16869:25;;17028:1;16960:66;16956:74;16953:1;16950:81;16947:107;;;17034:18;;:::i;:::-;16947:107;17078:1;17075;17071:9;17064:16;;16781:305;;;;:::o;17092:246::-;17131:3;17150:19;17167:1;17150:19;:::i;:::-;17145:24;;17183:19;17200:1;17183:19;:::i;:::-;17178:24;;17280:1;17268:10;17264:18;17261:1;17258:25;17255:51;;;17286:18;;:::i;:::-;17255:51;17330:1;17327;17323:9;17316:16;;17092:246;;;;:::o;17344:237::-;17382:3;17401:18;17417:1;17401:18;:::i;:::-;17396:23;;17433:18;17449:1;17433:18;:::i;:::-;17428:23;;17523:1;17517:4;17513:12;17510:1;17507:19;17504:45;;;17529:18;;:::i;:::-;17504:45;17573:1;17570;17566:9;17559:16;;17344:237;;;;:::o;17587:287::-;17626:7;17649:19;17666:1;17649:19;:::i;:::-;17644:24;;17682:19;17699:1;17682:19;:::i;:::-;17677:24;;17811:1;17801:8;17797:16;17794:1;17791:23;17786:1;17779:9;17772:17;17768:47;17765:73;;;17818:18;;:::i;:::-;17765:73;17866:1;17863;17859:9;17848:20;;17587:287;;;;:::o;17880:191::-;17920:4;17940:20;17958:1;17940:20;:::i;:::-;17935:25;;17974:20;17992:1;17974:20;:::i;:::-;17969:25;;18013:1;18010;18007:8;18004:34;;;18018:18;;:::i;:::-;18004:34;18063:1;18060;18056:9;18048:17;;17880:191;;;;:::o;18077:185::-;18115:4;18135:18;18151:1;18135:18;:::i;:::-;18130:23;;18167:18;18183:1;18167:18;:::i;:::-;18162:23;;18204:1;18201;18198:8;18195:34;;;18209:18;;:::i;:::-;18195:34;18254:1;18251;18247:9;18239:17;;18077:185;;;;:::o;18268:96::-;18305:7;18334:24;18352:5;18334:24;:::i;:::-;18323:35;;18268:96;;;:::o;18370:90::-;18404:7;18447:5;18440:13;18433:21;18422:32;;18370:90;;;:::o;18466:149::-;18502:7;18542:66;18535:5;18531:78;18520:89;;18466:149;;;:::o;18621:126::-;18658:7;18698:42;18691:5;18687:54;18676:65;;18621:126;;;:::o;18753:91::-;18789:7;18829:8;18822:5;18818:20;18807:31;;18753:91;;;:::o;18850:77::-;18887:7;18916:5;18905:16;;18850:77;;;:::o;18933:93::-;18969:7;19009:10;19002:5;18998:22;18987:33;;18933:93;;;:::o;19032:86::-;19067:7;19107:4;19100:5;19096:16;19085:27;;19032:86;;;:::o;19124:147::-;19195:9;19228:37;19259:5;19228:37;:::i;:::-;19215:50;;19124:147;;;:::o;19277:145::-;19346:9;19379:37;19410:5;19379:37;:::i;:::-;19366:50;;19277:145;;;:::o;19428:126::-;19478:9;19511:37;19542:5;19511:37;:::i;:::-;19498:50;;19428:126;;;:::o;19560:113::-;19610:9;19643:24;19661:5;19643:24;:::i;:::-;19630:37;;19560:113;;;:::o;19679:233::-;19718:3;19741:24;19759:5;19741:24;:::i;:::-;19732:33;;19787:66;19780:5;19777:77;19774:103;;;19857:18;;:::i;:::-;19774:103;19904:1;19897:5;19893:13;19886:20;;19679:233;;;:::o;19918:180::-;19966:77;19963:1;19956:88;20063:4;20060:1;20053:15;20087:4;20084:1;20077:15;20104:180;20152:77;20149:1;20142:88;20249:4;20246:1;20239:15;20273:4;20270:1;20263:15;20290:180;20338:77;20335:1;20328:88;20435:4;20432:1;20425:15;20459:4;20456:1;20449:15;20476:117;20585:1;20582;20575:12;20599:117;20708:1;20705;20698:12;20722:117;20831:1;20828;20821:12;20845:117;20954:1;20951;20944:12;20968:117;21077:1;21074;21067:12;21091:225;21231:34;21227:1;21219:6;21215:14;21208:58;21300:8;21295:2;21287:6;21283:15;21276:33;21091:225;:::o;21322:154::-;21462:6;21458:1;21450:6;21446:14;21439:30;21322:154;:::o;21482:182::-;21622:34;21618:1;21610:6;21606:14;21599:58;21482:182;:::o;21670:122::-;21743:24;21761:5;21743:24;:::i;:::-;21736:5;21733:35;21723:63;;21782:1;21779;21772:12;21723:63;21670:122;:::o;21798:116::-;21868:21;21883:5;21868:21;:::i;:::-;21861:5;21858:32;21848:60;;21904:1;21901;21894:12;21848:60;21798:116;:::o;21920:122::-;21993:24;22011:5;21993:24;:::i;:::-;21986:5;21983:35;21973:63;;22032:1;22029;22022:12;21973:63;21920:122;:::o;22048:120::-;22120:23;22137:5;22120:23;:::i;:::-;22113:5;22110:34;22100:62;;22158:1;22155;22148:12;22100:62;22048:120;:::o;22174:118::-;22245:22;22261:5;22245:22;:::i;:::-;22238:5;22235:33;22225:61;;22282:1;22279;22272:12;22225:61;22174:118;:::o

Swarm Source

ipfs://d1a870f05cfa7677c7f8f01d46b25ca947c77a20f2bd48cca0b8c01df61292ad

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
Loading...
Loading
[ 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.