ETH Price: $1,980.19 (-4.98%)

Contract

0x496299d8497A02b01f5Bc355298b0a831f06c522
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve244604502026-02-15 6:36:2319 days ago1771137383IN
Ascended NFT: ASCENDED Token
0 ETH0.000001890.07
Set Approval For...244602282026-02-15 5:51:5919 days ago1771134719IN
Ascended NFT: ASCENDED Token
0 ETH0.000001540.03348497
Set Approval For...244601952026-02-15 5:45:1119 days ago1771134311IN
Ascended NFT: ASCENDED Token
0 ETH0.000001410.03054932
Set Approval For...244251072026-02-10 8:13:3524 days ago1770711215IN
Ascended NFT: ASCENDED Token
0 ETH0.000003470.0752494
Set Approval For...244243722026-02-10 5:45:4724 days ago1770702347IN
Ascended NFT: ASCENDED Token
0 ETH0.000002310.05
Set Approval For...243803122026-02-04 1:49:5931 days ago1770169799IN
Ascended NFT: ASCENDED Token
0 ETH0.000005220.21435016
Transfer From243603872026-02-01 7:01:3533 days ago1769929295IN
Ascended NFT: ASCENDED Token
0 ETH0.000118542.06714111
Set Approval For...243595392026-02-01 4:10:2333 days ago1769919023IN
Ascended NFT: ASCENDED Token
0 ETH0.000002180.089444
Set Approval For...243595142026-02-01 4:05:2333 days ago1769918723IN
Ascended NFT: ASCENDED Token
0 ETH0.000001940.0799315
Set Approval For...242945472026-01-23 2:36:4742 days ago1769135807IN
Ascended NFT: ASCENDED Token
0 ETH0.000001110.04553713
Set Approval For...242576602026-01-17 23:09:4748 days ago1768691387IN
Ascended NFT: ASCENDED Token
0 ETH0.000001360.02957043
Set Approval For...242138342026-01-11 20:22:2354 days ago1768162943IN
Ascended NFT: ASCENDED Token
0 ETH0.000049682.03758977
Set Approval For...241357522025-12-31 22:59:4765 days ago1767221987IN
Ascended NFT: ASCENDED Token
0 ETH0.000093772.02940374
Set Approval For...241350792025-12-31 20:44:3565 days ago1767213875IN
Ascended NFT: ASCENDED Token
0 ETH0.000003060.06625859
Set Approval For...241192792025-12-29 15:44:3567 days ago1767023075IN
Ascended NFT: ASCENDED Token
0 ETH0.000095112.05776566
Set Approval For...241156462025-12-29 3:34:4767 days ago1766979287IN
Ascended NFT: ASCENDED Token
0 ETH0.000094182.03820408
Set Approval For...241028862025-12-27 8:51:4769 days ago1766825507IN
Ascended NFT: ASCENDED Token
0 ETH0.000049372.02504775
Set Approval For...239980782025-12-12 17:38:2384 days ago1765561103IN
Ascended NFT: ASCENDED Token
0 ETH0.000053872.04119753
Set Approval For...239980772025-12-12 17:38:1184 days ago1765561091IN
Ascended NFT: ASCENDED Token
0 ETH0.000094452.04041259
Set Approval For...239895532025-12-11 12:51:5985 days ago1765457519IN
Ascended NFT: ASCENDED Token
0 ETH0.000103492.23963574
Safe Transfer Fr...239863412025-12-11 2:04:1185 days ago1765418651IN
Ascended NFT: ASCENDED Token
0 ETH0.000130292.13824576
Set Approval For...239551492025-12-06 16:55:3590 days ago1765040135IN
Ascended NFT: ASCENDED Token
0 ETH0.000002750.11307973
Set Approval For...238962442025-11-28 9:20:4798 days ago1764321647IN
Ascended NFT: ASCENDED Token
0 ETH0.000001990.04312124
Set Approval For...238918112025-11-27 18:25:1199 days ago1764267911IN
Ascended NFT: ASCENDED Token
0 ETH0.000002370.05139664
Set Approval For...238118482025-11-16 12:48:35110 days ago1763297315IN
Ascended NFT: ASCENDED Token
0 ETH0.000007870.1703814
View all transactions

Latest 15 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
-140886712022-01-27 16:07:511499 days ago1643299671
Ascended NFT: ASCENDED Token
147.44 ETH
-140886712022-01-27 16:07:511499 days ago1643299671
Ascended NFT: ASCENDED Token
194.6208 ETH
-140886712022-01-27 16:07:511499 days ago1643299671
Ascended NFT: ASCENDED Token
247.6992 ETH
-140845672022-01-27 0:53:381500 days ago1643244818
Ascended NFT: ASCENDED Token
0.86 ETH
-140845672022-01-27 0:53:381500 days ago1643244818
Ascended NFT: ASCENDED Token
1.1352 ETH
-140845672022-01-27 0:53:381500 days ago1643244818
Ascended NFT: ASCENDED Token
1.4448 ETH
-140334232022-01-19 2:57:411507 days ago1642561061
Ascended NFT: ASCENDED Token
0.38 ETH
-140334232022-01-19 2:57:411507 days ago1642561061
Ascended NFT: ASCENDED Token
0.5016 ETH
-140334232022-01-19 2:57:411507 days ago1642561061
Ascended NFT: ASCENDED Token
0.6384 ETH
-140204692022-01-17 2:58:371509 days ago1642388317
Ascended NFT: ASCENDED Token
29.08 ETH
-140204692022-01-17 2:58:371509 days ago1642388317
Ascended NFT: ASCENDED Token
38.3856 ETH
-140204692022-01-17 2:58:371509 days ago1642388317
Ascended NFT: ASCENDED Token
48.8544 ETH
-139975352022-01-13 13:55:411513 days ago1642082141
Ascended NFT: ASCENDED Token
0.025 ETH
-139975352022-01-13 13:55:411513 days ago1642082141
Ascended NFT: ASCENDED Token
0.033 ETH
-139975352022-01-13 13:55:411513 days ago1642082141
Ascended NFT: ASCENDED Token
0.042 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AscendedNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

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

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

/* ERC721I - ERC721I (ERC721 0xInuarashi Edition) - Gas Optimized
    Author: 0xInuarashi || https://twitter.com/0xinuarashi 
    Open Source: with the efforts of the [0x Collective] <3 */

contract ERC721I {

    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 Mint(address indexed to, uint256 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), "ERC721I: _mint() Mint to Zero Address");
        require(ownerOf[tokenId_] == address(0x0), "ERC721I: _mint() Token to Mint Already Exists!");

        // ERC721I Starts Here
        balanceOf[to_]++;
        ownerOf[tokenId_] = to_;

        // totalSupply++; // I removed this for a bit better gas management on multi-mints ~ 0xInuarashi
        
        // ERC721I Ends Here

        emit Transfer(address(0x0), to_, tokenId_);
        
        // emit Mint(to_, tokenId_); // I removed this for a bit better gas management on multi-mints ~ 0xInuarashi
    }

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

        // ERC721I Starts Here
        // 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_]++;
        // ERC721I Ends Here

        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_, "ERC721I: _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), "ERC721I: _isApprovedOrOwner() Owner is Zero Address!");
        address _owner = ownerOf[tokenId_];
        return (spender_ == _owner || spender_ == getApproved[tokenId_] || isApprovedForAll[_owner][spender_]);
    }
    function _exists(uint256 tokenId_) internal view virtual returns (bool) {
        return ownerOf[tokenId_] != address(0x0);
    }

    // // public write functions
    function approve(address to_, uint256 tokenId_) public virtual {
        address _owner = ownerOf[tokenId_];
        require(to_ != _owner, "ERC721I: approve() Cannot approve yourself!");
        require(msg.sender == _owner || isApprovedForAll[_owner][msg.sender], "ERC721I: 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_), "ERC721I: transferFrom() _isApprovedOrOwner = false!");
        _transfer(from_, to_, tokenId_);
    }
    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, "ERC721I: 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), "ERC721I: tokenURI() Token does not exist!");
        return string(abi.encodePacked(baseTokenURI, _toString(tokenId_), baseTokenURI_EXT));
    }
    // // public view functions
    // never use these for functions ever, they are expensive af and for view only (this will be an issue in the future for interfaces)
    function walletOfOwner(address address_) public virtual view 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;
    }

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

abstract contract Ownable {
    address public owner;
    event OwnershipTransferred(address indexed oldOwner_, address indexed newOwner_);
    constructor() { owner = msg.sender; }
    modifier onlyOwner {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    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 MerkleWhitelist {
    bytes32 internal _merkleRoot;
    function _setMerkleRoot(bytes32 merkleRoot_) internal virtual {
        _merkleRoot = merkleRoot_;
    }
    function isWhitelisted(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 == _merkleRoot;
    }
}

abstract contract Security {
    // Prevent Smart Contracts
    modifier onlySender {
        require(msg.sender == tx.origin, "No Smart Contracts!"); _; }
}

abstract contract PublicMint {
    // Public Minting
    bool public _publicMintEnabled; uint256 public _publicMintTime;
    function _setPublicMint(bool bool_, uint256 time_) internal {
        _publicMintEnabled = bool_; _publicMintTime = time_; }
    modifier publicMintEnabled { 
        require(_publicMintEnabled && _publicMintTime <= block.timestamp, 
            "Public Mint is not enabled yet!"); _; }
    function publicMintStatus() external view returns (bool) {
        return _publicMintEnabled && _publicMintTime <= block.timestamp; }
}

abstract contract WhitelistMint {
    // Whitelist Minting
    bool internal _whitelistMintEnabled; uint256 public _whitelistMintTime;
    function _setWhitelistMint(bool bool_, uint256 time_) internal {
        _whitelistMintEnabled = bool_; _whitelistMintTime = time_; }
    modifier whitelistMintEnabled {
        require(_whitelistMintEnabled && _whitelistMintTime <= block.timestamp, 
            "Whitelist Mint is not enabled yet!"); _; } 
    function whitelistMintStatus() external view returns (bool) {
        return _whitelistMintEnabled && _whitelistMintTime <= block.timestamp; }
}


// Open0x Presets //
// ERC721I_OW (ERC721I 0xInuarashi Edition, Ownable, Whitelist) 

abstract contract ERC721I_OW is ERC721I, Ownable, MerkleWhitelist, Security, PublicMint, WhitelistMint {

    constructor(string memory name_, string memory symbol_) ERC721I(name_, symbol_) {}

    // Ownable Functions for ERC721I_OW //
    
    // Token URI
    function setBaseTokenURI(string calldata uri_) external onlyOwner { 
        _setBaseTokenURI(uri_);
    }
    function setBaseTokenURI_EXT(string calldata ext_) external onlyOwner {
        _setBaseTokenURI_EXT(ext_);
    }

    // MerkleRoot
    function setMerkleRoot(bytes32 merkleRoot_) external onlyOwner {
        _setMerkleRoot(merkleRoot_);
    }

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

}

abstract contract PayableGovernance is Ownable {
    // Special Access
    address _payableGovernanceSetter;
    constructor() payable { _payableGovernanceSetter = msg.sender; }
    modifier onlyPayableGovernanceSetter {
        require(msg.sender == _payableGovernanceSetter, "PayableGovernance: Caller is not Setter!"); _; }
    function reouncePayableGovernancePermissions() public onlyPayableGovernanceSetter {
        _payableGovernanceSetter = address(0x0); }

    // Receivable Fallback
    event Received(address from, uint amount);
    receive() external payable { emit Received(msg.sender, msg.value); }

    // Required Variables
    address payable[] internal _payableGovernanceAddresses;
    uint256[] internal _payableGovernanceShares;    
    mapping(address => bool) public addressToEmergencyUnlocked;

    // Withdraw Functionality
    function _withdraw(address payable address_, uint256 amount_) internal {
        (bool success, ) = payable(address_).call{value: amount_}("");
        require(success, "Transfer failed");
    }

    // Governance Functions
    function setPayableGovernanceShareholders(address payable[] memory addresses_, uint256[] memory shares_) public onlyPayableGovernanceSetter {
        require(_payableGovernanceAddresses.length == 0 && _payableGovernanceShares.length == 0, "Payable Governance already set! To set again, reset first!");
        require(addresses_.length == shares_.length, "Address and Shares length mismatch!");
        uint256 _totalShares;
        for (uint256 i = 0; i < addresses_.length; i++) {
            _totalShares += shares_[i];
            _payableGovernanceAddresses.push(addresses_[i]);
            _payableGovernanceShares.push(shares_[i]);
        }
        require(_totalShares == 1000, "Total Shares is not 1000!");
    }
    function resetPayableGovernanceShareholders() public onlyPayableGovernanceSetter {
        while (_payableGovernanceAddresses.length != 0) {
            _payableGovernanceAddresses.pop(); }
        while (_payableGovernanceShares.length != 0) {
            _payableGovernanceShares.pop(); }
    }

    // Governance View Functions
    function balance() public view returns (uint256) {
        return address(this).balance;
    }
    function payableGovernanceAddresses() public view returns (address payable[] memory) {
        return _payableGovernanceAddresses;
    }
    function payableGovernanceShares() public view returns (uint256[] memory) {
        return _payableGovernanceShares;
    }

    // Withdraw Functions
    function withdrawEther() public onlyOwner {
        // require that there has been payable governance set.
        require(_payableGovernanceAddresses.length > 0 && _payableGovernanceShares.length > 0, "Payable governance not set yet!");
         // this should never happen
        require(_payableGovernanceAddresses.length == _payableGovernanceShares.length, "Payable governance length mismatch!");
        
        // now, we check that the governance shares equal to 1000.
        uint256 _totalPayableShares;
        for (uint256 i = 0; i < _payableGovernanceShares.length; i++) {
            _totalPayableShares += _payableGovernanceShares[i]; }
        require(_totalPayableShares == 1000, "Payable Governance Shares is not 1000!");
        
        // // now, we start the withdrawal process if all conditionals pass
        // store current balance in local memory
        uint256 _totalETH = address(this).balance; 

        // withdraw loop for payable governance
        for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
            uint256 _ethToWithdraw = ((_totalETH * _payableGovernanceShares[i]) / 1000);
            _withdraw(_payableGovernanceAddresses[i], _ethToWithdraw);
        }
    }

    function viewWithdrawAmounts() public view onlyOwner returns (uint256[] memory) {
        // require that there has been payable governance set.
        require(_payableGovernanceAddresses.length > 0 && _payableGovernanceShares.length > 0, "Payable governance not set yet!");
         // this should never happen
        require(_payableGovernanceAddresses.length == _payableGovernanceShares.length, "Payable governance length mismatch!");
        
        // now, we check that the governance shares equal to 1000.
        uint256 _totalPayableShares;
        for (uint256 i = 0; i < _payableGovernanceShares.length; i++) {
            _totalPayableShares += _payableGovernanceShares[i]; }
        require(_totalPayableShares == 1000, "Payable Governance Shares is not 1000!");
        
        // // now, we start the array creation process if all conditionals pass
        // store current balance in local memory and instantiate array for input
        uint256 _totalETH = address(this).balance; 
        uint256[] memory _withdrawals = new uint256[] (_payableGovernanceAddresses.length + 2);

        // array creation loop for payable governance values 
        for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
            _withdrawals[i] = ( (_totalETH * _payableGovernanceShares[i]) / 1000 );
        }
        
        // push two last array spots as total eth and added eths of withdrawals
        _withdrawals[_payableGovernanceAddresses.length] = _totalETH;
        for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
            _withdrawals[_payableGovernanceAddresses.length + 1] += _withdrawals[i]; }

        // return the final array data
        return _withdrawals;
    }

    // Shareholder Governance
    modifier onlyShareholder {
        bool _isShareholder;
        for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
            if (msg.sender == _payableGovernanceAddresses[i]) {
                _isShareholder = true;
            }
        }
        require(_isShareholder, "You are not a shareholder!");
        _;
    }
    function unlockEmergencyFunctionsAsShareholder() public onlyShareholder {
        addressToEmergencyUnlocked[msg.sender] = true;
    }

    // Emergency Functions
    modifier onlyEmergency {
        for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
            require(addressToEmergencyUnlocked[_payableGovernanceAddresses[i]], "Emergency Functions are not unlocked!");
        }
        _;
    }
    function emergencyWithdrawEther() public onlyOwner onlyEmergency {
        _withdraw(payable(msg.sender), address(this).balance);
    }
}

interface iYield {
    function updateRewardOnTransfer(address from_, address to_, uint256 tokenId_) external;
}

contract AscendedNFT is ERC721I_OW, PayableGovernance {
    constructor() payable ERC721I_OW("Ascended NFT", "ASCENDED") {}

    // Project Contraints
    uint256 public mintPrice = 0.08 ether;
    uint256 public maxTokens = 8888;

    uint256 public maxMintsPerWl = 4;
    mapping(address => uint256) public addressToWlMints;

    uint256 public maxMintsPerTx = 10;

    function setMintPrice(uint256 mintPrice_) external onlyOwner {
        mintPrice = mintPrice_;
    }
    function setMaxtokens(uint256 maxTokens_) external onlyOwner {
        require(totalSupply >= maxTokens_, "Below totalSupply");
        maxTokens = maxTokens_;
    }

    // Setting Future-Proof Token Yield
    iYield public Yield;
    function setYieldToken(address address_) external onlyOwner {
        Yield = iYield(address_);
    }

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

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

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

    // Owner Mint Functions
    function ownerMint(address to_, uint256 amount_) external onlyOwner {
        _mintMany(to_, amount_);
    }
    function ownerMintToMany(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]);
        }
    }

    // Whitelist Mint Functions
    function whitelistMint(bytes32[] calldata proof_, uint256 amount_) external payable 
    onlySender whitelistMintEnabled {
        require(isWhitelisted(msg.sender, proof_), 
            "You are not Whitelisted!");
        require(maxMintsPerWl >= addressToWlMints[msg.sender] + amount_,
            "Over Max Mints per TX or Not enough whitelist mints remaining for you!");
        require(msg.value == mintPrice * amount_,   
            "Invalid value sent!");
        
        // Add address to WL minted
        addressToWlMints[msg.sender] += amount_;

        _mintMany(msg.sender, amount_);
    }

    // Public Mint Functions
    function publicMint(uint256 amount_) external payable onlySender publicMintEnabled {
        require(maxMintsPerTx >= amount_,
            "Over maxmimum mints per Tx!");
        require(msg.value == mintPrice * amount_, 
            "Invalid value sent!");

        _mintMany(msg.sender, amount_);
    }

    /////////////////////////////////////////////////////
    // Withdraw Functions handled by PayableGovernance //
    /////////////////////////////////////////////////////

    // Future-Proof Transfer Hook Yield Overrides
    function transferFrom(address from_, address to_, uint256 tokenId_) public 
    override {
        if ( Yield != iYield(address(0x0)) ) {
            Yield.updateRewardOnTransfer(from_, to_, tokenId_);    
        }
        ERC721I.transferFrom(from_, to_, tokenId_);
    }
    function safeTransferFrom(address from_, address to_, uint256 tokenId_, 
    bytes memory data_) public override {
        if ( Yield != iYield(address(0x0)) ) {
            Yield.updateRewardOnTransfer(from_, to_, tokenId_);    
        }
        ERC721I.safeTransferFrom(from_, to_, tokenId_, data_);
    }
}

Contract Security Audit

Contract ABI

API
[{"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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Mint","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":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Received","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":"Yield","outputs":[{"internalType":"contract iYield","name":"","type":"address"}],"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":[],"name":"_whitelistMintTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToEmergencyUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToWlMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"emergencyWithdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerWl","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokens","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":"to_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos_","type":"address[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"ownerMintToMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payableGovernanceAddresses","outputs":[{"internalType":"address payable[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payableGovernanceShares","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":[],"name":"reouncePayableGovernancePermissions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetPayableGovernanceShareholders","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":"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":"uint256","name":"maxTokens_","type":"uint256"}],"name":"setMaxtokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintPrice_","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"addresses_","type":"address[]"},{"internalType":"uint256[]","name":"shares_","type":"uint256[]"}],"name":"setPayableGovernanceShareholders","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":"bool","name":"bool_","type":"bool"},{"internalType":"uint256","name":"time_","type":"uint256"}],"name":"setWhitelistMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setYieldToken","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":"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":[],"name":"unlockEmergencyFunctionsAsShareholder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewWithdrawAmounts","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelistMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

67011c37937e0800006013556122b86014556004601555600a601755600c60808181526b105cd8d95b9919590813919560a21b60a0908152610100604052600860c0908152671054d0d15391115160c21b60e0529192839183916200006791600091620000ab565b5080516200007d906001906020840190620000ab565b505060098054336001600160a01b03199182168117909255600f80549091169091179055506200018e915050565b828054620000b99062000151565b90600052602060002090601f016020900481019282620000dd576000855562000128565b82601f10620000f857805160ff191683800117855562000128565b8280016001018555821562000128579182015b82811115620001285782518255916020019190600101906200010b565b50620001369291506200013a565b5090565b5b808211156200013657600081556001016200013b565b600181811c908216806200016657607f821691505b602082108114156200018857634e487b7160e01b600052602260045260246000fd5b50919050565b613a02806200019e6000396000f3fe60806040526004361061036f5760003560e01c8063715018a6116101c6578063c7b89336116100f7578063dc92f8f011610095578063e985e9c51161006f578063e985e9c5146109eb578063f2fde38b14610a26578063f487c60214610a46578063f4a0a52814610a6657600080fd5b8063dc92f8f01461099e578063e47fa66e146109b3578063e8315742146109d557600080fd5b8063d311c80d116100d1578063d311c80d14610947578063d66359591461095d578063d9d2b4cd14610973578063dc30158b1461098857600080fd5b8063c7b89336146108e5578063c87b56dd14610912578063cb9fe5861461093257600080fd5b806395d89b4111610164578063a91f88351161013e578063a91f88351461087d578063b69ef8a814610892578063b88d4fde146108a5578063c1f730a4146108c557600080fd5b806395d89b41146108285780639d2087ff1461083d578063a22cb4651461085d57600080fd5b8063861a9a65116101a0578063861a9a65146107b95780638b2998f8146107d95780638bdc048a146107ee5780638da5cb5b1461080857600080fd5b8063715018a61461076f5780637362377b146107845780637cb647591461079957600080fd5b806330176e13116102a05780634959f0f51161023e5780636352211e116102185780636352211e146106d65780636817c76c1461070c5780636e9d287b1461072257806370a082311461074257600080fd5b80634959f0f51461068c578063524c7ff8146106a15780635a23dd99146106b657600080fd5b806340f480e71161027a57806340f480e71461060957806342842e0e1461061f578063438b63001461063f578063484b973c1461066c57600080fd5b806330176e13146105a957806339e96c7b146105c95780633a3473b6146105e957600080fd5b806323af31261161030d57806326202370116102e7578063262023701461054e5780632904e6d9146105635780632db11544146105765780632f745c591461058957600080fd5b806323af3126146104de57806323b872dd1461050e57806323ffce851461052e57600080fd5b8063081812fc11610349578063081812fc1461042c578063095ea7b31461047a57806318160ddd1461049a57806319c3fa32146104be57600080fd5b806301ffc9a7146103b357806302ffaed1146103e857806306fdde031461040a57600080fd5b366103ae57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b600080fd5b3480156103bf57600080fd5b506103d36103ce366004613436565b610a86565b60405190151581526020015b60405180910390f35b3480156103f457600080fd5b50610408610403366004613470565b610abd565b005b34801561041657600080fd5b5061041f610b33565b6040516103df91906136b8565b34801561043857600080fd5b5061046261044736600461341d565b6007602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b34801561048657600080fd5b50610408610495366004613257565b610bc1565b3480156104a657600080fd5b506104b060045481565b6040519081526020016103df565b3480156104ca57600080fd5b506104086104d9366004613401565b610ce5565b3480156104ea57600080fd5b506103d36104f9366004612f90565b60126020526000908152604090205460ff1681565b34801561051a57600080fd5b506104086105293660046130d6565b610d26565b34801561053a57600080fd5b50610408610549366004612f90565b610db1565b34801561055a57600080fd5b506103d3610dfd565b6104086105713660046133b6565b610e19565b61040861058436600461341d565b611074565b34801561059557600080fd5b506104b06105a4366004613257565b6111ca565b3480156105b557600080fd5b506104086105c4366004613470565b6111fb565b3480156105d557600080fd5b506104086105e436600461341d565b611264565b3480156105f557600080fd5b5061040861060436600461304e565b6112d9565b34801561061557600080fd5b506104b060155481565b34801561062b57600080fd5b5061040861063a3660046130d6565b611323565b34801561064b57600080fd5b5061065f61065a366004612f90565b61133e565b6040516103df9190613680565b34801561067857600080fd5b50610408610687366004613257565b611475565b34801561069857600080fd5b506104086114a9565b3480156106ad57600080fd5b5061065f611549565b3480156106c257600080fd5b506103d36106d1366004613176565b6117cb565b3480156106e257600080fd5b506104626106f136600461341d565b6005602052600090815260409020546001600160a01b031681565b34801561071857600080fd5b506104b060135481565b34801561072e57600080fd5b5061040861073d3660046132ee565b6118ef565b34801561074e57600080fd5b506104b061075d366004612f90565b60066020526000908152604090205481565b34801561077b57600080fd5b50610408611b15565b34801561079057600080fd5b50610408611b49565b3480156107a557600080fd5b506104086107b436600461341d565b611ced565b3480156107c557600080fd5b50601854610462906001600160a01b031681565b3480156107e557600080fd5b5061065f611d20565b3480156107fa57600080fd5b50600b546103d39060ff1681565b34801561081457600080fd5b50600954610462906001600160a01b031681565b34801561083457600080fd5b5061041f611d78565b34801561084957600080fd5b50610408610858366004613283565b611d85565b34801561086957600080fd5b50610408610878366004613222565b611e63565b34801561088957600080fd5b50610408611e6e565b34801561089e57600080fd5b50476104b0565b3480156108b157600080fd5b506104086108c0366004613117565b611eaa565b3480156108d157600080fd5b506104086108e0366004613401565b611f3c565b3480156108f157600080fd5b506104b0610900366004612f90565b60166020526000908152604090205481565b34801561091e57600080fd5b5061041f61092d36600461341d565b611f7d565b34801561093e57600080fd5b506103d361202b565b34801561095357600080fd5b506104b0600e5481565b34801561096957600080fd5b506104b0600c5481565b34801561097f57600080fd5b50610408612046565b34801561099457600080fd5b506104b060175481565b3480156109aa57600080fd5b50610408612105565b3480156109bf57600080fd5b506109c86121f2565b6040516103df9190613633565b3480156109e157600080fd5b506104b060145481565b3480156109f757600080fd5b506103d3610a06366004612fb4565b600860209081526000928352604080842090915290825290205460ff1681565b348015610a3257600080fd5b50610408610a41366004612f90565b612253565b348015610a5257600080fd5b50610408610a61366004612fed565b6122ec565b348015610a7257600080fd5b50610408610a8136600461341d565b61232e565b60006380ac58cd60e01b6001600160e01b031983161480610ab75750635b5e139f60e01b6001600160e01b03198316145b92915050565b6009546001600160a01b03163314610af05760405162461bcd60e51b8152600401610ae790613756565b60405180910390fd5b610b2f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061235d92505050565b5050565b60008054610b40906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6c906138c9565b8015610bb95780601f10610b8e57610100808354040283529160200191610bb9565b820191906000526020600020905b815481529060010190602001808311610b9c57829003601f168201915b505050505081565b6000818152600560205260409020546001600160a01b03908116908316811415610c415760405162461bcd60e51b815260206004820152602b60248201527f455243373231493a20617070726f766528292043616e6e6f7420617070726f7660448201526a6520796f757273656c662160a81b6064820152608401610ae7565b336001600160a01b0382161480610c7b57506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b610cd65760405162461bcd60e51b815260206004820152602660248201527f455243373231493a2043616c6c6572206e6f74206f776e6572206f7220417070604482015265726f7665642160d01b6064820152608401610ae7565b610ce08383612370565b505050565b6009546001600160a01b03163314610d0f5760405162461bcd60e51b8152600401610ae790613756565b600d805460ff1916831515179055600e8190555050565b6018546001600160a01b031615610da657601854604051635937322960e11b81526001600160a01b0385811660048301528481166024830152604482018490529091169063b26e645290606401600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b505050505b610ce08383836123f8565b6009546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610ae790613756565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600b5460009060ff168015610e14575042600c5411155b905090565b333214610e5e5760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610ae7565b600d5460ff168015610e72575042600e5411155b610ec95760405162461bcd60e51b815260206004820152602260248201527f57686974656c697374204d696e74206973206e6f7420656e61626c6564207965604482015261742160f01b6064820152608401610ae7565b610f06338484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506117cb92505050565b610f525760405162461bcd60e51b815260206004820152601860248201527f596f7520617265206e6f742057686974656c69737465642100000000000000006044820152606401610ae7565b33600090815260166020526040902054610f6d908290613824565b6015541015610ff35760405162461bcd60e51b815260206004820152604660248201527f4f766572204d6178204d696e747320706572205458206f72204e6f7420656e6f60448201527f7567682077686974656c697374206d696e74732072656d61696e696e6720666f6064820152657220796f752160d01b608482015260a401610ae7565b806013546110019190613850565b34146110455760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642076616c75652073656e742160681b6044820152606401610ae7565b3360009081526016602052604081208054839290611064908490613824565b90915550610ce090503382612475565b3332146110b95760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610ae7565b600b5460ff1680156110cd575042600c5411155b6111195760405162461bcd60e51b815260206004820152601f60248201527f5075626c6963204d696e74206973206e6f7420656e61626c65642079657421006044820152606401610ae7565b80601754101561116b5760405162461bcd60e51b815260206004820152601b60248201527f4f766572206d61786d696d756d206d696e7473207065722054782100000000006044820152606401610ae7565b806013546111799190613850565b34146111bd5760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642076616c75652073656e742160681b6044820152606401610ae7565b6111c73382612475565b50565b6000806111d68461133e565b90508083815181106111ea576111ea613975565b602002602001015191505092915050565b6009546001600160a01b031633146112255760405162461bcd60e51b8152600401610ae790613756565b610b2f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061253492505050565b6009546001600160a01b0316331461128e5760405162461bcd60e51b8152600401610ae790613756565b8060045410156112d45760405162461bcd60e51b815260206004820152601160248201527042656c6f7720746f74616c537570706c7960781b6044820152606401610ae7565b601455565b60005b825181101561131c5761130a85858584815181106112fc576112fc613975565b602002602001015185611eaa565b8061131481613904565b9150506112dc565b5050505050565b610ce083838360405180602001604052806000815250611eaa565b6001600160a01b038116600090815260066020526040812054606091816001600160401b038111156113725761137261398b565b60405190808252806020026020018201604052801561139b578160200160208202803683370190505b50600454909150600090815b8181101561146a576000818152600560205260409020546001600160a01b03161580156113f75750836113db60018761386f565b815181106113eb576113eb613975565b60200260200101516000145b1561140a578161140681613904565b9250505b6000818152600560205260409020546001600160a01b0388811691161415611458578084848151811061143f5761143f613975565b60209081029190910101528261145481613904565b9350505b8061146281613904565b9150506113a7565b509195945050505050565b6009546001600160a01b0316331461149f5760405162461bcd60e51b8152600401610ae790613756565b610b2f8282612475565b600f546001600160a01b031633146114d35760405162461bcd60e51b8152600401610ae7906136cb565b601054156115135760108054806114ec576114ec61395f565b600082815260209020810160001990810180546001600160a01b03191690550190556114d3565b6011541561154757601180548061152c5761152c61395f565b60019003818190600052602060002001600090559055611513565b565b6009546060906001600160a01b031633146115765760405162461bcd60e51b8152600401610ae790613756565b60105415801590611588575060115415155b6115d45760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610ae7565b601154601054146115f75760405162461bcd60e51b8152600401610ae790613713565b6000805b601154811015611642576011818154811061161857611618613975565b90600052602060002001548261162e9190613824565b91508061163a81613904565b9150506115fb565b50806103e8146116645760405162461bcd60e51b8152600401610ae79061378b565b6010544790600090611677906002613824565b6001600160401b0381111561168e5761168e61398b565b6040519080825280602002602001820160405280156116b7578160200160208202803683370190505b50905060005b60105481101561172c576103e8601182815481106116dd576116dd613975565b9060005260206000200154846116f39190613850565b6116fd919061383c565b82828151811061170f5761170f613975565b60209081029190910101528061172481613904565b9150506116bd565b50601054815183918391811061174457611744613975565b60200260200101818152505060005b6010548110156117c35781818151811061176f5761176f613975565b602002602001015182601080549050600161178a9190613824565b8151811061179a5761179a613975565b602002602001018181516117ae9190613824565b905250806117bb81613904565b915050611753565b509250505090565b6040516bffffffffffffffffffffffff19606084901b166020820152600090819060340160405160208183030381529060405280519060200120905060005b83518110156118e35783818151811061182557611825613975565b602002602001015182106118835783818151811061184557611845613975565b602002602001015182604051602001611868929190918252602082015260400190565b604051602081830303815290604052805190602001206118cf565b8184828151811061189657611896613975565b60200260200101516040516020016118b8929190918252602082015260400190565b604051602081830303815290604052805190602001205b9150806118db81613904565b91505061180a565b50600a54149392505050565b600f546001600160a01b031633146119195760405162461bcd60e51b8152600401610ae7906136cb565b6010541580156119295750601154155b61199b5760405162461bcd60e51b815260206004820152603a60248201527f50617961626c6520476f7665726e616e636520616c726561647920736574212060448201527f546f2073657420616761696e2c207265736574206669727374210000000000006064820152608401610ae7565b80518251146119f85760405162461bcd60e51b815260206004820152602360248201527f4164647265737320616e6420536861726573206c656e677468206d69736d617460448201526263682160e81b6064820152608401610ae7565b6000805b8351811015611ac357828181518110611a1757611a17613975565b602002602001015182611a2a9190613824565b91506010848281518110611a4057611a40613975565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790558251601190849083908110611a9257611a92613975565b6020908102919091018101518254600181018455600093845291909220015580611abb81613904565b9150506119fc565b50806103e814610ce05760405162461bcd60e51b815260206004820152601960248201527f546f74616c20536861726573206973206e6f74203130303021000000000000006044820152606401610ae7565b6009546001600160a01b03163314611b3f5760405162461bcd60e51b8152600401610ae790613756565b6115476000612547565b6009546001600160a01b03163314611b735760405162461bcd60e51b8152600401610ae790613756565b60105415801590611b85575060115415155b611bd15760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610ae7565b60115460105414611bf45760405162461bcd60e51b8152600401610ae790613713565b6000805b601154811015611c3f5760118181548110611c1557611c15613975565b906000526020600020015482611c2b9190613824565b915080611c3781613904565b915050611bf8565b50806103e814611c615760405162461bcd60e51b8152600401610ae79061378b565b4760005b601054811015610ce05760006103e860118381548110611c8757611c87613975565b906000526020600020015484611c9d9190613850565b611ca7919061383c565b9050611cda60108381548110611cbf57611cbf613975565b6000918252602090912001546001600160a01b031682612599565b5080611ce581613904565b915050611c65565b6009546001600160a01b03163314611d175760405162461bcd60e51b8152600401610ae790613756565b6111c781600a55565b60606011805480602002602001604051908101604052809291908181526020018280548015611d6e57602002820191906000526020600020905b815481526020019060010190808311611d5a575b5050505050905090565b60018054610b40906138c9565b6009546001600160a01b03163314611daf5760405162461bcd60e51b8152600401610ae790613756565b828114611dfe5760405162461bcd60e51b815260206004820152601760248201527f4172726179206c656e67746873206d69736d61746368210000000000000000006044820152606401610ae7565b60005b8381101561131c57611e51858583818110611e1e57611e1e613975565b9050602002016020810190611e339190612f90565b848484818110611e4557611e45613975565b90506020020135612475565b80611e5b81613904565b915050611e01565b610b2f33838361262e565b600f546001600160a01b03163314611e985760405162461bcd60e51b8152600401610ae7906136cb565b600f80546001600160a01b0319169055565b6018546001600160a01b031615611f2a57601854604051635937322960e11b81526001600160a01b0386811660048301528581166024830152604482018590529091169063b26e645290606401600060405180830381600087803b158015611f1157600080fd5b505af1158015611f25573d6000803e3d6000fd5b505050505b611f3684848484612723565b50505050565b6009546001600160a01b03163314611f665760405162461bcd60e51b8152600401610ae790613756565b600b805460ff1916831515179055600c8190555050565b6000818152600560205260409020546060906001600160a01b0316611ff65760405162461bcd60e51b815260206004820152602960248201527f455243373231493a20746f6b656e555249282920546f6b656e20646f6573206e6044820152686f742065786973742160b81b6064820152608401610ae7565b600261200183612881565b6003604051602001612015939291906135c3565b6040516020818303038152906040529050919050565b600d5460009060ff168015610e14575042600e541115905090565b6000805b60105481101561209a576010818154811061206757612067613975565b6000918252602090912001546001600160a01b031633141561208857600191505b8061209281613904565b91505061204a565b50806120e85760405162461bcd60e51b815260206004820152601a60248201527f596f7520617265206e6f742061207368617265686f6c646572210000000000006044820152606401610ae7565b50336000908152601260205260409020805460ff19166001179055565b6009546001600160a01b0316331461212f5760405162461bcd60e51b8152600401610ae790613756565b60005b6010548110156121e757601260006010838154811061215357612153613975565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff166121d55760405162461bcd60e51b815260206004820152602560248201527f456d657267656e63792046756e6374696f6e7320617265206e6f7420756e6c6f604482015264636b65642160d81b6064820152608401610ae7565b806121df81613904565b915050612132565b506115473347612599565b60606010805480602002602001604051908101604052809291908181526020018280548015611d6e57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161222c575050505050905090565b6009546001600160a01b0316331461227d5760405162461bcd60e51b8152600401610ae790613756565b6001600160a01b0381166122e35760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616044820152666464726573732160c81b6064820152608401610ae7565b6111c781612547565b60005b8151811015611f365761231c848484848151811061230f5761230f613975565b6020026020010151610d26565b8061232681613904565b9150506122ef565b6009546001600160a01b031633146123585760405162461bcd60e51b8152600401610ae790613756565b601355565b8051610b2f906003906020840190612db6565b6000818152600760205260409020546001600160a01b03838116911614610b2f57600081815260076020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556005909352818420549151859492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6124023382612987565b61246a5760405162461bcd60e51b815260206004820152603360248201527f455243373231493a207472616e7366657246726f6d2829205f6973417070726f6044820152727665644f724f776e6572203d2066616c73652160681b6064820152608401610ae7565b610ce0838383612a82565b806004546124839190613824565b60145410156124d45760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e732072656d61696e696e6721000000006044820152606401610ae7565b600060045460016124e59190613824565b905060005b8281101561251757612505846125008385613824565b612c54565b8061250f81613904565b9150506124ea565b50816004600082825461252a9190613824565b9091555050505050565b8051610b2f906002906020840190612db6565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146125e6576040519150601f19603f3d011682016040523d82523d6000602084013e6125eb565b606091505b5050905080610ce05760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610ae7565b816001600160a01b0316836001600160a01b031614156126b65760405162461bcd60e51b815260206004820152603d60248201527f455243373231493a205f736574417070726f76616c466f72416c6c2829204f7760448201527f6e6572206d757374206e6f7420626520746865204f70657261746f72210000006064820152608401610ae7565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61272e848484610d26565b6001600160a01b0383163b15611f36576000836001600160a01b031663150b7a023387868660405160240161276694939291906135f6565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161279f91906135a7565b600060405180830381855afa9150503d80600081146127da576040519150601f19603f3d011682016040523d82523d6000602084013e6127df565b606091505b509150506000818060200190518101906127f99190613453565b9050630a85bd0160e11b6001600160e01b03198216146128795760405162461bcd60e51b815260206004820152603560248201527f455243373231493a20736166655472616e7366657246726f6d282920746f5f206044820152746e6f742045524337323152656365697661626c652160581b6064820152608401610ae7565b505050505050565b6060816128a55750506040805180820190915260018152600360fc1b602082015290565b8160005b81156128cf57806128b981613904565b91506128c89050600a8361383c565b91506128a9565b6000816001600160401b038111156128e9576128e961398b565b6040519080825280601f01601f191660200182016040528015612913576020820181803683370190505b5090505b841561297f5781612927816138b2565b92506129369050600a8661391f565b612941906030613824565b60f81b81838151811061295657612956613975565b60200101906001600160f81b031916908160001a905350612978600a8661383c565b9450612917565b949350505050565b6000818152600560205260408120546001600160a01b0316612a085760405162461bcd60e51b815260206004820152603460248201527f455243373231493a205f6973417070726f7665644f724f776e65722829204f776044820152736e6572206973205a65726f20416464726573732160601b6064820152608401610ae7565b6000828152600560205260409020546001600160a01b03908116908416811480612a4b57506000838152600760205260409020546001600160a01b038581169116145b8061297f57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff16949350505050565b6000818152600560205260409020546001600160a01b03848116911614612b055760405162461bcd60e51b815260206004820152603160248201527f455243373231493a205f7472616e736665722829205472616e73666572204e6f60448201527074204f776e6572206f6620546f6b656e2160781b6064820152608401610ae7565b6001600160a01b038216612b725760405162461bcd60e51b815260206004820152602e60248201527f455243373231493a205f7472616e736665722829205472616e7366657220746f60448201526d205a65726f20416464726573732160901b6064820152608401610ae7565b6000818152600760205260409020546001600160a01b031615612b9a57612b9a600082612370565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03878116919091179091558616835260069091528120805491612be0836138b2565b90915550506001600160a01b0382166000908152600660205260408120805491612c0983613904565b919050555080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160a01b038216612cb85760405162461bcd60e51b815260206004820152602560248201527f455243373231493a205f6d696e742829204d696e7420746f205a65726f204164604482015264647265737360d81b6064820152608401610ae7565b6000818152600560205260409020546001600160a01b031615612d345760405162461bcd60e51b815260206004820152602e60248201527f455243373231493a205f6d696e74282920546f6b656e20746f204d696e74204160448201526d6c7265616479204578697374732160901b6064820152608401610ae7565b6001600160a01b0382166000908152600660205260408120805491612d5883613904565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612dc2906138c9565b90600052602060002090601f016020900481019282612de45760008555612e2a565b82601f10612dfd57805160ff1916838001178555612e2a565b82800160010185558215612e2a579182015b82811115612e2a578251825591602001919060010190612e0f565b50612e36929150612e3a565b5090565b5b80821115612e365760008155600101612e3b565b60008083601f840112612e6157600080fd5b5081356001600160401b03811115612e7857600080fd5b6020830191508360208260051b8501011115612e9357600080fd5b9250929050565b600082601f830112612eab57600080fd5b81356020612ec0612ebb83613801565b6137d1565b80838252828201915082860187848660051b8901011115612ee057600080fd5b60005b85811015612eff57813584529284019290840190600101612ee3565b5090979650505050505050565b80358015158114612f1c57600080fd5b919050565b600082601f830112612f3257600080fd5b81356001600160401b03811115612f4b57612f4b61398b565b612f5e601f8201601f19166020016137d1565b818152846020838601011115612f7357600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612fa257600080fd5b8135612fad816139a1565b9392505050565b60008060408385031215612fc757600080fd5b8235612fd2816139a1565b91506020830135612fe2816139a1565b809150509250929050565b60008060006060848603121561300257600080fd5b833561300d816139a1565b9250602084013561301d816139a1565b915060408401356001600160401b0381111561303857600080fd5b61304486828701612e9a565b9150509250925092565b6000806000806080858703121561306457600080fd5b843561306f816139a1565b9350602085013561307f816139a1565b925060408501356001600160401b038082111561309b57600080fd5b6130a788838901612e9a565b935060608701359150808211156130bd57600080fd5b506130ca87828801612f21565b91505092959194509250565b6000806000606084860312156130eb57600080fd5b83356130f6816139a1565b92506020840135613106816139a1565b929592945050506040919091013590565b6000806000806080858703121561312d57600080fd5b8435613138816139a1565b93506020850135613148816139a1565b92506040850135915060608501356001600160401b0381111561316a57600080fd5b6130ca87828801612f21565b6000806040838503121561318957600080fd5b8235613194816139a1565b91506020838101356001600160401b038111156131b057600080fd5b8401601f810186136131c157600080fd5b80356131cf612ebb82613801565b80828252848201915084840189868560051b87010111156131ef57600080fd5b600094505b838510156132125780358352600194909401939185019185016131f4565b5080955050505050509250929050565b6000806040838503121561323557600080fd5b8235613240816139a1565b915061324e60208401612f0c565b90509250929050565b6000806040838503121561326a57600080fd5b8235613275816139a1565b946020939093013593505050565b6000806000806040858703121561329957600080fd5b84356001600160401b03808211156132b057600080fd5b6132bc88838901612e4f565b909650945060208701359150808211156132d557600080fd5b506132e287828801612e4f565b95989497509550505050565b6000806040838503121561330157600080fd5b82356001600160401b038082111561331857600080fd5b818501915085601f83011261332c57600080fd5b8135602061333c612ebb83613801565b8083825282820191508286018a848660051b890101111561335c57600080fd5b600096505b84871015613388578035613374816139a1565b835260019690960195918301918301613361565b509650508601359250508082111561339f57600080fd5b506133ac85828601612e9a565b9150509250929050565b6000806000604084860312156133cb57600080fd5b83356001600160401b038111156133e157600080fd5b6133ed86828701612e4f565b909790965060209590950135949350505050565b6000806040838503121561341457600080fd5b61327583612f0c565b60006020828403121561342f57600080fd5b5035919050565b60006020828403121561344857600080fd5b8135612fad816139b6565b60006020828403121561346557600080fd5b8151612fad816139b6565b6000806020838503121561348357600080fd5b82356001600160401b038082111561349a57600080fd5b818501915085601f8301126134ae57600080fd5b8135818111156134bd57600080fd5b8660208285010111156134cf57600080fd5b60209290920196919550909350505050565b600081518084526134f9816020860160208601613886565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061352757607f831692505b602080841082141561354957634e487b7160e01b600052602260045260246000fd5b81801561355d576001811461356e5761359b565b60ff1986168952848901965061359b565b60008881526020902060005b868110156135935781548b82015290850190830161357a565b505084890196505b50505050505092915050565b600082516135b9818460208701613886565b9190910192915050565b60006135cf828661350d565b84516135df818360208901613886565b6135eb8183018661350d565b979650505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613629908301846134e1565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136745783516001600160a01b03168352928401929184019160010161364f565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136745783518352928401929184019160010161369c565b602081526000612fad60208301846134e1565b60208082526028908201527f50617961626c65476f7665726e616e63653a2043616c6c6572206973206e6f74604082015267205365747465722160c01b606082015260800190565b60208082526023908201527f50617961626c6520676f7665726e616e6365206c656e677468206d69736d617460408201526263682160e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f50617961626c6520476f7665726e616e636520536861726573206973206e6f7460408201526520313030302160d01b606082015260800190565b604051601f8201601f191681016001600160401b03811182821017156137f9576137f961398b565b604052919050565b60006001600160401b0382111561381a5761381a61398b565b5060051b60200190565b6000821982111561383757613837613933565b500190565b60008261384b5761384b613949565b500490565b600081600019048311821515161561386a5761386a613933565b500290565b60008282101561388157613881613933565b500390565b60005b838110156138a1578181015183820152602001613889565b83811115611f365750506000910152565b6000816138c1576138c1613933565b506000190190565b600181811c908216806138dd57607f821691505b602082108114156138fe57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561391857613918613933565b5060010190565b60008261392e5761392e613949565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146111c757600080fd5b6001600160e01b0319811681146111c757600080fdfea264697066735822122097b68da279f38edfa74254463fc53a99bebdef28dc9a7f58ff02073adce01cbe64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c8063715018a6116101c6578063c7b89336116100f7578063dc92f8f011610095578063e985e9c51161006f578063e985e9c5146109eb578063f2fde38b14610a26578063f487c60214610a46578063f4a0a52814610a6657600080fd5b8063dc92f8f01461099e578063e47fa66e146109b3578063e8315742146109d557600080fd5b8063d311c80d116100d1578063d311c80d14610947578063d66359591461095d578063d9d2b4cd14610973578063dc30158b1461098857600080fd5b8063c7b89336146108e5578063c87b56dd14610912578063cb9fe5861461093257600080fd5b806395d89b4111610164578063a91f88351161013e578063a91f88351461087d578063b69ef8a814610892578063b88d4fde146108a5578063c1f730a4146108c557600080fd5b806395d89b41146108285780639d2087ff1461083d578063a22cb4651461085d57600080fd5b8063861a9a65116101a0578063861a9a65146107b95780638b2998f8146107d95780638bdc048a146107ee5780638da5cb5b1461080857600080fd5b8063715018a61461076f5780637362377b146107845780637cb647591461079957600080fd5b806330176e13116102a05780634959f0f51161023e5780636352211e116102185780636352211e146106d65780636817c76c1461070c5780636e9d287b1461072257806370a082311461074257600080fd5b80634959f0f51461068c578063524c7ff8146106a15780635a23dd99146106b657600080fd5b806340f480e71161027a57806340f480e71461060957806342842e0e1461061f578063438b63001461063f578063484b973c1461066c57600080fd5b806330176e13146105a957806339e96c7b146105c95780633a3473b6146105e957600080fd5b806323af31261161030d57806326202370116102e7578063262023701461054e5780632904e6d9146105635780632db11544146105765780632f745c591461058957600080fd5b806323af3126146104de57806323b872dd1461050e57806323ffce851461052e57600080fd5b8063081812fc11610349578063081812fc1461042c578063095ea7b31461047a57806318160ddd1461049a57806319c3fa32146104be57600080fd5b806301ffc9a7146103b357806302ffaed1146103e857806306fdde031461040a57600080fd5b366103ae57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b600080fd5b3480156103bf57600080fd5b506103d36103ce366004613436565b610a86565b60405190151581526020015b60405180910390f35b3480156103f457600080fd5b50610408610403366004613470565b610abd565b005b34801561041657600080fd5b5061041f610b33565b6040516103df91906136b8565b34801561043857600080fd5b5061046261044736600461341d565b6007602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b34801561048657600080fd5b50610408610495366004613257565b610bc1565b3480156104a657600080fd5b506104b060045481565b6040519081526020016103df565b3480156104ca57600080fd5b506104086104d9366004613401565b610ce5565b3480156104ea57600080fd5b506103d36104f9366004612f90565b60126020526000908152604090205460ff1681565b34801561051a57600080fd5b506104086105293660046130d6565b610d26565b34801561053a57600080fd5b50610408610549366004612f90565b610db1565b34801561055a57600080fd5b506103d3610dfd565b6104086105713660046133b6565b610e19565b61040861058436600461341d565b611074565b34801561059557600080fd5b506104b06105a4366004613257565b6111ca565b3480156105b557600080fd5b506104086105c4366004613470565b6111fb565b3480156105d557600080fd5b506104086105e436600461341d565b611264565b3480156105f557600080fd5b5061040861060436600461304e565b6112d9565b34801561061557600080fd5b506104b060155481565b34801561062b57600080fd5b5061040861063a3660046130d6565b611323565b34801561064b57600080fd5b5061065f61065a366004612f90565b61133e565b6040516103df9190613680565b34801561067857600080fd5b50610408610687366004613257565b611475565b34801561069857600080fd5b506104086114a9565b3480156106ad57600080fd5b5061065f611549565b3480156106c257600080fd5b506103d36106d1366004613176565b6117cb565b3480156106e257600080fd5b506104626106f136600461341d565b6005602052600090815260409020546001600160a01b031681565b34801561071857600080fd5b506104b060135481565b34801561072e57600080fd5b5061040861073d3660046132ee565b6118ef565b34801561074e57600080fd5b506104b061075d366004612f90565b60066020526000908152604090205481565b34801561077b57600080fd5b50610408611b15565b34801561079057600080fd5b50610408611b49565b3480156107a557600080fd5b506104086107b436600461341d565b611ced565b3480156107c557600080fd5b50601854610462906001600160a01b031681565b3480156107e557600080fd5b5061065f611d20565b3480156107fa57600080fd5b50600b546103d39060ff1681565b34801561081457600080fd5b50600954610462906001600160a01b031681565b34801561083457600080fd5b5061041f611d78565b34801561084957600080fd5b50610408610858366004613283565b611d85565b34801561086957600080fd5b50610408610878366004613222565b611e63565b34801561088957600080fd5b50610408611e6e565b34801561089e57600080fd5b50476104b0565b3480156108b157600080fd5b506104086108c0366004613117565b611eaa565b3480156108d157600080fd5b506104086108e0366004613401565b611f3c565b3480156108f157600080fd5b506104b0610900366004612f90565b60166020526000908152604090205481565b34801561091e57600080fd5b5061041f61092d36600461341d565b611f7d565b34801561093e57600080fd5b506103d361202b565b34801561095357600080fd5b506104b0600e5481565b34801561096957600080fd5b506104b0600c5481565b34801561097f57600080fd5b50610408612046565b34801561099457600080fd5b506104b060175481565b3480156109aa57600080fd5b50610408612105565b3480156109bf57600080fd5b506109c86121f2565b6040516103df9190613633565b3480156109e157600080fd5b506104b060145481565b3480156109f757600080fd5b506103d3610a06366004612fb4565b600860209081526000928352604080842090915290825290205460ff1681565b348015610a3257600080fd5b50610408610a41366004612f90565b612253565b348015610a5257600080fd5b50610408610a61366004612fed565b6122ec565b348015610a7257600080fd5b50610408610a8136600461341d565b61232e565b60006380ac58cd60e01b6001600160e01b031983161480610ab75750635b5e139f60e01b6001600160e01b03198316145b92915050565b6009546001600160a01b03163314610af05760405162461bcd60e51b8152600401610ae790613756565b60405180910390fd5b610b2f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061235d92505050565b5050565b60008054610b40906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6c906138c9565b8015610bb95780601f10610b8e57610100808354040283529160200191610bb9565b820191906000526020600020905b815481529060010190602001808311610b9c57829003601f168201915b505050505081565b6000818152600560205260409020546001600160a01b03908116908316811415610c415760405162461bcd60e51b815260206004820152602b60248201527f455243373231493a20617070726f766528292043616e6e6f7420617070726f7660448201526a6520796f757273656c662160a81b6064820152608401610ae7565b336001600160a01b0382161480610c7b57506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b610cd65760405162461bcd60e51b815260206004820152602660248201527f455243373231493a2043616c6c6572206e6f74206f776e6572206f7220417070604482015265726f7665642160d01b6064820152608401610ae7565b610ce08383612370565b505050565b6009546001600160a01b03163314610d0f5760405162461bcd60e51b8152600401610ae790613756565b600d805460ff1916831515179055600e8190555050565b6018546001600160a01b031615610da657601854604051635937322960e11b81526001600160a01b0385811660048301528481166024830152604482018490529091169063b26e645290606401600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b505050505b610ce08383836123f8565b6009546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610ae790613756565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600b5460009060ff168015610e14575042600c5411155b905090565b333214610e5e5760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610ae7565b600d5460ff168015610e72575042600e5411155b610ec95760405162461bcd60e51b815260206004820152602260248201527f57686974656c697374204d696e74206973206e6f7420656e61626c6564207965604482015261742160f01b6064820152608401610ae7565b610f06338484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506117cb92505050565b610f525760405162461bcd60e51b815260206004820152601860248201527f596f7520617265206e6f742057686974656c69737465642100000000000000006044820152606401610ae7565b33600090815260166020526040902054610f6d908290613824565b6015541015610ff35760405162461bcd60e51b815260206004820152604660248201527f4f766572204d6178204d696e747320706572205458206f72204e6f7420656e6f60448201527f7567682077686974656c697374206d696e74732072656d61696e696e6720666f6064820152657220796f752160d01b608482015260a401610ae7565b806013546110019190613850565b34146110455760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642076616c75652073656e742160681b6044820152606401610ae7565b3360009081526016602052604081208054839290611064908490613824565b90915550610ce090503382612475565b3332146110b95760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610ae7565b600b5460ff1680156110cd575042600c5411155b6111195760405162461bcd60e51b815260206004820152601f60248201527f5075626c6963204d696e74206973206e6f7420656e61626c65642079657421006044820152606401610ae7565b80601754101561116b5760405162461bcd60e51b815260206004820152601b60248201527f4f766572206d61786d696d756d206d696e7473207065722054782100000000006044820152606401610ae7565b806013546111799190613850565b34146111bd5760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642076616c75652073656e742160681b6044820152606401610ae7565b6111c73382612475565b50565b6000806111d68461133e565b90508083815181106111ea576111ea613975565b602002602001015191505092915050565b6009546001600160a01b031633146112255760405162461bcd60e51b8152600401610ae790613756565b610b2f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061253492505050565b6009546001600160a01b0316331461128e5760405162461bcd60e51b8152600401610ae790613756565b8060045410156112d45760405162461bcd60e51b815260206004820152601160248201527042656c6f7720746f74616c537570706c7960781b6044820152606401610ae7565b601455565b60005b825181101561131c5761130a85858584815181106112fc576112fc613975565b602002602001015185611eaa565b8061131481613904565b9150506112dc565b5050505050565b610ce083838360405180602001604052806000815250611eaa565b6001600160a01b038116600090815260066020526040812054606091816001600160401b038111156113725761137261398b565b60405190808252806020026020018201604052801561139b578160200160208202803683370190505b50600454909150600090815b8181101561146a576000818152600560205260409020546001600160a01b03161580156113f75750836113db60018761386f565b815181106113eb576113eb613975565b60200260200101516000145b1561140a578161140681613904565b9250505b6000818152600560205260409020546001600160a01b0388811691161415611458578084848151811061143f5761143f613975565b60209081029190910101528261145481613904565b9350505b8061146281613904565b9150506113a7565b509195945050505050565b6009546001600160a01b0316331461149f5760405162461bcd60e51b8152600401610ae790613756565b610b2f8282612475565b600f546001600160a01b031633146114d35760405162461bcd60e51b8152600401610ae7906136cb565b601054156115135760108054806114ec576114ec61395f565b600082815260209020810160001990810180546001600160a01b03191690550190556114d3565b6011541561154757601180548061152c5761152c61395f565b60019003818190600052602060002001600090559055611513565b565b6009546060906001600160a01b031633146115765760405162461bcd60e51b8152600401610ae790613756565b60105415801590611588575060115415155b6115d45760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610ae7565b601154601054146115f75760405162461bcd60e51b8152600401610ae790613713565b6000805b601154811015611642576011818154811061161857611618613975565b90600052602060002001548261162e9190613824565b91508061163a81613904565b9150506115fb565b50806103e8146116645760405162461bcd60e51b8152600401610ae79061378b565b6010544790600090611677906002613824565b6001600160401b0381111561168e5761168e61398b565b6040519080825280602002602001820160405280156116b7578160200160208202803683370190505b50905060005b60105481101561172c576103e8601182815481106116dd576116dd613975565b9060005260206000200154846116f39190613850565b6116fd919061383c565b82828151811061170f5761170f613975565b60209081029190910101528061172481613904565b9150506116bd565b50601054815183918391811061174457611744613975565b60200260200101818152505060005b6010548110156117c35781818151811061176f5761176f613975565b602002602001015182601080549050600161178a9190613824565b8151811061179a5761179a613975565b602002602001018181516117ae9190613824565b905250806117bb81613904565b915050611753565b509250505090565b6040516bffffffffffffffffffffffff19606084901b166020820152600090819060340160405160208183030381529060405280519060200120905060005b83518110156118e35783818151811061182557611825613975565b602002602001015182106118835783818151811061184557611845613975565b602002602001015182604051602001611868929190918252602082015260400190565b604051602081830303815290604052805190602001206118cf565b8184828151811061189657611896613975565b60200260200101516040516020016118b8929190918252602082015260400190565b604051602081830303815290604052805190602001205b9150806118db81613904565b91505061180a565b50600a54149392505050565b600f546001600160a01b031633146119195760405162461bcd60e51b8152600401610ae7906136cb565b6010541580156119295750601154155b61199b5760405162461bcd60e51b815260206004820152603a60248201527f50617961626c6520476f7665726e616e636520616c726561647920736574212060448201527f546f2073657420616761696e2c207265736574206669727374210000000000006064820152608401610ae7565b80518251146119f85760405162461bcd60e51b815260206004820152602360248201527f4164647265737320616e6420536861726573206c656e677468206d69736d617460448201526263682160e81b6064820152608401610ae7565b6000805b8351811015611ac357828181518110611a1757611a17613975565b602002602001015182611a2a9190613824565b91506010848281518110611a4057611a40613975565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790558251601190849083908110611a9257611a92613975565b6020908102919091018101518254600181018455600093845291909220015580611abb81613904565b9150506119fc565b50806103e814610ce05760405162461bcd60e51b815260206004820152601960248201527f546f74616c20536861726573206973206e6f74203130303021000000000000006044820152606401610ae7565b6009546001600160a01b03163314611b3f5760405162461bcd60e51b8152600401610ae790613756565b6115476000612547565b6009546001600160a01b03163314611b735760405162461bcd60e51b8152600401610ae790613756565b60105415801590611b85575060115415155b611bd15760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610ae7565b60115460105414611bf45760405162461bcd60e51b8152600401610ae790613713565b6000805b601154811015611c3f5760118181548110611c1557611c15613975565b906000526020600020015482611c2b9190613824565b915080611c3781613904565b915050611bf8565b50806103e814611c615760405162461bcd60e51b8152600401610ae79061378b565b4760005b601054811015610ce05760006103e860118381548110611c8757611c87613975565b906000526020600020015484611c9d9190613850565b611ca7919061383c565b9050611cda60108381548110611cbf57611cbf613975565b6000918252602090912001546001600160a01b031682612599565b5080611ce581613904565b915050611c65565b6009546001600160a01b03163314611d175760405162461bcd60e51b8152600401610ae790613756565b6111c781600a55565b60606011805480602002602001604051908101604052809291908181526020018280548015611d6e57602002820191906000526020600020905b815481526020019060010190808311611d5a575b5050505050905090565b60018054610b40906138c9565b6009546001600160a01b03163314611daf5760405162461bcd60e51b8152600401610ae790613756565b828114611dfe5760405162461bcd60e51b815260206004820152601760248201527f4172726179206c656e67746873206d69736d61746368210000000000000000006044820152606401610ae7565b60005b8381101561131c57611e51858583818110611e1e57611e1e613975565b9050602002016020810190611e339190612f90565b848484818110611e4557611e45613975565b90506020020135612475565b80611e5b81613904565b915050611e01565b610b2f33838361262e565b600f546001600160a01b03163314611e985760405162461bcd60e51b8152600401610ae7906136cb565b600f80546001600160a01b0319169055565b6018546001600160a01b031615611f2a57601854604051635937322960e11b81526001600160a01b0386811660048301528581166024830152604482018590529091169063b26e645290606401600060405180830381600087803b158015611f1157600080fd5b505af1158015611f25573d6000803e3d6000fd5b505050505b611f3684848484612723565b50505050565b6009546001600160a01b03163314611f665760405162461bcd60e51b8152600401610ae790613756565b600b805460ff1916831515179055600c8190555050565b6000818152600560205260409020546060906001600160a01b0316611ff65760405162461bcd60e51b815260206004820152602960248201527f455243373231493a20746f6b656e555249282920546f6b656e20646f6573206e6044820152686f742065786973742160b81b6064820152608401610ae7565b600261200183612881565b6003604051602001612015939291906135c3565b6040516020818303038152906040529050919050565b600d5460009060ff168015610e14575042600e541115905090565b6000805b60105481101561209a576010818154811061206757612067613975565b6000918252602090912001546001600160a01b031633141561208857600191505b8061209281613904565b91505061204a565b50806120e85760405162461bcd60e51b815260206004820152601a60248201527f596f7520617265206e6f742061207368617265686f6c646572210000000000006044820152606401610ae7565b50336000908152601260205260409020805460ff19166001179055565b6009546001600160a01b0316331461212f5760405162461bcd60e51b8152600401610ae790613756565b60005b6010548110156121e757601260006010838154811061215357612153613975565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff166121d55760405162461bcd60e51b815260206004820152602560248201527f456d657267656e63792046756e6374696f6e7320617265206e6f7420756e6c6f604482015264636b65642160d81b6064820152608401610ae7565b806121df81613904565b915050612132565b506115473347612599565b60606010805480602002602001604051908101604052809291908181526020018280548015611d6e57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161222c575050505050905090565b6009546001600160a01b0316331461227d5760405162461bcd60e51b8152600401610ae790613756565b6001600160a01b0381166122e35760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616044820152666464726573732160c81b6064820152608401610ae7565b6111c781612547565b60005b8151811015611f365761231c848484848151811061230f5761230f613975565b6020026020010151610d26565b8061232681613904565b9150506122ef565b6009546001600160a01b031633146123585760405162461bcd60e51b8152600401610ae790613756565b601355565b8051610b2f906003906020840190612db6565b6000818152600760205260409020546001600160a01b03838116911614610b2f57600081815260076020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556005909352818420549151859492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6124023382612987565b61246a5760405162461bcd60e51b815260206004820152603360248201527f455243373231493a207472616e7366657246726f6d2829205f6973417070726f6044820152727665644f724f776e6572203d2066616c73652160681b6064820152608401610ae7565b610ce0838383612a82565b806004546124839190613824565b60145410156124d45760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e732072656d61696e696e6721000000006044820152606401610ae7565b600060045460016124e59190613824565b905060005b8281101561251757612505846125008385613824565b612c54565b8061250f81613904565b9150506124ea565b50816004600082825461252a9190613824565b9091555050505050565b8051610b2f906002906020840190612db6565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146125e6576040519150601f19603f3d011682016040523d82523d6000602084013e6125eb565b606091505b5050905080610ce05760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610ae7565b816001600160a01b0316836001600160a01b031614156126b65760405162461bcd60e51b815260206004820152603d60248201527f455243373231493a205f736574417070726f76616c466f72416c6c2829204f7760448201527f6e6572206d757374206e6f7420626520746865204f70657261746f72210000006064820152608401610ae7565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61272e848484610d26565b6001600160a01b0383163b15611f36576000836001600160a01b031663150b7a023387868660405160240161276694939291906135f6565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161279f91906135a7565b600060405180830381855afa9150503d80600081146127da576040519150601f19603f3d011682016040523d82523d6000602084013e6127df565b606091505b509150506000818060200190518101906127f99190613453565b9050630a85bd0160e11b6001600160e01b03198216146128795760405162461bcd60e51b815260206004820152603560248201527f455243373231493a20736166655472616e7366657246726f6d282920746f5f206044820152746e6f742045524337323152656365697661626c652160581b6064820152608401610ae7565b505050505050565b6060816128a55750506040805180820190915260018152600360fc1b602082015290565b8160005b81156128cf57806128b981613904565b91506128c89050600a8361383c565b91506128a9565b6000816001600160401b038111156128e9576128e961398b565b6040519080825280601f01601f191660200182016040528015612913576020820181803683370190505b5090505b841561297f5781612927816138b2565b92506129369050600a8661391f565b612941906030613824565b60f81b81838151811061295657612956613975565b60200101906001600160f81b031916908160001a905350612978600a8661383c565b9450612917565b949350505050565b6000818152600560205260408120546001600160a01b0316612a085760405162461bcd60e51b815260206004820152603460248201527f455243373231493a205f6973417070726f7665644f724f776e65722829204f776044820152736e6572206973205a65726f20416464726573732160601b6064820152608401610ae7565b6000828152600560205260409020546001600160a01b03908116908416811480612a4b57506000838152600760205260409020546001600160a01b038581169116145b8061297f57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff16949350505050565b6000818152600560205260409020546001600160a01b03848116911614612b055760405162461bcd60e51b815260206004820152603160248201527f455243373231493a205f7472616e736665722829205472616e73666572204e6f60448201527074204f776e6572206f6620546f6b656e2160781b6064820152608401610ae7565b6001600160a01b038216612b725760405162461bcd60e51b815260206004820152602e60248201527f455243373231493a205f7472616e736665722829205472616e7366657220746f60448201526d205a65726f20416464726573732160901b6064820152608401610ae7565b6000818152600760205260409020546001600160a01b031615612b9a57612b9a600082612370565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03878116919091179091558616835260069091528120805491612be0836138b2565b90915550506001600160a01b0382166000908152600660205260408120805491612c0983613904565b919050555080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160a01b038216612cb85760405162461bcd60e51b815260206004820152602560248201527f455243373231493a205f6d696e742829204d696e7420746f205a65726f204164604482015264647265737360d81b6064820152608401610ae7565b6000818152600560205260409020546001600160a01b031615612d345760405162461bcd60e51b815260206004820152602e60248201527f455243373231493a205f6d696e74282920546f6b656e20746f204d696e74204160448201526d6c7265616479204578697374732160901b6064820152608401610ae7565b6001600160a01b0382166000908152600660205260408120805491612d5883613904565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612dc2906138c9565b90600052602060002090601f016020900481019282612de45760008555612e2a565b82601f10612dfd57805160ff1916838001178555612e2a565b82800160010185558215612e2a579182015b82811115612e2a578251825591602001919060010190612e0f565b50612e36929150612e3a565b5090565b5b80821115612e365760008155600101612e3b565b60008083601f840112612e6157600080fd5b5081356001600160401b03811115612e7857600080fd5b6020830191508360208260051b8501011115612e9357600080fd5b9250929050565b600082601f830112612eab57600080fd5b81356020612ec0612ebb83613801565b6137d1565b80838252828201915082860187848660051b8901011115612ee057600080fd5b60005b85811015612eff57813584529284019290840190600101612ee3565b5090979650505050505050565b80358015158114612f1c57600080fd5b919050565b600082601f830112612f3257600080fd5b81356001600160401b03811115612f4b57612f4b61398b565b612f5e601f8201601f19166020016137d1565b818152846020838601011115612f7357600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612fa257600080fd5b8135612fad816139a1565b9392505050565b60008060408385031215612fc757600080fd5b8235612fd2816139a1565b91506020830135612fe2816139a1565b809150509250929050565b60008060006060848603121561300257600080fd5b833561300d816139a1565b9250602084013561301d816139a1565b915060408401356001600160401b0381111561303857600080fd5b61304486828701612e9a565b9150509250925092565b6000806000806080858703121561306457600080fd5b843561306f816139a1565b9350602085013561307f816139a1565b925060408501356001600160401b038082111561309b57600080fd5b6130a788838901612e9a565b935060608701359150808211156130bd57600080fd5b506130ca87828801612f21565b91505092959194509250565b6000806000606084860312156130eb57600080fd5b83356130f6816139a1565b92506020840135613106816139a1565b929592945050506040919091013590565b6000806000806080858703121561312d57600080fd5b8435613138816139a1565b93506020850135613148816139a1565b92506040850135915060608501356001600160401b0381111561316a57600080fd5b6130ca87828801612f21565b6000806040838503121561318957600080fd5b8235613194816139a1565b91506020838101356001600160401b038111156131b057600080fd5b8401601f810186136131c157600080fd5b80356131cf612ebb82613801565b80828252848201915084840189868560051b87010111156131ef57600080fd5b600094505b838510156132125780358352600194909401939185019185016131f4565b5080955050505050509250929050565b6000806040838503121561323557600080fd5b8235613240816139a1565b915061324e60208401612f0c565b90509250929050565b6000806040838503121561326a57600080fd5b8235613275816139a1565b946020939093013593505050565b6000806000806040858703121561329957600080fd5b84356001600160401b03808211156132b057600080fd5b6132bc88838901612e4f565b909650945060208701359150808211156132d557600080fd5b506132e287828801612e4f565b95989497509550505050565b6000806040838503121561330157600080fd5b82356001600160401b038082111561331857600080fd5b818501915085601f83011261332c57600080fd5b8135602061333c612ebb83613801565b8083825282820191508286018a848660051b890101111561335c57600080fd5b600096505b84871015613388578035613374816139a1565b835260019690960195918301918301613361565b509650508601359250508082111561339f57600080fd5b506133ac85828601612e9a565b9150509250929050565b6000806000604084860312156133cb57600080fd5b83356001600160401b038111156133e157600080fd5b6133ed86828701612e4f565b909790965060209590950135949350505050565b6000806040838503121561341457600080fd5b61327583612f0c565b60006020828403121561342f57600080fd5b5035919050565b60006020828403121561344857600080fd5b8135612fad816139b6565b60006020828403121561346557600080fd5b8151612fad816139b6565b6000806020838503121561348357600080fd5b82356001600160401b038082111561349a57600080fd5b818501915085601f8301126134ae57600080fd5b8135818111156134bd57600080fd5b8660208285010111156134cf57600080fd5b60209290920196919550909350505050565b600081518084526134f9816020860160208601613886565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061352757607f831692505b602080841082141561354957634e487b7160e01b600052602260045260246000fd5b81801561355d576001811461356e5761359b565b60ff1986168952848901965061359b565b60008881526020902060005b868110156135935781548b82015290850190830161357a565b505084890196505b50505050505092915050565b600082516135b9818460208701613886565b9190910192915050565b60006135cf828661350d565b84516135df818360208901613886565b6135eb8183018661350d565b979650505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613629908301846134e1565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136745783516001600160a01b03168352928401929184019160010161364f565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136745783518352928401929184019160010161369c565b602081526000612fad60208301846134e1565b60208082526028908201527f50617961626c65476f7665726e616e63653a2043616c6c6572206973206e6f74604082015267205365747465722160c01b606082015260800190565b60208082526023908201527f50617961626c6520676f7665726e616e6365206c656e677468206d69736d617460408201526263682160e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f50617961626c6520476f7665726e616e636520536861726573206973206e6f7460408201526520313030302160d01b606082015260800190565b604051601f8201601f191681016001600160401b03811182821017156137f9576137f961398b565b604052919050565b60006001600160401b0382111561381a5761381a61398b565b5060051b60200190565b6000821982111561383757613837613933565b500190565b60008261384b5761384b613949565b500490565b600081600019048311821515161561386a5761386a613933565b500290565b60008282101561388157613881613933565b500390565b60005b838110156138a1578181015183820152602001613889565b83811115611f365750506000910152565b6000816138c1576138c1613933565b506000190190565b600181811c908216806138dd57607f821691505b602082108114156138fe57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561391857613918613933565b5060010190565b60008261392e5761392e613949565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146111c757600080fd5b6001600160e01b0319811681146111c757600080fdfea264697066735822122097b68da279f38edfa74254463fc53a99bebdef28dc9a7f58ff02073adce01cbe64736f6c63430008070033

Deployed Bytecode Sourcemap

18536:3556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12442:31;;;12451:10;14906:51:1;;12463:9:0;14988:2:1;14973:18;;14966:34;12442:31:0;;14879:18:1;12442:31:0;;;;;;;18536:3556;;;;;6563:159;;;;;;;;;;-1:-1:-1;6563:159:0;;;;;:::i;:::-;;:::i;:::-;;;16492:14:1;;16485:22;16467:41;;16455:2;16440:18;6563:159:0;;;;;;;;11291:115;;;;;;;;;;-1:-1:-1;11291:115:0;;;;;:::i;:::-;;:::i;:::-;;280:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;633:46::-;;;;;;;;;;-1:-1:-1;633:46:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;633:46:0;;;;;;-1:-1:-1;;;;;13815:32:1;;;13797:51;;13785:2;13770:18;633:46:0;13651:203:1;4560:352:0;;;;;;;;;;-1:-1:-1;4560:352:0;;;;;:::i;:::-;;:::i;495:26::-;;;;;;;;;;;;;;;;;;;30029:25:1;;;30017:2;30002:18;495:26:0;29883:177:1;11721:122:0;;;;;;;;;;-1:-1:-1;11721:122:0;;;;;:::i;:::-;;:::i;12626:58::-;;;;;;;;;;-1:-1:-1;12626:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21490:279;;;;;;;;;;-1:-1:-1;21490:279:0;;;;;:::i;:::-;;:::i;19271:103::-;;;;;;;;;;-1:-1:-1;19271:103:0;;;;;:::i;:::-;;:::i;10065:134::-;;;;;;;;;;;;;:::i;20285:618::-;;;;;;:::i;:::-;;:::i;20941:311::-;;;;;;:::i;:::-;;:::i;7827:203::-;;;;;;;;;;-1:-1:-1;7827:203:0;;;;;:::i;:::-;;:::i;11177:108::-;;;;;;;;;;-1:-1:-1;11177:108:0;;;;;:::i;:::-;;:::i;19028:168::-;;;;;;;;;;-1:-1:-1;19028:168:0;;;;;:::i;:::-;;:::i;6266:263::-;;;;;;;;;;-1:-1:-1;6266:263:0;;;;;:::i;:::-;;:::i;18779:32::-;;;;;;;;;;;;;;;;5839:148;;;;;;;;;;-1:-1:-1;5839:148:0;;;;;:::i;:::-;;:::i;7187:538::-;;;;;;;;;;-1:-1:-1;7187:538:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19805:110::-;;;;;;;;;;-1:-1:-1;19805:110:0;;;;;:::i;:::-;;:::i;13696:301::-;;;;;;;;;;;;;:::i;15699:1753::-;;;;;;;;;;;;;:::i;9064:405::-;;;;;;;;;;-1:-1:-1;9064:405:0;;;;;:::i;:::-;;:::i;529:42::-;;;;;;;;;;-1:-1:-1;529:42:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;529:42:0;;;18695:37;;;;;;;;;;;;;;;;12958:732;;;;;;;;;;-1:-1:-1;12958:732:0;;;;;:::i;:::-;;:::i;579:44::-;;;;;;;;;;-1:-1:-1;579:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;8764:105;;;;;;;;;;;;;:::i;14444:1247::-;;;;;;;;;;;;;:::i;11433:109::-;;;;;;;;;;-1:-1:-1;11433:109:0;;;;;:::i;:::-;;:::i;19245:19::-;;;;;;;;;;-1:-1:-1;19245:19:0;;;;-1:-1:-1;;;;;19245:19:0;;;14285:124;;;;;;;;;;;;;:::i;9700:30::-;;;;;;;;;;-1:-1:-1;9700:30:0;;;;;;;;8070:20;;;;;;;;;;-1:-1:-1;8070:20:0;;;;-1:-1:-1;;;;;8070:20:0;;;300;;;;;;;;;;;;;:::i;19921:323::-;;;;;;;;;;-1:-1:-1;19921:323:0;;;;;:::i;:::-;;:::i;4918:148::-;;;;;;;;;;-1:-1:-1;4918:148:0;;;;;:::i;:::-;;:::i;12189:135::-;;;;;;;;;;;;;:::i;14039:96::-;;;;;;;;;;-1:-1:-1;14106:21:0;14039:96;;21775:314;;;;;;;;;;-1:-1:-1;21775:314:0;;;;;:::i;:::-;;:::i;11570:116::-;;;;;;;;;;-1:-1:-1;11570:116:0;;;;;:::i;:::-;;:::i;18818:51::-;;;;;;;;;;-1:-1:-1;18818:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;6730:281;;;;;;;;;;-1:-1:-1;6730:281:0;;;;;:::i;:::-;;:::i;10665:143::-;;;;;;;;;;;;;:::i;10308:33::-;;;;;;;;;;;;;;;;9732:30;;;;;;;;;;;;;;;;17843:136;;;;;;;;;;;;;:::i;18878:33::-;;;;;;;;;;;;;;;;18274:137;;;;;;;;;;;;;:::i;14141:138::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18739:31::-;;;;;;;;;;;;;;;;687:68;;;;;;;;;;-1:-1:-1;687:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;8551:207;;;;;;;;;;-1:-1:-1;8551:207:0;;;;;:::i;:::-;;:::i;6032:228::-;;;;;;;;;;-1:-1:-1;6032:228:0;;;;;:::i;:::-;;:::i;18920:102::-;;;;;;;;;;-1:-1:-1;18920:102:0;;;;;:::i;:::-;;:::i;6563:159::-;6632:4;-1:-1:-1;;;;;;;;;6657:26:0;;;;:56;;-1:-1:-1;;;;;;;;;;6687:26:0;;;6657:56;6649:65;6563:159;-1:-1:-1;;6563:159:0:o;11291:115::-;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;;;;;;;;;11372:26:::1;11393:4;;11372:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;11372:20:0::1;::::0;-1:-1:-1;;;11372:26:0:i:1;:::-;11291:115:::0;;:::o;280:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4560:352::-;4634:14;4651:17;;;:7;:17;;;;;;-1:-1:-1;;;;;4651:17:0;;;;4687:13;;;;;4679:69;;;;-1:-1:-1;;;4679:69:0;;21441:2:1;4679:69:0;;;21423:21:1;21480:2;21460:18;;;21453:30;21519:34;21499:18;;;21492:62;-1:-1:-1;;;21570:18:1;;;21563:41;21621:19;;4679:69:0;21239:407:1;4679:69:0;4767:10;-1:-1:-1;;;;;4767:20:0;;;;:60;;-1:-1:-1;;;;;;4791:24:0;;;;;;:16;:24;;;;;;;;4816:10;4791:36;;;;;;;;;;4767:60;4759:111;;;;-1:-1:-1;;;4759:111:0;;20682:2:1;4759:111:0;;;20664:21:1;20721:2;20701:18;;;20694:30;20760:34;20740:18;;;20733:62;-1:-1:-1;;;20811:18:1;;;20804:36;20857:19;;4759:111:0;20480:402:1;4759:111:0;4881:23;4890:3;4895:8;4881;:23::i;:::-;4623:289;4560:352;;:::o;11721:122::-;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;10422:21;:29;;-1:-1:-1;;10422:29:0;;;;;;;10453:18;:26;;;11291:115;;:::o;21490:279::-;21596:5;;-1:-1:-1;;;;;21596:5:0;:29;21591:118;;21643:5;;:50;;-1:-1:-1;;;21643:50:0;;-1:-1:-1;;;;;14117:15:1;;;21643:50:0;;;14099:34:1;14169:15;;;14149:18;;;14142:43;14201:18;;;14194:34;;;21643:5:0;;;;:28;;14034:18:1;;21643:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21591:118;21719:42;21740:5;21747:3;21752:8;21719:20;:42::i;19271:103::-;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;19342:5:::1;:24:::0;;-1:-1:-1;;;;;;19342:24:0::1;-1:-1:-1::0;;;;;19342:24:0;;;::::1;::::0;;;::::1;::::0;;19271:103::o;10065:134::-;10140:18;;10116:4;;10140:18;;:56;;;;;10181:15;10162;;:34;;10140:56;10133:63;;10065:134;:::o;20285:618::-;9581:10;9595:9;9581:23;9573:55;;;;-1:-1:-1;;;9573:55:0;;25398:2:1;9573:55:0;;;25380:21:1;25437:2;25417:18;;;25410:30;-1:-1:-1;;;25456:18:1;;;25449:49;25515:18;;9573:55:0;25196:343:1;9573:55:0;10537:21:::1;::::0;::::1;;:62:::0;::::1;;;;10584:15;10562:18;;:37;;10537:62;10529:123;;;::::0;-1:-1:-1;;;10529:123:0;;22271:2:1;10529:123:0::1;::::0;::::1;22253:21:1::0;22310:2;22290:18;;;22283:30;22349:34;22329:18;;;22322:62;-1:-1:-1;;;22400:18:1;;;22393:32;22442:19;;10529:123:0::1;22069:398:1::0;10529:123:0::1;20426:33:::2;20440:10;20452:6;;20426:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;20426:13:0::2;::::0;-1:-1:-1;;;20426:33:0:i:2;:::-;20418:84;;;::::0;-1:-1:-1;;;20418:84:0;;24283:2:1;20418:84:0::2;::::0;::::2;24265:21:1::0;24322:2;24302:18;;;24295:30;24361:26;24341:18;;;24334:54;24405:18;;20418:84:0::2;24081:348:1::0;20418:84:0::2;20555:10;20538:28;::::0;;;:16:::2;:28;::::0;;;;;:38:::2;::::0;20569:7;;20538:38:::2;:::i;:::-;20521:13;;:55;;20513:151;;;::::0;-1:-1:-1;;;20513:151:0;;28005:2:1;20513:151:0::2;::::0;::::2;27987:21:1::0;28044:2;28024:18;;;28017:30;28083:34;28063:18;;;28056:62;28154:34;28134:18;;;28127:62;-1:-1:-1;;;28205:19:1;;;28198:37;28252:19;;20513:151:0::2;27803:474:1::0;20513:151:0::2;20708:7;20696:9;;:19;;;;:::i;:::-;20683:9;:32;20675:80;;;::::0;-1:-1:-1;;;20675:80:0;;19979:2:1;20675:80:0::2;::::0;::::2;19961:21:1::0;20018:2;19998:18;;;19991:30;-1:-1:-1;;;20037:18:1;;;20030:49;20096:18;;20675:80:0::2;19777:343:1::0;20675:80:0::2;20830:10;20813:28;::::0;;;:16:::2;:28;::::0;;;;:39;;20845:7;;20813:28;:39:::2;::::0;20845:7;;20813:39:::2;:::i;:::-;::::0;;;-1:-1:-1;20865:30:0::2;::::0;-1:-1:-1;20875:10:0::2;20887:7:::0;20865:9:::2;:30::i;20941:311::-:0;9581:10;9595:9;9581:23;9573:55;;;;-1:-1:-1;;;9573:55:0;;25398:2:1;9573:55:0;;;25380:21:1;25437:2;25417:18;;;25410:30;-1:-1:-1;;;25456:18:1;;;25449:49;25515:18;;9573:55:0;25196:343:1;9573:55:0;9947:18:::1;::::0;::::1;;:56:::0;::::1;;;;9988:15;9969;;:34;;9947:56;9939:114;;;::::0;-1:-1:-1;;;9939:114:0;;26884:2:1;9939:114:0::1;::::0;::::1;26866:21:1::0;26923:2;26903:18;;;26896:30;26962:33;26942:18;;;26935:61;27013:18;;9939:114:0::1;26682:355:1::0;9939:114:0::1;21060:7:::2;21043:13;;:24;;21035:77;;;::::0;-1:-1:-1;;;21035:77:0;;24636:2:1;21035:77:0::2;::::0;::::2;24618:21:1::0;24675:2;24655:18;;;24648:30;24714:29;24694:18;;;24687:57;24761:18;;21035:77:0::2;24434:351:1::0;21035:77:0::2;21156:7;21144:9;;:19;;;;:::i;:::-;21131:9;:32;21123:78;;;::::0;-1:-1:-1;;;21123:78:0;;19979:2:1;21123:78:0::2;::::0;::::2;19961:21:1::0;20018:2;19998:18;;;19991:30;-1:-1:-1;;;20037:18:1;;;20030:49;20096:18;;21123:78:0::2;19777:343:1::0;21123:78:0::2;21214:30;21224:10;21236:7;21214:9;:30::i;:::-;20941:311:::0;:::o;7827:203::-;7919:7;7939:24;7966:23;7980:8;7966:13;:23::i;:::-;7939:50;;8007:7;8015:6;8007:15;;;;;;;;:::i;:::-;;;;;;;8000:22;;;7827:203;;;;:::o;11177:108::-;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;11255:22:::1;11272:4;;11255:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;11255:16:0::1;::::0;-1:-1:-1;;;11255:22:0:i:1;19028:168::-:0;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;19123:10:::1;19108:11;;:25;;19100:55;;;::::0;-1:-1:-1;;;19100:55:0;;27244:2:1;19100:55:0::1;::::0;::::1;27226:21:1::0;27283:2;27263:18;;;27256:30;-1:-1:-1;;;27302:18:1;;;27295:47;27359:18;;19100:55:0::1;27042:341:1::0;19100:55:0::1;19166:9;:22:::0;19028:168::o;6266:263::-;6404:9;6399:123;6423:9;:16;6419:1;:20;6399:123;;;6461:49;6478:5;6485:3;6490:9;6500:1;6490:12;;;;;;;;:::i;:::-;;;;;;;6504:5;6461:16;:49::i;:::-;6441:3;;;;:::i;:::-;;;;6399:123;;;;6266:263;;;;:::o;5839:148::-;5937:42;5954:5;5961:3;5966:8;5937:42;;;;;;;;;;;;:16;:42::i;7187:538::-;-1:-1:-1;;;;;7305:19:0;;7286:16;7305:19;;;:9;:19;;;;;;7257:16;;7305:19;-1:-1:-1;;;;;7362:24:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7362:24:0;-1:-1:-1;7445:11:0;;7335:51;;-1:-1:-1;7397:14:0;;;7467:226;7491:12;7487:1;:16;7467:226;;;7551:3;7529:10;;;:7;:10;;;;;;-1:-1:-1;;;;;7529:10:0;:26;:56;;;;-1:-1:-1;7559:7:0;7567:12;7578:1;7567:8;:12;:::i;:::-;7559:21;;;;;;;;:::i;:::-;;;;;;;7584:1;7559:26;7529:56;7525:81;;;7589:14;;;;:::i;:::-;;;;7525:81;7624:10;;;;:7;:10;;;;;;-1:-1:-1;;;;;7624:22:0;;;:10;;:22;7620:62;;;7668:1;7650:7;7658:6;7650:15;;;;;;;;:::i;:::-;;;;;;;;;;:19;7671:8;;;;:::i;:::-;;;;7620:62;7505:3;;;;:::i;:::-;;;;7467:226;;;-1:-1:-1;7710:7:0;;7187:538;-1:-1:-1;;;;;7187:538:0:o;19805:110::-;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;19884:23:::1;19894:3;19899:7;19884:9;:23::i;13696:301::-:0;12108:24;;-1:-1:-1;;;;;12108:24:0;12094:10;:38;12086:91;;;;-1:-1:-1;;;12086:91:0;;;;;;;:::i;:::-;13795:27:::1;:34:::0;:39;13788:99:::1;;13851:27;:33;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;13851:33:0;;;;;-1:-1:-1;;;;;;13851:33:0::1;::::0;;;;;13788:99:::1;;;13904:24;:31:::0;:36;13897:93:::1;;13957:24;:30;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13897:93;;;13696:301::o:0;15699:1753::-;8265:5;;15761:16;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;15862:27:::1;:34:::0;:38;;;;:77:::1;;-1:-1:-1::0;15904:24:0::1;:31:::0;:35;;15862:77:::1;15854:121;;;::::0;-1:-1:-1;;;15854:121:0;;26524:2:1;15854:121:0::1;::::0;::::1;26506:21:1::0;26563:2;26543:18;;;26536:30;26602:33;26582:18;;;26575:61;26653:18;;15854:121:0::1;26322:355:1::0;15854:121:0::1;16070:24;:31:::0;16032:27:::1;:34:::0;:69:::1;16024:117;;;;-1:-1:-1::0;;;16024:117:0::1;;;;;;;:::i;:::-;16230:27;::::0;16268:130:::1;16292:24;:31:::0;16288:35;::::1;16268:130;;;16368:24;16393:1;16368:27;;;;;;;;:::i;:::-;;;;;;;;;16345:50;;;;;:::i;:::-;::::0;-1:-1:-1;16325:3:0;::::1;::::0;::::1;:::i;:::-;;;;16268:130;;;;16416:19;16439:4;16416:27;16408:78;;;;-1:-1:-1::0;;;16408:78:0::1;;;;;;;:::i;:::-;16770:27;:34:::0;16690:21:::1;::::0;16670:17:::1;::::0;16770:38:::1;::::0;16807:1:::1;16770:38;:::i;:::-;-1:-1:-1::0;;;;;16755:54:0::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;16755:54:0::1;;16723:86;;16890:9;16885:162;16909:27;:34:::0;16905:38;::::1;16885:162;;;17029:4;16998:24;17023:1;16998:27;;;;;;;;:::i;:::-;;;;;;;;;16986:9;:39;;;;:::i;:::-;16985:48;;;;:::i;:::-;16965:12;16978:1;16965:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:70;16945:3;::::1;::::0;::::1;:::i;:::-;;;;16885:162;;;-1:-1:-1::0;17161:27:0::1;:34:::0;17148:48;;17199:9;;17148:12;;:48;::::1;;;;;:::i;:::-;;;;;;:60;;;::::0;::::1;17224:9;17219:154;17243:27;:34:::0;17239:38;::::1;17219:154;;;17355:12;17368:1;17355:15;;;;;;;;:::i;:::-;;;;;;;17299:12;17312:27;:34;;;;17349:1;17312:38;;;;:::i;:::-;17299:52;;;;;;;;:::i;:::-;;;;;;:71;;;;;;;:::i;:::-;::::0;;-1:-1:-1;17279:3:0;::::1;::::0;::::1;:::i;:::-;;;;17219:154;;;-1:-1:-1::0;17432:12:0;-1:-1:-1;;;15699:1753:0;:::o;9064:405::-;9194:26;;-1:-1:-1;;12364:2:1;12360:15;;;12356:53;9194:26:0;;;12344:66:1;9151:4:0;;;;12426:12:1;;9194:26:0;;;;;;;;;;;;9184:37;;;;;;9168:53;;9237:9;9232:192;9256:6;:13;9252:1;:17;9232:192;;;9307:6;9314:1;9307:9;;;;;;;;:::i;:::-;;;;;;;9299:5;:17;:113;;9394:6;9401:1;9394:9;;;;;;;;:::i;:::-;;;;;;;9405:5;9377:34;;;;;;;;12606:19:1;;;12650:2;12641:12;;12634:28;12687:2;12678:12;;12449:247;9377:34:0;;;;;;;;;;;;;9367:45;;;;;;9299:113;;;9346:5;9353:6;9360:1;9353:9;;;;;;;;:::i;:::-;;;;;;;9329:34;;;;;;;;12606:19:1;;;12650:2;12641:12;;12634:28;12687:2;12678:12;;12449:247;9329:34:0;;;;;;;;;;;;;9319:45;;;;;;9299:113;9291:121;-1:-1:-1;9271:3:0;;;;:::i;:::-;;;;9232:192;;;-1:-1:-1;9450:11:0;;9441:20;;9064:405;-1:-1:-1;;;9064:405:0:o;12958:732::-;12108:24;;-1:-1:-1;;;;;12108:24:0;12094:10;:38;12086:91;;;;-1:-1:-1;;;12086:91:0;;;;;;;:::i;:::-;13117:27:::1;:34:::0;:39;:79;::::1;;;-1:-1:-1::0;13160:24:0::1;:31:::0;:36;13117:79:::1;13109:150;;;::::0;-1:-1:-1;;;13109:150:0;;19552:2:1;13109:150:0::1;::::0;::::1;19534:21:1::0;19591:2;19571:18;;;19564:30;19630:34;19610:18;;;19603:62;19701:28;19681:18;;;19674:56;19747:19;;13109:150:0::1;19350:422:1::0;13109:150:0::1;13299:7;:14;13278:10;:17;:35;13270:83;;;::::0;-1:-1:-1;;;13270:83:0;;19148:2:1;13270:83:0::1;::::0;::::1;19130:21:1::0;19187:2;19167:18;;;19160:30;19226:34;19206:18;;;19199:62;-1:-1:-1;;;19277:18:1;;;19270:33;19320:19;;13270:83:0::1;18946:399:1::0;13270:83:0::1;13364:20;::::0;13395:219:::1;13419:10;:17;13415:1;:21;13395:219;;;13474:7;13482:1;13474:10;;;;;;;;:::i;:::-;;;;;;;13458:26;;;;;:::i;:::-;;;13499:27;13532:10;13543:1;13532:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;13499:47;;::::1;::::0;::::1;::::0;;-1:-1:-1;13499:47:0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;13499:47:0::1;-1:-1:-1::0;;;;;13499:47:0;;::::1;::::0;;;::::1;::::0;;13591:10;;13561:24:::1;::::0;13591:10;;13599:1;;13591:10;::::1;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;13561:41;;::::1;::::0;::::1;::::0;;-1:-1:-1;13561:41:0;;;;;;;::::1;::::0;13438:3;::::1;::::0;::::1;:::i;:::-;;;;13395:219;;;;13632:12;13648:4;13632:20;13624:58;;;::::0;-1:-1:-1;;;13624:58:0;;29321:2:1;13624:58:0::1;::::0;::::1;29303:21:1::0;29360:2;29340:18;;;29333:30;29399:27;29379:18;;;29372:55;29444:18;;13624:58:0::1;29119:349:1::0;8764:105:0;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;8829:32:::1;8856:3;8829:18;:32::i;14444:1247::-:0;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;14569:27:::1;:34:::0;:38;;;;:77:::1;;-1:-1:-1::0;14611:24:0::1;:31:::0;:35;;14569:77:::1;14561:121;;;::::0;-1:-1:-1;;;14561:121:0;;26524:2:1;14561:121:0::1;::::0;::::1;26506:21:1::0;26563:2;26543:18;;;26536:30;26602:33;26582:18;;;26575:61;26653:18;;14561:121:0::1;26322:355:1::0;14561:121:0::1;14777:24;:31:::0;14739:27:::1;:34:::0;:69:::1;14731:117;;;;-1:-1:-1::0;;;14731:117:0::1;;;;;;;:::i;:::-;14937:27;::::0;14975:130:::1;14999:24;:31:::0;14995:35;::::1;14975:130;;;15075:24;15100:1;15075:27;;;;;;;;:::i;:::-;;;;;;;;;15052:50;;;;;:::i;:::-;::::0;-1:-1:-1;15032:3:0;::::1;::::0;::::1;:::i;:::-;;;;14975:130;;;;15123:19;15146:4;15123:27;15115:78;;;;-1:-1:-1::0;;;15115:78:0::1;;;;;;;:::i;:::-;15361:21;15341:17;15445:239;15469:27;:34:::0;15465:38;::::1;15445:239;;;15525:22;15595:4;15564:24;15589:1;15564:27;;;;;;;;:::i;:::-;;;;;;;;;15552:9;:39;;;;:::i;:::-;15551:48;;;;:::i;:::-;15525:75;;15615:57;15625:27;15653:1;15625:30;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;15625:30:0::1;15657:14:::0;15615:9:::1;:57::i;:::-;-1:-1:-1::0;15505:3:0;::::1;::::0;::::1;:::i;:::-;;;;15445:239;;11433:109:::0;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;11507:27:::1;11522:11;9025::::0;:25;8952:106;14285:124;14341:16;14377:24;14370:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14285:124;:::o;300:20::-;;;;;;;:::i;19921:323::-;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;20044:30;;::::1;20036:80;;;::::0;-1:-1:-1;;;20036:80:0;;21089:2:1;20036:80:0::1;::::0;::::1;21071:21:1::0;21128:2;21108:18;;;21101:30;21167:25;21147:18;;;21140:53;21210:18;;20036:80:0::1;20887:347:1::0;20036:80:0::1;20142:9;20137:100;20157:15:::0;;::::1;20137:100;;;20194:31;20204:4;;20209:1;20204:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20213:8;;20222:1;20213:11;;;;;;;:::i;:::-;;;;;;;20194:9;:31::i;:::-;20174:3:::0;::::1;::::0;::::1;:::i;:::-;;;;20137:100;;4918:148:::0;5006:52;5025:10;5037:9;5048;5006:18;:52::i;12189:135::-;12108:24;;-1:-1:-1;;;;;12108:24:0;12094:10;:38;12086:91;;;;-1:-1:-1;;;12086:91:0;;;;;;;:::i;:::-;12282:24:::1;:39:::0;;-1:-1:-1;;;;;;12282:39:0::1;::::0;;12189:135::o;21775:314::-;21905:5;;-1:-1:-1;;;;;21905:5:0;:29;21900:118;;21952:5;;:50;;-1:-1:-1;;;21952:50:0;;-1:-1:-1;;;;;14117:15:1;;;21952:50:0;;;14099:34:1;14169:15;;;14149:18;;;14142:43;14201:18;;;14194:34;;;21952:5:0;;;;:28;;14034:18:1;;21952:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21900:118;22028:53;22053:5;22060:3;22065:8;22075:5;22028:24;:53::i;:::-;21775:314;;;;:::o;11570:116::-;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;9840:18;:26;;-1:-1:-1;;9840:26:0;;;;;;;9868:15;:23;;;11291:115;;:::o;6730:281::-;6858:3;6829:17;;;:7;:17;;;;;;6795:13;;-1:-1:-1;;;;;6829:17:0;6821:87;;;;-1:-1:-1;;;6821:87:0;;29675:2:1;6821:87:0;;;29657:21:1;29714:2;29694:18;;;29687:30;29753:34;29733:18;;;29726:62;-1:-1:-1;;;29804:18:1;;;29797:39;29853:19;;6821:87:0;29473:405:1;6821:87:0;6950:12;6964:19;6974:8;6964:9;:19::i;:::-;6985:16;6933:69;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6919:84;;6730:281;;;:::o;10665:143::-;10743:21;;10719:4;;10743:21;;:62;;;;;10790:15;10768:18;;:37;;10736:69;;10665:143;:::o;17843:136::-;17527:19;;17557:197;17581:27;:34;17577:38;;17557:197;;;17655:27;17683:1;17655:30;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;17655:30:0;17641:10;:44;17637:106;;;17723:4;17706:21;;17637:106;17617:3;;;;:::i;:::-;;;;17557:197;;;;17772:14;17764:53;;;;-1:-1:-1;;;17764:53:0;;20327:2:1;17764:53:0;;;20309:21:1;20366:2;20346:18;;;20339:30;20405:28;20385:18;;;20378:56;20451:18;;17764:53:0;20125:350:1;17764:53:0;-1:-1:-1;17953:10:0::1;17926:38;::::0;;;:26:::1;:38;::::0;;;;:45;;-1:-1:-1;;17926:45:0::1;17967:4;17926:45;::::0;;17843:136::o;18274:137::-;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;18054:9:::1;18049:200;18073:27;:34:::0;18069:38;::::1;18049:200;;;18137:26;:58;18164:27;18192:1;18164:30;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;18164:30:0::1;18137:58:::0;;;::::1;::::0;;;;;;;;;::::1;;18129:108;;;::::0;-1:-1:-1;;;18129:108:0;;23096:2:1;18129:108:0::1;::::0;::::1;23078:21:1::0;23135:2;23115:18;;;23108:30;23174:34;23154:18;;;23147:62;-1:-1:-1;;;23225:18:1;;;23218:35;23270:19;;18129:108:0::1;22894:401:1::0;18129:108:0::1;18109:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18049:200;;;;18350:53:::2;18368:10;18381:21;18350:9;:53::i;14141:138::-:0;14200:24;14244:27;14237:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14237:34:0;;;;;;;;;;;;;;;;;;;;;;14141:138;:::o;8551:207::-;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8641:25:0;::::1;8633:77;;;::::0;-1:-1:-1;;;8633:77:0;;17981:2:1;8633:77:0::1;::::0;::::1;17963:21:1::0;18020:2;18000:18;;;17993:30;18059:34;18039:18;;;18032:62;-1:-1:-1;;;18110:18:1;;;18103:37;18157:19;;8633:77:0::1;17779:403:1::0;8633:77:0::1;8721:29;8740:9;8721:18;:29::i;6032:228::-:0;6146:9;6141:112;6165:9;:16;6161:1;:20;6141:112;;;6203:38;6216:5;6223:3;6228:9;6238:1;6228:12;;;;;;;;:::i;:::-;;;;;;;6203;:38::i;:::-;6183:3;;;;:::i;:::-;;;;6141:112;;18920:102;8265:5;;-1:-1:-1;;;;;8265:5:0;8274:10;8265:19;8257:64;;;;-1:-1:-1;;;8257:64:0;;;;;;;:::i;:::-;18992:9:::1;:22:::0;18920:102::o;3257:109::-;3335:23;;;;:16;;:23;;;;;:::i;2558:234::-;2639:21;;;;:11;:21;;;;;;-1:-1:-1;;;;;2639:28:0;;;:21;;:28;2635:150;;2684:21;;;;:11;:21;;;;;;;;:27;;-1:-1:-1;;;;;;2684:27:0;-1:-1:-1;;;;;2684:27:0;;;;;;;;;2740:7;:17;;;;;;;2731:42;;2684:21;;2740:17;;;;;2731:42;;;2558:234;;:::o;5072:248::-;5174:40;5193:10;5205:8;5174:18;:40::i;:::-;5166:104;;;;-1:-1:-1;;;5166:104:0;;23502:2:1;5166:104:0;;;23484:21:1;23541:2;23521:18;;;23514:30;23580:34;23560:18;;;23553:62;-1:-1:-1;;;23631:18:1;;;23624:49;23690:19;;5166:104:0;23300:415:1;5166:104:0;5281:31;5291:5;5298:3;5303:8;5281:9;:31::i;19404:364::-;19508:7;19494:11;;:21;;;;:::i;:::-;19481:9;;:34;;19473:88;;;;-1:-1:-1;;;19473:88:0;;26167:2:1;19473:88:0;;;26149:21:1;26206:2;26186:18;;;26179:30;26245;26225:18;;;26218:58;26293:18;;19473:88:0;25965:352:1;19473:88:0;19574:16;19593:11;;19607:1;19593:15;;;;:::i;:::-;19574:34;;19644:9;19639:89;19663:7;19659:1;:11;19639:89;;;19692:24;19698:3;19703:12;19714:1;19703:8;:12;:::i;:::-;19692:5;:24::i;:::-;19672:3;;;;:::i;:::-;;;;19639:89;;;;19753:7;19738:11;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19404:364:0:o;3150:101::-;3224:19;;;;:12;;:19;;;;;:::i;8347:198::-;8442:5;;;-1:-1:-1;;;;;8458:17:0;;;-1:-1:-1;;;;;;8458:17:0;;;;;;;8491:42;;8442:5;;;8458:17;8442:5;;8491:42;;8422:17;;8491:42;8411:134;8347:198;:::o;12724:197::-;12807:12;12833:8;-1:-1:-1;;;;;12825:22:0;12855:7;12825:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12806:61;;;12886:7;12878:35;;;;-1:-1:-1;;;12878:35:0;;18389:2:1;12878:35:0;;;18371:21:1;18428:2;18408:18;;;18401:30;-1:-1:-1;;;18447:18:1;;;18440:45;18502:18;;12878:35:0;18187:339:1;2798:326:0;2923:9;-1:-1:-1;;;;;2913:19:0;:6;-1:-1:-1;;;;;2913:19:0;;;2905:93;;;;-1:-1:-1;;;2905:93:0;;28891:2:1;2905:93:0;;;28873:21:1;28930:2;28910:18;;;28903:30;28969:34;28949:18;;;28942:62;29040:31;29020:18;;;29013:59;29089:19;;2905:93:0;28689:425:1;2905:93:0;-1:-1:-1;;;;;3009:24:0;;;;;;;:16;:24;;;;;;;;:35;;;;;;;;;;;;;:47;;-1:-1:-1;;3009:47:0;;;;;;;;;;3072:44;;16467:41:1;;;3072:44:0;;16440:18:1;3072:44:0;;;;;;;2798:326;;;:::o;5326:507::-;5444:34;5457:5;5464:3;5469:8;5444:12;:34::i;:::-;-1:-1:-1;;;;;5493:15:0;;;:20;5489:337;;5533:22;5559:3;-1:-1:-1;;;;;5559:14:0;5597:10;5609;5621:5;5628:8;5638:5;5574:70;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5574:70:0;;;;;;;;;;;5559:86;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5530:115;;;5660:16;5690:9;5679:31;;;;;;;;;;;;:::i;:::-;5660:50;-1:-1:-1;;;;;;;;;;5733:23:0;;;5725:89;;;;-1:-1:-1;;;5725:89:0;;22674:2:1;5725:89:0;;;22656:21:1;22713:2;22693:18;;;22686:30;22752:34;22732:18;;;22725:62;-1:-1:-1;;;22803:18:1;;;22796:51;22864:19;;5725:89:0;22472:417:1;5725:89:0;5515:311;;5326:507;;;;:::o;3436:536::-;3494:13;3524:11;3520:32;;-1:-1:-1;;3539:10:0;;;;;;;;;;;;-1:-1:-1;;;3539:10:0;;;;;3436:536::o;3520:32::-;3581:6;3562:16;3615:52;3622:13;;3615:52;;3639:9;;;;:::i;:::-;;-1:-1:-1;3650:14:0;;-1:-1:-1;3662:2:0;3650:14;;:::i;:::-;;;3615:52;;;3701:20;3734:7;-1:-1:-1;;;;;3724:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3724:18:0;;3701:41;;3753:110;3760:11;;3753:110;;3775:9;;;;:::i;:::-;;-1:-1:-1;3831:11:0;;-1:-1:-1;3840:2:0;3831:6;:11;:::i;:::-;3818:26;;:2;:26;:::i;:::-;3805:41;;3786:7;3794;3786:16;;;;;;;;:::i;:::-;;;;:60;-1:-1:-1;;;;;3786:60:0;;;;;;;;-1:-1:-1;3848:12:0;3858:2;3848:12;;:::i;:::-;;;3753:110;;;3913:7;3436:536;-1:-1:-1;;;;3436:536:0:o;4005:376::-;4100:4;4125:17;;;:7;:17;;;;;;-1:-1:-1;;;;;4125:17:0;4117:98;;;;-1:-1:-1;;;4117:98:0;;25746:2:1;4117:98:0;;;25728:21:1;25785:2;25765:18;;;25758:30;25824:34;25804:18;;;25797:62;-1:-1:-1;;;25875:18:1;;;25868:50;25935:19;;4117:98:0;25544:416:1;4117:98:0;4226:14;4243:17;;;:7;:17;;;;;;-1:-1:-1;;;;;4243:17:0;;;;4279:18;;;;;:55;;-1:-1:-1;4313:21:0;;;;:11;:21;;;;;;-1:-1:-1;;;;;4301:33:0;;;4313:21;;4301:33;4279:55;:93;;;-1:-1:-1;;;;;;4338:24:0;;;;;;;:16;:24;;;;;;;;:34;;;;;;;;;;;;4271:102;4005:376;-1:-1:-1;;;;4005:376:0:o;1863:671::-;1973:17;;;;:7;:17;;;;;;-1:-1:-1;;;;;1964:26:0;;;1973:17;;1964:26;1956:88;;;;-1:-1:-1;;;1956:88:0;;21853:2:1;1956:88:0;;;21835:21:1;21892:2;21872:18;;;21865:30;21931:34;21911:18;;;21904:62;-1:-1:-1;;;21982:18:1;;;21975:47;22039:19;;1956:88:0;21651:413:1;1956:88:0;-1:-1:-1;;;;;2063:19:0;;2055:78;;;;-1:-1:-1;;;2055:78:0;;18733:2:1;2055:78:0;;;18715:21:1;18772:2;18752:18;;;18745:30;18811:34;18791:18;;;18784:62;-1:-1:-1;;;18862:18:1;;;18855:44;18916:19;;2055:78:0;18531:410:1;2055:78:0;2288:3;2255:21;;;:11;:21;;;;;;-1:-1:-1;;;;;2255:21:0;:37;2251:104;;2310:32;2327:3;2333:8;2310;:32::i;:::-;2368:17;;;;:7;:17;;;;;;;;:23;;-1:-1:-1;;;;;;2368:23:0;-1:-1:-1;;;;;2368:23:0;;;;;;;;;;2403:16;;;;:9;:16;;;;;:18;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;2432:14:0;;;;;;:9;:14;;;;;:16;;;;;;:::i;:::-;;;;;;2517:8;2512:3;-1:-1:-1;;;;;2496:30:0;2505:5;-1:-1:-1;;;;;2496:30:0;;;;;;;;;;;1863:671;;;:::o;1159:679::-;-1:-1:-1;;;;;1241:19:0;;1233:69;;;;-1:-1:-1;;;1233:69:0;;24992:2:1;1233:69:0;;;24974:21:1;25031:2;25011:18;;;25004:30;25070:34;25050:18;;;25043:62;-1:-1:-1;;;25121:18:1;;;25114:35;25166:19;;1233:69:0;24790:401:1;1233:69:0;1350:3;1321:17;;;:7;:17;;;;;;-1:-1:-1;;;;;1321:17:0;:33;1313:92;;;;-1:-1:-1;;;1313:92:0;;27590:2:1;1313:92:0;;;27572:21:1;27629:2;27609:18;;;27602:30;27668:34;27648:18;;;27641:62;-1:-1:-1;;;27719:18:1;;;27712:44;27773:19;;1313:92:0;27388:410:1;1313:92:0;-1:-1:-1;;;;;1450:14:0;;;;;;:9;:14;;;;;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;1477:17:0;;;;:7;:17;;;;;;:23;;-1:-1:-1;;;;;;1477:23:0;-1:-1:-1;;;;;1477:23:0;;;;;;;;1666:37;;1477:17;;;1666:37;;1477:17;;1666:37;1159:679;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:367:1;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;-1:-1:-1;;;;;214:30:1;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:681::-;440:5;493:3;486:4;478:6;474:17;470:27;460:55;;511:1;508;501:12;460:55;547:6;534:20;573:4;597:68;613:51;661:2;613:51;:::i;:::-;597:68;:::i;:::-;687:3;711:2;706:3;699:15;739:2;734:3;730:12;723:19;;774:2;766:6;762:15;826:3;821:2;815;812:1;808:10;800:6;796:23;792:32;789:41;786:61;;;843:1;840;833:12;786:61;865:1;875:163;889:2;886:1;883:9;875:163;;;946:17;;934:30;;984:12;;;;1016;;;;907:1;900:9;875:163;;;-1:-1:-1;1056:5:1;;386:681;-1:-1:-1;;;;;;;386:681:1:o;1072:160::-;1137:20;;1193:13;;1186:21;1176:32;;1166:60;;1222:1;1219;1212:12;1166:60;1072:160;;;:::o;1237:530::-;1279:5;1332:3;1325:4;1317:6;1313:17;1309:27;1299:55;;1350:1;1347;1340:12;1299:55;1386:6;1373:20;-1:-1:-1;;;;;1408:2:1;1405:26;1402:52;;;1434:18;;:::i;:::-;1478:55;1521:2;1502:13;;-1:-1:-1;;1498:27:1;1527:4;1494:38;1478:55;:::i;:::-;1558:2;1549:7;1542:19;1604:3;1597:4;1592:2;1584:6;1580:15;1576:26;1573:35;1570:55;;;1621:1;1618;1611:12;1570:55;1686:2;1679:4;1671:6;1667:17;1660:4;1651:7;1647:18;1634:55;1734:1;1709:16;;;1727:4;1705:27;1698:38;;;;1713:7;1237:530;-1:-1:-1;;;1237:530:1:o;1772:247::-;1831:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:52;;;1900:1;1897;1890:12;1852:52;1939:9;1926:23;1958:31;1983:5;1958:31;:::i;:::-;2008:5;1772:247;-1:-1:-1;;;1772:247:1:o;2024:388::-;2092:6;2100;2153:2;2141:9;2132:7;2128:23;2124:32;2121:52;;;2169:1;2166;2159:12;2121:52;2208:9;2195:23;2227:31;2252:5;2227:31;:::i;:::-;2277:5;-1:-1:-1;2334:2:1;2319:18;;2306:32;2347:33;2306:32;2347:33;:::i;:::-;2399:7;2389:17;;;2024:388;;;;;:::o;2417:624::-;2519:6;2527;2535;2588:2;2576:9;2567:7;2563:23;2559:32;2556:52;;;2604:1;2601;2594:12;2556:52;2643:9;2630:23;2662:31;2687:5;2662:31;:::i;:::-;2712:5;-1:-1:-1;2769:2:1;2754:18;;2741:32;2782:33;2741:32;2782:33;:::i;:::-;2834:7;-1:-1:-1;2892:2:1;2877:18;;2864:32;-1:-1:-1;;;;;2908:30:1;;2905:50;;;2951:1;2948;2941:12;2905:50;2974:61;3027:7;3018:6;3007:9;3003:22;2974:61;:::i;:::-;2964:71;;;2417:624;;;;;:::o;3046:844::-;3166:6;3174;3182;3190;3243:3;3231:9;3222:7;3218:23;3214:33;3211:53;;;3260:1;3257;3250:12;3211:53;3299:9;3286:23;3318:31;3343:5;3318:31;:::i;:::-;3368:5;-1:-1:-1;3425:2:1;3410:18;;3397:32;3438:33;3397:32;3438:33;:::i;:::-;3490:7;-1:-1:-1;3548:2:1;3533:18;;3520:32;-1:-1:-1;;;;;3601:14:1;;;3598:34;;;3628:1;3625;3618:12;3598:34;3651:61;3704:7;3695:6;3684:9;3680:22;3651:61;:::i;:::-;3641:71;;3765:2;3754:9;3750:18;3737:32;3721:48;;3794:2;3784:8;3781:16;3778:36;;;3810:1;3807;3800:12;3778:36;;3833:51;3876:7;3865:8;3854:9;3850:24;3833:51;:::i;:::-;3823:61;;;3046:844;;;;;;;:::o;3895:456::-;3972:6;3980;3988;4041:2;4029:9;4020:7;4016:23;4012:32;4009:52;;;4057:1;4054;4047:12;4009:52;4096:9;4083:23;4115:31;4140:5;4115:31;:::i;:::-;4165:5;-1:-1:-1;4222:2:1;4207:18;;4194:32;4235:33;4194:32;4235:33;:::i;:::-;3895:456;;4287:7;;-1:-1:-1;;;4341:2:1;4326:18;;;;4313:32;;3895:456::o;4356:665::-;4451:6;4459;4467;4475;4528:3;4516:9;4507:7;4503:23;4499:33;4496:53;;;4545:1;4542;4535:12;4496:53;4584:9;4571:23;4603:31;4628:5;4603:31;:::i;:::-;4653:5;-1:-1:-1;4710:2:1;4695:18;;4682:32;4723:33;4682:32;4723:33;:::i;:::-;4775:7;-1:-1:-1;4829:2:1;4814:18;;4801:32;;-1:-1:-1;4884:2:1;4869:18;;4856:32;-1:-1:-1;;;;;4900:30:1;;4897:50;;;4943:1;4940;4933:12;4897:50;4966:49;5007:7;4998:6;4987:9;4983:22;4966:49;:::i;5026:1045::-;5119:6;5127;5180:2;5168:9;5159:7;5155:23;5151:32;5148:52;;;5196:1;5193;5186:12;5148:52;5235:9;5222:23;5254:31;5279:5;5254:31;:::i;:::-;5304:5;-1:-1:-1;5328:2:1;5366:18;;;5353:32;-1:-1:-1;;;;;5397:30:1;;5394:50;;;5440:1;5437;5430:12;5394:50;5463:22;;5516:4;5508:13;;5504:27;-1:-1:-1;5494:55:1;;5545:1;5542;5535:12;5494:55;5581:2;5568:16;5604:68;5620:51;5668:2;5620:51;:::i;5604:68::-;5694:3;5718:2;5713:3;5706:15;5746:2;5741:3;5737:12;5730:19;;5777:2;5773;5769:11;5825:7;5820:2;5814;5811:1;5807:10;5803:2;5799:19;5795:28;5792:41;5789:61;;;5846:1;5843;5836:12;5789:61;5868:1;5859:10;;5878:163;5892:2;5889:1;5886:9;5878:163;;;5949:17;;5937:30;;5910:1;5903:9;;;;;5987:12;;;;6019;;5878:163;;;5882:3;6060:5;6050:15;;;;;;;5026:1045;;;;;:::o;6076:315::-;6141:6;6149;6202:2;6190:9;6181:7;6177:23;6173:32;6170:52;;;6218:1;6215;6208:12;6170:52;6257:9;6244:23;6276:31;6301:5;6276:31;:::i;:::-;6326:5;-1:-1:-1;6350:35:1;6381:2;6366:18;;6350:35;:::i;:::-;6340:45;;6076:315;;;;;:::o;6396:::-;6464:6;6472;6525:2;6513:9;6504:7;6500:23;6496:32;6493:52;;;6541:1;6538;6531:12;6493:52;6580:9;6567:23;6599:31;6624:5;6599:31;:::i;:::-;6649:5;6701:2;6686:18;;;;6673:32;;-1:-1:-1;;;6396:315:1:o;6716:773::-;6838:6;6846;6854;6862;6915:2;6903:9;6894:7;6890:23;6886:32;6883:52;;;6931:1;6928;6921:12;6883:52;6971:9;6958:23;-1:-1:-1;;;;;7041:2:1;7033:6;7030:14;7027:34;;;7057:1;7054;7047:12;7027:34;7096:70;7158:7;7149:6;7138:9;7134:22;7096:70;:::i;:::-;7185:8;;-1:-1:-1;7070:96:1;-1:-1:-1;7273:2:1;7258:18;;7245:32;;-1:-1:-1;7289:16:1;;;7286:36;;;7318:1;7315;7308:12;7286:36;;7357:72;7421:7;7410:8;7399:9;7395:24;7357:72;:::i;:::-;6716:773;;;;-1:-1:-1;7448:8:1;-1:-1:-1;;;;6716:773:1:o;7494:1242::-;7620:6;7628;7681:2;7669:9;7660:7;7656:23;7652:32;7649:52;;;7697:1;7694;7687:12;7649:52;7737:9;7724:23;-1:-1:-1;;;;;7807:2:1;7799:6;7796:14;7793:34;;;7823:1;7820;7813:12;7793:34;7861:6;7850:9;7846:22;7836:32;;7906:7;7899:4;7895:2;7891:13;7887:27;7877:55;;7928:1;7925;7918:12;7877:55;7964:2;7951:16;7986:4;8010:68;8026:51;8074:2;8026:51;:::i;8010:68::-;8100:3;8124:2;8119:3;8112:15;8152:2;8147:3;8143:12;8136:19;;8183:2;8179;8175:11;8231:7;8226:2;8220;8217:1;8213:10;8209:2;8205:19;8201:28;8198:41;8195:61;;;8252:1;8249;8242:12;8195:61;8274:1;8265:10;;8284:238;8298:2;8295:1;8292:9;8284:238;;;8369:3;8356:17;8386:31;8411:5;8386:31;:::i;:::-;8430:18;;8316:1;8309:9;;;;;8468:12;;;;8500;;8284:238;;;-1:-1:-1;8541:5:1;-1:-1:-1;;8584:18:1;;8571:32;;-1:-1:-1;;8615:16:1;;;8612:36;;;8644:1;8641;8634:12;8612:36;;8667:63;8722:7;8711:8;8700:9;8696:24;8667:63;:::i;:::-;8657:73;;;7494:1242;;;;;:::o;8741:505::-;8836:6;8844;8852;8905:2;8893:9;8884:7;8880:23;8876:32;8873:52;;;8921:1;8918;8911:12;8873:52;8961:9;8948:23;-1:-1:-1;;;;;8986:6:1;8983:30;8980:50;;;9026:1;9023;9016:12;8980:50;9065:70;9127:7;9118:6;9107:9;9103:22;9065:70;:::i;:::-;9154:8;;9039:96;;-1:-1:-1;9236:2:1;9221:18;;;;9208:32;;8741:505;-1:-1:-1;;;;8741:505:1:o;9251:248::-;9316:6;9324;9377:2;9365:9;9356:7;9352:23;9348:32;9345:52;;;9393:1;9390;9383:12;9345:52;9416:26;9432:9;9416:26;:::i;9504:180::-;9563:6;9616:2;9604:9;9595:7;9591:23;9587:32;9584:52;;;9632:1;9629;9622:12;9584:52;-1:-1:-1;9655:23:1;;9504:180;-1:-1:-1;9504:180:1:o;9689:245::-;9747:6;9800:2;9788:9;9779:7;9775:23;9771:32;9768:52;;;9816:1;9813;9806:12;9768:52;9855:9;9842:23;9874:30;9898:5;9874:30;:::i;9939:249::-;10008:6;10061:2;10049:9;10040:7;10036:23;10032:32;10029:52;;;10077:1;10074;10067:12;10029:52;10109:9;10103:16;10128:30;10152:5;10128:30;:::i;10193:592::-;10264:6;10272;10325:2;10313:9;10304:7;10300:23;10296:32;10293:52;;;10341:1;10338;10331:12;10293:52;10381:9;10368:23;-1:-1:-1;;;;;10451:2:1;10443:6;10440:14;10437:34;;;10467:1;10464;10457:12;10437:34;10505:6;10494:9;10490:22;10480:32;;10550:7;10543:4;10539:2;10535:13;10531:27;10521:55;;10572:1;10569;10562:12;10521:55;10612:2;10599:16;10638:2;10630:6;10627:14;10624:34;;;10654:1;10651;10644:12;10624:34;10699:7;10694:2;10685:6;10681:2;10677:15;10673:24;10670:37;10667:57;;;10720:1;10717;10710:12;10667:57;10751:2;10743:11;;;;;10773:6;;-1:-1:-1;10193:592:1;;-1:-1:-1;;;;10193:592:1:o;10975:257::-;11016:3;11054:5;11048:12;11081:6;11076:3;11069:19;11097:63;11153:6;11146:4;11141:3;11137:14;11130:4;11123:5;11119:16;11097:63;:::i;:::-;11214:2;11193:15;-1:-1:-1;;11189:29:1;11180:39;;;;11221:4;11176:50;;10975:257;-1:-1:-1;;10975:257:1:o;11237:973::-;11322:12;;11287:3;;11377:1;11397:18;;;;11450;;;;11477:61;;11531:4;11523:6;11519:17;11509:27;;11477:61;11557:2;11605;11597:6;11594:14;11574:18;11571:38;11568:161;;;11651:10;11646:3;11642:20;11639:1;11632:31;11686:4;11683:1;11676:15;11714:4;11711:1;11704:15;11568:161;11745:18;11772:104;;;;11890:1;11885:319;;;;11738:466;;11772:104;-1:-1:-1;;11805:24:1;;11793:37;;11850:16;;;;-1:-1:-1;11772:104:1;;11885:319;30614:1;30607:14;;;30651:4;30638:18;;11979:1;11993:165;12007:6;12004:1;12001:13;11993:165;;;12085:14;;12072:11;;;12065:35;12128:16;;;;12022:10;;11993:165;;;11997:3;;12187:6;12182:3;12178:16;12171:23;;11738:466;;;;;;;11237:973;;;;:::o;12701:274::-;12830:3;12868:6;12862:13;12884:53;12930:6;12925:3;12918:4;12910:6;12906:17;12884:53;:::i;:::-;12953:16;;;;;12701:274;-1:-1:-1;;12701:274:1:o;12980:456::-;13201:3;13229:38;13263:3;13255:6;13229:38;:::i;:::-;13296:6;13290:13;13312:52;13357:6;13353:2;13346:4;13338:6;13334:17;13312:52;:::i;:::-;13380:50;13422:6;13418:2;13414:15;13406:6;13380:50;:::i;:::-;13373:57;12980:456;-1:-1:-1;;;;;;;12980:456:1:o;14239:488::-;-1:-1:-1;;;;;14508:15:1;;;14490:34;;14560:15;;14555:2;14540:18;;14533:43;14607:2;14592:18;;14585:34;;;14655:3;14650:2;14635:18;;14628:31;;;14433:4;;14676:45;;14701:19;;14693:6;14676:45;:::i;:::-;14668:53;14239:488;-1:-1:-1;;;;;;14239:488:1:o;15011:674::-;15198:2;15250:21;;;15320:13;;15223:18;;;15342:22;;;15169:4;;15198:2;15421:15;;;;15395:2;15380:18;;;15169:4;15464:195;15478:6;15475:1;15472:13;15464:195;;;15543:13;;-1:-1:-1;;;;;15539:39:1;15527:52;;15634:15;;;;15599:12;;;;15575:1;15493:9;15464:195;;;-1:-1:-1;15676:3:1;;15011:674;-1:-1:-1;;;;;;15011:674:1:o;15690:632::-;15861:2;15913:21;;;15983:13;;15886:18;;;16005:22;;;15832:4;;15861:2;16084:15;;;;16058:2;16043:18;;;15832:4;16127:169;16141:6;16138:1;16135:13;16127:169;;;16202:13;;16190:26;;16271:15;;;;16236:12;;;;16163:1;16156:9;16127:169;;16742:219;16891:2;16880:9;16873:21;16854:4;16911:44;16951:2;16940:9;16936:18;16928:6;16911:44;:::i;16966:404::-;17168:2;17150:21;;;17207:2;17187:18;;;17180:30;17246:34;17241:2;17226:18;;17219:62;-1:-1:-1;;;17312:2:1;17297:18;;17290:38;17360:3;17345:19;;16966:404::o;17375:399::-;17577:2;17559:21;;;17616:2;17596:18;;;17589:30;17655:34;17650:2;17635:18;;17628:62;-1:-1:-1;;;17721:2:1;17706:18;;17699:33;17764:3;17749:19;;17375:399::o;23720:356::-;23922:2;23904:21;;;23941:18;;;23934:30;24000:34;23995:2;23980:18;;23973:62;24067:2;24052:18;;23720:356::o;28282:402::-;28484:2;28466:21;;;28523:2;28503:18;;;28496:30;28562:34;28557:2;28542:18;;28535:62;-1:-1:-1;;;28628:2:1;28613:18;;28606:36;28674:3;28659:19;;28282:402::o;30065:275::-;30136:2;30130:9;30201:2;30182:13;;-1:-1:-1;;30178:27:1;30166:40;;-1:-1:-1;;;;;30221:34:1;;30257:22;;;30218:62;30215:88;;;30283:18;;:::i;:::-;30319:2;30312:22;30065:275;;-1:-1:-1;30065:275:1:o;30345:191::-;30413:4;-1:-1:-1;;;;;30438:6:1;30435:30;30432:56;;;30468:18;;:::i;:::-;-1:-1:-1;30513:1:1;30509:14;30525:4;30505:25;;30345:191::o;30667:128::-;30707:3;30738:1;30734:6;30731:1;30728:13;30725:39;;;30744:18;;:::i;:::-;-1:-1:-1;30780:9:1;;30667:128::o;30800:120::-;30840:1;30866;30856:35;;30871:18;;:::i;:::-;-1:-1:-1;30905:9:1;;30800:120::o;30925:168::-;30965:7;31031:1;31027;31023:6;31019:14;31016:1;31013:21;31008:1;31001:9;30994:17;30990:45;30987:71;;;31038:18;;:::i;:::-;-1:-1:-1;31078:9:1;;30925:168::o;31098:125::-;31138:4;31166:1;31163;31160:8;31157:34;;;31171:18;;:::i;:::-;-1:-1:-1;31208:9:1;;31098:125::o;31228:258::-;31300:1;31310:113;31324:6;31321:1;31318:13;31310:113;;;31400:11;;;31394:18;31381:11;;;31374:39;31346:2;31339:10;31310:113;;;31441:6;31438:1;31435:13;31432:48;;;-1:-1:-1;;31476:1:1;31458:16;;31451:27;31228:258::o;31491:136::-;31530:3;31558:5;31548:39;;31567:18;;:::i;:::-;-1:-1:-1;;;31603:18:1;;31491:136::o;31632:380::-;31711:1;31707:12;;;;31754;;;31775:61;;31829:4;31821:6;31817:17;31807:27;;31775:61;31882:2;31874:6;31871:14;31851:18;31848:38;31845:161;;;31928:10;31923:3;31919:20;31916:1;31909:31;31963:4;31960:1;31953:15;31991:4;31988:1;31981:15;31845:161;;31632:380;;;:::o;32017:135::-;32056:3;-1:-1:-1;;32077:17:1;;32074:43;;;32097:18;;:::i;:::-;-1:-1:-1;32144:1:1;32133:13;;32017:135::o;32157:112::-;32189:1;32215;32205:35;;32220:18;;:::i;:::-;-1:-1:-1;32254:9:1;;32157:112::o;32274:127::-;32335:10;32330:3;32326:20;32323:1;32316:31;32366:4;32363:1;32356:15;32390:4;32387:1;32380:15;32406:127;32467:10;32462:3;32458:20;32455:1;32448:31;32498:4;32495:1;32488:15;32522:4;32519:1;32512:15;32538:127;32599:10;32594:3;32590:20;32587:1;32580:31;32630:4;32627:1;32620:15;32654:4;32651:1;32644:15;32670:127;32731:10;32726:3;32722:20;32719:1;32712:31;32762:4;32759:1;32752:15;32786:4;32783:1;32776:15;32802:127;32863:10;32858:3;32854:20;32851:1;32844:31;32894:4;32891:1;32884:15;32918:4;32915:1;32908:15;32934:131;-1:-1:-1;;;;;33009:31:1;;32999:42;;32989:70;;33055:1;33052;33045:12;33070:131;-1:-1:-1;;;;;;33144:32:1;;33134:43;;33124:71;;33191:1;33188;33181:12

Swarm Source

ipfs://97b68da279f38edfa74254463fc53a99bebdef28dc9a7f58ff02073adce01cbe

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

OVERVIEW

8888 Collection Adventure 2 Earn Explorers of a supernatural world seeking out enigmatic powerful MasksMINT HERE: https://ascendednft.io/https://twitter.com/AscendedOasis

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

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