ETH Price: $3,482.32 (+1.00%)

Token

Crayzillas (CRAY)
 

Overview

Max Total Supply

2,405 CRAY

Holders

1,155

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
gmmoney art editions: Deployer
Balance
1 CRAY
0xDf36B093cBc06522b68105c3d9141Db188e980b6
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Crayzillas

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : Crayzillas.sol
// SPDX-License-Identifier: MIT
// Creator: 0xVinasaur
pragma solidity ^0.8.4;

//                                             ╓▄▄▄
//                                      ,▄██▄█▀    ▀█ ,╓▄██▄
//                                     █▀    ╙█▄    ╟█▀     █╕
//                                   ,█▌     ▄███████▀██▄   ▐█
//                                 ╓█▀└▀███▀▀▀└░░░░░░░░ ╜▀█▄╫▌
//                               ╓█▀ ░░░░░░░░░░░░░░░░░░░░░└███████▄
//                             ╓█▀ ░░░░░░░░░░░░░░░░░░░░░░░░░▀█▄    █
//                           ╓█▀ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░╙█▄  ▄█
//                         ,█▀███░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╝█▄█▀
//                        ,█▀░▀▀▀░░░░░░░░░░░░░.█▄░░░░░░░░░░░░░░██▀██╖
//                        █▌░░░░░░░░░░░░░░░░░░╫██░░░░░░░░░░░░░░▐█   ╙█µ
//                        █▒░░░░░██▄▄,▄█░░░░░░░'░░░░░░░░░░░░░░░░█▌   █▌
//                        █▌░░░░░░└▀▀▀▀╙░░░░░░░░░░░░░░░░░░░░░░░░█▌▄██
//                        ╙█▄░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████▄,
//                         └██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░╫█   ╙█
//                           ╙██▄░░░░░░░░░░░░░,███░░░░░░░░░░░░░░╙█    █
//                             ▄█████▄▄▄▄▄█████▀└░░░░░░░░░░██,░░░██ ▄█
//                         ,████▀░░├█╫▀▀▀▀▀╙.░░░░░╓█░░░░░░░░╟██ ░╙███▄,
//                       ╓█▀╟████▀▀▀╙╙▀▀▀███ ░░░░░█▌░░░░░░░░░░▀█▌░║█▌  ▀█
//                      █▀░███             ╙██▄░░░█▌░░░░░░░░░░░╙█▌░╫█   █▌
//                     █▌░█▀ ╙▀██▄▄,,,,,▄▄██▀▀██░░╙█▌░░░░░░░░░░░╟█░░██▄█▀
//          ,,,,   ,,,,█▌█▌   ,,   ╟█▀╙╙╠▄ ,,,▄██▄▄,███▄▄▄░░░,▄▄██▌░╙████▄      ,,,,
//       ╓███▀▀▀████▀▀▀███▄ ████████▀████▀██▀▀▀▀▀▀██████▀█████████▌░░╫██████ ,███▀▀███
//      ██▀  ,,   █   ,  ╟███▌  ╙██▄  ▀▀  ╫▌▄▄▄,  ,█  █▌ ▐████  ██▌░]██▌  ╙████  ,,,██▌
//     ██▌ ╒██▀████  ╙▀  ▐██▌    ╙███   ,█████▀  ▄██  █▌ ▐████  ██▌.██▌    ╙███  ╙▀███
//     ██▌ └██▄████  ,  ███▌  ▀▀  ╙███  █████  ╓████  █▌ ▐████  █████▌  ▀▀  ╙████▄  ╙██
//      ██▄  `╙╙  █  ╟█  ╫▌  ▄▄▄▄  ╚██  ███▀   ╙╙╙╙█  █▌  ╙╙▀█  `╙╙▀▌  ▄▄▄▄  ╨█  ╙  ▄█▌
//       ╙████▄███████████████▀▀████████████████████████████████████████▀▀███████████▀

interface IStateSender {
    function syncState(address receiver, bytes calldata data) external;
}

/**
@dev To enable cross-chain coloring with Polygon, and dedicated immutable metadata for Traits 
 */
abstract contract ERCColorable {
    string internal traitMetadataURI;
    string internal traitMetadataURI_EXT; // optional
    IStateSender internal _stateSender;
    address internal _childStateReceiver;
    bool internal _isStateSenderSet;

    /**
     * @dev Sets a new value for the trait metadata URI
     */
    function _setTraitMetadataURI(string memory uri_) internal virtual {
        traitMetadataURI = uri_;
    }

    /**
     * @dev Sets a new value for the metadata file extension
     eg: ".json"
     */
    function _setTraitMetadataURI_EXT(string memory ext_) internal virtual {
        traitMetadataURI_EXT = ext_;
    }

    /**
    * @dev Sets the StateSender on ETH that will propagate state to Polygon
    */
    function _setStateSender(address newStateSender) internal {
        require(newStateSender != address(0), "ERCColorablew: Invalid State Sender");
        _isStateSenderSet = true;
        _stateSender = IStateSender(newStateSender);
    }

    /**
    * @dev Sets the address on Polygon that will receive state from ETH
    */
    function _setChildStateReceiver(address newChildStateReceiver) internal {
        require(newChildStateReceiver != address(0), "ERCColorable: Invalid child state receiver");
        _childStateReceiver = newChildStateReceiver;
    }
}

// Forked from ERC721I by 0xInuarashi
contract ERC721C is ERCColorable {
    string public name;
    string public symbol;
    string internal baseTokenURI;
    string internal baseTokenURI_EXT;

    constructor(string memory name_, string memory symbol_) {
        name = name_;
        symbol = symbol_;
    }

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

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

    // Events
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // // internal write functions
    // mint
    function _mint(address to_, uint256 tokenId_) internal virtual {
        require(to_ != address(0x0), "ERC721C: _mint() Mint to Zero Address");
        require(
            ownerOf[tokenId_] == address(0x0),
            "ERC721C: _mint() Token to Mint Already Exists!"
        );

        balanceOf[to_]++;
        ownerOf[tokenId_] = to_;

        emit Transfer(address(0x0), to_, tokenId_);
    }

    // transfer
    function _transfer(
        address from_,
        address to_,
        uint256 tokenId_
    ) internal virtual {
        require(
            from_ == ownerOf[tokenId_],
            "ERC721C: _transfer() Transfer Not Owner of Token!"
        );
        require(
            to_ != address(0x0),
            "ERC721C: _transfer() Transfer to Zero Address!"
        );

        // checks if there is an approved address clears it if there is
        if (getApproved[tokenId_] != address(0x0)) {
            _approve(address(0x0), tokenId_);
        }

        ownerOf[tokenId_] = to_;
        balanceOf[from_]--;
        balanceOf[to_]++;

        emit Transfer(from_, to_, tokenId_);
    }

    // approve
    function _approve(address to_, uint256 tokenId_) internal virtual {
        if (getApproved[tokenId_] != to_) {
            getApproved[tokenId_] = to_;
            emit Approval(ownerOf[tokenId_], to_, tokenId_);
        }
    }

    function _setApprovalForAll(
        address owner_,
        address operator_,
        bool approved_
    ) internal virtual {
        require(
            owner_ != operator_,
            "ERC721C: _setApprovalForAll() Owner must not be the Operator!"
        );
        isApprovedForAll[owner_][operator_] = approved_;
        emit ApprovalForAll(owner_, operator_, approved_);
    }

    // token uri
    function _setBaseTokenURI(string memory uri_) internal virtual {
        baseTokenURI = uri_;
    }

    function _setBaseTokenURI_EXT(string memory ext_) internal virtual {
        baseTokenURI_EXT = ext_;
    }

    // // Internal View Functions
    // Embedded Libraries
    function _toString(uint256 value_) internal pure returns (string memory) {
        if (value_ == 0) {
            return "0";
        }
        uint256 _iterate = value_;
        uint256 _digits;
        while (_iterate != 0) {
            _digits++;
            _iterate /= 10;
        } // get digits in value_
        bytes memory _buffer = new bytes(_digits);
        while (value_ != 0) {
            _digits--;
            _buffer[_digits] = bytes1(uint8(48 + uint256(value_ % 10)));
            value_ /= 10;
        } // create bytes of value_
        return string(_buffer); // return string converted bytes of value_
    }

    // Functional Views
    function _isApprovedOrOwner(address spender_, uint256 tokenId_)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            ownerOf[tokenId_] != address(0x0),
            "ERC721C: _isApprovedOrOwner() Owner is Zero Address!"
        );
        address _owner = ownerOf[tokenId_];
        return (spender_ == _owner ||
            spender_ == getApproved[tokenId_] ||
            isApprovedForAll[_owner][spender_]);
    }

    // // public write functions
    function approve(address to_, uint256 tokenId_) public virtual {
        address _owner = ownerOf[tokenId_];
        require(to_ != _owner, "ERC721C: approve() Cannot approve yourself!");
        require(
            msg.sender == _owner || isApprovedForAll[_owner][msg.sender],
            "ERC721C: Caller not owner or Approved!"
        );
        _approve(to_, tokenId_);
    }

    function setApprovalForAll(address operator_, bool approved_)
        public
        virtual
    {
        _setApprovalForAll(msg.sender, operator_, approved_);
    }

    function transferFrom(
        address from_,
        address to_,
        uint256 tokenId_
    ) public virtual {
        require(
            _isApprovedOrOwner(msg.sender, tokenId_),
            "ERC721C: transferFrom() _isApprovedOrOwner = false!"
        );
        _transfer(from_, to_, tokenId_);
        // send data to the child chain
        if (_isStateSenderSet) {
            bytes memory syncData = abi.encode(address(this), tokenId_, to_);
            _stateSender.syncState(
                address(_childStateReceiver),
                abi.encode(syncData)
            );
        }
    }

    function safeTransferFrom(
        address from_,
        address to_,
        uint256 tokenId_,
        bytes memory data_
    ) public virtual {
        transferFrom(from_, to_, tokenId_);
        if (to_.code.length != 0) {
            (, bytes memory _returned) = to_.staticcall(
                abi.encodeWithSelector(
                    0x150b7a02,
                    msg.sender,
                    from_,
                    tokenId_,
                    data_
                )
            );
            bytes4 _selector = abi.decode(_returned, (bytes4));
            require(
                _selector == 0x150b7a02,
                "ERC721C: safeTransferFrom() to_ not ERC721Receivable!"
            );
        }
    }

    function safeTransferFrom(
        address from_,
        address to_,
        uint256 tokenId_
    ) public virtual {
        safeTransferFrom(from_, to_, tokenId_, "");
    }

    // 0xInuarashi Custom Functions
    function multiTransferFrom(
        address from_,
        address to_,
        uint256[] memory tokenIds_
    ) public virtual {
        for (uint256 i = 0; i < tokenIds_.length; i++) {
            transferFrom(from_, to_, tokenIds_[i]);
        }
    }

    function multiSafeTransferFrom(
        address from_,
        address to_,
        uint256[] memory tokenIds_,
        bytes memory data_
    ) public virtual {
        for (uint256 i = 0; i < tokenIds_.length; i++) {
            safeTransferFrom(from_, to_, tokenIds_[i], data_);
        }
    }

    // OZ Standard Stuff
    function supportsInterface(bytes4 interfaceId_) public pure returns (bool) {
        return (interfaceId_ == 0x80ac58cd || interfaceId_ == 0x5b5e139f);
    }

    function tokenURI(uint256 tokenId_)
        public
        view
        virtual
        returns (string memory)
    {
        require(
            ownerOf[tokenId_] != address(0x0),
            "ERC721C: tokenURI() Token does not exist!"
        );
        return
            string(
                abi.encodePacked(
                    baseTokenURI,
                    _toString(tokenId_),
                    baseTokenURI_EXT
                )
            );
    }

    function tokenTraitURI(uint256 tokenId_)
        public
        view
        virtual
        returns (string memory)
    {
        require(
            ownerOf[tokenId_] != address(0x0),
            "ERC721C: tokenTraitURI() Token does not exist!"
        );
        return
            string(
                abi.encodePacked(
                    traitMetadataURI,
                    _toString(tokenId_),
                    traitMetadataURI_EXT
                )
            );
    }

    // public view functions
    function balance() public view returns (uint256) {
        return address(this).balance;
    }

    // never use these for functions ever, they are expensive af and for view only
    function walletOfOwner(address address_)
        public
        view
        virtual
        returns (uint256[] memory)
    {
        uint256 _balance = balanceOf[address_];
        uint256[] memory _tokens = new uint256[](_balance);
        uint256 _index;
        uint256 _loopThrough = totalSupply;
        for (uint256 i = 0; i < _loopThrough; i++) {
            if (ownerOf[i] == address(0x0) && _tokens[_balance - 1] == 0) {
                _loopThrough++;
            }
            if (ownerOf[i] == address_) {
                _tokens[_index] = i;
                _index++;
            }
        }
        return _tokens;
    }

    // not sure when this will ever be needed but it conforms to erc721 enumerable
    function tokenOfOwnerByIndex(address address_, uint256 index_)
        public
        view
        virtual
        returns (uint256)
    {
        uint256[] memory _wallet = walletOfOwner(address_);
        return _wallet[index_];
    }

     function exists(uint256 tokenId_) public view virtual returns (bool) {
        return ownerOf[tokenId_] != address(0x0);
    }
}

// Open0x Ownable (by 0xInuarashi)
abstract contract Ownable {
    address public owner;
    event OwnershipTransferred(
        address indexed oldOwner_,
        address indexed newOwner_
    );

    constructor() {
        owner = msg.sender;
    }

    function _onlyOwner() internal view {
      require(owner == msg.sender, "Ownable: caller is not the owner");
    }

    modifier onlyOwner() {
        _onlyOwner();
        _;
    }

    function _transferOwnership(address newOwner_) internal virtual {
        address _oldOwner = owner;
        owner = newOwner_;
        emit OwnershipTransferred(_oldOwner, newOwner_);
    }

    function transferOwnership(address newOwner_) public virtual onlyOwner {
        require(
            newOwner_ != address(0x0),
            "Ownable: new owner is the zero address!"
        );
        _transferOwnership(newOwner_);
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0x0));
    }
}

abstract contract MerkleAllowlist {
    bytes32 internal _merkleAllowlistRoot;

    function _setAllowlistMerkleRoot(bytes32 merkleRoot_) internal virtual {
        _merkleAllowlistRoot = merkleRoot_;
    }

    function isAllowlisted(address address_, bytes32[] memory proof_)
        public
        view
        returns (bool)
    {
        bytes32 _leaf = keccak256(abi.encodePacked(address_));
        for (uint256 i = 0; i < proof_.length; i++) {
            _leaf = _leaf < proof_[i]
                ? keccak256(abi.encodePacked(_leaf, proof_[i]))
                : keccak256(abi.encodePacked(proof_[i], _leaf));
        }
        return _leaf == _merkleAllowlistRoot;
    }
}

abstract contract MerklePubRaffle {
    bytes32 internal _merklePubRaffleRoot;

    function _setPubRaffleMerkleRoot(bytes32 merkleRoot_) internal virtual {
        _merklePubRaffleRoot = merkleRoot_;
    }

    function isPubRaffleListed(address address_, bytes32[] memory proof_)
        public
        view
        returns (bool)
    {
        bytes32 _leaf = keccak256(abi.encodePacked(address_));
        for (uint256 i = 0; i < proof_.length; i++) {
            _leaf = _leaf < proof_[i]
                ? keccak256(abi.encodePacked(_leaf, proof_[i]))
                : keccak256(abi.encodePacked(proof_[i], _leaf));
        }
        return _leaf == _merklePubRaffleRoot;
    }
}

abstract contract AllowlistMint {
    // Allowlist Minting
    bool internal _allowlistMintEnabled;
    uint256 public _allowlistMintTime;

    function _setAllowlistMint(bool bool_, uint256 time_) internal {
        _allowlistMintEnabled = bool_;
        _allowlistMintTime = time_;
    }

    function _isAllowlistMintEnabled() internal view {
      require(
            _allowlistMintEnabled && _allowlistMintTime <= block.timestamp,
            "Allowlist Mint is not enabled yet!"
        );
    }

    modifier allowlistMintEnabled() {
        _isAllowlistMintEnabled();
        _;
    }

    function allowlistMintStatus() external view returns (bool) {
        return _allowlistMintEnabled && _allowlistMintTime <= block.timestamp;
    }
}

abstract contract PubRaffleMint {
    // Public Raffle Minting
    bool internal _pubRaffleMintEnabled;
    uint256 public _pubRaffleMintTime;

    function _setPubRaffleMint(bool bool_, uint256 time_) internal {
        _pubRaffleMintEnabled = bool_;
        _pubRaffleMintTime = time_;
    }

    function _isPubRaffleMintEnabled() internal view {
      require(
            _pubRaffleMintEnabled && _pubRaffleMintTime <= block.timestamp,
            "Public Raffle Mint is not enabled yet!"
        );
    }

    modifier pubRaffleMintEnabled() {
        _isPubRaffleMintEnabled();
        _;
    }

    function pubRaffleMintStatus() external view returns (bool) {
        return _pubRaffleMintEnabled && _pubRaffleMintTime <= block.timestamp;
    }
}

abstract contract PublicMint {
    // Public Minting
    bool public _publicMintEnabled;
    uint256 public _publicMintTime;

    function _setPublicMint(bool bool_, uint256 time_) internal {
        _publicMintEnabled = bool_;
        _publicMintTime = time_;
    }

    function _isPublicMintEnabled() internal view {
      require(
            _publicMintEnabled && _publicMintTime <= block.timestamp,
            "Public Mint is not enabled yet!"
        );
    }

    modifier publicMintEnabled() {
        _isPublicMintEnabled();
        _;
    }

    function publicMintStatus() external view returns (bool) {
        return _publicMintEnabled && _publicMintTime <= block.timestamp;
    }
}

abstract contract Security {
    function _onlySender() internal view {
      require(msg.sender == tx.origin, "No Smart Contracts!");
    }

    // Prevent Smart Contracts
    modifier onlySender() {
        _onlySender();
        _;
    }
}

contract Crayzillas is
    ERC721C,
    Ownable,
    MerkleAllowlist,
    MerklePubRaffle,
    AllowlistMint,
    PubRaffleMint,
    PublicMint,
    Security
{
    // Constructor
    constructor() payable ERC721C("Crayzillas", "CRAY") {}

    // Project Constraints
    uint256 public mintPrice = 0.077 ether;
    uint256 public maxSupply = 7777;

    string public crayzillasProvenance;

    // Public Limits
    uint256 public maxMintsPerPublic = 2; 
    mapping(address => uint256) public addressToPublicMints;

    // Allowlist Limits
    uint256 public maxMintsPerAllowlist = 2; 
    mapping(address => uint256) public addressToAllowlistMints;

    // PubRaffle Limits
    uint256 public maxMintsPerPubRaffle = 2; 
    mapping(address => uint256) public addressToPubRaffleMints;

    // Administrative Functions
    function setMintPrice(uint256 mintPrice_) external onlyOwner {
        mintPrice = mintPrice_;
    }

    function setMaxSupply(uint256 maxSupply_) external onlyOwner {
        maxSupply = maxSupply_;
    }

    // Public, PubRaffle, and Allowlist Mint Limits
    function setMaxMintsPerPublic(uint256 maxMintsPerPublic_)
        external
        onlyOwner
    {
        maxMintsPerPublic = maxMintsPerPublic_;
    }

    function setMaxMintsPerPubRaffle(uint256 maxMintsPerPubRaffle_) external onlyOwner {
        maxMintsPerPubRaffle = maxMintsPerPubRaffle_;
    }

    function setMaxMintsPerAllowlist(uint256 maxMintsPerAllowlist_) external onlyOwner {
        maxMintsPerAllowlist = maxMintsPerAllowlist_;
    }

    // Token URI
    function setBaseTokenURI(string calldata uri_) external onlyOwner {
        _setBaseTokenURI(uri_);
    }

    function setBaseTokenURI_EXT(string calldata ext_) external onlyOwner {
        _setBaseTokenURI_EXT(ext_);
    }

    // Allowlist MerkleRoot
    function setAllowlistMerkleRoot(bytes32 merkleRoot_) external onlyOwner {
        _setAllowlistMerkleRoot(merkleRoot_);
    }

    // Public Raffle MerkleRoot
    function setPubRaffleMerkleRoot(bytes32 merkleRoot_) external onlyOwner {
        _setPubRaffleMerkleRoot(merkleRoot_);
    }

    // Public Mint
    function setPublicMint(bool bool_, uint256 time_) external onlyOwner {
        _setPublicMint(bool_, time_);
    }

    // Allowlist Mint
    function setAllowlistMint(bool bool_, uint256 time_) external onlyOwner {
        _setAllowlistMint(bool_, time_);
    }

    // Public Raffle Mint
    function setPubRaffleMint(bool bool_, uint256 time_) external onlyOwner {
        _setPubRaffleMint(bool_, time_);
    }

    function setProvenanceHash(string memory provenanceHash_) external onlyOwner {
        crayzillasProvenance = provenanceHash_;
    }

    function setStateSender(address newStateSender) external onlyOwner {
        _setStateSender(newStateSender);
    }

    function setChildReceiver(address newChildStateReceiver) external onlyOwner {
        _setChildStateReceiver(newChildStateReceiver);
    }

    function withdraw() public onlyOwner {
        payable(owner).transfer(payable(address(this)).balance);
    }

    // Internal Functions
    function _mintMany(address to_, uint256 amount_) internal {
        require(
            maxSupply >= totalSupply + amount_,
            "Not enough Crayzillas remaining!"
        );

        uint256 _startId = totalSupply + 1; // iterate from 1

        for (uint256 i = 0; i < amount_; i++) {
            _mint(to_, _startId + i);
        }

        totalSupply += amount_;
    }

    // Owner Mint
    function ownerMint(address[] calldata tos_, uint256[] calldata amounts_)
        external
        onlyOwner
    {
        require(tos_.length == amounts_.length, "Array lengths mismatch!");

        for (uint256 i = 0; i < tos_.length; i++) {
            _mintMany(tos_[i], amounts_[i]);
        }
    }

    // Allowlist Mint
    function allowlistMint(bytes32[] calldata proof_, uint256 amount_)
        external
        payable
        onlySender
        allowlistMintEnabled
    {
        require(isAllowlisted(msg.sender, proof_), "You are not allowlisted!");
        require(
            maxMintsPerAllowlist >= addressToAllowlistMints[msg.sender] + amount_,
            "You don't have enough waxlist mints!"
        );
        require(msg.value == mintPrice * amount_, "Invalid value sent!");

        // Add address to WL minted
        addressToAllowlistMints[msg.sender] += amount_;

        // Now, mint to msg.sender
        _mintMany(msg.sender, amount_);
    }

    // Public Raffle Mint
    function pubRaffleMint(bytes32[] calldata proof_, uint256 amount_)
        external
        payable
        onlySender
        allowlistMintEnabled
    {
        require(isPubRaffleListed(msg.sender, proof_), "You have not won a public raffle mint allocation!");
        require(
            maxMintsPerPubRaffle >= addressToPubRaffleMints[msg.sender] + amount_,
            "You don't have enough public raffle mints!"
        );
        require(msg.value == mintPrice * amount_, "Invalid value sent!");

        // Add address to pub raffle minted
        addressToPubRaffleMints[msg.sender] += amount_;

        // Now, mint to msg.sender
        _mintMany(msg.sender, amount_);
    }

    // Public Mint
    function publicMint(uint256 amount_)
        external
        payable
        onlySender
        publicMintEnabled
    {
        require(
            maxMintsPerPublic >= addressToPublicMints[msg.sender] + amount_,
            "You don't have enough Public Mints!"
        );
        require(msg.value == mintPrice * amount_, "Invalid value sent!");

        // Add address to Public Mints
        addressToPublicMints[msg.sender] += amount_;

        // Now, mint to msg.sender
        _mintMany(msg.sender, amount_);
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner_","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner_","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_allowlistMintTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pubRaffleMintTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicMintTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToAllowlistMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToPubRaffleMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToPublicMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"allowlistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"allowlistMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"crayzillasProvenance","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"}],"name":"isAllowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"}],"name":"isPubRaffleListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerAllowlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerPubRaffle","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"multiSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"multiTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos_","type":"address[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"pubRaffleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"pubRaffleMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"setAllowlistMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"},{"internalType":"uint256","name":"time_","type":"uint256"}],"name":"setAllowlistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"approved_","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ext_","type":"string"}],"name":"setBaseTokenURI_EXT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newChildStateReceiver","type":"address"}],"name":"setChildReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintsPerAllowlist_","type":"uint256"}],"name":"setMaxMintsPerAllowlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintsPerPubRaffle_","type":"uint256"}],"name":"setMaxMintsPerPubRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintsPerPublic_","type":"uint256"}],"name":"setMaxMintsPerPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply_","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintPrice_","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"provenanceHash_","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"setPubRaffleMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"},{"internalType":"uint256","name":"time_","type":"uint256"}],"name":"setPubRaffleMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"},{"internalType":"uint256","name":"time_","type":"uint256"}],"name":"setPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newStateSender","type":"address"}],"name":"setStateSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId_","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"index_","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenTraitURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526701118f178fb48000601655611e6160175560026019556002601b556002601d556040518060400160405280600a81526020017f437261797a696c6c6173000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43524159000000000000000000000000000000000000000000000000000000008152508160049080519060200190620000a99291906200010c565b508060059080519060200190620000c29291906200010c565b50505033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000221565b8280546200011a90620001bc565b90600052602060002090601f0160209004810192826200013e57600085556200018a565b82601f106200015957805160ff19168380011785556200018a565b828001600101855582156200018a579182015b82811115620001895782518255916020019190600101906200016c565b5b5090506200019991906200019d565b5090565b5b80821115620001b85760008160009055506001016200019e565b5090565b60006002820490506001821680620001d557607f821691505b60208210811415620001ec57620001eb620001f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615bf380620002316000396000f3fe6080604052600436106103ad5760003560e01c806370a08231116101e7578063c02e5efc1161010d578063e985e9c5116100a0578063f2fde38b1161006f578063f2fde38b14610e01578063f487c60214610e2a578063f4a0a52814610e53578063f95df41414610e7c576103ad565b8063e985e9c514610d1f578063eacb5f0b14610d5c578063ebb2496614610d99578063f174fdd814610dc4576103ad565b8063d6635959116100dc578063d663595914610c77578063d84a48f514610ca2578063ddb99fb414610ccb578063de15f10614610cf4576103ad565b8063c02e5efc14610ba9578063c1f730a414610be6578063c87b56dd14610c0f578063d5abeb0114610c4c576103ad565b80638cbfa57611610185578063a22cb46511610154578063a22cb46514610b03578063b600ec9514610b2c578063b69ef8a814610b55578063b88d4fde14610b80576103ad565b80638cbfa57614610a595780638da5cb5b14610a8457806395d89b4114610aaf5780639d0e18e914610ada576103ad565b8063895f263f116101c1578063895f263f146109aa5780638bdc048a146109e75780638c7f8f7614610a125780638c97cabd14610a2e576103ad565b806370a082311461092b578063715018a61461096857806380cbb9bf1461097f576103ad565b806330176e13116102d7578063438b63001161026a5780636817c76c116102395780636817c76c1461088557806369f7d2f2146108b05780636cb136b0146108d95780636f8b44b014610902576103ad565b8063438b6300146107a55780634f558e79146107e25780636352211e1461081f578063664ad09d1461085c576103ad565b8063362469db116102a6578063362469db146106ff5780633a3473b61461073c5780633ccfd60b1461076557806342842e0e1461077c576103ad565b806330176e13146106475780633300678614610670578063341c229a146106ad578063361345b2146106d6576103ad565b8063109695231161034f57806323b872dd1161031e57806323b872dd1461059a57806326202370146105c35780632db11544146105ee5780632f745c591461060a576103ad565b806310969523146104ff5780631338a83f1461052857806314f8408f1461054457806318160ddd1461056f576103ad565b806306fdde031161038b57806306fdde0314610443578063081812fc1461046e578063095ea7b3146104ab5780630e12f704146104d4576103ad565b806301ffc9a7146103b257806302ffaed1146103ef57806304f4211614610418575b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d49190614262565b610ea5565b6040516103e69190614ac6565b60405180910390f35b3480156103fb57600080fd5b50610416600480360381019061041191906142b4565b610f07565b005b34801561042457600080fd5b5061042d610f60565b60405161043a9190614e85565b60405180910390f35b34801561044f57600080fd5b50610458610f66565b6040516104659190614b03565b60405180910390f35b34801561047a57600080fd5b506104956004803603810190610490919061433a565b610ff4565b6040516104a291906149d6565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906140f4565b611027565b005b3480156104e057600080fd5b506104e96111dc565b6040516104f69190614e85565b60405180910390f35b34801561050b57600080fd5b50610526600480360381019061052191906142f9565b6111e2565b005b610542600480360381019061053d91906141a5565b611204565b005b34801561055057600080fd5b506105596113e1565b6040516105669190614e85565b60405180910390f35b34801561057b57600080fd5b506105846113e7565b6040516105919190614e85565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613f9a565b6113ed565b005b3480156105cf57600080fd5b506105d8611555565b6040516105e59190614ac6565b60405180910390f35b6106086004803603810190610603919061433a565b61157a565b005b34801561061657600080fd5b50610631600480360381019061062c91906140f4565b6116cb565b60405161063e9190614e85565b60405180910390f35b34801561065357600080fd5b5061066e600480360381019061066991906142b4565b611723565b005b34801561067c57600080fd5b5061069760048036038101906106929190614064565b61177c565b6040516106a49190614ac6565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf91906141fd565b6118f7565b005b3480156106e257600080fd5b506106fd60048036038101906106f891906141fd565b61190d565b005b34801561070b57600080fd5b5061072660048036038101906107219190613e3b565b611923565b6040516107339190614e85565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190613f07565b61193b565b005b34801561077157600080fd5b5061077a6119ad565b005b34801561078857600080fd5b506107a3600480360381019061079e9190613f9a565b611a37565b005b3480156107b157600080fd5b506107cc60048036038101906107c79190613e3b565b611a57565b6040516107d99190614aa4565b60405180910390f35b3480156107ee57600080fd5b506108096004803603810190610804919061433a565b611cce565b6040516108169190614ac6565b60405180910390f35b34801561082b57600080fd5b506108466004803603810190610841919061433a565b611d3a565b60405161085391906149d6565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e919061433a565b611d6d565b005b34801561089157600080fd5b5061089a611d7f565b6040516108a79190614e85565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190614130565b611d85565b005b3480156108e557600080fd5b5061090060048036038101906108fb9190613e3b565b611e93565b005b34801561090e57600080fd5b506109296004803603810190610924919061433a565b611ea7565b005b34801561093757600080fd5b50610952600480360381019061094d9190613e3b565b611eb9565b60405161095f9190614e85565b60405180910390f35b34801561097457600080fd5b5061097d611ed1565b005b34801561098b57600080fd5b50610994611ee5565b6040516109a19190614b03565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc9190613e3b565b611f73565b6040516109de9190614e85565b60405180910390f35b3480156109f357600080fd5b506109fc611f8b565b604051610a099190614ac6565b60405180910390f35b610a2c6004803603810190610a2791906141a5565b611f9e565b005b348015610a3a57600080fd5b50610a4361217b565b604051610a509190614e85565b60405180910390f35b348015610a6557600080fd5b50610a6e612181565b604051610a7b9190614e85565b60405180910390f35b348015610a9057600080fd5b50610a99612187565b604051610aa691906149d6565b60405180910390f35b348015610abb57600080fd5b50610ac46121ad565b604051610ad19190614b03565b60405180910390f35b348015610ae657600080fd5b50610b016004803603810190610afc9190614239565b61223b565b005b348015610b0f57600080fd5b50610b2a6004803603810190610b2591906140b8565b61224f565b005b348015610b3857600080fd5b50610b536004803603810190610b4e919061433a565b61225e565b005b348015610b6157600080fd5b50610b6a612270565b604051610b779190614e85565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba29190613fe9565b612278565b005b348015610bb557600080fd5b50610bd06004803603810190610bcb9190613e3b565b6123f2565b604051610bdd9190614e85565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c0891906141fd565b61240a565b005b348015610c1b57600080fd5b50610c366004803603810190610c31919061433a565b612420565b604051610c439190614b03565b60405180910390f35b348015610c5857600080fd5b50610c616124fa565b604051610c6e9190614e85565b60405180910390f35b348015610c8357600080fd5b50610c8c612500565b604051610c999190614e85565b60405180910390f35b348015610cae57600080fd5b50610cc96004803603810190610cc49190613e3b565b612506565b005b348015610cd757600080fd5b50610cf26004803603810190610ced919061433a565b61251a565b005b348015610d0057600080fd5b50610d0961252c565b604051610d169190614ac6565b60405180910390f35b348015610d2b57600080fd5b50610d466004803603810190610d419190613e64565b612551565b604051610d539190614ac6565b60405180910390f35b348015610d6857600080fd5b50610d836004803603810190610d7e9190614064565b612580565b604051610d909190614ac6565b60405180910390f35b348015610da557600080fd5b50610dae6126fb565b604051610dbb9190614ac6565b60405180910390f35b348015610dd057600080fd5b50610deb6004803603810190610de6919061433a565b612720565b604051610df89190614b03565b60405180910390f35b348015610e0d57600080fd5b50610e286004803603810190610e239190613e3b565b6127fa565b005b348015610e3657600080fd5b50610e516004803603810190610e4c9190613ea0565b61287e565b005b348015610e5f57600080fd5b50610e7a6004803603810190610e75919061433a565b6128ee565b005b348015610e8857600080fd5b50610ea36004803603810190610e9e9190614239565b612900565b005b60006380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f005750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610f0f612914565b610f5c82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506129a6565b5050565b60115481565b60048054610f739061521a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9f9061521a565b8015610fec5780601f10610fc157610100808354040283529160200191610fec565b820191906000526020600020905b815481529060010190602001808311610fcf57829003601f168201915b505050505081565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614d05565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061118e5750600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614c25565b60405180910390fd5b6111d783836129c0565b505050565b60195481565b6111ea612914565b80601890805190602001906112009291906139f6565b5050565b61120c612b0b565b611214612b7b565b61125f33848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505061177c565b61129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590614ba5565b60405180910390fd5b80601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112e9919061501b565b601b54101561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490614b25565b60405180910390fd5b8060165461133b91906150a2565b341461137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390614c85565b60405180910390fd5b80601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113cb919061501b565b925050819055506113dc3382612bda565b505050565b601b5481565b60085481565b6113f73382612c91565b611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90614c05565b60405180910390fd5b611441838383612e9f565b600360149054906101000a900460ff161561155057600030828460405160200161146d93929190614a6d565b6040516020818303038152906040529050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316f19831600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040516020016114f09190614ae1565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161151c929190614a3d565b600060405180830381600087803b15801561153657600080fd5b505af115801561154a573d6000803e3d6000fd5b50505050505b505050565b6000601460009054906101000a900460ff16801561157557504260155411155b905090565b611582612b0b565b61158a61317f565b80601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115d5919061501b565b6019541015611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090614b85565b60405180910390fd5b8060165461162791906150a2565b3414611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90614c85565b60405180910390fd5b80601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b7919061501b565b925050819055506116c83382612bda565b50565b6000806116d784611a57565b9050808381518110611712577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015191505092915050565b61172b612914565b61177882828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506131de565b5050565b600080836040516020016117909190614947565b60405160208183030381529060405280519060200120905060005b83518110156118e8578381815181106117ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151821061186957838181518110611834577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518260405160200161184e929190614962565b604051602081830303815290604052805190602001206118d3565b818482815181106118a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040516020016118bc929190614962565b604051602081830303815290604052805190602001205b915080806118e09061527d565b9150506117ab565b50600e54811491505092915050565b6118ff612914565b61190982826131f8565b5050565b611915612914565b61191f828261321d565b5050565b601e6020528060005260406000206000915090505481565b60005b82518110156119a6576119938585858481518110611985577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185612278565b808061199e9061527d565b91505061193e565b5050505050565b6119b5612914565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611a34573d6000803e3d6000fd5b50565b611a5283838360405180602001604052806000815250612278565b505050565b60606000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008167ffffffffffffffff811115611adf577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611b0d5781602001602082028036833780820191505090505b509050600080600854905060005b81811015611cc157600073ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611bde5750600084600187611b9d91906150fc565b81518110611bd4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151145b15611bf2578180611bee9061527d565b9250505b8673ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611cae5780848481518110611c93577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508280611caa9061527d565b9350505b8080611cb99061527d565b915050611b1b565b5082945050505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d75612914565b80601d8190555050565b60165481565b611d8d612914565b818190508484905014611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc90614ca5565b60405180910390fd5b60005b84849050811015611e8c57611e79858583818110611e1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611e349190613e3b565b848484818110611e6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612bda565b8080611e849061527d565b915050611dd8565b5050505050565b611e9b612914565b611ea481613242565b50565b611eaf612914565b8060178190555050565b600a6020528060005260406000206000915090505481565b611ed9612914565b611ee36000613311565b565b60188054611ef29061521a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1e9061521a565b8015611f6b5780601f10611f4057610100808354040283529160200191611f6b565b820191906000526020600020905b815481529060010190602001808311611f4e57829003601f168201915b505050505081565b601a6020528060005260406000206000915090505481565b601460009054906101000a900460ff1681565b611fa6612b0b565b611fae612b7b565b611ff933848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612580565b612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90614b65565b60405180910390fd5b80601e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612083919061501b565b601d5410156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be90614e05565b60405180910390fd5b806016546120d591906150a2565b3414612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d90614c85565b60405180910390fd5b80601e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612165919061501b565b925050819055506121763382612bda565b505050565b601d5481565b60135481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600580546121ba9061521a565b80601f01602080910402602001604051908101604052809291908181526020018280546121e69061521a565b80156122335780601f1061220857610100808354040283529160200191612233565b820191906000526020600020905b81548152906001019060200180831161221657829003601f168201915b505050505081565b612243612914565b61224c816133d7565b50565b61225a3383836133e1565b5050565b612266612914565b8060198190555050565b600047905090565b6122838484846113ed565b60008373ffffffffffffffffffffffffffffffffffffffff163b146123ec5760008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040516024016122d794939291906149f1565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612325919061498e565b600060405180830381855afa9150503d8060008114612360576040519150601f19603f3d011682016040523d82523d6000602084013e612365565b606091505b5091505060008180602001905181019061237f919061428b565b905063150b7a0260e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e090614be5565b60405180910390fd5b50505b50505050565b601c6020528060005260406000206000915090505481565b612412612914565b61241c828261354e565b5050565b6060600073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90614c45565b60405180910390fd5b60066124d083613573565b60076040516020016124e4939291906149a5565b6040516020818303038152906040529050919050565b60175481565b60155481565b61250e612914565b6125178161371f565b50565b612522612914565b80601b8190555050565b6000601260009054906101000a900460ff16801561254c57504260135411155b905090565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600080836040516020016125949190614947565b60405160208183030381529060405280519060200120905060005b83518110156126ec578381815181106125f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151821061266d57838181518110612638577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182604051602001612652929190614962565b604051602081830303815290604052805190602001206126d7565b818482815181106126a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040516020016126c0929190614962565b604051602081830303815290604052805190602001205b915080806126e49061527d565b9150506125af565b50600f54811491505092915050565b6000601060009054906101000a900460ff16801561271b57504260115411155b905090565b6060600073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bc90614d45565b60405180910390fd5b60006127d083613573565b60016040516020016127e4939291906149a5565b6040516020818303038152906040529050919050565b612802612914565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286990614bc5565b60405180910390fd5b61287b81613311565b50565b60005b81518110156128e8576128d584848484815181106128c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516113ed565b80806128e09061527d565b915050612881565b50505050565b6128f6612914565b8060168190555050565b612908612914565b612911816137d3565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299b90614d25565b60405180910390fd5b565b80600790805190602001906129bc9291906139f6565b5050565b8173ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b075781600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b5050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090614d85565b60405180910390fd5b565b601060009054906101000a900460ff168015612b9957504260115411155b612bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcf90614da5565b60405180910390fd5b565b80600854612be8919061501b565b6017541015612c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2390614e45565b60405180910390fd5b60006001600854612c3d919061501b565b905060005b82811015612c7257612c5f848284612c5a919061501b565b6137dd565b8080612c6a9061527d565b915050612c42565b508160086000828254612c85919061501b565b92505081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2c90614ce5565b60405180910390fd5b60006009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e055750600b600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612e965750600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b91505092915050565b6009600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3790614b45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790614e25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613023576130226000826129c0565b5b816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906130c5906151f0565b9190505550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061311a9061527d565b9190505550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b601460009054906101000a900460ff16801561319d57504260155411155b6131dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d390614dc5565b60405180910390fd5b565b80600690805190602001906131f49291906139f6565b5050565b81601260006101000a81548160ff021916908315150217905550806013819055505050565b81601060006101000a81548160ff021916908315150217905550806011819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a990614c65565b60405180910390fd5b6001600360146101000a81548160ff02191690831515021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600f8190555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344790614de5565b60405180910390fd5b80600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516135419190614ac6565b60405180910390a3505050565b81601460006101000a81548160ff021916908315150217905550806015819055505050565b606060008214156135bb576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061371a565b600082905060005b600082146135ed5780806135d69061527d565b915050600a826135e69190615071565b91506135c3565b60008167ffffffffffffffff81111561362f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156136615781602001600182028036833780820191505090505b5090505b60008514613713578180613678906151f0565b925050600a8561368891906152f4565b6030613694919061501b565b60f81b8183815181106136d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561370c9190615071565b9450613665565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561378f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378690614e65565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b80600e8190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561384d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384490614cc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146138ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e690614d65565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061393f9061527d565b9190505550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613a029061521a565b90600052602060002090601f016020900481019282613a245760008555613a6b565b82601f10613a3d57805160ff1916838001178555613a6b565b82800160010185558215613a6b579182015b82811115613a6a578251825591602001919060010190613a4f565b5b509050613a789190613a7c565b5090565b5b80821115613a95576000816000905550600101613a7d565b5090565b6000613aac613aa784614ec5565b614ea0565b90508083825260208201905082856020860282011115613acb57600080fd5b60005b85811015613afb5781613ae18882613d49565b845260208401935060208301925050600181019050613ace565b5050509392505050565b6000613b18613b1384614ef1565b614ea0565b90508083825260208201905082856020860282011115613b3757600080fd5b60005b85811015613b675781613b4d8882613e26565b845260208401935060208301925050600181019050613b3a565b5050509392505050565b6000613b84613b7f84614f1d565b614ea0565b905082815260208101848484011115613b9c57600080fd5b613ba78482856151ae565b509392505050565b6000613bc2613bbd84614f4e565b614ea0565b905082815260208101848484011115613bda57600080fd5b613be58482856151ae565b509392505050565b600081359050613bfc81615b4a565b92915050565b60008083601f840112613c1457600080fd5b8235905067ffffffffffffffff811115613c2d57600080fd5b602083019150836020820283011115613c4557600080fd5b9250929050565b60008083601f840112613c5e57600080fd5b8235905067ffffffffffffffff811115613c7757600080fd5b602083019150836020820283011115613c8f57600080fd5b9250929050565b600082601f830112613ca757600080fd5b8135613cb7848260208601613a99565b91505092915050565b60008083601f840112613cd257600080fd5b8235905067ffffffffffffffff811115613ceb57600080fd5b602083019150836020820283011115613d0357600080fd5b9250929050565b600082601f830112613d1b57600080fd5b8135613d2b848260208601613b05565b91505092915050565b600081359050613d4381615b61565b92915050565b600081359050613d5881615b78565b92915050565b600081359050613d6d81615b8f565b92915050565b600081519050613d8281615b8f565b92915050565b600082601f830112613d9957600080fd5b8135613da9848260208601613b71565b91505092915050565b60008083601f840112613dc457600080fd5b8235905067ffffffffffffffff811115613ddd57600080fd5b602083019150836001820283011115613df557600080fd5b9250929050565b600082601f830112613e0d57600080fd5b8135613e1d848260208601613baf565b91505092915050565b600081359050613e3581615ba6565b92915050565b600060208284031215613e4d57600080fd5b6000613e5b84828501613bed565b91505092915050565b60008060408385031215613e7757600080fd5b6000613e8585828601613bed565b9250506020613e9685828601613bed565b9150509250929050565b600080600060608486031215613eb557600080fd5b6000613ec386828701613bed565b9350506020613ed486828701613bed565b925050604084013567ffffffffffffffff811115613ef157600080fd5b613efd86828701613d0a565b9150509250925092565b60008060008060808587031215613f1d57600080fd5b6000613f2b87828801613bed565b9450506020613f3c87828801613bed565b935050604085013567ffffffffffffffff811115613f5957600080fd5b613f6587828801613d0a565b925050606085013567ffffffffffffffff811115613f8257600080fd5b613f8e87828801613d88565b91505092959194509250565b600080600060608486031215613faf57600080fd5b6000613fbd86828701613bed565b9350506020613fce86828701613bed565b9250506040613fdf86828701613e26565b9150509250925092565b60008060008060808587031215613fff57600080fd5b600061400d87828801613bed565b945050602061401e87828801613bed565b935050604061402f87828801613e26565b925050606085013567ffffffffffffffff81111561404c57600080fd5b61405887828801613d88565b91505092959194509250565b6000806040838503121561407757600080fd5b600061408585828601613bed565b925050602083013567ffffffffffffffff8111156140a257600080fd5b6140ae85828601613c96565b9150509250929050565b600080604083850312156140cb57600080fd5b60006140d985828601613bed565b92505060206140ea85828601613d34565b9150509250929050565b6000806040838503121561410757600080fd5b600061411585828601613bed565b925050602061412685828601613e26565b9150509250929050565b6000806000806040858703121561414657600080fd5b600085013567ffffffffffffffff81111561416057600080fd5b61416c87828801613c02565b9450945050602085013567ffffffffffffffff81111561418b57600080fd5b61419787828801613cc0565b925092505092959194509250565b6000806000604084860312156141ba57600080fd5b600084013567ffffffffffffffff8111156141d457600080fd5b6141e086828701613c4c565b935093505060206141f386828701613e26565b9150509250925092565b6000806040838503121561421057600080fd5b600061421e85828601613d34565b925050602061422f85828601613e26565b9150509250929050565b60006020828403121561424b57600080fd5b600061425984828501613d49565b91505092915050565b60006020828403121561427457600080fd5b600061428284828501613d5e565b91505092915050565b60006020828403121561429d57600080fd5b60006142ab84828501613d73565b91505092915050565b600080602083850312156142c757600080fd5b600083013567ffffffffffffffff8111156142e157600080fd5b6142ed85828601613db2565b92509250509250929050565b60006020828403121561430b57600080fd5b600082013567ffffffffffffffff81111561432557600080fd5b61433184828501613dfc565b91505092915050565b60006020828403121561434c57600080fd5b600061435a84828501613e26565b91505092915050565b600061436f8383614929565b60208301905092915050565b61438481615130565b82525050565b61439b61439682615130565b6152c6565b82525050565b60006143ac82614fa4565b6143b68185614fd2565b93506143c183614f7f565b8060005b838110156143f25781516143d98882614363565b97506143e483614fc5565b9250506001810190506143c5565b5085935050505092915050565b61440881615142565b82525050565b61441f61441a8261514e565b6152d8565b82525050565b600061443082614faf565b61443a8185614fe3565b935061444a8185602086016151bd565b614453816153e1565b840191505092915050565b600061446982614faf565b6144738185614ff4565b93506144838185602086016151bd565b80840191505092915050565b600061449a82614fba565b6144a48185614fff565b93506144b48185602086016151bd565b6144bd816153e1565b840191505092915050565b60006144d382614fba565b6144dd8185615010565b93506144ed8185602086016151bd565b80840191505092915050565b600081546145068161521a565b6145108186615010565b9450600182166000811461452b576001811461453c5761456f565b60ff1983168652818601935061456f565b61454585614f8f565b60005b8381101561456757815481890152600182019150602081019050614548565b838801955050505b50505092915050565b6000614585602483614fff565b9150614590826153ff565b604082019050919050565b60006145a8603183614fff565b91506145b38261544e565b604082019050919050565b60006145cb603183614fff565b91506145d68261549d565b604082019050919050565b60006145ee602383614fff565b91506145f9826154ec565b604082019050919050565b6000614611601883614fff565b915061461c8261553b565b602082019050919050565b6000614634602783614fff565b915061463f82615564565b604082019050919050565b6000614657603583614fff565b9150614662826155b3565b604082019050919050565b600061467a603383614fff565b915061468582615602565b604082019050919050565b600061469d602683614fff565b91506146a882615651565b604082019050919050565b60006146c0602983614fff565b91506146cb826156a0565b604082019050919050565b60006146e3602383614fff565b91506146ee826156ef565b604082019050919050565b6000614706601383614fff565b91506147118261573e565b602082019050919050565b6000614729601783614fff565b915061473482615767565b602082019050919050565b600061474c602583614fff565b915061475782615790565b604082019050919050565b600061476f603483614fff565b915061477a826157df565b604082019050919050565b6000614792602b83614fff565b915061479d8261582e565b604082019050919050565b60006147b5602083614fff565b91506147c08261587d565b602082019050919050565b60006147d8602e83614fff565b91506147e3826158a6565b604082019050919050565b60006147fb602e83614fff565b9150614806826158f5565b604082019050919050565b600061481e601383614fff565b915061482982615944565b602082019050919050565b6000614841602283614fff565b915061484c8261596d565b604082019050919050565b6000614864601f83614fff565b915061486f826159bc565b602082019050919050565b6000614887603d83614fff565b9150614892826159e5565b604082019050919050565b60006148aa602a83614fff565b91506148b582615a34565b604082019050919050565b60006148cd602e83614fff565b91506148d882615a83565b604082019050919050565b60006148f0602083614fff565b91506148fb82615ad2565b602082019050919050565b6000614913602a83614fff565b915061491e82615afb565b604082019050919050565b614932816151a4565b82525050565b614941816151a4565b82525050565b6000614953828461438a565b60148201915081905092915050565b600061496e828561440e565b60208201915061497e828461440e565b6020820191508190509392505050565b600061499a828461445e565b915081905092915050565b60006149b182866144f9565b91506149bd82856144c8565b91506149c982846144f9565b9150819050949350505050565b60006020820190506149eb600083018461437b565b92915050565b6000608082019050614a06600083018761437b565b614a13602083018661437b565b614a206040830185614938565b8181036060830152614a328184614425565b905095945050505050565b6000604082019050614a52600083018561437b565b8181036020830152614a648184614425565b90509392505050565b6000606082019050614a82600083018661437b565b614a8f6020830185614938565b614a9c604083018461437b565b949350505050565b60006020820190508181036000830152614abe81846143a1565b905092915050565b6000602082019050614adb60008301846143ff565b92915050565b60006020820190508181036000830152614afb8184614425565b905092915050565b60006020820190508181036000830152614b1d818461448f565b905092915050565b60006020820190508181036000830152614b3e81614578565b9050919050565b60006020820190508181036000830152614b5e8161459b565b9050919050565b60006020820190508181036000830152614b7e816145be565b9050919050565b60006020820190508181036000830152614b9e816145e1565b9050919050565b60006020820190508181036000830152614bbe81614604565b9050919050565b60006020820190508181036000830152614bde81614627565b9050919050565b60006020820190508181036000830152614bfe8161464a565b9050919050565b60006020820190508181036000830152614c1e8161466d565b9050919050565b60006020820190508181036000830152614c3e81614690565b9050919050565b60006020820190508181036000830152614c5e816146b3565b9050919050565b60006020820190508181036000830152614c7e816146d6565b9050919050565b60006020820190508181036000830152614c9e816146f9565b9050919050565b60006020820190508181036000830152614cbe8161471c565b9050919050565b60006020820190508181036000830152614cde8161473f565b9050919050565b60006020820190508181036000830152614cfe81614762565b9050919050565b60006020820190508181036000830152614d1e81614785565b9050919050565b60006020820190508181036000830152614d3e816147a8565b9050919050565b60006020820190508181036000830152614d5e816147cb565b9050919050565b60006020820190508181036000830152614d7e816147ee565b9050919050565b60006020820190508181036000830152614d9e81614811565b9050919050565b60006020820190508181036000830152614dbe81614834565b9050919050565b60006020820190508181036000830152614dde81614857565b9050919050565b60006020820190508181036000830152614dfe8161487a565b9050919050565b60006020820190508181036000830152614e1e8161489d565b9050919050565b60006020820190508181036000830152614e3e816148c0565b9050919050565b60006020820190508181036000830152614e5e816148e3565b9050919050565b60006020820190508181036000830152614e7e81614906565b9050919050565b6000602082019050614e9a6000830184614938565b92915050565b6000614eaa614ebb565b9050614eb6828261524c565b919050565b6000604051905090565b600067ffffffffffffffff821115614ee057614edf6153b2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f0c57614f0b6153b2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f3857614f376153b2565b5b614f41826153e1565b9050602081019050919050565b600067ffffffffffffffff821115614f6957614f686153b2565b5b614f72826153e1565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615026826151a4565b9150615031836151a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561506657615065615325565b5b828201905092915050565b600061507c826151a4565b9150615087836151a4565b92508261509757615096615354565b5b828204905092915050565b60006150ad826151a4565b91506150b8836151a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150f1576150f0615325565b5b828202905092915050565b6000615107826151a4565b9150615112836151a4565b92508282101561512557615124615325565b5b828203905092915050565b600061513b82615184565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156151db5780820151818401526020810190506151c0565b838111156151ea576000848401525b50505050565b60006151fb826151a4565b9150600082141561520f5761520e615325565b5b600182039050919050565b6000600282049050600182168061523257607f821691505b6020821081141561524657615245615383565b5b50919050565b615255826153e1565b810181811067ffffffffffffffff82111715615274576152736153b2565b5b80604052505050565b6000615288826151a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152bb576152ba615325565b5b600182019050919050565b60006152d1826152e2565b9050919050565b6000819050919050565b60006152ed826153f2565b9050919050565b60006152ff826151a4565b915061530a836151a4565b92508261531a57615319615354565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f596f7520646f6e2774206861766520656e6f756768207761786c697374206d6960008201527f6e74732100000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231433a205f7472616e736665722829205472616e73666572204e6f60008201527f74204f776e6572206f6620546f6b656e21000000000000000000000000000000602082015250565b7f596f752068617665206e6f7420776f6e2061207075626c696320726166666c6560008201527f206d696e7420616c6c6f636174696f6e21000000000000000000000000000000602082015250565b7f596f7520646f6e2774206861766520656e6f756768205075626c6963204d696e60008201527f7473210000000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420616c6c6f776c6973746564210000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573732100000000000000000000000000000000000000000000000000602082015250565b7f455243373231433a20736166655472616e7366657246726f6d282920746f5f2060008201527f6e6f742045524337323152656365697661626c65210000000000000000000000602082015250565b7f455243373231433a207472616e7366657246726f6d2829205f6973417070726f60008201527f7665644f724f776e6572203d2066616c73652100000000000000000000000000602082015250565b7f455243373231433a2043616c6c6572206e6f74206f776e6572206f722041707060008201527f726f766564210000000000000000000000000000000000000000000000000000602082015250565b7f455243373231433a20746f6b656e555249282920546f6b656e20646f6573206e60008201527f6f74206578697374210000000000000000000000000000000000000000000000602082015250565b7f455243436f6c6f7261626c65773a20496e76616c69642053746174652053656e60008201527f6465720000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642076616c75652073656e742100000000000000000000000000600082015250565b7f4172726179206c656e67746873206d69736d6174636821000000000000000000600082015250565b7f455243373231433a205f6d696e742829204d696e7420746f205a65726f20416460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231433a205f6973417070726f7665644f724f776e65722829204f7760008201527f6e6572206973205a65726f204164647265737321000000000000000000000000602082015250565b7f455243373231433a20617070726f766528292043616e6e6f7420617070726f7660008201527f6520796f757273656c6621000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231433a20746f6b656e5472616974555249282920546f6b656e206460008201527f6f6573206e6f7420657869737421000000000000000000000000000000000000602082015250565b7f455243373231433a205f6d696e74282920546f6b656e20746f204d696e74204160008201527f6c72656164792045786973747321000000000000000000000000000000000000602082015250565b7f4e6f20536d61727420436f6e7472616374732100000000000000000000000000600082015250565b7f416c6c6f776c697374204d696e74206973206e6f7420656e61626c656420796560008201527f7421000000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963204d696e74206973206e6f7420656e61626c6564207965742100600082015250565b7f455243373231433a205f736574417070726f76616c466f72416c6c2829204f7760008201527f6e6572206d757374206e6f7420626520746865204f70657261746f7221000000602082015250565b7f596f7520646f6e2774206861766520656e6f756768207075626c69632072616660008201527f666c65206d696e74732100000000000000000000000000000000000000000000602082015250565b7f455243373231433a205f7472616e736665722829205472616e7366657220746f60008201527f205a65726f204164647265737321000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820437261797a696c6c61732072656d61696e696e6721600082015250565b7f455243436f6c6f7261626c653a20496e76616c6964206368696c64207374617460008201527f6520726563656976657200000000000000000000000000000000000000000000602082015250565b615b5381615130565b8114615b5e57600080fd5b50565b615b6a81615142565b8114615b7557600080fd5b50565b615b818161514e565b8114615b8c57600080fd5b50565b615b9881615158565b8114615ba357600080fd5b50565b615baf816151a4565b8114615bba57600080fd5b5056fea264697066735822122018fec23a0b349adbe343a45f3aa7cd88bbff864a77b4ef8b807f81045c9a8fe764736f6c63430008040033

Deployed Bytecode

0x6080604052600436106103ad5760003560e01c806370a08231116101e7578063c02e5efc1161010d578063e985e9c5116100a0578063f2fde38b1161006f578063f2fde38b14610e01578063f487c60214610e2a578063f4a0a52814610e53578063f95df41414610e7c576103ad565b8063e985e9c514610d1f578063eacb5f0b14610d5c578063ebb2496614610d99578063f174fdd814610dc4576103ad565b8063d6635959116100dc578063d663595914610c77578063d84a48f514610ca2578063ddb99fb414610ccb578063de15f10614610cf4576103ad565b8063c02e5efc14610ba9578063c1f730a414610be6578063c87b56dd14610c0f578063d5abeb0114610c4c576103ad565b80638cbfa57611610185578063a22cb46511610154578063a22cb46514610b03578063b600ec9514610b2c578063b69ef8a814610b55578063b88d4fde14610b80576103ad565b80638cbfa57614610a595780638da5cb5b14610a8457806395d89b4114610aaf5780639d0e18e914610ada576103ad565b8063895f263f116101c1578063895f263f146109aa5780638bdc048a146109e75780638c7f8f7614610a125780638c97cabd14610a2e576103ad565b806370a082311461092b578063715018a61461096857806380cbb9bf1461097f576103ad565b806330176e13116102d7578063438b63001161026a5780636817c76c116102395780636817c76c1461088557806369f7d2f2146108b05780636cb136b0146108d95780636f8b44b014610902576103ad565b8063438b6300146107a55780634f558e79146107e25780636352211e1461081f578063664ad09d1461085c576103ad565b8063362469db116102a6578063362469db146106ff5780633a3473b61461073c5780633ccfd60b1461076557806342842e0e1461077c576103ad565b806330176e13146106475780633300678614610670578063341c229a146106ad578063361345b2146106d6576103ad565b8063109695231161034f57806323b872dd1161031e57806323b872dd1461059a57806326202370146105c35780632db11544146105ee5780632f745c591461060a576103ad565b806310969523146104ff5780631338a83f1461052857806314f8408f1461054457806318160ddd1461056f576103ad565b806306fdde031161038b57806306fdde0314610443578063081812fc1461046e578063095ea7b3146104ab5780630e12f704146104d4576103ad565b806301ffc9a7146103b257806302ffaed1146103ef57806304f4211614610418575b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d49190614262565b610ea5565b6040516103e69190614ac6565b60405180910390f35b3480156103fb57600080fd5b50610416600480360381019061041191906142b4565b610f07565b005b34801561042457600080fd5b5061042d610f60565b60405161043a9190614e85565b60405180910390f35b34801561044f57600080fd5b50610458610f66565b6040516104659190614b03565b60405180910390f35b34801561047a57600080fd5b506104956004803603810190610490919061433a565b610ff4565b6040516104a291906149d6565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd91906140f4565b611027565b005b3480156104e057600080fd5b506104e96111dc565b6040516104f69190614e85565b60405180910390f35b34801561050b57600080fd5b50610526600480360381019061052191906142f9565b6111e2565b005b610542600480360381019061053d91906141a5565b611204565b005b34801561055057600080fd5b506105596113e1565b6040516105669190614e85565b60405180910390f35b34801561057b57600080fd5b506105846113e7565b6040516105919190614e85565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190613f9a565b6113ed565b005b3480156105cf57600080fd5b506105d8611555565b6040516105e59190614ac6565b60405180910390f35b6106086004803603810190610603919061433a565b61157a565b005b34801561061657600080fd5b50610631600480360381019061062c91906140f4565b6116cb565b60405161063e9190614e85565b60405180910390f35b34801561065357600080fd5b5061066e600480360381019061066991906142b4565b611723565b005b34801561067c57600080fd5b5061069760048036038101906106929190614064565b61177c565b6040516106a49190614ac6565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf91906141fd565b6118f7565b005b3480156106e257600080fd5b506106fd60048036038101906106f891906141fd565b61190d565b005b34801561070b57600080fd5b5061072660048036038101906107219190613e3b565b611923565b6040516107339190614e85565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190613f07565b61193b565b005b34801561077157600080fd5b5061077a6119ad565b005b34801561078857600080fd5b506107a3600480360381019061079e9190613f9a565b611a37565b005b3480156107b157600080fd5b506107cc60048036038101906107c79190613e3b565b611a57565b6040516107d99190614aa4565b60405180910390f35b3480156107ee57600080fd5b506108096004803603810190610804919061433a565b611cce565b6040516108169190614ac6565b60405180910390f35b34801561082b57600080fd5b506108466004803603810190610841919061433a565b611d3a565b60405161085391906149d6565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e919061433a565b611d6d565b005b34801561089157600080fd5b5061089a611d7f565b6040516108a79190614e85565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190614130565b611d85565b005b3480156108e557600080fd5b5061090060048036038101906108fb9190613e3b565b611e93565b005b34801561090e57600080fd5b506109296004803603810190610924919061433a565b611ea7565b005b34801561093757600080fd5b50610952600480360381019061094d9190613e3b565b611eb9565b60405161095f9190614e85565b60405180910390f35b34801561097457600080fd5b5061097d611ed1565b005b34801561098b57600080fd5b50610994611ee5565b6040516109a19190614b03565b60405180910390f35b3480156109b657600080fd5b506109d160048036038101906109cc9190613e3b565b611f73565b6040516109de9190614e85565b60405180910390f35b3480156109f357600080fd5b506109fc611f8b565b604051610a099190614ac6565b60405180910390f35b610a2c6004803603810190610a2791906141a5565b611f9e565b005b348015610a3a57600080fd5b50610a4361217b565b604051610a509190614e85565b60405180910390f35b348015610a6557600080fd5b50610a6e612181565b604051610a7b9190614e85565b60405180910390f35b348015610a9057600080fd5b50610a99612187565b604051610aa691906149d6565b60405180910390f35b348015610abb57600080fd5b50610ac46121ad565b604051610ad19190614b03565b60405180910390f35b348015610ae657600080fd5b50610b016004803603810190610afc9190614239565b61223b565b005b348015610b0f57600080fd5b50610b2a6004803603810190610b2591906140b8565b61224f565b005b348015610b3857600080fd5b50610b536004803603810190610b4e919061433a565b61225e565b005b348015610b6157600080fd5b50610b6a612270565b604051610b779190614e85565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba29190613fe9565b612278565b005b348015610bb557600080fd5b50610bd06004803603810190610bcb9190613e3b565b6123f2565b604051610bdd9190614e85565b60405180910390f35b348015610bf257600080fd5b50610c0d6004803603810190610c0891906141fd565b61240a565b005b348015610c1b57600080fd5b50610c366004803603810190610c31919061433a565b612420565b604051610c439190614b03565b60405180910390f35b348015610c5857600080fd5b50610c616124fa565b604051610c6e9190614e85565b60405180910390f35b348015610c8357600080fd5b50610c8c612500565b604051610c999190614e85565b60405180910390f35b348015610cae57600080fd5b50610cc96004803603810190610cc49190613e3b565b612506565b005b348015610cd757600080fd5b50610cf26004803603810190610ced919061433a565b61251a565b005b348015610d0057600080fd5b50610d0961252c565b604051610d169190614ac6565b60405180910390f35b348015610d2b57600080fd5b50610d466004803603810190610d419190613e64565b612551565b604051610d539190614ac6565b60405180910390f35b348015610d6857600080fd5b50610d836004803603810190610d7e9190614064565b612580565b604051610d909190614ac6565b60405180910390f35b348015610da557600080fd5b50610dae6126fb565b604051610dbb9190614ac6565b60405180910390f35b348015610dd057600080fd5b50610deb6004803603810190610de6919061433a565b612720565b604051610df89190614b03565b60405180910390f35b348015610e0d57600080fd5b50610e286004803603810190610e239190613e3b565b6127fa565b005b348015610e3657600080fd5b50610e516004803603810190610e4c9190613ea0565b61287e565b005b348015610e5f57600080fd5b50610e7a6004803603810190610e75919061433a565b6128ee565b005b348015610e8857600080fd5b50610ea36004803603810190610e9e9190614239565b612900565b005b60006380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f005750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610f0f612914565b610f5c82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506129a6565b5050565b60115481565b60048054610f739061521a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9f9061521a565b8015610fec5780601f10610fc157610100808354040283529160200191610fec565b820191906000526020600020905b815481529060010190602001808311610fcf57829003601f168201915b505050505081565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614d05565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061118e5750600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614c25565b60405180910390fd5b6111d783836129c0565b505050565b60195481565b6111ea612914565b80601890805190602001906112009291906139f6565b5050565b61120c612b0b565b611214612b7b565b61125f33848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505061177c565b61129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129590614ba5565b60405180910390fd5b80601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112e9919061501b565b601b54101561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490614b25565b60405180910390fd5b8060165461133b91906150a2565b341461137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390614c85565b60405180910390fd5b80601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113cb919061501b565b925050819055506113dc3382612bda565b505050565b601b5481565b60085481565b6113f73382612c91565b611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90614c05565b60405180910390fd5b611441838383612e9f565b600360149054906101000a900460ff161561155057600030828460405160200161146d93929190614a6d565b6040516020818303038152906040529050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166316f19831600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040516020016114f09190614ae1565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161151c929190614a3d565b600060405180830381600087803b15801561153657600080fd5b505af115801561154a573d6000803e3d6000fd5b50505050505b505050565b6000601460009054906101000a900460ff16801561157557504260155411155b905090565b611582612b0b565b61158a61317f565b80601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115d5919061501b565b6019541015611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090614b85565b60405180910390fd5b8060165461162791906150a2565b3414611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90614c85565b60405180910390fd5b80601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b7919061501b565b925050819055506116c83382612bda565b50565b6000806116d784611a57565b9050808381518110611712577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015191505092915050565b61172b612914565b61177882828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506131de565b5050565b600080836040516020016117909190614947565b60405160208183030381529060405280519060200120905060005b83518110156118e8578381815181106117ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151821061186957838181518110611834577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518260405160200161184e929190614962565b604051602081830303815290604052805190602001206118d3565b818482815181106118a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040516020016118bc929190614962565b604051602081830303815290604052805190602001205b915080806118e09061527d565b9150506117ab565b50600e54811491505092915050565b6118ff612914565b61190982826131f8565b5050565b611915612914565b61191f828261321d565b5050565b601e6020528060005260406000206000915090505481565b60005b82518110156119a6576119938585858481518110611985577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015185612278565b808061199e9061527d565b91505061193e565b5050505050565b6119b5612914565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611a34573d6000803e3d6000fd5b50565b611a5283838360405180602001604052806000815250612278565b505050565b60606000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008167ffffffffffffffff811115611adf577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611b0d5781602001602082028036833780820191505090505b509050600080600854905060005b81811015611cc157600073ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611bde5750600084600187611b9d91906150fc565b81518110611bd4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151145b15611bf2578180611bee9061527d565b9250505b8673ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611cae5780848481518110611c93577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508280611caa9061527d565b9350505b8080611cb99061527d565b915050611b1b565b5082945050505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d75612914565b80601d8190555050565b60165481565b611d8d612914565b818190508484905014611dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcc90614ca5565b60405180910390fd5b60005b84849050811015611e8c57611e79858583818110611e1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9050602002016020810190611e349190613e3b565b848484818110611e6d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135612bda565b8080611e849061527d565b915050611dd8565b5050505050565b611e9b612914565b611ea481613242565b50565b611eaf612914565b8060178190555050565b600a6020528060005260406000206000915090505481565b611ed9612914565b611ee36000613311565b565b60188054611ef29061521a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1e9061521a565b8015611f6b5780601f10611f4057610100808354040283529160200191611f6b565b820191906000526020600020905b815481529060010190602001808311611f4e57829003601f168201915b505050505081565b601a6020528060005260406000206000915090505481565b601460009054906101000a900460ff1681565b611fa6612b0b565b611fae612b7b565b611ff933848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050612580565b612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f90614b65565b60405180910390fd5b80601e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612083919061501b565b601d5410156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be90614e05565b60405180910390fd5b806016546120d591906150a2565b3414612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d90614c85565b60405180910390fd5b80601e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612165919061501b565b925050819055506121763382612bda565b505050565b601d5481565b60135481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600580546121ba9061521a565b80601f01602080910402602001604051908101604052809291908181526020018280546121e69061521a565b80156122335780601f1061220857610100808354040283529160200191612233565b820191906000526020600020905b81548152906001019060200180831161221657829003601f168201915b505050505081565b612243612914565b61224c816133d7565b50565b61225a3383836133e1565b5050565b612266612914565b8060198190555050565b600047905090565b6122838484846113ed565b60008373ffffffffffffffffffffffffffffffffffffffff163b146123ec5760008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040516024016122d794939291906149f1565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612325919061498e565b600060405180830381855afa9150503d8060008114612360576040519150601f19603f3d011682016040523d82523d6000602084013e612365565b606091505b5091505060008180602001905181019061237f919061428b565b905063150b7a0260e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e090614be5565b60405180910390fd5b50505b50505050565b601c6020528060005260406000206000915090505481565b612412612914565b61241c828261354e565b5050565b6060600073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90614c45565b60405180910390fd5b60066124d083613573565b60076040516020016124e4939291906149a5565b6040516020818303038152906040529050919050565b60175481565b60155481565b61250e612914565b6125178161371f565b50565b612522612914565b80601b8190555050565b6000601260009054906101000a900460ff16801561254c57504260135411155b905090565b600c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600080836040516020016125949190614947565b60405160208183030381529060405280519060200120905060005b83518110156126ec578381815181106125f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151821061266d57838181518110612638577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015182604051602001612652929190614962565b604051602081830303815290604052805190602001206126d7565b818482815181106126a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040516020016126c0929190614962565b604051602081830303815290604052805190602001205b915080806126e49061527d565b9150506125af565b50600f54811491505092915050565b6000601060009054906101000a900460ff16801561271b57504260115411155b905090565b6060600073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bc90614d45565b60405180910390fd5b60006127d083613573565b60016040516020016127e4939291906149a5565b6040516020818303038152906040529050919050565b612802612914565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286990614bc5565b60405180910390fd5b61287b81613311565b50565b60005b81518110156128e8576128d584848484815181106128c8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516113ed565b80806128e09061527d565b915050612881565b50505050565b6128f6612914565b8060168190555050565b612908612914565b612911816137d3565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299b90614d25565b60405180910390fd5b565b80600790805190602001906129bc9291906139f6565b5050565b8173ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b075781600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b5050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090614d85565b60405180910390fd5b565b601060009054906101000a900460ff168015612b9957504260115411155b612bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcf90614da5565b60405180910390fd5b565b80600854612be8919061501b565b6017541015612c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2390614e45565b60405180910390fd5b60006001600854612c3d919061501b565b905060005b82811015612c7257612c5f848284612c5a919061501b565b6137dd565b8080612c6a9061527d565b915050612c42565b508160086000828254612c85919061501b565b92505081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2c90614ce5565b60405180910390fd5b60006009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e055750600b600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80612e965750600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b91505092915050565b6009600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3790614b45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790614e25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613023576130226000826129c0565b5b816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906130c5906151f0565b9190505550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061311a9061527d565b9190505550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b601460009054906101000a900460ff16801561319d57504260155411155b6131dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d390614dc5565b60405180910390fd5b565b80600690805190602001906131f49291906139f6565b5050565b81601260006101000a81548160ff021916908315150217905550806013819055505050565b81601060006101000a81548160ff021916908315150217905550806011819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156132b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a990614c65565b60405180910390fd5b6001600360146101000a81548160ff02191690831515021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600f8190555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344790614de5565b60405180910390fd5b80600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516135419190614ac6565b60405180910390a3505050565b81601460006101000a81548160ff021916908315150217905550806015819055505050565b606060008214156135bb576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061371a565b600082905060005b600082146135ed5780806135d69061527d565b915050600a826135e69190615071565b91506135c3565b60008167ffffffffffffffff81111561362f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156136615781602001600182028036833780820191505090505b5090505b60008514613713578180613678906151f0565b925050600a8561368891906152f4565b6030613694919061501b565b60f81b8183815181106136d0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561370c9190615071565b9450613665565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561378f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378690614e65565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b80600e8190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561384d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384490614cc5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146138ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e690614d65565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061393f9061527d565b9190505550816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613a029061521a565b90600052602060002090601f016020900481019282613a245760008555613a6b565b82601f10613a3d57805160ff1916838001178555613a6b565b82800160010185558215613a6b579182015b82811115613a6a578251825591602001919060010190613a4f565b5b509050613a789190613a7c565b5090565b5b80821115613a95576000816000905550600101613a7d565b5090565b6000613aac613aa784614ec5565b614ea0565b90508083825260208201905082856020860282011115613acb57600080fd5b60005b85811015613afb5781613ae18882613d49565b845260208401935060208301925050600181019050613ace565b5050509392505050565b6000613b18613b1384614ef1565b614ea0565b90508083825260208201905082856020860282011115613b3757600080fd5b60005b85811015613b675781613b4d8882613e26565b845260208401935060208301925050600181019050613b3a565b5050509392505050565b6000613b84613b7f84614f1d565b614ea0565b905082815260208101848484011115613b9c57600080fd5b613ba78482856151ae565b509392505050565b6000613bc2613bbd84614f4e565b614ea0565b905082815260208101848484011115613bda57600080fd5b613be58482856151ae565b509392505050565b600081359050613bfc81615b4a565b92915050565b60008083601f840112613c1457600080fd5b8235905067ffffffffffffffff811115613c2d57600080fd5b602083019150836020820283011115613c4557600080fd5b9250929050565b60008083601f840112613c5e57600080fd5b8235905067ffffffffffffffff811115613c7757600080fd5b602083019150836020820283011115613c8f57600080fd5b9250929050565b600082601f830112613ca757600080fd5b8135613cb7848260208601613a99565b91505092915050565b60008083601f840112613cd257600080fd5b8235905067ffffffffffffffff811115613ceb57600080fd5b602083019150836020820283011115613d0357600080fd5b9250929050565b600082601f830112613d1b57600080fd5b8135613d2b848260208601613b05565b91505092915050565b600081359050613d4381615b61565b92915050565b600081359050613d5881615b78565b92915050565b600081359050613d6d81615b8f565b92915050565b600081519050613d8281615b8f565b92915050565b600082601f830112613d9957600080fd5b8135613da9848260208601613b71565b91505092915050565b60008083601f840112613dc457600080fd5b8235905067ffffffffffffffff811115613ddd57600080fd5b602083019150836001820283011115613df557600080fd5b9250929050565b600082601f830112613e0d57600080fd5b8135613e1d848260208601613baf565b91505092915050565b600081359050613e3581615ba6565b92915050565b600060208284031215613e4d57600080fd5b6000613e5b84828501613bed565b91505092915050565b60008060408385031215613e7757600080fd5b6000613e8585828601613bed565b9250506020613e9685828601613bed565b9150509250929050565b600080600060608486031215613eb557600080fd5b6000613ec386828701613bed565b9350506020613ed486828701613bed565b925050604084013567ffffffffffffffff811115613ef157600080fd5b613efd86828701613d0a565b9150509250925092565b60008060008060808587031215613f1d57600080fd5b6000613f2b87828801613bed565b9450506020613f3c87828801613bed565b935050604085013567ffffffffffffffff811115613f5957600080fd5b613f6587828801613d0a565b925050606085013567ffffffffffffffff811115613f8257600080fd5b613f8e87828801613d88565b91505092959194509250565b600080600060608486031215613faf57600080fd5b6000613fbd86828701613bed565b9350506020613fce86828701613bed565b9250506040613fdf86828701613e26565b9150509250925092565b60008060008060808587031215613fff57600080fd5b600061400d87828801613bed565b945050602061401e87828801613bed565b935050604061402f87828801613e26565b925050606085013567ffffffffffffffff81111561404c57600080fd5b61405887828801613d88565b91505092959194509250565b6000806040838503121561407757600080fd5b600061408585828601613bed565b925050602083013567ffffffffffffffff8111156140a257600080fd5b6140ae85828601613c96565b9150509250929050565b600080604083850312156140cb57600080fd5b60006140d985828601613bed565b92505060206140ea85828601613d34565b9150509250929050565b6000806040838503121561410757600080fd5b600061411585828601613bed565b925050602061412685828601613e26565b9150509250929050565b6000806000806040858703121561414657600080fd5b600085013567ffffffffffffffff81111561416057600080fd5b61416c87828801613c02565b9450945050602085013567ffffffffffffffff81111561418b57600080fd5b61419787828801613cc0565b925092505092959194509250565b6000806000604084860312156141ba57600080fd5b600084013567ffffffffffffffff8111156141d457600080fd5b6141e086828701613c4c565b935093505060206141f386828701613e26565b9150509250925092565b6000806040838503121561421057600080fd5b600061421e85828601613d34565b925050602061422f85828601613e26565b9150509250929050565b60006020828403121561424b57600080fd5b600061425984828501613d49565b91505092915050565b60006020828403121561427457600080fd5b600061428284828501613d5e565b91505092915050565b60006020828403121561429d57600080fd5b60006142ab84828501613d73565b91505092915050565b600080602083850312156142c757600080fd5b600083013567ffffffffffffffff8111156142e157600080fd5b6142ed85828601613db2565b92509250509250929050565b60006020828403121561430b57600080fd5b600082013567ffffffffffffffff81111561432557600080fd5b61433184828501613dfc565b91505092915050565b60006020828403121561434c57600080fd5b600061435a84828501613e26565b91505092915050565b600061436f8383614929565b60208301905092915050565b61438481615130565b82525050565b61439b61439682615130565b6152c6565b82525050565b60006143ac82614fa4565b6143b68185614fd2565b93506143c183614f7f565b8060005b838110156143f25781516143d98882614363565b97506143e483614fc5565b9250506001810190506143c5565b5085935050505092915050565b61440881615142565b82525050565b61441f61441a8261514e565b6152d8565b82525050565b600061443082614faf565b61443a8185614fe3565b935061444a8185602086016151bd565b614453816153e1565b840191505092915050565b600061446982614faf565b6144738185614ff4565b93506144838185602086016151bd565b80840191505092915050565b600061449a82614fba565b6144a48185614fff565b93506144b48185602086016151bd565b6144bd816153e1565b840191505092915050565b60006144d382614fba565b6144dd8185615010565b93506144ed8185602086016151bd565b80840191505092915050565b600081546145068161521a565b6145108186615010565b9450600182166000811461452b576001811461453c5761456f565b60ff1983168652818601935061456f565b61454585614f8f565b60005b8381101561456757815481890152600182019150602081019050614548565b838801955050505b50505092915050565b6000614585602483614fff565b9150614590826153ff565b604082019050919050565b60006145a8603183614fff565b91506145b38261544e565b604082019050919050565b60006145cb603183614fff565b91506145d68261549d565b604082019050919050565b60006145ee602383614fff565b91506145f9826154ec565b604082019050919050565b6000614611601883614fff565b915061461c8261553b565b602082019050919050565b6000614634602783614fff565b915061463f82615564565b604082019050919050565b6000614657603583614fff565b9150614662826155b3565b604082019050919050565b600061467a603383614fff565b915061468582615602565b604082019050919050565b600061469d602683614fff565b91506146a882615651565b604082019050919050565b60006146c0602983614fff565b91506146cb826156a0565b604082019050919050565b60006146e3602383614fff565b91506146ee826156ef565b604082019050919050565b6000614706601383614fff565b91506147118261573e565b602082019050919050565b6000614729601783614fff565b915061473482615767565b602082019050919050565b600061474c602583614fff565b915061475782615790565b604082019050919050565b600061476f603483614fff565b915061477a826157df565b604082019050919050565b6000614792602b83614fff565b915061479d8261582e565b604082019050919050565b60006147b5602083614fff565b91506147c08261587d565b602082019050919050565b60006147d8602e83614fff565b91506147e3826158a6565b604082019050919050565b60006147fb602e83614fff565b9150614806826158f5565b604082019050919050565b600061481e601383614fff565b915061482982615944565b602082019050919050565b6000614841602283614fff565b915061484c8261596d565b604082019050919050565b6000614864601f83614fff565b915061486f826159bc565b602082019050919050565b6000614887603d83614fff565b9150614892826159e5565b604082019050919050565b60006148aa602a83614fff565b91506148b582615a34565b604082019050919050565b60006148cd602e83614fff565b91506148d882615a83565b604082019050919050565b60006148f0602083614fff565b91506148fb82615ad2565b602082019050919050565b6000614913602a83614fff565b915061491e82615afb565b604082019050919050565b614932816151a4565b82525050565b614941816151a4565b82525050565b6000614953828461438a565b60148201915081905092915050565b600061496e828561440e565b60208201915061497e828461440e565b6020820191508190509392505050565b600061499a828461445e565b915081905092915050565b60006149b182866144f9565b91506149bd82856144c8565b91506149c982846144f9565b9150819050949350505050565b60006020820190506149eb600083018461437b565b92915050565b6000608082019050614a06600083018761437b565b614a13602083018661437b565b614a206040830185614938565b8181036060830152614a328184614425565b905095945050505050565b6000604082019050614a52600083018561437b565b8181036020830152614a648184614425565b90509392505050565b6000606082019050614a82600083018661437b565b614a8f6020830185614938565b614a9c604083018461437b565b949350505050565b60006020820190508181036000830152614abe81846143a1565b905092915050565b6000602082019050614adb60008301846143ff565b92915050565b60006020820190508181036000830152614afb8184614425565b905092915050565b60006020820190508181036000830152614b1d818461448f565b905092915050565b60006020820190508181036000830152614b3e81614578565b9050919050565b60006020820190508181036000830152614b5e8161459b565b9050919050565b60006020820190508181036000830152614b7e816145be565b9050919050565b60006020820190508181036000830152614b9e816145e1565b9050919050565b60006020820190508181036000830152614bbe81614604565b9050919050565b60006020820190508181036000830152614bde81614627565b9050919050565b60006020820190508181036000830152614bfe8161464a565b9050919050565b60006020820190508181036000830152614c1e8161466d565b9050919050565b60006020820190508181036000830152614c3e81614690565b9050919050565b60006020820190508181036000830152614c5e816146b3565b9050919050565b60006020820190508181036000830152614c7e816146d6565b9050919050565b60006020820190508181036000830152614c9e816146f9565b9050919050565b60006020820190508181036000830152614cbe8161471c565b9050919050565b60006020820190508181036000830152614cde8161473f565b9050919050565b60006020820190508181036000830152614cfe81614762565b9050919050565b60006020820190508181036000830152614d1e81614785565b9050919050565b60006020820190508181036000830152614d3e816147a8565b9050919050565b60006020820190508181036000830152614d5e816147cb565b9050919050565b60006020820190508181036000830152614d7e816147ee565b9050919050565b60006020820190508181036000830152614d9e81614811565b9050919050565b60006020820190508181036000830152614dbe81614834565b9050919050565b60006020820190508181036000830152614dde81614857565b9050919050565b60006020820190508181036000830152614dfe8161487a565b9050919050565b60006020820190508181036000830152614e1e8161489d565b9050919050565b60006020820190508181036000830152614e3e816148c0565b9050919050565b60006020820190508181036000830152614e5e816148e3565b9050919050565b60006020820190508181036000830152614e7e81614906565b9050919050565b6000602082019050614e9a6000830184614938565b92915050565b6000614eaa614ebb565b9050614eb6828261524c565b919050565b6000604051905090565b600067ffffffffffffffff821115614ee057614edf6153b2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f0c57614f0b6153b2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f3857614f376153b2565b5b614f41826153e1565b9050602081019050919050565b600067ffffffffffffffff821115614f6957614f686153b2565b5b614f72826153e1565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615026826151a4565b9150615031836151a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561506657615065615325565b5b828201905092915050565b600061507c826151a4565b9150615087836151a4565b92508261509757615096615354565b5b828204905092915050565b60006150ad826151a4565b91506150b8836151a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150f1576150f0615325565b5b828202905092915050565b6000615107826151a4565b9150615112836151a4565b92508282101561512557615124615325565b5b828203905092915050565b600061513b82615184565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156151db5780820151818401526020810190506151c0565b838111156151ea576000848401525b50505050565b60006151fb826151a4565b9150600082141561520f5761520e615325565b5b600182039050919050565b6000600282049050600182168061523257607f821691505b6020821081141561524657615245615383565b5b50919050565b615255826153e1565b810181811067ffffffffffffffff82111715615274576152736153b2565b5b80604052505050565b6000615288826151a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152bb576152ba615325565b5b600182019050919050565b60006152d1826152e2565b9050919050565b6000819050919050565b60006152ed826153f2565b9050919050565b60006152ff826151a4565b915061530a836151a4565b92508261531a57615319615354565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f596f7520646f6e2774206861766520656e6f756768207761786c697374206d6960008201527f6e74732100000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231433a205f7472616e736665722829205472616e73666572204e6f60008201527f74204f776e6572206f6620546f6b656e21000000000000000000000000000000602082015250565b7f596f752068617665206e6f7420776f6e2061207075626c696320726166666c6560008201527f206d696e7420616c6c6f636174696f6e21000000000000000000000000000000602082015250565b7f596f7520646f6e2774206861766520656e6f756768205075626c6963204d696e60008201527f7473210000000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420616c6c6f776c6973746564210000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573732100000000000000000000000000000000000000000000000000602082015250565b7f455243373231433a20736166655472616e7366657246726f6d282920746f5f2060008201527f6e6f742045524337323152656365697661626c65210000000000000000000000602082015250565b7f455243373231433a207472616e7366657246726f6d2829205f6973417070726f60008201527f7665644f724f776e6572203d2066616c73652100000000000000000000000000602082015250565b7f455243373231433a2043616c6c6572206e6f74206f776e6572206f722041707060008201527f726f766564210000000000000000000000000000000000000000000000000000602082015250565b7f455243373231433a20746f6b656e555249282920546f6b656e20646f6573206e60008201527f6f74206578697374210000000000000000000000000000000000000000000000602082015250565b7f455243436f6c6f7261626c65773a20496e76616c69642053746174652053656e60008201527f6465720000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642076616c75652073656e742100000000000000000000000000600082015250565b7f4172726179206c656e67746873206d69736d6174636821000000000000000000600082015250565b7f455243373231433a205f6d696e742829204d696e7420746f205a65726f20416460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231433a205f6973417070726f7665644f724f776e65722829204f7760008201527f6e6572206973205a65726f204164647265737321000000000000000000000000602082015250565b7f455243373231433a20617070726f766528292043616e6e6f7420617070726f7660008201527f6520796f757273656c6621000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243373231433a20746f6b656e5472616974555249282920546f6b656e206460008201527f6f6573206e6f7420657869737421000000000000000000000000000000000000602082015250565b7f455243373231433a205f6d696e74282920546f6b656e20746f204d696e74204160008201527f6c72656164792045786973747321000000000000000000000000000000000000602082015250565b7f4e6f20536d61727420436f6e7472616374732100000000000000000000000000600082015250565b7f416c6c6f776c697374204d696e74206973206e6f7420656e61626c656420796560008201527f7421000000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963204d696e74206973206e6f7420656e61626c6564207965742100600082015250565b7f455243373231433a205f736574417070726f76616c466f72416c6c2829204f7760008201527f6e6572206d757374206e6f7420626520746865204f70657261746f7221000000602082015250565b7f596f7520646f6e2774206861766520656e6f756768207075626c69632072616660008201527f666c65206d696e74732100000000000000000000000000000000000000000000602082015250565b7f455243373231433a205f7472616e736665722829205472616e7366657220746f60008201527f205a65726f204164647265737321000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820437261797a696c6c61732072656d61696e696e6721600082015250565b7f455243436f6c6f7261626c653a20496e76616c6964206368696c64207374617460008201527f6520726563656976657200000000000000000000000000000000000000000000602082015250565b615b5381615130565b8114615b5e57600080fd5b50565b615b6a81615142565b8114615b7557600080fd5b50565b615b818161514e565b8114615b8c57600080fd5b50565b615b9881615158565b8114615ba357600080fd5b50565b615baf816151a4565b8114615bba57600080fd5b5056fea264697066735822122018fec23a0b349adbe343a45f3aa7cd88bbff864a77b4ef8b807f81045c9a8fe764736f6c63430008040033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.