ETH Price: $3,309.63 (-3.21%)
Gas: 18 Gwei

Contract

0xFD8f4aC172457FD30Df92395BC69d4eF6d92eDd4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Purchase WL Vend...202229882024-07-03 2:25:5914 hrs ago1719973559IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.0010215.64893914
Purchase WL Vend...202223462024-07-03 0:16:4716 hrs ago1719965807IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.000436492.48406031
Purchase WL Vend...202220242024-07-02 23:11:4717 hrs ago1719961907IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.000899284.97547911
Purchase WL Vend...202220202024-07-02 23:10:5917 hrs ago1719961859IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.000471712.60985556
Purchase WL Vend...202215522024-07-02 21:36:4719 hrs ago1719956207IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.00126337.18933551
Purchase WL Vend...202215242024-07-02 21:31:1119 hrs ago1719955871IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.000739394.20783417
Purchase WL Vend...202214482024-07-02 21:15:5919 hrs ago1719954959IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.001206996.67796542
Purchase WL Vend...202208872024-07-02 19:22:3521 hrs ago1719948155IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.00103795.74241778
Purchase WL Vend...202207892024-07-02 19:02:4722 hrs ago1719946967IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.000892865.08121159
Purchase WL Vend...202207552024-07-02 18:55:5922 hrs ago1719946559IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.001422847.19180747
Add WL Vending I...202207262024-07-02 18:50:1122 hrs ago1719946211IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.00143056.34532397
Purchase WL Vend...202036622024-06-30 9:39:353 days ago1719740375IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.000833754.62527969
Purchase WL Vend...201830502024-06-27 12:33:236 days ago1719491603IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.00131777.30090689
Purchase WL Vend...201798352024-06-27 1:47:476 days ago1719452867IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.0006563.54050354
Purchase WL Vend...201782602024-06-26 20:31:236 days ago1719433883IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.001387187.48676659
Purchase WL Vend...201776682024-06-26 18:31:356 days ago1719426695IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.001966959.95498635
Add WL Vending I...201768952024-06-26 15:55:357 days ago1719417335IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.0033586812.42249724
Purchase WL Vend...199815252024-05-30 8:39:1134 days ago1717058351IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.0026237414.93146769
Purchase WL Vend...199814302024-05-30 8:20:1134 days ago1717057211IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.002616714.89139379
Purchase WL Vend...199809182024-05-30 6:37:1134 days ago1717051031IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.0033360618.45752289
Purchase WL Vend...199800222024-05-30 3:36:5934 days ago1717040219IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.001560889.13229639
Purchase WL Vend...199796942024-05-30 2:30:2334 days ago1717036223IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.001564817.90936401
Add WL Vending I...199794972024-05-30 1:50:5934 days ago1717033859IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.001818188.07054459
Purchase WL Vend...198646732024-05-14 0:27:5950 days ago1715646479IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.001098966.08896957
Add WL Vending I...198644232024-05-13 23:37:5950 days ago1715643479IN
0xFD8f4aC1...F6d92eDd4
0 ETH0.000871323.2218509
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MartianMarketWL

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-10
*/

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


/////////////////////////////////////////////////////////////////////////
//     __  ___         __  _             __  ___         __       __   //
//    /  |/  /__ _____/ /_(_)__ ____    /  |/  /__ _____/ /_____ / /_  //
//   / /|_/ / _ `/ __/ __/ / _ `/ _ \  / /|_/ / _ `/ __/  '_/ -_) __/  //
//  /_/  /_/\_,_/_/  \__/_/\_,_/_//_/ /_/  /_/\_,_/_/ /_/\_\\__/\__/   //
//                                                by 0xInuarashi.eth   //
/////////////////////////////////////////////////////////////////////////

/*
    Martian Market by 0xInuarashi for Message to Martians (Martians)
    A Fully functioning on-chain CMS system that can be tapped into front-ends
    and create a responsive website based on contract-specific databases.

    ** THIS IS A DECENTRALIZED AND TRUSTLESS WHITELIST MARKETPLACE CREATION SYSTEM **

    We chose not to use a proxy contract as multiple approvals have to be done
    for this contract. In this case, we chose the most decentralized approach
    which is to create an immutable contract with minimal owner access and 
    allow full control of contract owners' functions over their own database, 
    which is not editable or tamperable even by the Ownable owner themself.

    >>>> Governance Model <<<<

        Ownable Owner 
            - Set Super Governor Address
            - Renounce Super Governor Address (1-way)
            - Set Governor Address
            - Set $MES Address 

        Super Governor
            - Enable / Disable Projects
            - Set Project Infos 
            - Unstuck Owners (On Super Governor Enabled Projects Only)

        Governor
            - Set Registry Price
            - Set Registry Treasury Address
            - Withdraw $MES from Contract

        Contract Owner
            - Register Their Contract with $MES
            - Set Project Info
            - Set Treasury Address
            - Set Contract Controllers
            - Add Items 
            - Modify Items
            - Remove Items

        Contract Controller
            - Add Items 
            - Modify Items
            - Remove Items

    >>>> Interfacing <<<<<

    To draw a front-end interface:
    
        getAllEnabledContracts() - Enumerate all available contracts for selection
        (for contract-specific front-end interfaces, just pull data from your 
        contract only)
    
        getWLVendingItemsAll(address contract_) - Enumerate all vending items
        available for the contract. Supports over 1000 items in 1 call but
        if you get gas errors, use a pagination method instead.

        Pagination method: 
        getWLVendingItemsPaginated(address contract_, uint256 start_, uint256 end_)
        for the start_, generally you can use 0, and for end_, inquire from function
        getWLVendingItemsLength(address contract_)

    For interaction of users:

        purchaseWLVendingItem(address contract_, uint256 index_) can be used
        and automatically populated to the correct buttons for each WLVendingItem
        for that, an ethers.js call is invoked for the user to call the function
        which will transfer their ERC20 token and add them to the purchasers list

    For administration:

        setTreasuryAddress(address contract_, address treasury_) can only be set
        by the contract owner. For this, they are able to set where the ERC20 tokens
        from the whitelist marketplace sales go to. By default, this is 0x...dead
        effectively burning the tokens

        addWLVendingItem(address contract_, string calldata title_, 
        string calldata imageUri_, string calldata projectUri_,
        string calldata description_, uint32 amountAvailable_, uint32 deadline_,
        uint256 price_) is used to create a new WLVendingItem for your contract
        with the details as the input arguments stated.

        modifyWLVendingItem(address contract_, uint256 index_, 
        WLVendingItem memory WLVendingItem_) lets you modify a WLVendingItem.
        You have to pass in a tuple instead. Only use when necessary. Not
        recommended to use.

        deleteMostRecentWLVendingItem(address contract_) we use a .pop() for this so
        it can only delete the most recent item. For some mistakes that you made and
        want to erase them.

        manageController(address contract_, address operator_, bool bool_) is a special
        governance function which allows you to add controllers to the contract
        to do actions on your behalf. 
*/

/*
    Patch Notes:

     - start timestamp [/]

     - priceController? [/]
     - tokenController? [/]

     - multi-token support? [~] managed by TokenController
     - da module? [~] managed by PriceController
     - bid auction module? [~] managed by MarketBidder

     - public view of contract + override owner (controller) for interfaces [/]
     - owner of erc721 -> erc20 mapping for erc20 native token returns [/]

     - metadata url option? [~] front-end managed through title tag and then leaving
       everything else blank
*/

abstract contract Ownable {
    address public owner; 
    constructor() { owner = msg.sender; }
    modifier onlyOwner { require(owner == msg.sender, "Not Owner!"); _; }
    function transferOwnership(address new_) external onlyOwner { owner = new_; }
}

interface IERC20 {
    function owner() external view returns (address);
    function balanceOf(address address_) external view returns (uint256);
    function transfer(address to_, uint256 amount_) external returns (bool);
    function transferFrom(address from_, address to_, uint256 amount_) external;
}

interface IOwnable {
    function owner() external view returns (address);
}

interface IPriceController {
    function getPriceOfItem(address contract_, uint256 index_) external view
    returns (uint256);
}

interface ITokenController {
    function getTokenNameOfItem(address contract_, uint256 index_) external view
    returns (string memory);
    function getTokenImageOfItem(address contract_, uint256 index_) external view
    returns (string memory);
    function getTokenOfItem(address contract_, uint256 index_) external view
    returns (address);
}

contract MartianMarketWL is Ownable {

    // Events
    event TreasuryManaged(address indexed contract_, address indexed operator_,
        address treasury_);
    event TokenManaged(address indexed contract_, address indexed operator_,
        address token_);

    event OperatorManaged(address indexed contract_, address operator_, bool bool_);
    event MarketAdminManaged(address indexed contract_, address admin_, bool bool_);

    event GovernorUnstuckOwner(address indexed contract_, address indexed operator_,
        address unstuckOwner_);

    event WLVendingItemAdded(address indexed contract_, address indexed operator_,
        WLVendingItem item_);
    event WLVendingItemModified(address indexed contract_, address indexed operator_, 
        WLVendingItem before_, WLVendingItem after_);
    event WLVendingItemRemoved(address indexed contract_, address indexed operator_,
        WLVendingItem item_);
    event WLVendingItemPurchased(address indexed contract_, address indexed purchaser_, 
        uint256 index_, WLVendingObject object_);
    event WLVendingItemGifted(address indexed contract_, address indexed gifted_,
        uint256 index_, WLVendingObject object_);

    event ContractRegistered(address indexed contract_, address registerer_,
        uint256 registrationPrice_);
    event ContractAdministered(address indexed contract_, address registerer_,
        bool bool_);

    event ProjectInfoPushed(address indexed contract_, address registerer_,
        string projectName_, string tokenImage_);

    // Governance
    IERC20 public MES = 
        IERC20(0x3C2Eb40D25a4b2B5A068a959a40d57D63Dc98B95);
    function O_setMES(address address_) external onlyOwner {
        MES = IERC20(address_);
    } // good

    ITokenController public TokenController = 
        ITokenController(0x3C2Eb40D25a4b2B5A068a959a40d57D63Dc98B95);
    function O_setTokenController(address address_) external onlyOwner {
        TokenController = ITokenController(address_);
    } // good

    IPriceController public PriceController = 
        IPriceController(0x3C2Eb40D25a4b2B5A068a959a40d57D63Dc98B95);
    function O_setPriceController(address address_) external onlyOwner {
        PriceController = IPriceController(address_);
    } // good

    // Setting the Governor - good
    address public superGovernorAddress;
    address public governorAddress;
    address public registrationCollector;
    
    constructor() {
        superGovernorAddress = msg.sender;
        governorAddress = msg.sender;
        registrationCollector = address(this);
    } 

    // Ownable Governance Setup - good
    function O_setSuperGovernorAddress(address superGovernor_) external onlyOwner {
        // If superGovernor has been renounced, it is never enabled again.
        require(superGovernorAddress != address(0),
            "Super Governor Access has been renounced");

        superGovernorAddress = superGovernor_;
    } 
    modifier onlySuperGovernor {
        require(msg.sender == superGovernorAddress,
            "You are not the contract super governor!");
        _;
    } 
    function O_setGovernorAddress(address governor_) external onlyOwner {
        governorAddress = governor_;
    }
    modifier onlyGovernor {
        require(msg.sender == governorAddress,
            "You are not the contract governor!");
        _;
    }

    // Project Control (Super Governor) - good
    mapping(address => address) contractToUnstuckOwner;

    function SG_SetContractToVending(address contract_, bool bool_) external
    onlySuperGovernor {
        require(contractToEnabled[contract_] != bool_,
            "Contract Already Set as Boolean!");

        // Set contract as enabled
        contractToEnabled[contract_] = bool_;
        
        // Enum Tracking on bool_ statement
        bool_ ? _addContractToEnum(contract_) : _removeContractFromEnum(contract_);
        
        emit ContractAdministered(contract_, msg.sender, bool_);
    }
    function SG_SetContractToProjectInfo(address contract_, string calldata 
    projectName_, string calldata tokenName_, string calldata tokenImage_) 
    external onlySuperGovernor {
        
        contractToProjectInfo[contract_] = ProjectInfo(
            projectName_, 
            tokenName_,
            tokenImage_
        );
        
        emit ProjectInfoPushed(contract_, msg.sender, projectName_, tokenImage_);
    }
    function SG_SetStuckOwner(address contract_, address unstuckOwner_) 
    external onlySuperGovernor {

        // Onboarding for ERC20 of non-initialized contracts
        // In case of renounced or unretrievable owners

        // I the contract was not enabled by the super governor, but 
        // through user registration by paying $MES, this function 
        // is forever disabled for them.
        require(!contractToMESRegistry[contract_],
            "Ownership has been proven through registration.");

        // For maximum trustlessness, this can only be used if there has never been
        // an item created in their store. Once they create an item, this effectively
        // proves ownership is intact and disables this ability forever.
        require(contractToWLVendingItems[contract_].length == 0,
            "Ownership has been proven.");
            
        contractToUnstuckOwner[contract_] = unstuckOwner_;

        // 2022-04-07 ~0xInuarashi removed this because it stucks on invalid owner()
        // emit GovernorUnstuckOwner(contract_, msg.sender, 
            // IERC20(contract_).owner(), unstuckOwner_);

        // 2022-04-07 ~0xInuarashi added this as no interface event
        emit GovernorUnstuckOwner(contract_, msg.sender, unstuckOwner_);
    }
    
    // Registry Control (Governor) - ok
    uint256 public registrationPrice = 2000 ether; // 2000 $MES
    function G_setRegistrationPrice(uint256 price_) external onlyGovernor {
        registrationPrice = price_;
    }
    function G_setRegistrationCollector(address collector_) external onlyGovernor {
        registrationCollector = collector_;
    }
    function G_withdrawMESfromContract(address receiver_) external onlyGovernor {
        // 2022-04-08 ~0xInuarashi using ERC20 transfer-from-self must use transfer
        // MES.transferFrom(address(this), receiver_, MES.balanceOf(address(this)));
        MES.transfer(receiver_, MES.balanceOf(address(this)));
    }

    // Registry Logic
    // Database Entry for Enabled Addresses + Enumeration System // - good
    mapping(address => bool) public contractToEnabled;

    // Enumeration Tools 
    address[] public enabledContracts;
    mapping(address => uint256) public enabledContractsIndex;

    function getAllEnabledContracts() external view returns (address[] memory) {
        return enabledContracts;
    }
    function _addContractToEnum(address contract_) internal {
        enabledContractsIndex[contract_] = enabledContracts.length;
        enabledContracts.push(contract_);
    }
    function _removeContractFromEnum(address contract_) internal {
        uint256 _lastIndex = enabledContracts.length - 1;
        uint256 _currentIndex = enabledContractsIndex[contract_];

        // If the contract is not the last contract in the array
        if (_currentIndex != _lastIndex) {
            // Replace the to-be-deleted address with the last address
            address _lastAddress = enabledContracts[_lastIndex];
            enabledContracts[_currentIndex] = _lastAddress;
        }

        // Remove the last item
        enabledContracts.pop();
        // Delete the index
        delete enabledContractsIndex[contract_];
    }

    // Registry (Contract Owner) - good
    mapping(address => bool) public contractToMESRegistry;

    function registerContractToVending(address contract_) external {
        require(msg.sender == IOwnable(contract_).owner(),
            "You are not the Contract Owner!");
        require(!contractToEnabled[contract_],
            "Your contract has already been registered!");
        require(MES.balanceOf(msg.sender) >= registrationPrice,
            "You don't have enough $MES!");
        
        MES.transferFrom(msg.sender, registrationCollector, registrationPrice);
        
        contractToEnabled[contract_] = true;
        contractToMESRegistry[contract_] = true;

        _addContractToEnum(contract_);
        
        emit ContractRegistered(contract_, msg.sender, registrationPrice);
    }

    // Contract Owner Governance Control - ok
    function contractOwner(address contract_) public view returns (address) { 
        // If there is a contractToUnstuckOwner, return that. otherwise, return Ownable
        return contractToUnstuckOwner[contract_] != address(0) ?
            contractToUnstuckOwner[contract_] : IOwnable(contract_).owner();
    }
    modifier onlyContractOwnerEnabled (address contract_) {
        require(msg.sender == contractOwner(contract_),
            "You are not the Contract Owner!");
        require(contractToEnabled[contract_],
            "Please register your Contract first!");
        _;
    }
    modifier onlyAuthorized (address contract_, address operator_) {
        require(contractToControllersApproved[contract_][operator_]
            || msg.sender == contractOwner(contract_),
            "You are not Authorized for this Contract!");
        require(contractToEnabled[contract_],
            "Contract is not enabled!");
        _;
    }

    // External Interface Access - ok
    function isContractOwner(address contract_, address sender_) public 
    view returns (bool) {
        return contractOwner(contract_) == sender_;    
    }
    function isAuthorized(address contract_, address operator_) public
    view returns (bool) {
        if (contractToControllersApproved[contract_][operator_]) return true;
        else return contractOwner(contract_) == operator_;
    }

    // Project Control (Contract Owner) - ok
    struct ProjectInfo {
        string projectName;
        string tokenName;
        string tokenImageUri;
    }
    
    mapping(address => ProjectInfo) public contractToProjectInfo;
    
    function registerProjectInfo(address contract_, string calldata projectName_,
    string calldata tokenName_, string calldata tokenImage_) 
    external onlyContractOwnerEnabled(contract_) {
    
        contractToProjectInfo[contract_] = ProjectInfo(
            projectName_, 
            tokenName_,
            tokenImage_
        );
    
        emit ProjectInfoPushed(contract_, msg.sender, projectName_, tokenImage_);
    }

    mapping(address => mapping(address => bool)) public contractToControllersApproved;
    
    function manageController(address contract_, address operator_, bool bool_) 
    external onlyContractOwnerEnabled(contract_) {

        contractToControllersApproved[contract_][operator_] = bool_;
        
        emit OperatorManaged(contract_, operator_, bool_);
    }

    address public burnAddress = 0x000000000000000000000000000000000000dEaD;
    mapping(address => address) public contractToTreasuryAddress;
    
    function getTreasury(address contract_) public view returns (address) {
        // if contractToTreasuryAddress is set, use that, otherwise, burnAddress
        return contractToTreasuryAddress[contract_] != address(0) ? 
            contractToTreasuryAddress[contract_] : burnAddress; 
    }
    function setTreasuryAddress(address contract_, address treasury_) external 
    onlyContractOwnerEnabled(contract_) {

        contractToTreasuryAddress[contract_] = treasury_;

        emit TreasuryManaged(contract_, msg.sender, treasury_);
    }

    // Whitelist Marketplace - ok
    struct WLVendingItem {
        string title; // for metadata uri, set title to metadata uri instead
        string imageUri;
        string projectUri;
        string description;

        uint32 amountAvailable;
        uint32 amountPurchased;

        uint32 startTime;
        uint32 endTime;
        
        uint256 price;
    }

    // Database of Vending Items for each ERC20
    mapping(address => WLVendingItem[]) public contractToWLVendingItems;
    
    // Database of Vending Items Purchasers for each ERC20
    mapping(address => mapping(uint256 => address[])) public contractToWLPurchasers;
    mapping(address => mapping(uint256 => mapping(address => bool))) public 
        contractToWLPurchased;

    function addWLVendingItem(address contract_, WLVendingItem memory WLVendingItem_)
    external onlyAuthorized(contract_, msg.sender) {
        require(bytes(WLVendingItem_.title).length > 0,
            "You must specify a Title!");
        require(uint256(WLVendingItem_.endTime) > block.timestamp,
            "Already expired timestamp!");
        require(WLVendingItem_.endTime > WLVendingItem_.startTime,
            "endTime > startTime!");
        
        // Make sure that amountPurchased on adding is always 0
        WLVendingItem_.amountPurchased = 0;

        // Push the item to the database array
        contractToWLVendingItems[contract_].push(WLVendingItem_);
        
        emit WLVendingItemAdded(contract_, msg.sender, WLVendingItem_);
    }

    function modifyWLVendingItem(address contract_, uint256 index_,
    WLVendingItem memory WLVendingItem_) external 
    onlyAuthorized(contract_, msg.sender) {
        WLVendingItem memory _item = contractToWLVendingItems[contract_][index_];

        require(bytes(_item.title).length > 0,
            "This WLVendingItem does not exist!");
        require(bytes(WLVendingItem_.title).length > 0,
            "Title must not be empty!");
        
        require(WLVendingItem_.amountAvailable >= _item.amountPurchased,
            "Amount Available must be >= Amount Purchased!");
        
        contractToWLVendingItems[contract_][index_] = WLVendingItem_;
        
        emit WLVendingItemModified(contract_, msg.sender, _item, WLVendingItem_);
    }

    function deleteMostRecentWLVendingItem(address contract_) external
    onlyAuthorized(contract_, msg.sender) {
        uint256 _lastIndex = contractToWLVendingItems[contract_].length - 1;

        WLVendingItem memory _item = contractToWLVendingItems[contract_][_lastIndex];

        require(_item.amountPurchased == 0,
            "Cannot delete item with already bought goods!");
        
        contractToWLVendingItems[contract_].pop();
        emit WLVendingItemRemoved(contract_, msg.sender, _item);
    }

    // Core Function of WL Vending (User) - ok
    // ~0xInuarashi @ 2022-04-08
    // As of Martian Market V2 this uses PriceController and TokenController values.
    // We wrap it all in a WLVendingObject item which aggregates WLVendingItem data
    function purchaseWLVendingItem(address contract_, uint256 index_) external {
        
        // Load the WLVendingObject to Memory
        WLVendingObject memory _object = getWLVendingObject(contract_, index_);

        // Check the necessary requirements to purchase
        require(bytes(_object.title).length > 0,
            "This WLVendingObject does not exist!");
        require(_object.amountAvailable > _object.amountPurchased,
            "No more WL remaining!");
        require(_object.startTime <= block.timestamp,
            "Not started yet!");
        require(_object.endTime >= block.timestamp,
            "Past deadline!");
        require(!contractToWLPurchased[contract_][index_][msg.sender], 
            "Already purchased!");
        require(_object.price != 0,
            "Item does not have a set price!");
        require(IERC20(contract_).balanceOf(msg.sender) >= _object.price,
            "Not enough tokens!");

        // Pay for the WL
        IERC20( _object.tokenAddress ) // aggregated thru TokenController
        .transferFrom(msg.sender, getTreasury(contract_), _object.price);
        
        // Add the address into the WL List 
        contractToWLPurchased[contract_][index_][msg.sender] = true;
        contractToWLPurchasers[contract_][index_].push(msg.sender);

        // Increment Amount Purchased
        contractToWLVendingItems[contract_][index_].amountPurchased++;

        emit WLVendingItemPurchased(contract_, msg.sender, index_, _object);
    }

    // Governance / Ownable Functions Related to Marketplace - ok
    // ~0xInuarashi 2022-04-11 - this is for something like bidding style 
    //  auction, gifting, etc and generally a good thing to include 
    //  for future interfaces.
    mapping(address => mapping(address => bool)) public contractToMarketAdminsApproved;

    function manageMarketAdmin(address contract_, address operator_, bool bool_) 
    external onlyContractOwnerEnabled(contract_) {

        contractToMarketAdminsApproved[contract_][operator_] = bool_;
        
        emit MarketAdminManaged(contract_, operator_, bool_);
    }

    modifier onlyMarketAdmin (address contract_, address operator_) {
        require(contractToMarketAdminsApproved[contract_][operator_]
            || msg.sender == contractOwner(contract_),
            "You are not a Market Admin!");
        require(contractToEnabled[contract_],
            "Contract is not enabled!");
        _;
    }

    function giftPurchaserAsMarketAdmin(address contract_, uint256 index_,
    address giftedAddress_) external onlyMarketAdmin(contract_, msg.sender) {

        // Load the WLVendingObject to Memory
        WLVendingObject memory _object = getWLVendingObject(contract_, index_);

        // Check the necessary requirements to gift
        require(bytes(_object.title).length > 0,
            "This WLVendingObject does not exist!");
        require(_object.amountAvailable > _object.amountPurchased,
            "No more WL remaining!");
        require(!contractToWLPurchased[contract_][index_][giftedAddress_],
            "Already added!");

        // Add the address into the WL List
        contractToWLPurchased[contract_][index_][giftedAddress_] = true;
        contractToWLPurchasers[contract_][index_].push(giftedAddress_);

        // Increment Amount Purchased
        contractToWLVendingItems[contract_][index_].amountPurchased++;

        emit WLVendingItemGifted(contract_, giftedAddress_, index_, _object);
    }

    // External Interface Communication
    function getFixedPriceOfItem(address contract_, uint256 index_) external 
    view returns (uint256) {
        return contractToWLVendingItems[contract_][index_].price;
    }
    function getDefaultTokenOfContract(address contract_) external 
    pure returns (address) {
        return contract_;
    }
    function getDefaultTokenNameOfContract(address contract_) external
    view returns (string memory) {
        return contractToProjectInfo[contract_].tokenName;
    }
    function getDefaultTokenImageOfContract(address contract_) external 
    view returns (string memory) {
        return contractToProjectInfo[contract_].tokenImageUri;
    }

    // Read Functions

    struct WLVendingObject {
        string title;
        string imageUri;
        string projectUri;
        string description;
        
        uint32 amountAvailable;
        uint32 amountPurchased;
        uint32 startTime;
        uint32 endTime;

        string tokenName;
        string tokenImageUri;
        address tokenAddress;

        uint256 price;
    }

    function getWLPurchasersOf(address contract_, uint256 index_) public view 
    returns (address[] memory) { 
        return contractToWLPurchasers[contract_][index_];
    }

    // Generally, this is the go-to read function for front-end interface to call
    // getWLVendingObjectsPaginated
    function getWLVendingItemsLength(address contract_) public view 
    returns (uint256) {
        return contractToWLVendingItems[contract_].length;
    }

    function raw_getWLVendingItemsAll(address contract_) public view 
    returns (WLVendingItem[] memory) {
        return contractToWLVendingItems[contract_];
    }
    function raw_getWLVendingItemsPaginated(address contract_, uint256 start_, 
    uint256 end_) public view returns (WLVendingItem[] memory) {
        uint256 _arrayLength = end_ - start_ + 1;
        WLVendingItem[] memory _items = new WLVendingItem[] (_arrayLength);
        uint256 _index;

        for (uint256 i = 0; i < _arrayLength; i++) {
            _items[_index++] = contractToWLVendingItems[contract_][start_ + i];
        }

        return _items;
    }

    // Generally, this is the go-to read function for front-end interfaces.
    function getWLVendingObject(address contract_, uint256 index_) public 
    view returns (WLVendingObject memory) {
        WLVendingItem memory _item = contractToWLVendingItems[contract_][index_];
        WLVendingObject memory _object = WLVendingObject(
            _item.title,
            _item.imageUri,
            _item.projectUri,
            _item.description,

            _item.amountAvailable,
            _item.amountPurchased,
            _item.startTime,
            _item.endTime,

            TokenController.getTokenNameOfItem(contract_, index_),
            TokenController.getTokenImageOfItem(contract_, index_),
            TokenController.getTokenOfItem(contract_, index_),

            PriceController.getPriceOfItem(contract_, index_)
        );
        return _object;
    }

    function getWLVendingObjectsPaginated(address contract_, uint256 start_, 
    uint256 end_) public view returns (WLVendingObject[] memory) {
        uint256 _arrayLength = end_ - start_ + 1;
        WLVendingObject[] memory _objects = new WLVendingObject[] (_arrayLength);
        uint256 _index;

        for (uint256 i = 0; i < _arrayLength; i++) {

            uint256 _itemIndex = start_ + i;
            
            WLVendingItem memory _item = contractToWLVendingItems[contract_][_itemIndex];
            WLVendingObject memory _object = WLVendingObject(
                _item.title,
                _item.imageUri,
                _item.projectUri,
                _item.description,

                _item.amountAvailable,
                _item.amountPurchased,
                _item.startTime,
                _item.endTime,

                TokenController.getTokenNameOfItem(contract_, (_itemIndex)),
                TokenController.getTokenImageOfItem(contract_, (_itemIndex)),
                TokenController.getTokenOfItem(contract_, (_itemIndex)),

                PriceController.getPriceOfItem(contract_, (_itemIndex))
            );

            _objects[_index++] = _object;
        }

        return _objects;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":false,"internalType":"address","name":"registerer_","type":"address"},{"indexed":false,"internalType":"bool","name":"bool_","type":"bool"}],"name":"ContractAdministered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":false,"internalType":"address","name":"registerer_","type":"address"},{"indexed":false,"internalType":"uint256","name":"registrationPrice_","type":"uint256"}],"name":"ContractRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"indexed":false,"internalType":"address","name":"unstuckOwner_","type":"address"}],"name":"GovernorUnstuckOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":false,"internalType":"address","name":"admin_","type":"address"},{"indexed":false,"internalType":"bool","name":"bool_","type":"bool"}],"name":"MarketAdminManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":false,"internalType":"address","name":"operator_","type":"address"},{"indexed":false,"internalType":"bool","name":"bool_","type":"bool"}],"name":"OperatorManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":false,"internalType":"address","name":"registerer_","type":"address"},{"indexed":false,"internalType":"string","name":"projectName_","type":"string"},{"indexed":false,"internalType":"string","name":"tokenImage_","type":"string"}],"name":"ProjectInfoPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"indexed":false,"internalType":"address","name":"token_","type":"address"}],"name":"TokenManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"indexed":false,"internalType":"address","name":"treasury_","type":"address"}],"name":"TreasuryManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct MartianMarketWL.WLVendingItem","name":"item_","type":"tuple"}],"name":"WLVendingItemAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":true,"internalType":"address","name":"gifted_","type":"address"},{"indexed":false,"internalType":"uint256","name":"index_","type":"uint256"},{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenImageUri","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct MartianMarketWL.WLVendingObject","name":"object_","type":"tuple"}],"name":"WLVendingItemGifted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct MartianMarketWL.WLVendingItem","name":"before_","type":"tuple"},{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct MartianMarketWL.WLVendingItem","name":"after_","type":"tuple"}],"name":"WLVendingItemModified","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":true,"internalType":"address","name":"purchaser_","type":"address"},{"indexed":false,"internalType":"uint256","name":"index_","type":"uint256"},{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenImageUri","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct MartianMarketWL.WLVendingObject","name":"object_","type":"tuple"}],"name":"WLVendingItemPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contract_","type":"address"},{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct MartianMarketWL.WLVendingItem","name":"item_","type":"tuple"}],"name":"WLVendingItemRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"collector_","type":"address"}],"name":"G_setRegistrationCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"G_setRegistrationPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver_","type":"address"}],"name":"G_withdrawMESfromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MES","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"governor_","type":"address"}],"name":"O_setGovernorAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"O_setMES","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"O_setPriceController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"superGovernor_","type":"address"}],"name":"O_setSuperGovernorAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"O_setTokenController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PriceController","outputs":[{"internalType":"contract IPriceController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"string","name":"projectName_","type":"string"},{"internalType":"string","name":"tokenName_","type":"string"},{"internalType":"string","name":"tokenImage_","type":"string"}],"name":"SG_SetContractToProjectInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"SG_SetContractToVending","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"address","name":"unstuckOwner_","type":"address"}],"name":"SG_SetStuckOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TokenController","outputs":[{"internalType":"contract ITokenController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"struct MartianMarketWL.WLVendingItem","name":"WLVendingItem_","type":"tuple"}],"name":"addWLVendingItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"}],"name":"contractOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"contractToControllersApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contractToEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contractToMESRegistry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"contractToMarketAdminsApproved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contractToProjectInfo","outputs":[{"internalType":"string","name":"projectName","type":"string"},{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenImageUri","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contractToTreasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"contractToWLPurchased","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"contractToWLPurchasers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"contractToWLVendingItems","outputs":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"}],"name":"deleteMostRecentWLVendingItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"enabledContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"enabledContractsIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllEnabledContracts","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"}],"name":"getDefaultTokenImageOfContract","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"}],"name":"getDefaultTokenNameOfContract","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"}],"name":"getDefaultTokenOfContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"uint256","name":"index_","type":"uint256"}],"name":"getFixedPriceOfItem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"}],"name":"getTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"uint256","name":"index_","type":"uint256"}],"name":"getWLPurchasersOf","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"}],"name":"getWLVendingItemsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"uint256","name":"index_","type":"uint256"}],"name":"getWLVendingObject","outputs":[{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenImageUri","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"struct MartianMarketWL.WLVendingObject","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"uint256","name":"start_","type":"uint256"},{"internalType":"uint256","name":"end_","type":"uint256"}],"name":"getWLVendingObjectsPaginated","outputs":[{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenImageUri","type":"string"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"struct MartianMarketWL.WLVendingObject[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"uint256","name":"index_","type":"uint256"},{"internalType":"address","name":"giftedAddress_","type":"address"}],"name":"giftPurchaserAsMarketAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"address","name":"operator_","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"address","name":"sender_","type":"address"}],"name":"isContractOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"manageController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"manageMarketAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"uint256","name":"index_","type":"uint256"},{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"struct MartianMarketWL.WLVendingItem","name":"WLVendingItem_","type":"tuple"}],"name":"modifyWLVendingItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"uint256","name":"index_","type":"uint256"}],"name":"purchaseWLVendingItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"}],"name":"raw_getWLVendingItemsAll","outputs":[{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"struct MartianMarketWL.WLVendingItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"uint256","name":"start_","type":"uint256"},{"internalType":"uint256","name":"end_","type":"uint256"}],"name":"raw_getWLVendingItemsPaginated","outputs":[{"components":[{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"imageUri","type":"string"},{"internalType":"string","name":"projectUri","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint32","name":"amountAvailable","type":"uint32"},{"internalType":"uint32","name":"amountPurchased","type":"uint32"},{"internalType":"uint32","name":"startTime","type":"uint32"},{"internalType":"uint32","name":"endTime","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"struct MartianMarketWL.WLVendingItem[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"}],"name":"registerContractToVending","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"string","name":"projectName_","type":"string"},{"internalType":"string","name":"tokenName_","type":"string"},{"internalType":"string","name":"tokenImage_","type":"string"}],"name":"registerProjectInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"registrationCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registrationPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contract_","type":"address"},{"internalType":"address","name":"treasury_","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"superGovernorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"new_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600180546001600160a01b0319908116733c2eb40d25a4b2b5a068a959a40d57d63dc98b9590811790925560028054821683179055600380548216909217909155686c6b935b8bbd400000600855600f805490911661dead17905534801561006b57600080fd5b50600080546001600160a01b031990811633908117909255600480548216831790556005805482169092179091556006805490911630179055615a7180620000b46000396000f3fe608060405234801561001057600080fd5b50600436106103825760003560e01c80637d3db8c3116101de578063cce513a71161010f578063e2d97934116100ad578063ea7d8bc71161007c578063ea7d8bc7146108b1578063ee49d0a7146108c4578063f2fde38b146108d7578063fa8775ec146108ea57600080fd5b8063e2d9793414610865578063e4ee3fab14610878578063e6ea99291461088b578063e80e55e61461089e57600080fd5b8063db37aea8116100e9578063db37aea81461080c578063dbaf63761461082c578063dd810ea21461083f578063e25cf2191461085257600080fd5b8063cce513a7146107d3578063cd6c7185146107e6578063d026da30146107f957600080fd5b8063a13e2fed1161017c578063b847231611610156578063b847231614610764578063ba17a3b414610777578063c232315f1461078a578063c63c8868146107b357600080fd5b8063a13e2fed14610711578063a564560314610731578063a999258a1461075157600080fd5b806388c47fed116101b857806388c47fed146106ba5780638da5cb5b146106cd57806391ce8e2f146106e0578063a05cb99e1461070957600080fd5b80637d3db8c3146106815780637ea7c5f314610694578063888a9a5f146106a757600080fd5b80634a433225116102b85780636011ee26116102565780636f6736ba116102305780636f6736ba1461063557806370d5ae051461064857806378f212d11461065b5780637ba5a9ae1461066e57600080fd5b80636011ee26146105fe57806365e4ad9e1461060f5780636f173f711461062257600080fd5b80635152b14c116102925780635152b14c1461058e57806352b49357146105a157806355fec15d146105b45780635c952b58146105d657600080fd5b80634a433225146105485780634d7037dd1461055b5780634e98fab51461057b57600080fd5b80632165865811610325578063276f1c41116102ff578063276f1c41146104ef5780633b69c1f11461050257806347ba83ac146105225780634973c3771461053557600080fd5b806321658658146104a25780632508c67e146104b9578063267caabb146104cc57600080fd5b80630646b22b116103615780630646b22b146104185780630a225c85146104465780630d4e41f91461045b5780631bd650f11461048f57600080fd5b80626149da1461038757806303500641146103bf57806304e565c9146103ea575b600080fd5b6103aa610395366004614dd3565b600c6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103d26103cd36600461507f565b6108fd565b6040516001600160a01b0390911681526020016103b6565b6103aa6103f8366004614e14565b600e60209081526000928352604080842090915290825290205460ff1681565b6103aa610426366004614e14565b601460209081526000928352604080842090915290825290205460ff1681565b610459610454366004614dd3565b610942565b005b6103aa610469366004614fef565b601360209081526000938452604080852082529284528284209052825290205460ff1681565b6002546103d2906001600160a01b031681565b6104ab60085481565b6040519081526020016103b6565b6104596104c7366004614ec6565b610997565b6103aa6104da366004614dd3565b60096020526000908152604090205460ff1681565b6005546103d2906001600160a01b031681565b610515610510366004614dd3565b610b7b565b6040516103b69190615478565b610459610530366004614e4d565b610e85565b610459610543366004614f73565b610f6c565b610459610556366004614dd3565b61127b565b61056e610569366004614fc3565b611562565b6040516103b69190615437565b6104ab610589366004614fc3565b6115e2565b6103d261059c366004614dd3565b611626565b6104596105af366004614dd3565b6116dc565b6105c76105c2366004614dd3565b611728565b6040516103b693929190615542565b6105e96105e4366004614fc3565b6118e2565b6040516103b699989796959493929190615585565b6103d261060c366004614dd3565b90565b6103aa61061d366004614e14565b611b81565b610459610630366004614dd3565b611bdd565b6004546103d2906001600160a01b031681565b600f546103d2906001600160a01b031681565b6103d2610669366004614dd3565b611c29565b61045961067c366004615148565b611c7a565b61045961068f366004614dd3565b611ca9565b6104596106a2366004615026565b611dcb565b6104596106b5366004614ec6565b6123e1565b6104596106c8366004614e14565b61257c565b6000546103d2906001600160a01b031681565b6103d26106ee366004614dd3565b6010602052600090815260409020546001600160a01b031681565b61056e6126f4565b6104ab61071f366004614dd3565b600b6020526000908152604090205481565b61074461073f366004614fc3565b612756565b6040516103b69190615830565b6003546103d2906001600160a01b031681565b6006546103d2906001600160a01b031681565b610459610785366004614fc3565b612ce0565b6104ab610798366004614dd3565b6001600160a01b031660009081526011602052604090205490565b6107c66107c1366004614dd3565b613133565b6040516103b6919061552f565b6105156107e136600461507f565b6131e2565b6104596107f4366004614dd3565b6135bf565b6103d2610807366004615148565b61360b565b61081f61081a36600461507f565b613635565b6040516103b691906154da565b61045961083a366004614dd3565b613d19565b61045961084d366004614e4d565b613d65565b610459610860366004614dd3565b613e42565b6001546103d2906001600160a01b031681565b610459610886366004614dd3565b614330565b610459610899366004614fef565b6143e5565b6104596108ac366004614e98565b6146cc565b6107c66108bf366004614dd3565b6147ee565b6103aa6108d2366004614e14565b614818565b6104596108e5366004614dd3565b61483e565b6104596108f8366004614e14565b61488a565b6012602052826000526040600020602052816000526040600020818154811061092557600080fd5b6000918252602090912001546001600160a01b0316925083915050565b6000546001600160a01b031633146109755760405162461bcd60e51b815260040161096c9061560b565b60405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b866109a181611626565b6001600160a01b0316336001600160a01b0316146109d15760405162461bcd60e51b815260040161096c90615778565b6001600160a01b03811660009081526009602052604090205460ff16610a095760405162461bcd60e51b815260040161096c9061562f565b604051806060016040528088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f890181900481028201810190925287815291810191908890889081908401838280828437600092019190915250505090825250604080516020601f87018190048102820181019092528581529181019190869086908190840183828082843760009201829052509390945250506001600160a01b038b168152600d6020908152604090912083518051919350610aef928492910190614ab9565b506020828101518051610b089260018501920190614ab9565b5060408201518051610b24916002840191602090910190614ab9565b50905050876001600160a01b03167f25fdbc222e090858cc121aef55da11cf44faaf595ca940f31cb371ddbe1b6d823389898787604051610b699594939291906153da565b60405180910390a25050505050505050565b6001600160a01b0381166000908152601160209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610e7a578382906000526020600020906006020160405180610120016040529081600082018054610be790615946565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390615946565b8015610c605780601f10610c3557610100808354040283529160200191610c60565b820191906000526020600020905b815481529060010190602001808311610c4357829003601f168201915b50505050508152602001600182018054610c7990615946565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca590615946565b8015610cf25780601f10610cc757610100808354040283529160200191610cf2565b820191906000526020600020905b815481529060010190602001808311610cd557829003601f168201915b50505050508152602001600282018054610d0b90615946565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3790615946565b8015610d845780601f10610d5957610100808354040283529160200191610d84565b820191906000526020600020905b815481529060010190602001808311610d6757829003601f168201915b50505050508152602001600382018054610d9d90615946565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc990615946565b8015610e165780601f10610deb57610100808354040283529160200191610e16565b820191906000526020600020905b815481529060010190602001808311610df957829003601f168201915b5050509183525050600482015463ffffffff808216602080850191909152600160201b830482166040850152600160401b830482166060850152600160601b90920416608083015260059092015460a0909101529082526001929092019101610bb3565b505050509050919050565b82610e8f81611626565b6001600160a01b0316336001600160a01b031614610ebf5760405162461bcd60e51b815260040161096c90615778565b6001600160a01b03811660009081526009602052604090205460ff16610ef75760405162461bcd60e51b815260040161096c9061562f565b6001600160a01b038481166000818152600e6020908152604080832094881680845294825291829020805460ff191687151590811790915582519485529084015290917f497c860693ee48ca4920e55d08ac4ba08d719ae9e1883db046133620ce194df491015b60405180910390a250505050565b6001600160a01b0382166000908152600e602090815260408083203380855292529091205483919060ff1680610fbb5750610fa682611626565b6001600160a01b0316336001600160a01b0316145b610fd75760405162461bcd60e51b815260040161096c906157af565b6001600160a01b03821660009081526009602052604090205460ff1661100f5760405162461bcd60e51b815260040161096c906156b5565b82515161105e5760405162461bcd60e51b815260206004820152601960248201527f596f75206d75737420737065636966792061205469746c652100000000000000604482015260640161096c565b428360e0015163ffffffff16116110b75760405162461bcd60e51b815260206004820152601a60248201527f416c726561647920657870697265642074696d657374616d7021000000000000604482015260640161096c565b8260c0015163ffffffff168360e0015163ffffffff16116111115760405162461bcd60e51b8152602060048201526014602482015273656e6454696d65203e20737461727454696d652160601b604482015260640161096c565b600060a084018190526001600160a01b038516815260116020908152604082208054600181018255908352918190208551805187946006029092019261115c92849290910190614ab9565b5060208281015180516111759260018501920190614ab9565b5060408201518051611191916002840191602090910190614ab9565b50606082015180516111ad916003840191602090910190614ab9565b50608082015160048201805460a085015160c086015160e087015163ffffffff908116600160601b0263ffffffff60601b19928216600160401b029290921667ffffffffffffffff60401b19938216600160201b0267ffffffffffffffff1990951691909616179290921716929092179190911790556101009091015160059091015560405133906001600160a01b038616907f38ec25733295d7bfcea86209fb684de4d611e32229a9fdb036ce5936ed6540149061126d9087906157f8565b60405180910390a350505050565b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b457600080fd5b505afa1580156112c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec9190614df7565b6001600160a01b0316336001600160a01b03161461131c5760405162461bcd60e51b815260040161096c90615778565b6001600160a01b03811660009081526009602052604090205460ff16156113985760405162461bcd60e51b815260206004820152602a60248201527f596f757220636f6e74726163742068617320616c7265616479206265656e20726044820152696567697374657265642160b01b606482015260840161096c565b6008546001546040516370a0823160e01b81523360048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156113de57600080fd5b505afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190615161565b10156114645760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f6e2774206861766520656e6f75676820244d4553210000000000604482015260640161096c565b6001546006546008546040516323b872dd60e01b81523360048201526001600160a01b03928316602482015260448101919091529116906323b872dd90606401600060405180830381600087803b1580156114be57600080fd5b505af11580156114d2573d6000803e3d6000fd5b505050506001600160a01b03811660009081526009602090815260408083208054600160ff199182168117909255600c90935292208054909116909117905561151a8161495c565b806001600160a01b03167ff324ec9e65c6849640d47b8d287a652b8287a533bcf80092a857f3e02b0fcbcc3360085460405161155792919061541e565b60405180910390a250565b6001600160a01b03821660009081526012602090815260408083208484528252918290208054835181840281018401909452808452606093928301828280156115d457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115b6575b505050505090505b92915050565b6001600160a01b038216600090815260116020526040812080548390811061160c5761160c6159ec565b906000526020600020906006020160050154905092915050565b6001600160a01b038181166000908152600760205260408120549091166116bd57816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561168057600080fd5b505afa158015611694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b89190614df7565b6115dc565b506001600160a01b039081166000908152600760205260409020541690565b6005546001600160a01b031633146117065760405162461bcd60e51b815260040161096c90615673565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600d6020526000908152604090208054819061174390615946565b80601f016020809104026020016040519081016040528092919081815260200182805461176f90615946565b80156117bc5780601f10611791576101008083540402835291602001916117bc565b820191906000526020600020905b81548152906001019060200180831161179f57829003601f168201915b5050505050908060010180546117d190615946565b80601f01602080910402602001604051908101604052809291908181526020018280546117fd90615946565b801561184a5780601f1061181f5761010080835404028352916020019161184a565b820191906000526020600020905b81548152906001019060200180831161182d57829003601f168201915b50505050509080600201805461185f90615946565b80601f016020809104026020016040519081016040528092919081815260200182805461188b90615946565b80156118d85780601f106118ad576101008083540402835291602001916118d8565b820191906000526020600020905b8154815290600101906020018083116118bb57829003601f168201915b5050505050905083565b601160205281600052604060002081815481106118fe57600080fd5b90600052602060002090600602016000915091505080600001805461192290615946565b80601f016020809104026020016040519081016040528092919081815260200182805461194e90615946565b801561199b5780601f106119705761010080835404028352916020019161199b565b820191906000526020600020905b81548152906001019060200180831161197e57829003601f168201915b5050505050908060010180546119b090615946565b80601f01602080910402602001604051908101604052809291908181526020018280546119dc90615946565b8015611a295780601f106119fe57610100808354040283529160200191611a29565b820191906000526020600020905b815481529060010190602001808311611a0c57829003601f168201915b505050505090806002018054611a3e90615946565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6a90615946565b8015611ab75780601f10611a8c57610100808354040283529160200191611ab7565b820191906000526020600020905b815481529060010190602001808311611a9a57829003601f168201915b505050505090806003018054611acc90615946565b80601f0160208091040260200160405190810160405280929190818152602001828054611af890615946565b8015611b455780601f10611b1a57610100808354040283529160200191611b45565b820191906000526020600020905b815481529060010190602001808311611b2857829003601f168201915b5050506004840154600590940154929363ffffffff80821694600160201b830482169450600160401b830482169350600160601b909204169089565b6001600160a01b038083166000908152600e6020908152604080832093851683529290529081205460ff1615611bb9575060016115dc565b816001600160a01b0316611bcc84611626565b6001600160a01b03161490506115dc565b6000546001600160a01b03163314611c075760405162461bcd60e51b815260040161096c9061560b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03818116600090815260106020526040812054909116611c5b57600f546001600160a01b03166115dc565b506001600160a01b039081166000908152601060205260409020541690565b6005546001600160a01b03163314611ca45760405162461bcd60e51b815260040161096c90615673565b600855565b6005546001600160a01b03163314611cd35760405162461bcd60e51b815260040161096c90615673565b6001546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb90839083906370a082319060240160206040518083038186803b158015611d2057600080fd5b505afa158015611d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d589190615161565b6040518363ffffffff1660e01b8152600401611d7592919061541e565b602060405180830381600087803b158015611d8f57600080fd5b505af1158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc791906150b4565b5050565b6001600160a01b0383166000908152600e602090815260408083203380855292529091205484919060ff1680611e1a5750611e0582611626565b6001600160a01b0316336001600160a01b0316145b611e365760405162461bcd60e51b815260040161096c906157af565b6001600160a01b03821660009081526009602052604090205460ff16611e6e5760405162461bcd60e51b815260040161096c906156b5565b6001600160a01b0385166000908152601160205260408120805486908110611e9857611e986159ec565b906000526020600020906006020160405180610120016040529081600082018054611ec290615946565b80601f0160208091040260200160405190810160405280929190818152602001828054611eee90615946565b8015611f3b5780601f10611f1057610100808354040283529160200191611f3b565b820191906000526020600020905b815481529060010190602001808311611f1e57829003601f168201915b50505050508152602001600182018054611f5490615946565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8090615946565b8015611fcd5780601f10611fa257610100808354040283529160200191611fcd565b820191906000526020600020905b815481529060010190602001808311611fb057829003601f168201915b50505050508152602001600282018054611fe690615946565b80601f016020809104026020016040519081016040528092919081815260200182805461201290615946565b801561205f5780601f106120345761010080835404028352916020019161205f565b820191906000526020600020905b81548152906001019060200180831161204257829003601f168201915b5050505050815260200160038201805461207890615946565b80601f01602080910402602001604051908101604052809291908181526020018280546120a490615946565b80156120f15780601f106120c6576101008083540402835291602001916120f1565b820191906000526020600020905b8154815290600101906020018083116120d457829003601f168201915b5050509183525050600482015463ffffffff8082166020840152600160201b820481166040840152600160401b820481166060840152600160601b90910416608082015260059091015460a09091015280515190915061219e5760405162461bcd60e51b815260206004820152602260248201527f5468697320574c56656e64696e674974656d20646f6573206e6f742065786973604482015261742160f01b606482015260840161096c565b8351516121ed5760405162461bcd60e51b815260206004820152601860248201527f5469746c65206d757374206e6f7420626520656d707479210000000000000000604482015260640161096c565b8060a0015163ffffffff16846080015163ffffffff1610156122675760405162461bcd60e51b815260206004820152602d60248201527f416d6f756e7420417661696c61626c65206d757374206265203e3d20416d6f7560448201526c6e74205075726368617365642160981b606482015260840161096c565b6001600160a01b0386166000908152601160205260409020805485919087908110612294576122946159ec565b906000526020600020906006020160008201518160000190805190602001906122be929190614ab9565b5060208281015180516122d79260018501920190614ab9565b50604082015180516122f3916002840191602090910190614ab9565b506060820151805161230f916003840191602090910190614ab9565b50608082015160048201805460a085015160c086015160e087015163ffffffff908116600160601b0263ffffffff60601b19928216600160401b029290921667ffffffffffffffff60401b19938216600160201b0267ffffffffffffffff1990951691909616179290921716929092179190911790556101009091015160059091015560405133906001600160a01b038816907f32a5ac9831be31a982e11effc40669b8efc3803297417c523d99421775cddabf906123d1908590899061580b565b60405180910390a3505050505050565b6004546001600160a01b0316331461240b5760405162461bcd60e51b815260040161096c906156ec565b604051806060016040528087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f880181900481028201810190925286815291810191908790879081908401838280828437600092019190915250505090825250604080516020601f86018190048102820181019092528481529181019190859085908190840183828082843760009201829052509390945250506001600160a01b038a168152600d60209081526040909120835180519193506124f1928492910190614ab9565b50602082810151805161250a9260018501920190614ab9565b5060408201518051612526916002840191602090910190614ab9565b50905050866001600160a01b03167f25fdbc222e090858cc121aef55da11cf44faaf595ca940f31cb371ddbe1b6d82338888868660405161256b9594939291906153da565b60405180910390a250505050505050565b6004546001600160a01b031633146125a65760405162461bcd60e51b815260040161096c906156ec565b6001600160a01b0382166000908152600c602052604090205460ff16156126275760405162461bcd60e51b815260206004820152602f60248201527f4f776e65727368697020686173206265656e2070726f76656e207468726f756760448201526e34103932b3b4b9ba3930ba34b7b71760891b606482015260840161096c565b6001600160a01b0382166000908152601160205260409020541561268d5760405162461bcd60e51b815260206004820152601a60248201527f4f776e65727368697020686173206265656e2070726f76656e2e000000000000604482015260640161096c565b6001600160a01b0382811660008181526007602090815260409182902080546001600160a01b0319169486169485179055905192835233927f693495037fb55f5aa00e6f427e4d5198136d26272d35c42fc9f87ff62c5d5d4b910160405180910390a35050565b6060600a80548060200260200160405190810160405280929190818152602001828054801561274c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161272e575b5050505050905090565b61275e614b3d565b6001600160a01b0383166000908152601160205260408120805484908110612788576127886159ec565b9060005260206000209060060201604051806101200160405290816000820180546127b290615946565b80601f01602080910402602001604051908101604052809291908181526020018280546127de90615946565b801561282b5780601f106128005761010080835404028352916020019161282b565b820191906000526020600020905b81548152906001019060200180831161280e57829003601f168201915b5050505050815260200160018201805461284490615946565b80601f016020809104026020016040519081016040528092919081815260200182805461287090615946565b80156128bd5780601f10612892576101008083540402835291602001916128bd565b820191906000526020600020905b8154815290600101906020018083116128a057829003601f168201915b505050505081526020016002820180546128d690615946565b80601f016020809104026020016040519081016040528092919081815260200182805461290290615946565b801561294f5780601f106129245761010080835404028352916020019161294f565b820191906000526020600020905b81548152906001019060200180831161293257829003601f168201915b5050505050815260200160038201805461296890615946565b80601f016020809104026020016040519081016040528092919081815260200182805461299490615946565b80156129e15780601f106129b6576101008083540402835291602001916129e1565b820191906000526020600020905b8154815290600101906020018083116129c457829003601f168201915b505050918352505060048281015463ffffffff808216602080860191909152600160201b83048216604080870191909152600160401b84048316606080880191909152600160601b909404831660808088019190915260059097015460a09687015280516101808101825288518152888301519281019290925287810151828201528784015193820193909352868601518216958101959095528584015181169385019390935260c08086015184169085015260e080860151909316928401929092526002549151634459319960e11b81529394506000936101008401926001600160a01b0316916388b2633291612add918b918b910161541e565b60006040518083038186803b158015612af557600080fd5b505afa158015612b09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b3191908101906150d1565b8152600254604051639b07923160e01b81526020909201916001600160a01b0390911690639b07923190612b6b908a908a9060040161541e565b60006040518083038186803b158015612b8357600080fd5b505afa158015612b97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bbf91908101906150d1565b815260025460405163085cc28b60e11b81526020909201916001600160a01b03909116906310b9851690612bf9908a908a9060040161541e565b60206040518083038186803b158015612c1157600080fd5b505afa158015612c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c499190614df7565b6001600160a01b039081168252600354604051631c4393f560e01b8152602090930192911690631c4393f590612c85908a908a9060040161541e565b60206040518083038186803b158015612c9d57600080fd5b505afa158015612cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd59190615161565b905295945050505050565b6000612cec8383612756565b805151909150612d0e5760405162461bcd60e51b815260040161096c90615734565b8060a0015163ffffffff16816080015163ffffffff1611612d695760405162461bcd60e51b81526020600482015260156024820152744e6f206d6f726520574c2072656d61696e696e672160581b604482015260640161096c565b428160c0015163ffffffff161115612db65760405162461bcd60e51b815260206004820152601060248201526f4e6f742073746172746564207965742160801b604482015260640161096c565b428160e0015163ffffffff161015612e015760405162461bcd60e51b815260206004820152600e60248201526d5061737420646561646c696e652160901b604482015260640161096c565b6001600160a01b0383166000908152601360209081526040808320858452825280832033845290915290205460ff1615612e725760405162461bcd60e51b8152602060048201526012602482015271416c7265616479207075726368617365642160701b604482015260640161096c565b610160810151612ec45760405162461bcd60e51b815260206004820152601f60248201527f4974656d20646f6573206e6f7420686176652061207365742070726963652100604482015260640161096c565b6101608101516040516370a0823160e01b81523360048201526001600160a01b038516906370a082319060240160206040518083038186803b158015612f0957600080fd5b505afa158015612f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f419190615161565b1015612f845760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f75676820746f6b656e732160701b604482015260640161096c565b8061014001516001600160a01b03166323b872dd33612fa286611c29565b6101608501516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015612ff757600080fd5b505af115801561300b573d6000803e3d6000fd5b505050506001600160a01b0383166000818152601360209081526040808320868452825280832033808552908352818420805460ff191660019081179091558585526012845282852088865284528285208054918201815585528385200180546001600160a01b03191690911790559282526011905220805483908110613094576130946159ec565b6000918252602090912060046006909202018101805463ffffffff600160201b90910416916130c28361599c565b91906101000a81548163ffffffff021916908363ffffffff16021790555050336001600160a01b0316836001600160a01b03167f4dcbdec10fe0cb3293e65a759d939692a8a1b1cd1772c7ce02edb4a82ac09c2f8484604051613126929190615843565b60405180910390a3505050565b6001600160a01b0381166000908152600d6020526040902060020180546060919061315d90615946565b80601f016020809104026020016040519081016040528092919081815260200182805461318990615946565b80156131d65780601f106131ab576101008083540402835291602001916131d6565b820191906000526020600020905b8154815290600101906020018083116131b957829003601f168201915b50505050509050919050565b606060006131f084846158ff565b6131fb9060016158e7565b905060008167ffffffffffffffff81111561321857613218615a02565b60405190808252806020026020018201604052801561328e57816020015b6040805161012081018252606080825260208083018290529282018190528082015260006080820181905260a0820181905260c0820181905260e0820181905261010082015282526000199092019101816132365790505b5090506000805b838110156135b3576001600160a01b03881660009081526011602052604090206132bf82896158e7565b815481106132cf576132cf6159ec565b9060005260206000209060060201604051806101200160405290816000820180546132f990615946565b80601f016020809104026020016040519081016040528092919081815260200182805461332590615946565b80156133725780601f1061334757610100808354040283529160200191613372565b820191906000526020600020905b81548152906001019060200180831161335557829003601f168201915b5050505050815260200160018201805461338b90615946565b80601f01602080910402602001604051908101604052809291908181526020018280546133b790615946565b80156134045780601f106133d957610100808354040283529160200191613404565b820191906000526020600020905b8154815290600101906020018083116133e757829003601f168201915b5050505050815260200160028201805461341d90615946565b80601f016020809104026020016040519081016040528092919081815260200182805461344990615946565b80156134965780601f1061346b57610100808354040283529160200191613496565b820191906000526020600020905b81548152906001019060200180831161347957829003601f168201915b505050505081526020016003820180546134af90615946565b80601f01602080910402602001604051908101604052809291908181526020018280546134db90615946565b80156135285780601f106134fd57610100808354040283529160200191613528565b820191906000526020600020905b81548152906001019060200180831161350b57829003601f168201915b5050509183525050600482015463ffffffff8082166020840152600160201b820481166040840152600160401b820481166060840152600160601b90910416608082015260059091015460a090910152838361358381615981565b945081518110613595576135956159ec565b602002602001018190525080806135ab90615981565b915050613295565b50909695505050505050565b6000546001600160a01b031633146135e95760405162461bcd60e51b815260040161096c9061560b565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a818154811061361b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600061364384846158ff565b61364e9060016158e7565b905060008167ffffffffffffffff81111561366b5761366b615a02565b6040519080825280602002602001820160405280156136a457816020015b613691614b3d565b8152602001906001900390816136895790505b5090506000805b838110156135b35760006136bf82896158e7565b6001600160a01b038a16600090815260116020526040812080549293509091839081106136ee576136ee6159ec565b90600052602060002090600602016040518061012001604052908160008201805461371890615946565b80601f016020809104026020016040519081016040528092919081815260200182805461374490615946565b80156137915780601f1061376657610100808354040283529160200191613791565b820191906000526020600020905b81548152906001019060200180831161377457829003601f168201915b505050505081526020016001820180546137aa90615946565b80601f01602080910402602001604051908101604052809291908181526020018280546137d690615946565b80156138235780601f106137f857610100808354040283529160200191613823565b820191906000526020600020905b81548152906001019060200180831161380657829003601f168201915b5050505050815260200160028201805461383c90615946565b80601f016020809104026020016040519081016040528092919081815260200182805461386890615946565b80156138b55780601f1061388a576101008083540402835291602001916138b5565b820191906000526020600020905b81548152906001019060200180831161389857829003601f168201915b505050505081526020016003820180546138ce90615946565b80601f01602080910402602001604051908101604052809291908181526020018280546138fa90615946565b80156139475780601f1061391c57610100808354040283529160200191613947565b820191906000526020600020905b81548152906001019060200180831161392a57829003601f168201915b505050505081526020016004820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016004820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016004820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160048201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016005820154815250509050600060405180610180016040528083600001518152602001836020015181526020018360400151815260200183606001518152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff1681526020018360e0015163ffffffff168152602001600260009054906101000a90046001600160a01b03166001600160a01b03166388b263328e876040518363ffffffff1660e01b8152600401613aad92919061541e565b60006040518083038186803b158015613ac557600080fd5b505afa158015613ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613b0191908101906150d1565b8152602001600260009054906101000a90046001600160a01b03166001600160a01b0316639b0792318e876040518363ffffffff1660e01b8152600401613b4992919061541e565b60006040518083038186803b158015613b6157600080fd5b505afa158015613b75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613b9d91908101906150d1565b8152602001600260009054906101000a90046001600160a01b03166001600160a01b03166310b985168e876040518363ffffffff1660e01b8152600401613be592919061541e565b60206040518083038186803b158015613bfd57600080fd5b505afa158015613c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c359190614df7565b6001600160a01b03168152602001600360009054906101000a90046001600160a01b03166001600160a01b0316631c4393f58e876040518363ffffffff1660e01b8152600401613c8692919061541e565b60206040518083038186803b158015613c9e57600080fd5b505afa158015613cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd69190615161565b90529050808686613ce681615981565b975081518110613cf857613cf86159ec565b60200260200101819052505050508080613d1190615981565b9150506136ab565b6000546001600160a01b03163314613d435760405162461bcd60e51b815260040161096c9061560b565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b82613d6f81611626565b6001600160a01b0316336001600160a01b031614613d9f5760405162461bcd60e51b815260040161096c90615778565b6001600160a01b03811660009081526009602052604090205460ff16613dd75760405162461bcd60e51b815260040161096c9061562f565b6001600160a01b03848116600081815260146020908152604080832094881680845294825291829020805460ff191687151590811790915582519485529084015290917f83933c70cac90337017c917163d652144e6a54c9dfbcc353b0d7431e4f6eeece9101610f5e565b6001600160a01b0381166000908152600e602090815260408083203380855292529091205482919060ff1680613e915750613e7c82611626565b6001600160a01b0316336001600160a01b0316145b613ead5760405162461bcd60e51b815260040161096c906157af565b6001600160a01b03821660009081526009602052604090205460ff16613ee55760405162461bcd60e51b815260040161096c906156b5565b6001600160a01b038316600090815260116020526040812054613f0a906001906158ff565b6001600160a01b03851660009081526011602052604081208054929350909183908110613f3957613f396159ec565b906000526020600020906006020160405180610120016040529081600082018054613f6390615946565b80601f0160208091040260200160405190810160405280929190818152602001828054613f8f90615946565b8015613fdc5780601f10613fb157610100808354040283529160200191613fdc565b820191906000526020600020905b815481529060010190602001808311613fbf57829003601f168201915b50505050508152602001600182018054613ff590615946565b80601f016020809104026020016040519081016040528092919081815260200182805461402190615946565b801561406e5780601f106140435761010080835404028352916020019161406e565b820191906000526020600020905b81548152906001019060200180831161405157829003601f168201915b5050505050815260200160028201805461408790615946565b80601f01602080910402602001604051908101604052809291908181526020018280546140b390615946565b80156141005780601f106140d557610100808354040283529160200191614100565b820191906000526020600020905b8154815290600101906020018083116140e357829003601f168201915b5050505050815260200160038201805461411990615946565b80601f016020809104026020016040519081016040528092919081815260200182805461414590615946565b80156141925780601f1061416757610100808354040283529160200191614192565b820191906000526020600020905b81548152906001019060200180831161417557829003601f168201915b5050509183525050600482015463ffffffff8082166020840152600160201b820481166040840152600160401b820481166060840152600160601b9091048116608083015260059092015460a091820152820151919250161561424d5760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f742064656c657465206974656d207769746820616c72656164792060448201526c626f7567687420676f6f64732160981b606482015260840161096c565b6001600160a01b0385166000908152601160205260409020805480614274576142746159d6565b600082815260208120600019909201916006830201906142948282614bbf565b6142a2600183016000614bbf565b6142b0600283016000614bbf565b6142be600383016000614bbf565b506004810180546fffffffffffffffffffffffffffffffff191690556000600590910155905560405133906001600160a01b038716907f4b4e2b05873ea04be2d7cf4174cc28d47e504d0915d66f0756ab6d332053e542906143219085906157f8565b60405180910390a35050505050565b6000546001600160a01b0316331461435a5760405162461bcd60e51b815260040161096c9061560b565b6004546001600160a01b03166143c35760405162461bcd60e51b815260206004820152602860248201527f537570657220476f7665726e6f722041636365737320686173206265656e2072604482015267195b9bdd5b98d95960c21b606482015260840161096c565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831660009081526014602090815260408083203380855292529091205484919060ff1680614434575061441f82611626565b6001600160a01b0316336001600160a01b0316145b6144805760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206e6f742061204d61726b65742041646d696e210000000000604482015260640161096c565b6001600160a01b03821660009081526009602052604090205460ff166144b85760405162461bcd60e51b815260040161096c906156b5565b60006144c48686612756565b8051519091506144e65760405162461bcd60e51b815260040161096c90615734565b8060a0015163ffffffff16816080015163ffffffff16116145415760405162461bcd60e51b81526020600482015260156024820152744e6f206d6f726520574c2072656d61696e696e672160581b604482015260640161096c565b6001600160a01b03808716600090815260136020908152604080832089845282528083209388168352929052205460ff16156145b05760405162461bcd60e51b815260206004820152600e60248201526d416c72656164792061646465642160901b604482015260640161096c565b6001600160a01b0380871660008181526013602090815260408083208a84528252808320948916808452948252808320805460ff19166001908117909155848452601283528184208b855283528184208054918201815584528284200180546001600160a01b03191690951790945591815260119091522080548690811061463a5761463a6159ec565b6000918252602090912060046006909202018101805463ffffffff600160201b90910416916146688361599c565b91906101000a81548163ffffffff021916908363ffffffff16021790555050836001600160a01b0316866001600160a01b03167f9667375a6e315840ffd862328dc3c9dc83110eb48019fc9348f686fb3aa489ec87846040516123d1929190615843565b6004546001600160a01b031633146146f65760405162461bcd60e51b815260040161096c906156ec565b6001600160a01b03821660009081526009602052604090205460ff16151581151514156147655760405162461bcd60e51b815260206004820181905260248201527f436f6e747261637420416c72656164792053657420617320426f6f6c65616e21604482015260640161096c565b6001600160a01b0382166000908152600960205260409020805460ff19168215151790558061479c57614797826149bd565b6147a5565b6147a58261495c565b6040805133815282151560208201526001600160a01b038416917f95672512364892dc5eac723d03b303897847c21af452724bffc2f62d18778b14910160405180910390a25050565b6001600160a01b0381166000908152600d6020526040902060010180546060919061315d90615946565b6000816001600160a01b031661482d84611626565b6001600160a01b0316149392505050565b6000546001600160a01b031633146148685760405162461bcd60e51b815260040161096c9061560b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b8161489481611626565b6001600160a01b0316336001600160a01b0316146148c45760405162461bcd60e51b815260040161096c90615778565b6001600160a01b03811660009081526009602052604090205460ff166148fc5760405162461bcd60e51b815260040161096c9061562f565b6001600160a01b0383811660008181526010602090815260409182902080546001600160a01b0319169487169485179055905192835233927f6f4d7969f0dad583dadda4c8dc246379b9199f8f498679f9820f4683c37098ec9101613126565b600a80546001600160a01b039092166000818152600b60205260408120849055600184018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890910180546001600160a01b0319169091179055565b600a546000906149cf906001906158ff565b6001600160a01b0383166000908152600b6020526040902054909150808214614a66576000600a8381548110614a0757614a076159ec565b600091825260209091200154600a80546001600160a01b039092169250829184908110614a3657614a366159ec565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505b600a805480614a7757614a776159d6565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03949094168152600b90935250506040812055565b828054614ac590615946565b90600052602060002090601f016020900481019282614ae75760008555614b2d565b82601f10614b0057805160ff1916838001178555614b2d565b82800160010185558215614b2d579182015b82811115614b2d578251825591602001919060010190614b12565b50614b39929150614bfc565b5090565b60405180610180016040528060608152602001606081526020016060815260200160608152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001606081526020016060815260200160006001600160a01b03168152602001600081525090565b508054614bcb90615946565b6000825580601f10614bdb575050565b601f016020900490600052602060002090810190614bf99190614bfc565b50565b5b80821115614b395760008155600101614bfd565b60008083601f840112614c2357600080fd5b50813567ffffffffffffffff811115614c3b57600080fd5b602083019150836020828501011115614c5357600080fd5b9250929050565b600082601f830112614c6b57600080fd5b8135614c7e614c79826158bf565b61588e565b818152846020838601011115614c9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208284031215614cc357600080fd5b614ccb615864565b9050813567ffffffffffffffff80821115614ce557600080fd5b614cf185838601614c5a565b83526020840135915080821115614d0757600080fd5b614d1385838601614c5a565b60208401526040840135915080821115614d2c57600080fd5b614d3885838601614c5a565b60408401526060840135915080821115614d5157600080fd5b50614d5e84828501614c5a565b606083015250614d7060808301614dba565b6080820152614d8160a08301614dba565b60a0820152614d9260c08301614dba565b60c0820152614da360e08301614dba565b60e082015261010080830135818301525092915050565b803563ffffffff81168114614dce57600080fd5b919050565b600060208284031215614de557600080fd5b8135614df081615a18565b9392505050565b600060208284031215614e0957600080fd5b8151614df081615a18565b60008060408385031215614e2757600080fd5b8235614e3281615a18565b91506020830135614e4281615a18565b809150509250929050565b600080600060608486031215614e6257600080fd5b8335614e6d81615a18565b92506020840135614e7d81615a18565b91506040840135614e8d81615a2d565b809150509250925092565b60008060408385031215614eab57600080fd5b8235614eb681615a18565b91506020830135614e4281615a2d565b60008060008060008060006080888a031215614ee157600080fd5b8735614eec81615a18565b9650602088013567ffffffffffffffff80821115614f0957600080fd5b614f158b838c01614c11565b909850965060408a0135915080821115614f2e57600080fd5b614f3a8b838c01614c11565b909650945060608a0135915080821115614f5357600080fd5b50614f608a828b01614c11565b989b979a50959850939692959293505050565b60008060408385031215614f8657600080fd5b8235614f9181615a18565b9150602083013567ffffffffffffffff811115614fad57600080fd5b614fb985828601614cb0565b9150509250929050565b60008060408385031215614fd657600080fd5b8235614fe181615a18565b946020939093013593505050565b60008060006060848603121561500457600080fd5b833561500f81615a18565b9250602084013591506040840135614e8d81615a18565b60008060006060848603121561503b57600080fd5b833561504681615a18565b925060208401359150604084013567ffffffffffffffff81111561506957600080fd5b61507586828701614cb0565b9150509250925092565b60008060006060848603121561509457600080fd5b833561509f81615a18565b95602085013595506040909401359392505050565b6000602082840312156150c657600080fd5b8151614df081615a2d565b6000602082840312156150e357600080fd5b815167ffffffffffffffff8111156150fa57600080fd5b8201601f8101841361510b57600080fd5b8051615119614c79826158bf565b81815285602083850101111561512e57600080fd5b61513f826020830160208601615916565b95945050505050565b60006020828403121561515a57600080fd5b5035919050565b60006020828403121561517357600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526151bb816020860160208601615916565b601f01601f19169290920160200192915050565b600061012082518185526151e5828601826151a3565b915050602083015184820360208601526151ff82826151a3565b9150506040830151848203604086015261521982826151a3565b9150506060830151848203606086015261523382826151a3565b915050608083015161524d608086018263ffffffff169052565b5060a083015161526560a086018263ffffffff169052565b5060c083015161527d60c086018263ffffffff169052565b5060e083015161529560e086018263ffffffff169052565b50610100928301519390920192909252919050565b600061018082518185526152c0828601826151a3565b915050602083015184820360208601526152da82826151a3565b915050604083015184820360408601526152f482826151a3565b9150506060830151848203606086015261530e82826151a3565b9150506080830151615328608086018263ffffffff169052565b5060a083015161534060a086018263ffffffff169052565b5060c083015161535860c086018263ffffffff169052565b5060e083015161537060e086018263ffffffff169052565b50610100808401518583038287015261538983826151a3565b9250505061012080840151858303828701526153a583826151a3565b92505050610140808401516153c4828701826001600160a01b03169052565b5050610160928301519390920192909252919050565b6001600160a01b03861681526060602082018190526000906153ff908301868861517a565b828103604084015261541281858761517a565b98975050505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156135b35783516001600160a01b031683529284019291840191600101615453565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156154cd57603f198886030184526154bb8583516151cf565b9450928501929085019060010161549f565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156154cd57603f1988860301845261551d8583516152aa565b94509285019290850190600101615501565b602081526000614df060208301846151a3565b60608152600061555560608301866151a3565b828103602084015261556781866151a3565b9050828103604084015261557b81856151a3565b9695505050505050565b60006101208083526155998184018d6151a3565b905082810360208401526155ad818c6151a3565b905082810360408401526155c1818b6151a3565b905082810360608401526155d5818a6151a3565b63ffffffff988916608085015296881660a0840152505092851660c0840152931660e08201526101000191909152949350505050565b6020808252600a90820152694e6f74204f776e65722160b01b604082015260600190565b60208082526024908201527f506c6561736520726567697374657220796f757220436f6e74726163742066696040820152637273742160e01b606082015260800190565b60208082526022908201527f596f7520617265206e6f742074686520636f6e747261637420676f7665726e6f604082015261722160f01b606082015260800190565b60208082526018908201527f436f6e7472616374206973206e6f7420656e61626c6564210000000000000000604082015260600190565b60208082526028908201527f596f7520617265206e6f742074686520636f6e747261637420737570657220676040820152676f7665726e6f722160c01b606082015260800190565b60208082526024908201527f5468697320574c56656e64696e674f626a65637420646f6573206e6f742065786040820152636973742160e01b606082015260800190565b6020808252601f908201527f596f7520617265206e6f742074686520436f6e7472616374204f776e65722100604082015260600190565b60208082526029908201527f596f7520617265206e6f7420417574686f72697a656420666f72207468697320604082015268436f6e74726163742160b81b606082015260800190565b602081526000614df060208301846151cf565b60408152600061581e60408301856151cf565b828103602084015261513f81856151cf565b602081526000614df060208301846152aa565b82815260406020820152600061585c60408301846152aa565b949350505050565b604051610120810167ffffffffffffffff8111828210171561588857615888615a02565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156158b7576158b7615a02565b604052919050565b600067ffffffffffffffff8211156158d9576158d9615a02565b50601f01601f191660200190565b600082198211156158fa576158fa6159c0565b500190565b600082821015615911576159116159c0565b500390565b60005b83811015615931578181015183820152602001615919565b83811115615940576000848401525b50505050565b600181811c9082168061595a57607f821691505b6020821081141561597b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615995576159956159c0565b5060010190565b600063ffffffff808316818114156159b6576159b66159c0565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614bf957600080fd5b8015158114614bf957600080fdfea26469706673582212200c75daca3846d7c3f5017980ba81ed5f63ba4767e5018a1d88435d993f6d489464736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103825760003560e01c80637d3db8c3116101de578063cce513a71161010f578063e2d97934116100ad578063ea7d8bc71161007c578063ea7d8bc7146108b1578063ee49d0a7146108c4578063f2fde38b146108d7578063fa8775ec146108ea57600080fd5b8063e2d9793414610865578063e4ee3fab14610878578063e6ea99291461088b578063e80e55e61461089e57600080fd5b8063db37aea8116100e9578063db37aea81461080c578063dbaf63761461082c578063dd810ea21461083f578063e25cf2191461085257600080fd5b8063cce513a7146107d3578063cd6c7185146107e6578063d026da30146107f957600080fd5b8063a13e2fed1161017c578063b847231611610156578063b847231614610764578063ba17a3b414610777578063c232315f1461078a578063c63c8868146107b357600080fd5b8063a13e2fed14610711578063a564560314610731578063a999258a1461075157600080fd5b806388c47fed116101b857806388c47fed146106ba5780638da5cb5b146106cd57806391ce8e2f146106e0578063a05cb99e1461070957600080fd5b80637d3db8c3146106815780637ea7c5f314610694578063888a9a5f146106a757600080fd5b80634a433225116102b85780636011ee26116102565780636f6736ba116102305780636f6736ba1461063557806370d5ae051461064857806378f212d11461065b5780637ba5a9ae1461066e57600080fd5b80636011ee26146105fe57806365e4ad9e1461060f5780636f173f711461062257600080fd5b80635152b14c116102925780635152b14c1461058e57806352b49357146105a157806355fec15d146105b45780635c952b58146105d657600080fd5b80634a433225146105485780634d7037dd1461055b5780634e98fab51461057b57600080fd5b80632165865811610325578063276f1c41116102ff578063276f1c41146104ef5780633b69c1f11461050257806347ba83ac146105225780634973c3771461053557600080fd5b806321658658146104a25780632508c67e146104b9578063267caabb146104cc57600080fd5b80630646b22b116103615780630646b22b146104185780630a225c85146104465780630d4e41f91461045b5780631bd650f11461048f57600080fd5b80626149da1461038757806303500641146103bf57806304e565c9146103ea575b600080fd5b6103aa610395366004614dd3565b600c6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103d26103cd36600461507f565b6108fd565b6040516001600160a01b0390911681526020016103b6565b6103aa6103f8366004614e14565b600e60209081526000928352604080842090915290825290205460ff1681565b6103aa610426366004614e14565b601460209081526000928352604080842090915290825290205460ff1681565b610459610454366004614dd3565b610942565b005b6103aa610469366004614fef565b601360209081526000938452604080852082529284528284209052825290205460ff1681565b6002546103d2906001600160a01b031681565b6104ab60085481565b6040519081526020016103b6565b6104596104c7366004614ec6565b610997565b6103aa6104da366004614dd3565b60096020526000908152604090205460ff1681565b6005546103d2906001600160a01b031681565b610515610510366004614dd3565b610b7b565b6040516103b69190615478565b610459610530366004614e4d565b610e85565b610459610543366004614f73565b610f6c565b610459610556366004614dd3565b61127b565b61056e610569366004614fc3565b611562565b6040516103b69190615437565b6104ab610589366004614fc3565b6115e2565b6103d261059c366004614dd3565b611626565b6104596105af366004614dd3565b6116dc565b6105c76105c2366004614dd3565b611728565b6040516103b693929190615542565b6105e96105e4366004614fc3565b6118e2565b6040516103b699989796959493929190615585565b6103d261060c366004614dd3565b90565b6103aa61061d366004614e14565b611b81565b610459610630366004614dd3565b611bdd565b6004546103d2906001600160a01b031681565b600f546103d2906001600160a01b031681565b6103d2610669366004614dd3565b611c29565b61045961067c366004615148565b611c7a565b61045961068f366004614dd3565b611ca9565b6104596106a2366004615026565b611dcb565b6104596106b5366004614ec6565b6123e1565b6104596106c8366004614e14565b61257c565b6000546103d2906001600160a01b031681565b6103d26106ee366004614dd3565b6010602052600090815260409020546001600160a01b031681565b61056e6126f4565b6104ab61071f366004614dd3565b600b6020526000908152604090205481565b61074461073f366004614fc3565b612756565b6040516103b69190615830565b6003546103d2906001600160a01b031681565b6006546103d2906001600160a01b031681565b610459610785366004614fc3565b612ce0565b6104ab610798366004614dd3565b6001600160a01b031660009081526011602052604090205490565b6107c66107c1366004614dd3565b613133565b6040516103b6919061552f565b6105156107e136600461507f565b6131e2565b6104596107f4366004614dd3565b6135bf565b6103d2610807366004615148565b61360b565b61081f61081a36600461507f565b613635565b6040516103b691906154da565b61045961083a366004614dd3565b613d19565b61045961084d366004614e4d565b613d65565b610459610860366004614dd3565b613e42565b6001546103d2906001600160a01b031681565b610459610886366004614dd3565b614330565b610459610899366004614fef565b6143e5565b6104596108ac366004614e98565b6146cc565b6107c66108bf366004614dd3565b6147ee565b6103aa6108d2366004614e14565b614818565b6104596108e5366004614dd3565b61483e565b6104596108f8366004614e14565b61488a565b6012602052826000526040600020602052816000526040600020818154811061092557600080fd5b6000918252602090912001546001600160a01b0316925083915050565b6000546001600160a01b031633146109755760405162461bcd60e51b815260040161096c9061560b565b60405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b866109a181611626565b6001600160a01b0316336001600160a01b0316146109d15760405162461bcd60e51b815260040161096c90615778565b6001600160a01b03811660009081526009602052604090205460ff16610a095760405162461bcd60e51b815260040161096c9061562f565b604051806060016040528088888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f890181900481028201810190925287815291810191908890889081908401838280828437600092019190915250505090825250604080516020601f87018190048102820181019092528581529181019190869086908190840183828082843760009201829052509390945250506001600160a01b038b168152600d6020908152604090912083518051919350610aef928492910190614ab9565b506020828101518051610b089260018501920190614ab9565b5060408201518051610b24916002840191602090910190614ab9565b50905050876001600160a01b03167f25fdbc222e090858cc121aef55da11cf44faaf595ca940f31cb371ddbe1b6d823389898787604051610b699594939291906153da565b60405180910390a25050505050505050565b6001600160a01b0381166000908152601160209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610e7a578382906000526020600020906006020160405180610120016040529081600082018054610be790615946565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1390615946565b8015610c605780601f10610c3557610100808354040283529160200191610c60565b820191906000526020600020905b815481529060010190602001808311610c4357829003601f168201915b50505050508152602001600182018054610c7990615946565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca590615946565b8015610cf25780601f10610cc757610100808354040283529160200191610cf2565b820191906000526020600020905b815481529060010190602001808311610cd557829003601f168201915b50505050508152602001600282018054610d0b90615946565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3790615946565b8015610d845780601f10610d5957610100808354040283529160200191610d84565b820191906000526020600020905b815481529060010190602001808311610d6757829003601f168201915b50505050508152602001600382018054610d9d90615946565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc990615946565b8015610e165780601f10610deb57610100808354040283529160200191610e16565b820191906000526020600020905b815481529060010190602001808311610df957829003601f168201915b5050509183525050600482015463ffffffff808216602080850191909152600160201b830482166040850152600160401b830482166060850152600160601b90920416608083015260059092015460a0909101529082526001929092019101610bb3565b505050509050919050565b82610e8f81611626565b6001600160a01b0316336001600160a01b031614610ebf5760405162461bcd60e51b815260040161096c90615778565b6001600160a01b03811660009081526009602052604090205460ff16610ef75760405162461bcd60e51b815260040161096c9061562f565b6001600160a01b038481166000818152600e6020908152604080832094881680845294825291829020805460ff191687151590811790915582519485529084015290917f497c860693ee48ca4920e55d08ac4ba08d719ae9e1883db046133620ce194df491015b60405180910390a250505050565b6001600160a01b0382166000908152600e602090815260408083203380855292529091205483919060ff1680610fbb5750610fa682611626565b6001600160a01b0316336001600160a01b0316145b610fd75760405162461bcd60e51b815260040161096c906157af565b6001600160a01b03821660009081526009602052604090205460ff1661100f5760405162461bcd60e51b815260040161096c906156b5565b82515161105e5760405162461bcd60e51b815260206004820152601960248201527f596f75206d75737420737065636966792061205469746c652100000000000000604482015260640161096c565b428360e0015163ffffffff16116110b75760405162461bcd60e51b815260206004820152601a60248201527f416c726561647920657870697265642074696d657374616d7021000000000000604482015260640161096c565b8260c0015163ffffffff168360e0015163ffffffff16116111115760405162461bcd60e51b8152602060048201526014602482015273656e6454696d65203e20737461727454696d652160601b604482015260640161096c565b600060a084018190526001600160a01b038516815260116020908152604082208054600181018255908352918190208551805187946006029092019261115c92849290910190614ab9565b5060208281015180516111759260018501920190614ab9565b5060408201518051611191916002840191602090910190614ab9565b50606082015180516111ad916003840191602090910190614ab9565b50608082015160048201805460a085015160c086015160e087015163ffffffff908116600160601b0263ffffffff60601b19928216600160401b029290921667ffffffffffffffff60401b19938216600160201b0267ffffffffffffffff1990951691909616179290921716929092179190911790556101009091015160059091015560405133906001600160a01b038616907f38ec25733295d7bfcea86209fb684de4d611e32229a9fdb036ce5936ed6540149061126d9087906157f8565b60405180910390a350505050565b806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b457600080fd5b505afa1580156112c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec9190614df7565b6001600160a01b0316336001600160a01b03161461131c5760405162461bcd60e51b815260040161096c90615778565b6001600160a01b03811660009081526009602052604090205460ff16156113985760405162461bcd60e51b815260206004820152602a60248201527f596f757220636f6e74726163742068617320616c7265616479206265656e20726044820152696567697374657265642160b01b606482015260840161096c565b6008546001546040516370a0823160e01b81523360048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156113de57600080fd5b505afa1580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190615161565b10156114645760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f6e2774206861766520656e6f75676820244d4553210000000000604482015260640161096c565b6001546006546008546040516323b872dd60e01b81523360048201526001600160a01b03928316602482015260448101919091529116906323b872dd90606401600060405180830381600087803b1580156114be57600080fd5b505af11580156114d2573d6000803e3d6000fd5b505050506001600160a01b03811660009081526009602090815260408083208054600160ff199182168117909255600c90935292208054909116909117905561151a8161495c565b806001600160a01b03167ff324ec9e65c6849640d47b8d287a652b8287a533bcf80092a857f3e02b0fcbcc3360085460405161155792919061541e565b60405180910390a250565b6001600160a01b03821660009081526012602090815260408083208484528252918290208054835181840281018401909452808452606093928301828280156115d457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116115b6575b505050505090505b92915050565b6001600160a01b038216600090815260116020526040812080548390811061160c5761160c6159ec565b906000526020600020906006020160050154905092915050565b6001600160a01b038181166000908152600760205260408120549091166116bd57816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561168057600080fd5b505afa158015611694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b89190614df7565b6115dc565b506001600160a01b039081166000908152600760205260409020541690565b6005546001600160a01b031633146117065760405162461bcd60e51b815260040161096c90615673565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600d6020526000908152604090208054819061174390615946565b80601f016020809104026020016040519081016040528092919081815260200182805461176f90615946565b80156117bc5780601f10611791576101008083540402835291602001916117bc565b820191906000526020600020905b81548152906001019060200180831161179f57829003601f168201915b5050505050908060010180546117d190615946565b80601f01602080910402602001604051908101604052809291908181526020018280546117fd90615946565b801561184a5780601f1061181f5761010080835404028352916020019161184a565b820191906000526020600020905b81548152906001019060200180831161182d57829003601f168201915b50505050509080600201805461185f90615946565b80601f016020809104026020016040519081016040528092919081815260200182805461188b90615946565b80156118d85780601f106118ad576101008083540402835291602001916118d8565b820191906000526020600020905b8154815290600101906020018083116118bb57829003601f168201915b5050505050905083565b601160205281600052604060002081815481106118fe57600080fd5b90600052602060002090600602016000915091505080600001805461192290615946565b80601f016020809104026020016040519081016040528092919081815260200182805461194e90615946565b801561199b5780601f106119705761010080835404028352916020019161199b565b820191906000526020600020905b81548152906001019060200180831161197e57829003601f168201915b5050505050908060010180546119b090615946565b80601f01602080910402602001604051908101604052809291908181526020018280546119dc90615946565b8015611a295780601f106119fe57610100808354040283529160200191611a29565b820191906000526020600020905b815481529060010190602001808311611a0c57829003601f168201915b505050505090806002018054611a3e90615946565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6a90615946565b8015611ab75780601f10611a8c57610100808354040283529160200191611ab7565b820191906000526020600020905b815481529060010190602001808311611a9a57829003601f168201915b505050505090806003018054611acc90615946565b80601f0160208091040260200160405190810160405280929190818152602001828054611af890615946565b8015611b455780601f10611b1a57610100808354040283529160200191611b45565b820191906000526020600020905b815481529060010190602001808311611b2857829003601f168201915b5050506004840154600590940154929363ffffffff80821694600160201b830482169450600160401b830482169350600160601b909204169089565b6001600160a01b038083166000908152600e6020908152604080832093851683529290529081205460ff1615611bb9575060016115dc565b816001600160a01b0316611bcc84611626565b6001600160a01b03161490506115dc565b6000546001600160a01b03163314611c075760405162461bcd60e51b815260040161096c9061560b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03818116600090815260106020526040812054909116611c5b57600f546001600160a01b03166115dc565b506001600160a01b039081166000908152601060205260409020541690565b6005546001600160a01b03163314611ca45760405162461bcd60e51b815260040161096c90615673565b600855565b6005546001600160a01b03163314611cd35760405162461bcd60e51b815260040161096c90615673565b6001546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb90839083906370a082319060240160206040518083038186803b158015611d2057600080fd5b505afa158015611d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d589190615161565b6040518363ffffffff1660e01b8152600401611d7592919061541e565b602060405180830381600087803b158015611d8f57600080fd5b505af1158015611da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc791906150b4565b5050565b6001600160a01b0383166000908152600e602090815260408083203380855292529091205484919060ff1680611e1a5750611e0582611626565b6001600160a01b0316336001600160a01b0316145b611e365760405162461bcd60e51b815260040161096c906157af565b6001600160a01b03821660009081526009602052604090205460ff16611e6e5760405162461bcd60e51b815260040161096c906156b5565b6001600160a01b0385166000908152601160205260408120805486908110611e9857611e986159ec565b906000526020600020906006020160405180610120016040529081600082018054611ec290615946565b80601f0160208091040260200160405190810160405280929190818152602001828054611eee90615946565b8015611f3b5780601f10611f1057610100808354040283529160200191611f3b565b820191906000526020600020905b815481529060010190602001808311611f1e57829003601f168201915b50505050508152602001600182018054611f5490615946565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8090615946565b8015611fcd5780601f10611fa257610100808354040283529160200191611fcd565b820191906000526020600020905b815481529060010190602001808311611fb057829003601f168201915b50505050508152602001600282018054611fe690615946565b80601f016020809104026020016040519081016040528092919081815260200182805461201290615946565b801561205f5780601f106120345761010080835404028352916020019161205f565b820191906000526020600020905b81548152906001019060200180831161204257829003601f168201915b5050505050815260200160038201805461207890615946565b80601f01602080910402602001604051908101604052809291908181526020018280546120a490615946565b80156120f15780601f106120c6576101008083540402835291602001916120f1565b820191906000526020600020905b8154815290600101906020018083116120d457829003601f168201915b5050509183525050600482015463ffffffff8082166020840152600160201b820481166040840152600160401b820481166060840152600160601b90910416608082015260059091015460a09091015280515190915061219e5760405162461bcd60e51b815260206004820152602260248201527f5468697320574c56656e64696e674974656d20646f6573206e6f742065786973604482015261742160f01b606482015260840161096c565b8351516121ed5760405162461bcd60e51b815260206004820152601860248201527f5469746c65206d757374206e6f7420626520656d707479210000000000000000604482015260640161096c565b8060a0015163ffffffff16846080015163ffffffff1610156122675760405162461bcd60e51b815260206004820152602d60248201527f416d6f756e7420417661696c61626c65206d757374206265203e3d20416d6f7560448201526c6e74205075726368617365642160981b606482015260840161096c565b6001600160a01b0386166000908152601160205260409020805485919087908110612294576122946159ec565b906000526020600020906006020160008201518160000190805190602001906122be929190614ab9565b5060208281015180516122d79260018501920190614ab9565b50604082015180516122f3916002840191602090910190614ab9565b506060820151805161230f916003840191602090910190614ab9565b50608082015160048201805460a085015160c086015160e087015163ffffffff908116600160601b0263ffffffff60601b19928216600160401b029290921667ffffffffffffffff60401b19938216600160201b0267ffffffffffffffff1990951691909616179290921716929092179190911790556101009091015160059091015560405133906001600160a01b038816907f32a5ac9831be31a982e11effc40669b8efc3803297417c523d99421775cddabf906123d1908590899061580b565b60405180910390a3505050505050565b6004546001600160a01b0316331461240b5760405162461bcd60e51b815260040161096c906156ec565b604051806060016040528087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f880181900481028201810190925286815291810191908790879081908401838280828437600092019190915250505090825250604080516020601f86018190048102820181019092528481529181019190859085908190840183828082843760009201829052509390945250506001600160a01b038a168152600d60209081526040909120835180519193506124f1928492910190614ab9565b50602082810151805161250a9260018501920190614ab9565b5060408201518051612526916002840191602090910190614ab9565b50905050866001600160a01b03167f25fdbc222e090858cc121aef55da11cf44faaf595ca940f31cb371ddbe1b6d82338888868660405161256b9594939291906153da565b60405180910390a250505050505050565b6004546001600160a01b031633146125a65760405162461bcd60e51b815260040161096c906156ec565b6001600160a01b0382166000908152600c602052604090205460ff16156126275760405162461bcd60e51b815260206004820152602f60248201527f4f776e65727368697020686173206265656e2070726f76656e207468726f756760448201526e34103932b3b4b9ba3930ba34b7b71760891b606482015260840161096c565b6001600160a01b0382166000908152601160205260409020541561268d5760405162461bcd60e51b815260206004820152601a60248201527f4f776e65727368697020686173206265656e2070726f76656e2e000000000000604482015260640161096c565b6001600160a01b0382811660008181526007602090815260409182902080546001600160a01b0319169486169485179055905192835233927f693495037fb55f5aa00e6f427e4d5198136d26272d35c42fc9f87ff62c5d5d4b910160405180910390a35050565b6060600a80548060200260200160405190810160405280929190818152602001828054801561274c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161272e575b5050505050905090565b61275e614b3d565b6001600160a01b0383166000908152601160205260408120805484908110612788576127886159ec565b9060005260206000209060060201604051806101200160405290816000820180546127b290615946565b80601f01602080910402602001604051908101604052809291908181526020018280546127de90615946565b801561282b5780601f106128005761010080835404028352916020019161282b565b820191906000526020600020905b81548152906001019060200180831161280e57829003601f168201915b5050505050815260200160018201805461284490615946565b80601f016020809104026020016040519081016040528092919081815260200182805461287090615946565b80156128bd5780601f10612892576101008083540402835291602001916128bd565b820191906000526020600020905b8154815290600101906020018083116128a057829003601f168201915b505050505081526020016002820180546128d690615946565b80601f016020809104026020016040519081016040528092919081815260200182805461290290615946565b801561294f5780601f106129245761010080835404028352916020019161294f565b820191906000526020600020905b81548152906001019060200180831161293257829003601f168201915b5050505050815260200160038201805461296890615946565b80601f016020809104026020016040519081016040528092919081815260200182805461299490615946565b80156129e15780601f106129b6576101008083540402835291602001916129e1565b820191906000526020600020905b8154815290600101906020018083116129c457829003601f168201915b505050918352505060048281015463ffffffff808216602080860191909152600160201b83048216604080870191909152600160401b84048316606080880191909152600160601b909404831660808088019190915260059097015460a09687015280516101808101825288518152888301519281019290925287810151828201528784015193820193909352868601518216958101959095528584015181169385019390935260c08086015184169085015260e080860151909316928401929092526002549151634459319960e11b81529394506000936101008401926001600160a01b0316916388b2633291612add918b918b910161541e565b60006040518083038186803b158015612af557600080fd5b505afa158015612b09573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b3191908101906150d1565b8152600254604051639b07923160e01b81526020909201916001600160a01b0390911690639b07923190612b6b908a908a9060040161541e565b60006040518083038186803b158015612b8357600080fd5b505afa158015612b97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bbf91908101906150d1565b815260025460405163085cc28b60e11b81526020909201916001600160a01b03909116906310b9851690612bf9908a908a9060040161541e565b60206040518083038186803b158015612c1157600080fd5b505afa158015612c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c499190614df7565b6001600160a01b039081168252600354604051631c4393f560e01b8152602090930192911690631c4393f590612c85908a908a9060040161541e565b60206040518083038186803b158015612c9d57600080fd5b505afa158015612cb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd59190615161565b905295945050505050565b6000612cec8383612756565b805151909150612d0e5760405162461bcd60e51b815260040161096c90615734565b8060a0015163ffffffff16816080015163ffffffff1611612d695760405162461bcd60e51b81526020600482015260156024820152744e6f206d6f726520574c2072656d61696e696e672160581b604482015260640161096c565b428160c0015163ffffffff161115612db65760405162461bcd60e51b815260206004820152601060248201526f4e6f742073746172746564207965742160801b604482015260640161096c565b428160e0015163ffffffff161015612e015760405162461bcd60e51b815260206004820152600e60248201526d5061737420646561646c696e652160901b604482015260640161096c565b6001600160a01b0383166000908152601360209081526040808320858452825280832033845290915290205460ff1615612e725760405162461bcd60e51b8152602060048201526012602482015271416c7265616479207075726368617365642160701b604482015260640161096c565b610160810151612ec45760405162461bcd60e51b815260206004820152601f60248201527f4974656d20646f6573206e6f7420686176652061207365742070726963652100604482015260640161096c565b6101608101516040516370a0823160e01b81523360048201526001600160a01b038516906370a082319060240160206040518083038186803b158015612f0957600080fd5b505afa158015612f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f419190615161565b1015612f845760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f75676820746f6b656e732160701b604482015260640161096c565b8061014001516001600160a01b03166323b872dd33612fa286611c29565b6101608501516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015612ff757600080fd5b505af115801561300b573d6000803e3d6000fd5b505050506001600160a01b0383166000818152601360209081526040808320868452825280832033808552908352818420805460ff191660019081179091558585526012845282852088865284528285208054918201815585528385200180546001600160a01b03191690911790559282526011905220805483908110613094576130946159ec565b6000918252602090912060046006909202018101805463ffffffff600160201b90910416916130c28361599c565b91906101000a81548163ffffffff021916908363ffffffff16021790555050336001600160a01b0316836001600160a01b03167f4dcbdec10fe0cb3293e65a759d939692a8a1b1cd1772c7ce02edb4a82ac09c2f8484604051613126929190615843565b60405180910390a3505050565b6001600160a01b0381166000908152600d6020526040902060020180546060919061315d90615946565b80601f016020809104026020016040519081016040528092919081815260200182805461318990615946565b80156131d65780601f106131ab576101008083540402835291602001916131d6565b820191906000526020600020905b8154815290600101906020018083116131b957829003601f168201915b50505050509050919050565b606060006131f084846158ff565b6131fb9060016158e7565b905060008167ffffffffffffffff81111561321857613218615a02565b60405190808252806020026020018201604052801561328e57816020015b6040805161012081018252606080825260208083018290529282018190528082015260006080820181905260a0820181905260c0820181905260e0820181905261010082015282526000199092019101816132365790505b5090506000805b838110156135b3576001600160a01b03881660009081526011602052604090206132bf82896158e7565b815481106132cf576132cf6159ec565b9060005260206000209060060201604051806101200160405290816000820180546132f990615946565b80601f016020809104026020016040519081016040528092919081815260200182805461332590615946565b80156133725780601f1061334757610100808354040283529160200191613372565b820191906000526020600020905b81548152906001019060200180831161335557829003601f168201915b5050505050815260200160018201805461338b90615946565b80601f01602080910402602001604051908101604052809291908181526020018280546133b790615946565b80156134045780601f106133d957610100808354040283529160200191613404565b820191906000526020600020905b8154815290600101906020018083116133e757829003601f168201915b5050505050815260200160028201805461341d90615946565b80601f016020809104026020016040519081016040528092919081815260200182805461344990615946565b80156134965780601f1061346b57610100808354040283529160200191613496565b820191906000526020600020905b81548152906001019060200180831161347957829003601f168201915b505050505081526020016003820180546134af90615946565b80601f01602080910402602001604051908101604052809291908181526020018280546134db90615946565b80156135285780601f106134fd57610100808354040283529160200191613528565b820191906000526020600020905b81548152906001019060200180831161350b57829003601f168201915b5050509183525050600482015463ffffffff8082166020840152600160201b820481166040840152600160401b820481166060840152600160601b90910416608082015260059091015460a090910152838361358381615981565b945081518110613595576135956159ec565b602002602001018190525080806135ab90615981565b915050613295565b50909695505050505050565b6000546001600160a01b031633146135e95760405162461bcd60e51b815260040161096c9061560b565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b600a818154811061361b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060600061364384846158ff565b61364e9060016158e7565b905060008167ffffffffffffffff81111561366b5761366b615a02565b6040519080825280602002602001820160405280156136a457816020015b613691614b3d565b8152602001906001900390816136895790505b5090506000805b838110156135b35760006136bf82896158e7565b6001600160a01b038a16600090815260116020526040812080549293509091839081106136ee576136ee6159ec565b90600052602060002090600602016040518061012001604052908160008201805461371890615946565b80601f016020809104026020016040519081016040528092919081815260200182805461374490615946565b80156137915780601f1061376657610100808354040283529160200191613791565b820191906000526020600020905b81548152906001019060200180831161377457829003601f168201915b505050505081526020016001820180546137aa90615946565b80601f01602080910402602001604051908101604052809291908181526020018280546137d690615946565b80156138235780601f106137f857610100808354040283529160200191613823565b820191906000526020600020905b81548152906001019060200180831161380657829003601f168201915b5050505050815260200160028201805461383c90615946565b80601f016020809104026020016040519081016040528092919081815260200182805461386890615946565b80156138b55780601f1061388a576101008083540402835291602001916138b5565b820191906000526020600020905b81548152906001019060200180831161389857829003601f168201915b505050505081526020016003820180546138ce90615946565b80601f01602080910402602001604051908101604052809291908181526020018280546138fa90615946565b80156139475780601f1061391c57610100808354040283529160200191613947565b820191906000526020600020905b81548152906001019060200180831161392a57829003601f168201915b505050505081526020016004820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016004820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016004820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160048201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016005820154815250509050600060405180610180016040528083600001518152602001836020015181526020018360400151815260200183606001518152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015163ffffffff1681526020018360e0015163ffffffff168152602001600260009054906101000a90046001600160a01b03166001600160a01b03166388b263328e876040518363ffffffff1660e01b8152600401613aad92919061541e565b60006040518083038186803b158015613ac557600080fd5b505afa158015613ad9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613b0191908101906150d1565b8152602001600260009054906101000a90046001600160a01b03166001600160a01b0316639b0792318e876040518363ffffffff1660e01b8152600401613b4992919061541e565b60006040518083038186803b158015613b6157600080fd5b505afa158015613b75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613b9d91908101906150d1565b8152602001600260009054906101000a90046001600160a01b03166001600160a01b03166310b985168e876040518363ffffffff1660e01b8152600401613be592919061541e565b60206040518083038186803b158015613bfd57600080fd5b505afa158015613c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c359190614df7565b6001600160a01b03168152602001600360009054906101000a90046001600160a01b03166001600160a01b0316631c4393f58e876040518363ffffffff1660e01b8152600401613c8692919061541e565b60206040518083038186803b158015613c9e57600080fd5b505afa158015613cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cd69190615161565b90529050808686613ce681615981565b975081518110613cf857613cf86159ec565b60200260200101819052505050508080613d1190615981565b9150506136ab565b6000546001600160a01b03163314613d435760405162461bcd60e51b815260040161096c9061560b565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b82613d6f81611626565b6001600160a01b0316336001600160a01b031614613d9f5760405162461bcd60e51b815260040161096c90615778565b6001600160a01b03811660009081526009602052604090205460ff16613dd75760405162461bcd60e51b815260040161096c9061562f565b6001600160a01b03848116600081815260146020908152604080832094881680845294825291829020805460ff191687151590811790915582519485529084015290917f83933c70cac90337017c917163d652144e6a54c9dfbcc353b0d7431e4f6eeece9101610f5e565b6001600160a01b0381166000908152600e602090815260408083203380855292529091205482919060ff1680613e915750613e7c82611626565b6001600160a01b0316336001600160a01b0316145b613ead5760405162461bcd60e51b815260040161096c906157af565b6001600160a01b03821660009081526009602052604090205460ff16613ee55760405162461bcd60e51b815260040161096c906156b5565b6001600160a01b038316600090815260116020526040812054613f0a906001906158ff565b6001600160a01b03851660009081526011602052604081208054929350909183908110613f3957613f396159ec565b906000526020600020906006020160405180610120016040529081600082018054613f6390615946565b80601f0160208091040260200160405190810160405280929190818152602001828054613f8f90615946565b8015613fdc5780601f10613fb157610100808354040283529160200191613fdc565b820191906000526020600020905b815481529060010190602001808311613fbf57829003601f168201915b50505050508152602001600182018054613ff590615946565b80601f016020809104026020016040519081016040528092919081815260200182805461402190615946565b801561406e5780601f106140435761010080835404028352916020019161406e565b820191906000526020600020905b81548152906001019060200180831161405157829003601f168201915b5050505050815260200160028201805461408790615946565b80601f01602080910402602001604051908101604052809291908181526020018280546140b390615946565b80156141005780601f106140d557610100808354040283529160200191614100565b820191906000526020600020905b8154815290600101906020018083116140e357829003601f168201915b5050505050815260200160038201805461411990615946565b80601f016020809104026020016040519081016040528092919081815260200182805461414590615946565b80156141925780601f1061416757610100808354040283529160200191614192565b820191906000526020600020905b81548152906001019060200180831161417557829003601f168201915b5050509183525050600482015463ffffffff8082166020840152600160201b820481166040840152600160401b820481166060840152600160601b9091048116608083015260059092015460a091820152820151919250161561424d5760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f742064656c657465206974656d207769746820616c72656164792060448201526c626f7567687420676f6f64732160981b606482015260840161096c565b6001600160a01b0385166000908152601160205260409020805480614274576142746159d6565b600082815260208120600019909201916006830201906142948282614bbf565b6142a2600183016000614bbf565b6142b0600283016000614bbf565b6142be600383016000614bbf565b506004810180546fffffffffffffffffffffffffffffffff191690556000600590910155905560405133906001600160a01b038716907f4b4e2b05873ea04be2d7cf4174cc28d47e504d0915d66f0756ab6d332053e542906143219085906157f8565b60405180910390a35050505050565b6000546001600160a01b0316331461435a5760405162461bcd60e51b815260040161096c9061560b565b6004546001600160a01b03166143c35760405162461bcd60e51b815260206004820152602860248201527f537570657220476f7665726e6f722041636365737320686173206265656e2072604482015267195b9bdd5b98d95960c21b606482015260840161096c565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831660009081526014602090815260408083203380855292529091205484919060ff1680614434575061441f82611626565b6001600160a01b0316336001600160a01b0316145b6144805760405162461bcd60e51b815260206004820152601b60248201527f596f7520617265206e6f742061204d61726b65742041646d696e210000000000604482015260640161096c565b6001600160a01b03821660009081526009602052604090205460ff166144b85760405162461bcd60e51b815260040161096c906156b5565b60006144c48686612756565b8051519091506144e65760405162461bcd60e51b815260040161096c90615734565b8060a0015163ffffffff16816080015163ffffffff16116145415760405162461bcd60e51b81526020600482015260156024820152744e6f206d6f726520574c2072656d61696e696e672160581b604482015260640161096c565b6001600160a01b03808716600090815260136020908152604080832089845282528083209388168352929052205460ff16156145b05760405162461bcd60e51b815260206004820152600e60248201526d416c72656164792061646465642160901b604482015260640161096c565b6001600160a01b0380871660008181526013602090815260408083208a84528252808320948916808452948252808320805460ff19166001908117909155848452601283528184208b855283528184208054918201815584528284200180546001600160a01b03191690951790945591815260119091522080548690811061463a5761463a6159ec565b6000918252602090912060046006909202018101805463ffffffff600160201b90910416916146688361599c565b91906101000a81548163ffffffff021916908363ffffffff16021790555050836001600160a01b0316866001600160a01b03167f9667375a6e315840ffd862328dc3c9dc83110eb48019fc9348f686fb3aa489ec87846040516123d1929190615843565b6004546001600160a01b031633146146f65760405162461bcd60e51b815260040161096c906156ec565b6001600160a01b03821660009081526009602052604090205460ff16151581151514156147655760405162461bcd60e51b815260206004820181905260248201527f436f6e747261637420416c72656164792053657420617320426f6f6c65616e21604482015260640161096c565b6001600160a01b0382166000908152600960205260409020805460ff19168215151790558061479c57614797826149bd565b6147a5565b6147a58261495c565b6040805133815282151560208201526001600160a01b038416917f95672512364892dc5eac723d03b303897847c21af452724bffc2f62d18778b14910160405180910390a25050565b6001600160a01b0381166000908152600d6020526040902060010180546060919061315d90615946565b6000816001600160a01b031661482d84611626565b6001600160a01b0316149392505050565b6000546001600160a01b031633146148685760405162461bcd60e51b815260040161096c9061560b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b8161489481611626565b6001600160a01b0316336001600160a01b0316146148c45760405162461bcd60e51b815260040161096c90615778565b6001600160a01b03811660009081526009602052604090205460ff166148fc5760405162461bcd60e51b815260040161096c9061562f565b6001600160a01b0383811660008181526010602090815260409182902080546001600160a01b0319169487169485179055905192835233927f6f4d7969f0dad583dadda4c8dc246379b9199f8f498679f9820f4683c37098ec9101613126565b600a80546001600160a01b039092166000818152600b60205260408120849055600184018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890910180546001600160a01b0319169091179055565b600a546000906149cf906001906158ff565b6001600160a01b0383166000908152600b6020526040902054909150808214614a66576000600a8381548110614a0757614a076159ec565b600091825260209091200154600a80546001600160a01b039092169250829184908110614a3657614a366159ec565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550505b600a805480614a7757614a776159d6565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03949094168152600b90935250506040812055565b828054614ac590615946565b90600052602060002090601f016020900481019282614ae75760008555614b2d565b82601f10614b0057805160ff1916838001178555614b2d565b82800160010185558215614b2d579182015b82811115614b2d578251825591602001919060010190614b12565b50614b39929150614bfc565b5090565b60405180610180016040528060608152602001606081526020016060815260200160608152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001606081526020016060815260200160006001600160a01b03168152602001600081525090565b508054614bcb90615946565b6000825580601f10614bdb575050565b601f016020900490600052602060002090810190614bf99190614bfc565b50565b5b80821115614b395760008155600101614bfd565b60008083601f840112614c2357600080fd5b50813567ffffffffffffffff811115614c3b57600080fd5b602083019150836020828501011115614c5357600080fd5b9250929050565b600082601f830112614c6b57600080fd5b8135614c7e614c79826158bf565b61588e565b818152846020838601011115614c9357600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208284031215614cc357600080fd5b614ccb615864565b9050813567ffffffffffffffff80821115614ce557600080fd5b614cf185838601614c5a565b83526020840135915080821115614d0757600080fd5b614d1385838601614c5a565b60208401526040840135915080821115614d2c57600080fd5b614d3885838601614c5a565b60408401526060840135915080821115614d5157600080fd5b50614d5e84828501614c5a565b606083015250614d7060808301614dba565b6080820152614d8160a08301614dba565b60a0820152614d9260c08301614dba565b60c0820152614da360e08301614dba565b60e082015261010080830135818301525092915050565b803563ffffffff81168114614dce57600080fd5b919050565b600060208284031215614de557600080fd5b8135614df081615a18565b9392505050565b600060208284031215614e0957600080fd5b8151614df081615a18565b60008060408385031215614e2757600080fd5b8235614e3281615a18565b91506020830135614e4281615a18565b809150509250929050565b600080600060608486031215614e6257600080fd5b8335614e6d81615a18565b92506020840135614e7d81615a18565b91506040840135614e8d81615a2d565b809150509250925092565b60008060408385031215614eab57600080fd5b8235614eb681615a18565b91506020830135614e4281615a2d565b60008060008060008060006080888a031215614ee157600080fd5b8735614eec81615a18565b9650602088013567ffffffffffffffff80821115614f0957600080fd5b614f158b838c01614c11565b909850965060408a0135915080821115614f2e57600080fd5b614f3a8b838c01614c11565b909650945060608a0135915080821115614f5357600080fd5b50614f608a828b01614c11565b989b979a50959850939692959293505050565b60008060408385031215614f8657600080fd5b8235614f9181615a18565b9150602083013567ffffffffffffffff811115614fad57600080fd5b614fb985828601614cb0565b9150509250929050565b60008060408385031215614fd657600080fd5b8235614fe181615a18565b946020939093013593505050565b60008060006060848603121561500457600080fd5b833561500f81615a18565b9250602084013591506040840135614e8d81615a18565b60008060006060848603121561503b57600080fd5b833561504681615a18565b925060208401359150604084013567ffffffffffffffff81111561506957600080fd5b61507586828701614cb0565b9150509250925092565b60008060006060848603121561509457600080fd5b833561509f81615a18565b95602085013595506040909401359392505050565b6000602082840312156150c657600080fd5b8151614df081615a2d565b6000602082840312156150e357600080fd5b815167ffffffffffffffff8111156150fa57600080fd5b8201601f8101841361510b57600080fd5b8051615119614c79826158bf565b81815285602083850101111561512e57600080fd5b61513f826020830160208601615916565b95945050505050565b60006020828403121561515a57600080fd5b5035919050565b60006020828403121561517357600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526151bb816020860160208601615916565b601f01601f19169290920160200192915050565b600061012082518185526151e5828601826151a3565b915050602083015184820360208601526151ff82826151a3565b9150506040830151848203604086015261521982826151a3565b9150506060830151848203606086015261523382826151a3565b915050608083015161524d608086018263ffffffff169052565b5060a083015161526560a086018263ffffffff169052565b5060c083015161527d60c086018263ffffffff169052565b5060e083015161529560e086018263ffffffff169052565b50610100928301519390920192909252919050565b600061018082518185526152c0828601826151a3565b915050602083015184820360208601526152da82826151a3565b915050604083015184820360408601526152f482826151a3565b9150506060830151848203606086015261530e82826151a3565b9150506080830151615328608086018263ffffffff169052565b5060a083015161534060a086018263ffffffff169052565b5060c083015161535860c086018263ffffffff169052565b5060e083015161537060e086018263ffffffff169052565b50610100808401518583038287015261538983826151a3565b9250505061012080840151858303828701526153a583826151a3565b92505050610140808401516153c4828701826001600160a01b03169052565b5050610160928301519390920192909252919050565b6001600160a01b03861681526060602082018190526000906153ff908301868861517a565b828103604084015261541281858761517a565b98975050505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156135b35783516001600160a01b031683529284019291840191600101615453565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156154cd57603f198886030184526154bb8583516151cf565b9450928501929085019060010161549f565b5092979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156154cd57603f1988860301845261551d8583516152aa565b94509285019290850190600101615501565b602081526000614df060208301846151a3565b60608152600061555560608301866151a3565b828103602084015261556781866151a3565b9050828103604084015261557b81856151a3565b9695505050505050565b60006101208083526155998184018d6151a3565b905082810360208401526155ad818c6151a3565b905082810360408401526155c1818b6151a3565b905082810360608401526155d5818a6151a3565b63ffffffff988916608085015296881660a0840152505092851660c0840152931660e08201526101000191909152949350505050565b6020808252600a90820152694e6f74204f776e65722160b01b604082015260600190565b60208082526024908201527f506c6561736520726567697374657220796f757220436f6e74726163742066696040820152637273742160e01b606082015260800190565b60208082526022908201527f596f7520617265206e6f742074686520636f6e747261637420676f7665726e6f604082015261722160f01b606082015260800190565b60208082526018908201527f436f6e7472616374206973206e6f7420656e61626c6564210000000000000000604082015260600190565b60208082526028908201527f596f7520617265206e6f742074686520636f6e747261637420737570657220676040820152676f7665726e6f722160c01b606082015260800190565b60208082526024908201527f5468697320574c56656e64696e674f626a65637420646f6573206e6f742065786040820152636973742160e01b606082015260800190565b6020808252601f908201527f596f7520617265206e6f742074686520436f6e7472616374204f776e65722100604082015260600190565b60208082526029908201527f596f7520617265206e6f7420417574686f72697a656420666f72207468697320604082015268436f6e74726163742160b81b606082015260800190565b602081526000614df060208301846151cf565b60408152600061581e60408301856151cf565b828103602084015261513f81856151cf565b602081526000614df060208301846152aa565b82815260406020820152600061585c60408301846152aa565b949350505050565b604051610120810167ffffffffffffffff8111828210171561588857615888615a02565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156158b7576158b7615a02565b604052919050565b600067ffffffffffffffff8211156158d9576158d9615a02565b50601f01601f191660200190565b600082198211156158fa576158fa6159c0565b500190565b600082821015615911576159116159c0565b500390565b60005b83811015615931578181015183820152602001615919565b83811115615940576000848401525b50505050565b600181811c9082168061595a57607f821691505b6020821081141561597b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415615995576159956159c0565b5060010190565b600063ffffffff808316818114156159b6576159b66159c0565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614bf957600080fd5b8015158114614bf957600080fdfea26469706673582212200c75daca3846d7c3f5017980ba81ed5f63ba4767e5018a1d88435d993f6d489464736f6c63430008070033

Deployed Bytecode Sourcemap

6393:23033:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14242:53;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16832:14:1;;16825:22;16807:41;;16795:2;16780:18;14242:53:0;;;;;;;;18869:79;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;12741:32:1;;;12723:51;;12711:2;12696:18;18869:79:0;12577:203:1;17198:81:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;23210:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;8568:130;;;;;;:::i;:::-;;:::i;:::-;;18955:103;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8184:112;;;;;-1:-1:-1;;;;;8184:112:0;;;12285:45;;;;;;;;;31505:25:1;;;31493:2;31478:18;12285:45:0;31359:177:1;16749:441:0;;;;;;:::i;:::-;;:::i;13034:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8792:30;;;;;-1:-1:-1;;;;;8792:30:0;;;26596:165;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;17292:277::-;;;;;;:::i;:::-;;:::i;19067:780::-;;;;;;:::i;:::-;;:::i;14304:723::-;;;;;;:::i;:::-;;:::i;26129:175::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25040:177::-;;;;;;:::i;:::-;;:::i;15082:314::-;;;;;;:::i;:::-;;:::i;12471:131::-;;;;;;:::i;:::-;;:::i;16676:60::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;18729:67::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;25223:127::-;;;;;;:::i;:::-;25333:9;25223:127;16257:239;;;;;;:::i;:::-;;:::i;8072:96::-;;;;;;:::i;:::-;;:::i;8750:35::-;;;;;-1:-1:-1;;;;;8750:35:0;;;17577:71;;;;;-1:-1:-1;;;;;17577:71:0;;;17728:296;;;;;;:::i;:::-;;:::i;12350:115::-;;;;;;:::i;:::-;;:::i;12608:319::-;;;;;;:::i;:::-;;:::i;19855:772::-;;;;;;:::i;:::-;;:::i;10469:440::-;;;;;;:::i;:::-;;:::i;10915:1317::-;;;;;;:::i;:::-;;:::i;5267:20::-;;;;;-1:-1:-1;;;;;5267:20:0;;;17655:60;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;17655:60:0;;;13224:117;;;:::i;13159:56::-;;;;;;:::i;:::-;;;;;;;;;;;;;;27327:819;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8449:112::-;;;;;-1:-1:-1;;;;;8449:112:0;;;8829:36;;;;;-1:-1:-1;;;;;8829:36:0;;;21419:1538;;;;;;:::i;:::-;;:::i;26432:156::-;;;;;;:::i;:::-;-1:-1:-1;;;;;26538:35:0;26511:7;26538:35;;;:24;:35;;;;;:42;;26432:156;25531:175;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26767:475::-;;;;;;:::i;:::-;;:::i;9575:114::-;;;;;;:::i;:::-;;:::i;13119:33::-;;;;;;:::i;:::-;;:::i;28154:1269::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8303:130::-;;;;;;:::i;:::-;;:::i;23301:282::-;;;;;;:::i;:::-;;:::i;20635:523::-;;;;;;:::i;:::-;;:::i;7985:80::-;;;;;-1:-1:-1;;;;;7985:80:0;;;9080:323;;;;;;:::i;:::-;;:::i;23943:1048::-;;;;;;:::i;:::-;;:::i;9952:511::-;;;;;;:::i;:::-;;:::i;25356:169::-;;;;;;:::i;:::-;;:::i;16092:159::-;;;;;;:::i;:::-;;:::i;5413:77::-;;;;;;:::i;:::-;;:::i;18030:253::-;;;;;;:::i;:::-;;:::i;18869:79::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18869:79:0;;-1:-1:-1;18869:79:0;;-1:-1:-1;;18869:79:0:o;8568:130::-;5367:5;;-1:-1:-1;;;;;5367:5:0;5376:10;5367:19;5359:42;;;;-1:-1:-1;;;5359:42:0;;;;;;;:::i;:::-;;;;;;;;;8646:15:::1;:44:::0;;-1:-1:-1;;;;;;8646:44:0::1;-1:-1:-1::0;;;;;8646:44:0;;;::::1;::::0;;;::::1;::::0;;8568:130::o;16749:441::-;16929:9;15489:24;15503:9;15489:13;:24::i;:::-;-1:-1:-1;;;;;15475:38:0;:10;-1:-1:-1;;;;;15475:38:0;;15467:95;;;;-1:-1:-1;;;15467:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15581:28:0;;;;;;:17;:28;;;;;;;;15573:90;;;;-1:-1:-1;;;15573:90:0;;;;;;;:::i;:::-;16992:101:::1;;;;;;;;17018:12;;16992:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;16992:101:0;;;-1:-1:-1;16992:101:0::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;17046:10;;;;;;16992:101;::::1;17046:10:::0;;;;16992:101;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;16992:101:0;;;-1:-1:-1;16992:101:0::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;17071:11;;;;;;16992:101;::::1;17071:11:::0;;;;16992:101;::::1;;::::0;::::1;::::0;;;-1:-1:-1;16992:101:0;;;;-1:-1:-1;;;;;;;16957:32:0;::::1;::::0;;:21:::1;:32;::::0;;;;;;;:136;;;;:32;;-1:-1:-1;16957:136:0::1;::::0;:32;;:136;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;16957:136:0::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;16957:136:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;;;17133:9;-1:-1:-1::0;;;;;17115:67:0::1;;17144:10;17156:12;;17170:11;;17115:67;;;;;;;;;;:::i;:::-;;;;;;;;16749:441:::0;;;;;;;;:::o;26596:165::-;-1:-1:-1;;;;;26718:35:0;;;;;;:24;:35;;;;;;;;26711:42;;;;;;;;;;;;;;;;;26676:22;;26711:42;;26718:35;;26711:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26711:42:0;;;-1:-1:-1;;26711:42:0;;;;;;;;;;;;;;;;-1:-1:-1;;;26711:42:0;;;;;;;;-1:-1:-1;;;26711:42:0;;;;;;;;-1:-1:-1;;;26711:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26596:165;;;:::o;17292:277::-;17408:9;15489:24;15503:9;15489:13;:24::i;:::-;-1:-1:-1;;;;;15475:38:0;:10;-1:-1:-1;;;;;15475:38:0;;15467:95;;;;-1:-1:-1;;;15467:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15581:28:0;;;;;;:17;:28;;;;;;;;15573:90;;;;-1:-1:-1;;;15573:90:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17432:40:0;;::::1;;::::0;;;:29:::1;:40;::::0;;;;;;;:51;;::::1;::::0;;;;;;;;;;:59;;-1:-1:-1;;17432:59:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17517:44;;13333:51:1;;;13400:18;;;13393:50;17432:40:0;;17517:44:::1;::::0;13306:18:1;17517:44:0::1;;;;;;;;17292:277:::0;;;;:::o;19067:780::-;-1:-1:-1;;;;;15771:40:0;;;;;;:29;:40;;;;;;;;19189:10;15771:51;;;;;;;;;19178:9;;19189:10;15771:51;;;:106;;;15853:24;15867:9;15853:13;:24::i;:::-;-1:-1:-1;;;;;15839:38:0;:10;-1:-1:-1;;;;;15839:38:0;;15771:106;15763:173;;;;-1:-1:-1;;;15763:173:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15955:28:0;;;;;;:17;:28;;;;;;;;15947:78;;;;-1:-1:-1;;;15947:78:0;;;;;;;:::i;:::-;19226:20;;19220:34;19212:89:::1;;;::::0;-1:-1:-1;;;19212:89:0;;24508:2:1;19212:89:0::1;::::0;::::1;24490:21:1::0;24547:2;24527:18;;;24520:30;24586:27;24566:18;;;24559:55;24631:18;;19212:89:0::1;24306:349:1::0;19212:89:0::1;19354:15;19328:14;:22;;;19320:31;;:49;19312:101;;;::::0;-1:-1:-1;;;19312:101:0;;30144:2:1;19312:101:0::1;::::0;::::1;30126:21:1::0;30183:2;30163:18;;;30156:30;30222:28;30202:18;;;30195:56;30268:18;;19312:101:0::1;29942:350:1::0;19312:101:0::1;19457:14;:24;;;19432:49;;:14;:22;;;:49;;;19424:95;;;::::0;-1:-1:-1;;;19424:95:0;;26789:2:1;19424:95:0::1;::::0;::::1;26771:21:1::0;26828:2;26808:18;;;26801:30;-1:-1:-1;;;26847:18:1;;;26840:50;26907:18;;19424:95:0::1;26587:344:1::0;19424:95:0::1;19638:1;19605:30;::::0;::::1;:34:::0;;;-1:-1:-1;;;;;19700:35:0;::::1;::::0;;:24:::1;:35;::::0;;;;;;:56;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;19605:14;;19700:56:::1;;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;19700:56:0::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;19700:56:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;19700:56:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;19700:56:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;;19700:56:0::1;-1:-1:-1::0;;;;19700:56:0;;::::1;-1:-1:-1::0;;;19700:56:0::1;::::0;;;;-1:-1:-1;;;;19700:56:0;;::::1;-1:-1:-1::0;;;19700:56:0::1;-1:-1:-1::0;;19700:56:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;19782:57:::1;::::0;19812:10:::1;::::0;-1:-1:-1;;;;;19782:57:0;::::1;::::0;::::1;::::0;::::1;::::0;19824:14;;19782:57:::1;:::i;:::-;;;;;;;;19067:780:::0;;;;:::o;14304:723::-;14409:9;-1:-1:-1;;;;;14400:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14386:41:0;:10;-1:-1:-1;;;;;14386:41:0;;14378:98;;;;-1:-1:-1;;;14378:98:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14496:28:0;;;;;;:17;:28;;;;;;;;14495:29;14487:97;;;;-1:-1:-1;;;14487:97:0;;20029:2:1;14487:97:0;;;20011:21:1;20068:2;20048:18;;;20041:30;20107:34;20087:18;;;20080:62;-1:-1:-1;;;20158:18:1;;;20151:40;20208:19;;14487:97:0;19827:406:1;14487:97:0;14632:17;;14603:3;;:25;;-1:-1:-1;;;14603:25:0;;14617:10;14603:25;;;12723:51:1;-1:-1:-1;;;;;14603:3:0;;;;:13;;12696:18:1;;14603:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;14595:99;;;;-1:-1:-1;;;14595:99:0;;28614:2:1;14595:99:0;;;28596:21:1;28653:2;28633:18;;;28626:30;28692:29;28672:18;;;28665:57;28739:18;;14595:99:0;28412:351:1;14595:99:0;14715:3;;14744:21;;14767:17;;14715:70;;-1:-1:-1;;;14715:70:0;;14732:10;14715:70;;;13025:34:1;-1:-1:-1;;;;;14744:21:0;;;13075:18:1;;;13068:43;13127:18;;;13120:34;;;;14715:3:0;;;:16;;12960:18:1;;14715:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;14806:28:0;;;;;;:17;:28;;;;;;;;:35;;14837:4;-1:-1:-1;;14806:35:0;;;;;;;;14852:21;:32;;;;;:39;;;;;;;;;;14904:29;14806:28;14904:18;:29::i;:::-;14978:9;-1:-1:-1;;;;;14959:60:0;;14989:10;15001:17;;14959:60;;;;;;;:::i;:::-;;;;;;;;14304:723;:::o;26129:175::-;-1:-1:-1;;;;;26255:33:0;;;;;;:22;:33;;;;;;;;:41;;;;;;;;;26248:48;;;;;;;;;;;;;;;;;26218:16;;26248:48;;;26255:41;26248:48;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26248:48:0;;;;;;;;;;;;;;;;;;;;;;;26129:175;;;;;:::o;25040:177::-;-1:-1:-1;;;;;25160:35:0;;25133:7;25160:35;;;:24;:35;;;;;:43;;25196:6;;25160:43;;;;;;:::i;:::-;;;;;;;;;;;:49;;;25153:56;;25040:177;;;;:::o;15082:314::-;-1:-1:-1;;;;;15262:33:0;;;15145:7;15262:33;;;:22;:33;;;;;;15145:7;;15262:33;:126;;15370:9;-1:-1:-1;;;;;15361:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15262:126;;;-1:-1:-1;;;;;;15325:33:0;;;;;;;:22;:33;;;;;;;;15082:314::o;12471:131::-;9750:15;;-1:-1:-1;;;;;9750:15:0;9736:10;:29;9728:89;;;;-1:-1:-1;;;9728:89:0;;;;;;;:::i;:::-;12560:21:::1;:34:::0;;-1:-1:-1;;;;;;12560:34:0::1;-1:-1:-1::0;;;;;12560:34:0;;;::::1;::::0;;;::::1;::::0;;12471:131::o;16676:60::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18729:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18729:67:0;;;;;;;;;;;;;;;;-1:-1:-1;;;18729:67:0;;;;;-1:-1:-1;;;;18729:67:0;;;;;-1:-1:-1;;;;18729:67:0;;;;;;:::o;16257:239::-;-1:-1:-1;;;;;16364:40:0;;;16343:4;16364:40;;;:29;:40;;;;;;;;:51;;;;;;;;;;;;;;16360:128;;;-1:-1:-1;16424:4:0;16417:11;;16360:128;16479:9;-1:-1:-1;;;;;16451:37:0;:24;16465:9;16451:13;:24::i;:::-;-1:-1:-1;;;;;16451:37:0;;16444:44;;;;8072:96;5367:5;;-1:-1:-1;;;;;5367:5:0;5376:10;5367:19;5359:42;;;;-1:-1:-1;;;5359:42:0;;;;;;;:::i;:::-;8138:3:::1;:22:::0;;-1:-1:-1;;;;;;8138:22:0::1;-1:-1:-1::0;;;;;8138:22:0;;;::::1;::::0;;;::::1;::::0;;8072:96::o;17728:296::-;-1:-1:-1;;;;;17898:36:0;;;17789:7;17898:36;;;:25;:36;;;;;;17789:7;;17898:36;:117;;18004:11;;-1:-1:-1;;;;;18004:11:0;17898:117;;;-1:-1:-1;;;;;;17965:36:0;;;;;;;:25;:36;;;;;;;;17728:296::o;12350:115::-;9750:15;;-1:-1:-1;;;;;9750:15:0;9736:10;:29;9728:89;;;;-1:-1:-1;;;9728:89:0;;;;;;;:::i;:::-;12431:17:::1;:26:::0;12350:115::o;12608:319::-;9750:15;;-1:-1:-1;;;;;9750:15:0;9736:10;:29;9728:89;;;;-1:-1:-1;;;9728:89:0;;;;;;;:::i;:::-;12866:3:::1;::::0;12890:28:::1;::::0;-1:-1:-1;;;12890:28:0;;12912:4:::1;12890:28;::::0;::::1;12723:51:1::0;-1:-1:-1;;;;;12866:3:0;;::::1;::::0;:12:::1;::::0;12879:9;;12866:3;;12890:13:::1;::::0;12696:18:1;;12890:28:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12866:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12608:319:::0;:::o;19855:772::-;-1:-1:-1;;;;;15771:40:0;;;;;;:29;:40;;;;;;;;20002:10;15771:51;;;;;;;;;19991:9;;20002:10;15771:51;;;:106;;;15853:24;15867:9;15853:13;:24::i;:::-;-1:-1:-1;;;;;15839:38:0;:10;-1:-1:-1;;;;;15839:38:0;;15771:106;15763:173;;;;-1:-1:-1;;;15763:173:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15955:28:0;;;;;;:17;:28;;;;;;;;15947:78;;;;-1:-1:-1;;;15947:78:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20054:35:0;::::1;20025:26;20054:35:::0;;;:24:::1;:35;::::0;;;;:43;;20090:6;;20054:43;::::1;;;;;:::i;:::-;;;;;;;;;;;20025:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;20025:72:0;;;-1:-1:-1;;20025:72:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;;::::0;::::1;::::0;-1:-1:-1;;;20025:72:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20025:72:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20025:72:0;;::::1;;::::0;;;;::::1;::::0;;::::1;::::0;;;;;;20124:11;;20118:25;20025:72;;-1:-1:-1;20110:89:0::1;;;::::0;-1:-1:-1;;;20110:89:0;;27851:2:1;20110:89:0::1;::::0;::::1;27833:21:1::0;27890:2;27870:18;;;27863:30;27929:34;27909:18;;;27902:62;-1:-1:-1;;;27980:18:1;;;27973:32;28022:19;;20110:89:0::1;27649:398:1::0;20110:89:0::1;20224:20:::0;;20218:34;20210:88:::1;;;::::0;-1:-1:-1;;;20210:88:0;;27138:2:1;20210:88:0::1;::::0;::::1;27120:21:1::0;27177:2;27157:18;;;27150:30;27216:26;27196:18;;;27189:54;27260:18;;20210:88:0::1;26936:348:1::0;20210:88:0::1;20361:5;:21;;;20327:55;;:14;:30;;;:55;;;;20319:126;;;::::0;-1:-1:-1;;;20319:126:0;;24862:2:1;20319:126:0::1;::::0;::::1;24844:21:1::0;24901:2;24881:18;;;24874:30;24940:34;24920:18;;;24913:62;-1:-1:-1;;;24991:18:1;;;24984:43;25044:19;;20319:126:0::1;24660:409:1::0;20319:126:0::1;-1:-1:-1::0;;;;;20466:35:0;::::1;;::::0;;;:24:::1;:35;::::0;;;;:43;;20512:14;;20466:35;20502:6;;20466:43;::::1;;;;;:::i;:::-;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;20466:60:0::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;20466:60:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;20466:60:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;20466:60:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;;20466:60:0::1;-1:-1:-1::0;;;;20466:60:0;;::::1;-1:-1:-1::0;;;20466:60:0::1;::::0;;;;-1:-1:-1;;;;20466:60:0;;::::1;-1:-1:-1::0;;;20466:60:0::1;-1:-1:-1::0;;20466:60:0;;;;;;::::1;::::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;20552:67:::1;::::0;20585:10:::1;::::0;-1:-1:-1;;;;;20552:67:0;::::1;::::0;::::1;::::0;::::1;::::0;20597:5;;20604:14;;20552:67:::1;:::i;:::-;;;;;;;;20014:613;19855:772:::0;;;;;:::o;10469:440::-;9470:20;;-1:-1:-1;;;;;9470:20:0;9456:10;:34;9448:100;;;;-1:-1:-1;;;9448:100:0;;;;;;;:::i;:::-;10707:101:::1;;;;;;;;10733:12;;10707:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;;;10707:101:0;;;-1:-1:-1;10707:101:0::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;10761:10;;;;;;10707:101;::::1;10761:10:::0;;;;10707:101;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;;;10707:101:0;;;-1:-1:-1;10707:101:0::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;10786:11;;;;;;10707:101;::::1;10786:11:::0;;;;10707:101;::::1;;::::0;::::1;::::0;;;-1:-1:-1;10707:101:0;;;;-1:-1:-1;;;;;;;10672:32:0;::::1;::::0;;:21:::1;:32;::::0;;;;;;;:136;;;;:32;;-1:-1:-1;10672:136:0::1;::::0;:32;;:136;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10672:136:0::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10672:136:0::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;;;10852:9;-1:-1:-1::0;;;;;10834:67:0::1;;10863:10;10875:12;;10889:11;;10834:67;;;;;;;;;;:::i;:::-;;;;;;;;10469:440:::0;;;;;;;:::o;10915:1317::-;9470:20;;-1:-1:-1;;;;;9470:20:0;9456:10;:34;9448:100;;;;-1:-1:-1;;;9448:100:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11341:32:0;::::1;;::::0;;;:21:::1;:32;::::0;;;;;::::1;;11340:33;11332:106;;;::::0;-1:-1:-1;;;11332:106:0;;26373:2:1;11332:106:0::1;::::0;::::1;26355:21:1::0;26412:2;26392:18;;;26385:30;26451:34;26431:18;;;26424:62;-1:-1:-1;;;26502:18:1;;;26495:45;26557:19;;11332:106:0::1;26171:411:1::0;11332:106:0::1;-1:-1:-1::0;;;;;11705:35:0;::::1;;::::0;;;:24:::1;:35;::::0;;;;:42;:47;11697:99:::1;;;::::0;-1:-1:-1;;;11697:99:0;;19674:2:1;11697:99:0::1;::::0;::::1;19656:21:1::0;19713:2;19693:18;;;19686:30;19752:28;19732:18;;;19725:56;19798:18;;11697:99:0::1;19472:350:1::0;11697:99:0::1;-1:-1:-1::0;;;;;11821:33:0;;::::1;;::::0;;;:22:::1;:33;::::0;;;;;;;;:49;;-1:-1:-1;;;;;;11821:49:0::1;::::0;;::::1;::::0;;::::1;::::0;;12166:58;;12723:51:1;;;12198:10:0::1;::::0;12166:58:::1;::::0;12696:18:1;12166:58:0::1;;;;;;;10915:1317:::0;;:::o;13224:117::-;13281:16;13317;13310:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13310:23:0;;;;;;;;;;;;;;;;;;;;;;;13224:117;:::o;27327:819::-;27417:22;;:::i;:::-;-1:-1:-1;;;;;27481:35:0;;27452:26;27481:35;;;:24;:35;;;;;:43;;27517:6;;27481:43;;;;;;:::i;:::-;;;;;;;;;;;27452:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27452:72:0;;;-1:-1:-1;;27452:72:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;27452:72:0;;;;;;;;;;;;-1:-1:-1;;;27452:72:0;;;;;;;;;;;;-1:-1:-1;;;27452:72:0;;;;;;;;;;;;;;;;;;;;;;;27568:545;;;;;;;27598:11;;27568:545;;27624:14;;;;27568:545;;;;;;;27653:16;;;;27568:545;;;;27684:17;;;;27568:545;;;;;;;27718:21;;;;27568:545;;;;;;;;;27754:21;;;;27568:545;;;;;;;;;;27790:15;;;;27568:545;;;;;;;27820:13;;;;27568:545;;;;;;;;;;27850:15;;:53;;-1:-1:-1;;;27850:53:0;;27452:72;;-1:-1:-1;27452:72:0;;;27568:545;;;-1:-1:-1;;;;;27850:15:0;;:34;;:53;;27885:9;;27896:6;;27850:53;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27850:53:0;;;;;;;;;;;;:::i;:::-;27568:545;;27918:15;;:54;;-1:-1:-1;;;27918:54:0;;27568:545;;;;;-1:-1:-1;;;;;27918:15:0;;;;:35;;:54;;27954:9;;27965:6;;27918:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27918:54:0;;;;;;;;;;;;:::i;:::-;27568:545;;27987:15;;:49;;-1:-1:-1;;;27987:49:0;;27568:545;;;;;-1:-1:-1;;;;;27987:15:0;;;;:30;;:49;;28018:9;;28029:6;;27987:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27568:545:0;;;;;28053:15;;:49;;-1:-1:-1;;;28053:49:0;;27568:545;;;;;28053:15;;;:30;;:49;;28084:9;;28095:6;;28053:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27568:545;;27535:578;27327:819;-1:-1:-1;;;;;27327:819:0:o;21419:1538::-;21562:30;21595:37;21614:9;21625:6;21595:18;:37::i;:::-;21716:13;;21710:27;21562:70;;-1:-1:-1;21702:93:0;;;;-1:-1:-1;;;21702:93:0;;;;;;;:::i;:::-;21840:7;:23;;;21814:49;;:7;:23;;;:49;;;21806:96;;;;-1:-1:-1;;;21806:96:0;;28970:2:1;21806:96:0;;;28952:21:1;29009:2;28989:18;;;28982:30;-1:-1:-1;;;29028:18:1;;;29021:51;29089:18;;21806:96:0;28768:345:1;21806:96:0;21942:15;21921:7;:17;;;:36;;;;21913:78;;;;-1:-1:-1;;;21913:78:0;;26028:2:1;21913:78:0;;;26010:21:1;26067:2;26047:18;;;26040:30;-1:-1:-1;;;26086:18:1;;;26079:46;26142:18;;21913:78:0;25826:340:1;21913:78:0;22029:15;22010:7;:15;;;:34;;;;22002:74;;;;-1:-1:-1;;;22002:74:0;;23066:2:1;22002:74:0;;;23048:21:1;23105:2;23085:18;;;23078:30;-1:-1:-1;;;23124:18:1;;;23117:44;23178:18;;22002:74:0;22864:338:1;22002:74:0;-1:-1:-1;;;;;22096:32:0;;;;;;:21;:32;;;;;;;;:40;;;;;;;;22137:10;22096:52;;;;;;;;;;22095:53;22087:98;;;;-1:-1:-1;;;22087:98:0;;25276:2:1;22087:98:0;;;25258:21:1;25315:2;25295:18;;;25288:30;-1:-1:-1;;;25334:18:1;;;25327:48;25392:18;;22087:98:0;25074:342:1;22087:98:0;22204:13;;;;22196:75;;;;-1:-1:-1;;;22196:75:0;;27491:2:1;22196:75:0;;;27473:21:1;27530:2;27510:18;;;27503:30;27569:33;27549:18;;;27542:61;27620:18;;22196:75:0;27289:355:1;22196:75:0;22333:13;;;;22290:39;;-1:-1:-1;;;22290:39:0;;22318:10;22290:39;;;12723:51:1;-1:-1:-1;;;;;22290:27:0;;;;;12696:18:1;;22290:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;22282:100;;;;-1:-1:-1;;;22282:100:0;;24161:2:1;22282:100:0;;;24143:21:1;24200:2;24180:18;;;24173:30;-1:-1:-1;;;24219:18:1;;;24212:48;24277:18;;22282:100:0;23959:342:1;22282:100:0;22430:7;:20;;;-1:-1:-1;;;;;22422:88:0;;22511:10;22523:22;22535:9;22523:11;:22::i;:::-;22547:13;;;;22422:139;;-1:-1:-1;;;;;;22422:139:0;;;;;;;-1:-1:-1;;;;;13043:15:1;;;22422:139:0;;;13025:34:1;13095:15;;;;13075:18;;;13068:43;13127:18;;;13120:34;12960:18;;22422:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;22628:32:0;;;;;;:21;:32;;;;;;;;:40;;;;;;;;22669:10;22628:52;;;;;;;;;:59;;-1:-1:-1;;22628:59:0;22683:4;22628:59;;;;;;22698:33;;;:22;:33;;;;;:41;;;;;;;;:58;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22698:58:0;;;;;;22808:35;;;:24;:35;;;:43;;22628:40;;22808:43;;;;;;:::i;:::-;;;;;;;;;:59;:43;;;;;:59;;:61;;;-1:-1:-1;;;22808:61:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;22921:10;-1:-1:-1;;;;;22887:62:0;22910:9;-1:-1:-1;;;;;22887:62:0;;22933:6;22941:7;22887:62;;;;;;;:::i;:::-;;;;;;;;21494:1463;21419:1538;;:::o;25531:175::-;-1:-1:-1;;;;;25652:32:0;;;;;;:21;:32;;;;;:46;;25645:53;;25619:13;;25652:46;25645:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25531:175;;;:::o;26767:475::-;26883:22;26918:20;26941:13;26948:6;26941:4;:13;:::i;:::-;:17;;26957:1;26941:17;:::i;:::-;26918:40;;26969:29;27022:12;27001:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27001:34:0;;-1:-1:-1;;27001:34:0;;;;;;;;;;;-1:-1:-1;26969:66:0;-1:-1:-1;27046:14:0;;27073:136;27097:12;27093:1;:16;27073:136;;;-1:-1:-1;;;;;27150:35:0;;;;;;:24;:35;;;;;27186:10;27195:1;27186:6;:10;:::i;:::-;27150:47;;;;;;;;:::i;:::-;;;;;;;;;;;27131:66;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27131:66:0;;;-1:-1:-1;;27131:66:0;;;;;;;;;;;;-1:-1:-1;;;27131:66:0;;;;;;;;-1:-1:-1;;;27131:66:0;;;;;;;;-1:-1:-1;;;27131:66:0;;;;;;;;;;;;;;;;;;:6;27138:8;;;;:::i;:::-;;;27131:16;;;;;;;;:::i;:::-;;;;;;:66;;;;27111:3;;;;;:::i;:::-;;;;27073:136;;;-1:-1:-1;27228:6:0;;26767:475;-1:-1:-1;;;;;;26767:475:0:o;9575:114::-;5367:5;;-1:-1:-1;;;;;5367:5:0;5376:10;5367:19;5359:42;;;;-1:-1:-1;;;5359:42:0;;;;;;;:::i;:::-;9654:15:::1;:27:::0;;-1:-1:-1;;;;;;9654:27:0::1;-1:-1:-1::0;;;;;9654:27:0;;;::::1;::::0;;;::::1;::::0;;9575:114::o;13119:33::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13119:33:0;;-1:-1:-1;13119:33:0;:::o;28154:1269::-;28268:24;28305:20;28328:13;28335:6;28328:4;:13;:::i;:::-;:17;;28344:1;28328:17;:::i;:::-;28305:40;;28356:33;28415:12;28392:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;28356:72:0;-1:-1:-1;28439:14:0;;28466:922;28490:12;28486:1;:16;28466:922;;;28526:18;28547:10;28556:1;28547:6;:10;:::i;:::-;-1:-1:-1;;;;;28615:35:0;;28586:26;28615:35;;;:24;:35;;;;;:47;;28526:31;;-1:-1:-1;28586:26:0;;28526:31;;28615:47;;;;;;:::i;:::-;;;;;;;;;;;28586:76;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28677:30;28710:621;;;;;;;;28744:5;:11;;;28710:621;;;;28774:5;:14;;;28710:621;;;;28807:5;:16;;;28710:621;;;;28842:5;:17;;;28710:621;;;;28880:5;:21;;;28710:621;;;;;;28920:5;:21;;;28710:621;;;;;;28960:5;:15;;;28710:621;;;;;;28994:5;:13;;;28710:621;;;;;;29028:15;;;;;;;;;-1:-1:-1;;;;;29028:15:0;-1:-1:-1;;;;;29028:34:0;;29063:9;29075:10;29028:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29028:59:0;;;;;;;;;;;;:::i;:::-;28710:621;;;;29106:15;;;;;;;;;-1:-1:-1;;;;;29106:15:0;-1:-1:-1;;;;;29106:35:0;;29142:9;29154:10;29106:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29106:60:0;;;;;;;;;;;;:::i;:::-;28710:621;;;;29185:15;;;;;;;;;-1:-1:-1;;;;;29185:15:0;-1:-1:-1;;;;;29185:30:0;;29216:9;29228:10;29185:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28710:621:0;;;;;29261:15;;;;;;;;;-1:-1:-1;;;;;29261:15:0;-1:-1:-1;;;;;29261:30:0;;29292:9;29304:10;29261:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28710:621;;28677:654;-1:-1:-1;28677:654:0;29348:8;29357;;;;:::i;:::-;;;29348:18;;;;;;;;:::i;:::-;;;;;;:28;;;;28509:879;;;28504:3;;;;;:::i;:::-;;;;28466:922;;8303:130;5367:5;;-1:-1:-1;;;;;5367:5:0;5376:10;5367:19;5359:42;;;;-1:-1:-1;;;5359:42:0;;;;;;;:::i;:::-;8381:15:::1;:44:::0;;-1:-1:-1;;;;;;8381:44:0::1;-1:-1:-1::0;;;;;8381:44:0;;;::::1;::::0;;;::::1;::::0;;8303:130::o;23301:282::-;23418:9;15489:24;15503:9;15489:13;:24::i;:::-;-1:-1:-1;;;;;15475:38:0;:10;-1:-1:-1;;;;;15475:38:0;;15467:95;;;;-1:-1:-1;;;15467:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15581:28:0;;;;;;:17;:28;;;;;;;;15573:90;;;;-1:-1:-1;;;15573:90:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23442:41:0;;::::1;;::::0;;;:30:::1;:41;::::0;;;;;;;:52;;::::1;::::0;;;;;;;;;;:60;;-1:-1:-1;;23442:60:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23528:47;;13333:51:1;;;13400:18;;;13393:50;23442:41:0;;23528:47:::1;::::0;13306:18:1;23528:47:0::1;13165:284:1::0;20635:523:0;-1:-1:-1;;;;;15771:40:0;;;;;;:29;:40;;;;;;;;20733:10;15771:51;;;;;;;;;20722:9;;20733:10;15771:51;;;:106;;;15853:24;15867:9;15853:13;:24::i;:::-;-1:-1:-1;;;;;15839:38:0;:10;-1:-1:-1;;;;;15839:38:0;;15771:106;15763:173;;;;-1:-1:-1;;;15763:173:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15955:28:0;;;;;;:17;:28;;;;;;;;15947:78;;;;-1:-1:-1;;;15947:78:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20777:35:0;::::1;20756:18;20777:35:::0;;;:24:::1;:35;::::0;;;;:42;:46:::1;::::0;20822:1:::1;::::0;20777:46:::1;:::i;:::-;-1:-1:-1::0;;;;;20865:35:0;::::1;20836:26;20865:35:::0;;;:24:::1;:35;::::0;;;;:47;;20756:67;;-1:-1:-1;20836:26:0;;20756:67;;20865:47;::::1;;;;;:::i;:::-;;;;;;;;;;;20836:76;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;20836:76:0;;;-1:-1:-1;;20836:76:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;;::::0;::::1;::::0;-1:-1:-1;;;20836:76:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20836:76:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20836:76:0;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;;;;20933:21;::::1;::::0;20836:76;;-1:-1:-1;20933:26:0::1;::::0;20925:97:::1;;;::::0;-1:-1:-1;;;20925:97:0;;29320:2:1;20925:97:0::1;::::0;::::1;29302:21:1::0;29359:2;29339:18;;;29332:30;29398:34;29378:18;;;29371:62;-1:-1:-1;;;29449:18:1;;;29442:43;29502:19;;20925:97:0::1;29118:409:1::0;20925:97:0::1;-1:-1:-1::0;;;;;21043:35:0;::::1;;::::0;;;:24:::1;:35;::::0;;;;:41;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;-1:-1:-1;;21043:41:0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;::::1;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;;;::::0;::::1;;;:::i;:::-;-1:-1:-1::0;21043:41:0::1;::::0;::::1;::::0;;-1:-1:-1;;21043:41:0;;;::::1;;::::0;;::::1;::::0;;;21100:50:::1;::::0;21132:10:::1;::::0;-1:-1:-1;;;;;21100:50:0;::::1;::::0;::::1;::::0;::::1;::::0;21144:5;;21100:50:::1;:::i;:::-;;;;;;;;20745:413;;20635:523:::0;;;:::o;9080:323::-;5367:5;;-1:-1:-1;;;;;5367:5:0;5376:10;5367:19;5359:42;;;;-1:-1:-1;;;5359:42:0;;;;;;;:::i;:::-;9253:20:::1;::::0;-1:-1:-1;;;;;9253:20:0::1;9245:100;;;::::0;-1:-1:-1;;;9245:100:0;;23409:2:1;9245:100:0::1;::::0;::::1;23391:21:1::0;23448:2;23428:18;;;23421:30;23487:34;23467:18;;;23460:62;-1:-1:-1;;;23538:18:1;;;23531:38;23586:19;;9245:100:0::1;23207:404:1::0;9245:100:0::1;9358:20;:37:::0;;-1:-1:-1;;;;;;9358:37:0::1;-1:-1:-1::0;;;;;9358:37:0;;;::::1;::::0;;;::::1;::::0;;9080:323::o;23943:1048::-;-1:-1:-1;;;;;23674:41:0;;;;;;:30;:41;;;;;;;;24079:10;23674:52;;;;;;;;;24068:9;;24079:10;23674:52;;;:107;;;23757:24;23771:9;23757:13;:24::i;:::-;-1:-1:-1;;;;;23743:38:0;:10;-1:-1:-1;;;;;23743:38:0;;23674:107;23666:160;;;;-1:-1:-1;;;23666:160:0;;21545:2:1;23666:160:0;;;21527:21:1;21584:2;21564:18;;;21557:30;21623:29;21603:18;;;21596:57;21670:18;;23666:160:0;21343:351:1;23666:160:0;-1:-1:-1;;;;;23845:28:0;;;;;;:17;:28;;;;;;;;23837:78;;;;-1:-1:-1;;;23837:78:0;;;;;;;:::i;:::-;24151:30:::1;24184:37;24203:9;24214:6;24184:18;:37::i;:::-;24301:13:::0;;24295:27;24151:70;;-1:-1:-1;24287:93:0::1;;;;-1:-1:-1::0;;;24287:93:0::1;;;;;;;:::i;:::-;24425:7;:23;;;24399:49;;:7;:23;;;:49;;;24391:96;;;::::0;-1:-1:-1;;;24391:96:0;;28970:2:1;24391:96:0::1;::::0;::::1;28952:21:1::0;29009:2;28989:18;;;28982:30;-1:-1:-1;;;29028:18:1;;;29021:51;29089:18;;24391:96:0::1;28768:345:1::0;24391:96:0::1;-1:-1:-1::0;;;;;24507:32:0;;::::1;;::::0;;;:21:::1;:32;::::0;;;;;;;:40;;;;;;;;:56;;::::1;::::0;;;;;;;::::1;;24506:57;24498:97;;;::::0;-1:-1:-1;;;24498:97:0;;23818:2:1;24498:97:0::1;::::0;::::1;23800:21:1::0;23857:2;23837:18;;;23830:30;-1:-1:-1;;;23876:18:1;;;23869:44;23930:18;;24498:97:0::1;23616:338:1::0;24498:97:0::1;-1:-1:-1::0;;;;;24653:32:0;;::::1;;::::0;;;:21:::1;:32;::::0;;;;;;;:40;;;;;;;;:56;;::::1;::::0;;;;;;;;;:63;;-1:-1:-1;;24653:63:0::1;24712:4;24653:63:::0;;::::1;::::0;;;24727:33;;;:22:::1;:33:::0;;;;;:41;;;;;;;;:62;;;;::::1;::::0;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24727:62:0::1;::::0;;::::1;::::0;;;24841:35;;;:24:::1;:35:::0;;;;:43;;24686:6;;24841:43;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:59:::1;:43;::::0;;::::1;;:59:::0;::::1;:61:::0;;::::1;-1:-1:-1::0;;;24841:61:0;;::::1;;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;24951:14;-1:-1:-1::0;;;;;24920:63:0::1;24940:9;-1:-1:-1::0;;;;;24920:63:0::1;;24967:6;24975:7;24920:63;;;;;;;:::i;9952:511::-:0;9470:20;;-1:-1:-1;;;;;9470:20:0;9456:10;:34;9448:100;;;;-1:-1:-1;;;9448:100:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10067:28:0;::::1;;::::0;;;:17:::1;:28;::::0;;;;;::::1;;:37;;::::0;::::1;;;;10059:95;;;::::0;-1:-1:-1;;;10059:95:0;;21184:2:1;10059:95:0::1;::::0;::::1;21166:21:1::0;;;21203:18;;;21196:30;21262:34;21242:18;;;21235:62;21314:18;;10059:95:0::1;20982:356:1::0;10059:95:0::1;-1:-1:-1::0;;;;;10203:28:0;::::1;;::::0;;;:17:::1;:28;::::0;;;;:36;;-1:-1:-1;;10203:36:0::1;::::0;::::1;;;::::0;;;10305:74:::1;;10345:34;10369:9;10345:23;:34::i;:::-;10305:74;;;10313:29;10332:9;10313:18;:29::i;:::-;10405:50;::::0;;10437:10:::1;13333:51:1::0;;13427:14;;13420:22;13415:2;13400:18;;13393:50;-1:-1:-1;;;;;10405:50:0;::::1;::::0;::::1;::::0;13306:18:1;10405:50:0::1;;;;;;;9952:511:::0;;:::o;25356:169::-;-1:-1:-1;;;;;25475:32:0;;;;;;:21;:32;;;;;:42;;25468:49;;25442:13;;25475:42;25468:49;;;:::i;16092:159::-;16180:4;16232:7;-1:-1:-1;;;;;16204:35:0;:24;16218:9;16204:13;:24::i;:::-;-1:-1:-1;;;;;16204:35:0;;;16092:159;-1:-1:-1;;;16092:159:0:o;5413:77::-;5367:5;;-1:-1:-1;;;;;5367:5:0;5376:10;5367:19;5359:42;;;;-1:-1:-1;;;5359:42:0;;;;;;;:::i;:::-;5475:5:::1;:12:::0;;-1:-1:-1;;;;;;5475:12:0::1;-1:-1:-1::0;;;;;5475:12:0;;;::::1;::::0;;;::::1;::::0;;5413:77::o;18030:253::-;18136:9;15489:24;15503:9;15489:13;:24::i;:::-;-1:-1:-1;;;;;15475:38:0;:10;-1:-1:-1;;;;;15475:38:0;;15467:95;;;;-1:-1:-1;;;15467:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15581:28:0;;;;;;:17;:28;;;;;;;;15573:90;;;;-1:-1:-1;;;15573:90:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18160:36:0;;::::1;;::::0;;;:25:::1;:36;::::0;;;;;;;;:48;;-1:-1:-1;;;;;;18160:48:0::1;::::0;;::::1;::::0;;::::1;::::0;;18226:49;;12723:51:1;;;18253:10:0::1;::::0;18226:49:::1;::::0;12696:18:1;18226:49:0::1;12577:203:1::0;13347:176:0;13449:16;:23;;-1:-1:-1;;;;;13414:32:0;;;;;;;:21;:32;;;;;:58;;;13483:32;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13483:32:0;;;;;;13347:176::o;13529:664::-;13622:16;:23;13601:18;;13622:27;;13648:1;;13622:27;:::i;:::-;-1:-1:-1;;;;;13684:32:0;;13660:21;13684:32;;;:21;:32;;;;;;13601:48;;-1:-1:-1;13799:27:0;;;13795:244;;13915:20;13938:16;13955:10;13938:28;;;;;;;;:::i;:::-;;;;;;;;;;;13981:16;:31;;-1:-1:-1;;;;;13938:28:0;;;;-1:-1:-1;13938:28:0;;13998:13;;13981:31;;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1;;;;;13981:46:0;;;;;-1:-1:-1;;;;;13981:46:0;;;;;;13828:211;13795:244;14084:16;:22;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;14084:22:0;;;;;-1:-1:-1;;;;;;14084:22:0;;;;;;;;;-1:-1:-1;;;;;14153:32:0;;;;;;:21;:32;;;-1:-1:-1;;14153:32:0;;;14146:39;13529:664::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;14:348:1;66:8;76:6;130:3;123:4;115:6;111:17;107:27;97:55;;148:1;145;138:12;97:55;-1:-1:-1;171:20:1;;214:18;203:30;;200:50;;;246:1;243;236:12;200:50;283:4;275:6;271:17;259:29;;335:3;328:4;319:6;311;307:19;303:30;300:39;297:59;;;352:1;349;342:12;297:59;14:348;;;;;:::o;367:464::-;410:5;463:3;456:4;448:6;444:17;440:27;430:55;;481:1;478;471:12;430:55;517:6;504:20;548:49;564:32;593:2;564:32;:::i;:::-;548:49;:::i;:::-;622:2;613:7;606:19;668:3;661:4;656:2;648:6;644:15;640:26;637:35;634:55;;;685:1;682;675:12;634:55;750:2;743:4;735:6;731:17;724:4;715:7;711:18;698:55;798:1;773:16;;;791:4;769:27;762:38;;;;777:7;367:464;-1:-1:-1;;;367:464:1:o;836:1298::-;896:5;944:6;932:9;927:3;923:19;919:32;916:52;;;964:1;961;954:12;916:52;986:22;;:::i;:::-;977:31;;1044:9;1031:23;1073:18;1114:2;1106:6;1103:14;1100:34;;;1130:1;1127;1120:12;1100:34;1157:46;1199:3;1190:6;1179:9;1175:22;1157:46;:::i;:::-;1150:5;1143:61;1257:2;1246:9;1242:18;1229:32;1213:48;;1286:2;1276:8;1273:16;1270:36;;;1302:1;1299;1292:12;1270:36;1338:48;1382:3;1371:8;1360:9;1356:24;1338:48;:::i;:::-;1333:2;1326:5;1322:14;1315:72;1440:2;1429:9;1425:18;1412:32;1396:48;;1469:2;1459:8;1456:16;1453:36;;;1485:1;1482;1475:12;1453:36;1521:48;1565:3;1554:8;1543:9;1539:24;1521:48;:::i;:::-;1516:2;1509:5;1505:14;1498:72;1623:2;1612:9;1608:18;1595:32;1579:48;;1652:2;1642:8;1639:16;1636:36;;;1668:1;1665;1658:12;1636:36;;1704:48;1748:3;1737:8;1726:9;1722:24;1704:48;:::i;:::-;1699:2;1692:5;1688:14;1681:72;;1786:38;1819:3;1808:9;1804:19;1786:38;:::i;:::-;1780:3;1773:5;1769:15;1762:63;1858:38;1891:3;1880:9;1876:19;1858:38;:::i;:::-;1852:3;1845:5;1841:15;1834:63;1930:38;1963:3;1952:9;1948:19;1930:38;:::i;:::-;1924:3;1917:5;1913:15;1906:63;2002:38;2035:3;2024:9;2020:19;2002:38;:::i;:::-;1996:3;1989:5;1985:15;1978:63;2060:3;2123:2;2112:9;2108:18;2095:32;2090:2;2083:5;2079:14;2072:56;;836:1298;;;;:::o;2139:163::-;2206:20;;2266:10;2255:22;;2245:33;;2235:61;;2292:1;2289;2282:12;2235:61;2139:163;;;:::o;2307:247::-;2366:6;2419:2;2407:9;2398:7;2394:23;2390:32;2387:52;;;2435:1;2432;2425:12;2387:52;2474:9;2461:23;2493:31;2518:5;2493:31;:::i;:::-;2543:5;2307:247;-1:-1:-1;;;2307:247:1:o;2559:251::-;2629:6;2682:2;2670:9;2661:7;2657:23;2653:32;2650:52;;;2698:1;2695;2688:12;2650:52;2730:9;2724:16;2749:31;2774:5;2749:31;:::i;2815:388::-;2883:6;2891;2944:2;2932:9;2923:7;2919:23;2915:32;2912:52;;;2960:1;2957;2950:12;2912:52;2999:9;2986:23;3018:31;3043:5;3018:31;:::i;:::-;3068:5;-1:-1:-1;3125:2:1;3110:18;;3097:32;3138:33;3097:32;3138:33;:::i;:::-;3190:7;3180:17;;;2815:388;;;;;:::o;3208:523::-;3282:6;3290;3298;3351:2;3339:9;3330:7;3326:23;3322:32;3319:52;;;3367:1;3364;3357:12;3319:52;3406:9;3393:23;3425:31;3450:5;3425:31;:::i;:::-;3475:5;-1:-1:-1;3532:2:1;3517:18;;3504:32;3545:33;3504:32;3545:33;:::i;:::-;3597:7;-1:-1:-1;3656:2:1;3641:18;;3628:32;3669:30;3628:32;3669:30;:::i;:::-;3718:7;3708:17;;;3208:523;;;;;:::o;3736:382::-;3801:6;3809;3862:2;3850:9;3841:7;3837:23;3833:32;3830:52;;;3878:1;3875;3868:12;3830:52;3917:9;3904:23;3936:31;3961:5;3936:31;:::i;:::-;3986:5;-1:-1:-1;4043:2:1;4028:18;;4015:32;4056:30;4015:32;4056:30;:::i;4123:1146::-;4245:6;4253;4261;4269;4277;4285;4293;4346:3;4334:9;4325:7;4321:23;4317:33;4314:53;;;4363:1;4360;4353:12;4314:53;4402:9;4389:23;4421:31;4446:5;4421:31;:::i;:::-;4471:5;-1:-1:-1;4527:2:1;4512:18;;4499:32;4550:18;4580:14;;;4577:34;;;4607:1;4604;4597:12;4577:34;4646:59;4697:7;4688:6;4677:9;4673:22;4646:59;:::i;:::-;4724:8;;-1:-1:-1;4620:85:1;-1:-1:-1;4812:2:1;4797:18;;4784:32;;-1:-1:-1;4828:16:1;;;4825:36;;;4857:1;4854;4847:12;4825:36;4896:61;4949:7;4938:8;4927:9;4923:24;4896:61;:::i;:::-;4976:8;;-1:-1:-1;4870:87:1;-1:-1:-1;5064:2:1;5049:18;;5036:32;;-1:-1:-1;5080:16:1;;;5077:36;;;5109:1;5106;5099:12;5077:36;;5148:61;5201:7;5190:8;5179:9;5175:24;5148:61;:::i;:::-;4123:1146;;;;-1:-1:-1;4123:1146:1;;-1:-1:-1;4123:1146:1;;;;5122:87;;-1:-1:-1;;;4123:1146:1:o;5274:491::-;5372:6;5380;5433:2;5421:9;5412:7;5408:23;5404:32;5401:52;;;5449:1;5446;5439:12;5401:52;5488:9;5475:23;5507:31;5532:5;5507:31;:::i;:::-;5557:5;-1:-1:-1;5613:2:1;5598:18;;5585:32;5640:18;5629:30;;5626:50;;;5672:1;5669;5662:12;5626:50;5695:64;5751:7;5742:6;5731:9;5727:22;5695:64;:::i;:::-;5685:74;;;5274:491;;;;;:::o;5770:315::-;5838:6;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;5954:9;5941:23;5973:31;5998:5;5973:31;:::i;:::-;6023:5;6075:2;6060:18;;;;6047:32;;-1:-1:-1;;;5770:315:1:o;6090:456::-;6167:6;6175;6183;6236:2;6224:9;6215:7;6211:23;6207:32;6204:52;;;6252:1;6249;6242:12;6204:52;6291:9;6278:23;6310:31;6335:5;6310:31;:::i;:::-;6360:5;-1:-1:-1;6412:2:1;6397:18;;6384:32;;-1:-1:-1;6468:2:1;6453:18;;6440:32;6481:33;6440:32;6481:33;:::i;6551:559::-;6658:6;6666;6674;6727:2;6715:9;6706:7;6702:23;6698:32;6695:52;;;6743:1;6740;6733:12;6695:52;6782:9;6769:23;6801:31;6826:5;6801:31;:::i;:::-;6851:5;-1:-1:-1;6903:2:1;6888:18;;6875:32;;-1:-1:-1;6958:2:1;6943:18;;6930:32;6985:18;6974:30;;6971:50;;;7017:1;7014;7007:12;6971:50;7040:64;7096:7;7087:6;7076:9;7072:22;7040:64;:::i;:::-;7030:74;;;6551:559;;;;;:::o;7115:383::-;7192:6;7200;7208;7261:2;7249:9;7240:7;7236:23;7232:32;7229:52;;;7277:1;7274;7267:12;7229:52;7316:9;7303:23;7335:31;7360:5;7335:31;:::i;:::-;7385:5;7437:2;7422:18;;7409:32;;-1:-1:-1;7488:2:1;7473:18;;;7460:32;;7115:383;-1:-1:-1;;;7115:383:1:o;7503:245::-;7570:6;7623:2;7611:9;7602:7;7598:23;7594:32;7591:52;;;7639:1;7636;7629:12;7591:52;7671:9;7665:16;7690:28;7712:5;7690:28;:::i;7753:636::-;7833:6;7886:2;7874:9;7865:7;7861:23;7857:32;7854:52;;;7902:1;7899;7892:12;7854:52;7935:9;7929:16;7968:18;7960:6;7957:30;7954:50;;;8000:1;7997;7990:12;7954:50;8023:22;;8076:4;8068:13;;8064:27;-1:-1:-1;8054:55:1;;8105:1;8102;8095:12;8054:55;8134:2;8128:9;8159:49;8175:32;8204:2;8175:32;:::i;8159:49::-;8231:2;8224:5;8217:17;8271:7;8266:2;8261;8257;8253:11;8249:20;8246:33;8243:53;;;8292:1;8289;8282:12;8243:53;8305:54;8356:2;8351;8344:5;8340:14;8335:2;8331;8327:11;8305:54;:::i;:::-;8378:5;7753:636;-1:-1:-1;;;;;7753:636:1:o;8394:180::-;8453:6;8506:2;8494:9;8485:7;8481:23;8477:32;8474:52;;;8522:1;8519;8512:12;8474:52;-1:-1:-1;8545:23:1;;8394:180;-1:-1:-1;8394:180:1:o;8579:184::-;8649:6;8702:2;8690:9;8681:7;8677:23;8673:32;8670:52;;;8718:1;8715;8708:12;8670:52;-1:-1:-1;8741:16:1;;8579:184;-1:-1:-1;8579:184:1:o;8877:267::-;8966:6;8961:3;8954:19;9018:6;9011:5;9004:4;8999:3;8995:14;8982:43;-1:-1:-1;9070:1:1;9045:16;;;9063:4;9041:27;;;9034:38;;;;9126:2;9105:15;;;-1:-1:-1;;9101:29:1;9092:39;;;9088:50;;8877:267::o;9149:258::-;9191:3;9229:5;9223:12;9256:6;9251:3;9244:19;9272:63;9328:6;9321:4;9316:3;9312:14;9305:4;9298:5;9294:16;9272:63;:::i;:::-;9389:2;9368:15;-1:-1:-1;;9364:29:1;9355:39;;;;9396:4;9351:50;;9149:258;-1:-1:-1;;9149:258:1:o;9412:1271::-;9468:3;9496:6;9537:5;9531:12;9564:2;9559:3;9552:15;9588:45;9629:2;9624:3;9620:12;9606;9588:45;:::i;:::-;9576:57;;;9681:4;9674:5;9670:16;9664:23;9729:3;9723:4;9719:14;9712:4;9707:3;9703:14;9696:38;9757:39;9791:4;9775:14;9757:39;:::i;:::-;9743:53;;;9844:4;9837:5;9833:16;9827:23;9894:3;9886:6;9882:16;9875:4;9870:3;9866:14;9859:40;9922:41;9956:6;9940:14;9922:41;:::i;:::-;9908:55;;;10011:4;10004:5;10000:16;9994:23;10061:3;10053:6;10049:16;10042:4;10037:3;10033:14;10026:40;10089:41;10123:6;10107:14;10089:41;:::i;:::-;10075:55;;;10178:4;10171:5;10167:16;10161:23;10193:49;10236:4;10231:3;10227:14;10211;12554:10;12543:22;12531:35;;12478:94;10193:49;;10290:4;10283:5;10279:16;10273:23;10305:49;10348:4;10343:3;10339:14;10323;12554:10;12543:22;12531:35;;12478:94;10305:49;;10402:4;10395:5;10391:16;10385:23;10417:49;10460:4;10455:3;10451:14;10435;12554:10;12543:22;12531:35;;12478:94;10417:49;;10514:4;10507:5;10503:16;10497:23;10529:49;10572:4;10567:3;10563:14;10547;12554:10;12543:22;12531:35;;12478:94;10529:49;-1:-1:-1;10597:6:1;10639:14;;;10633:21;10619:12;;;;10612:43;;;;10671:6;9412:1271;-1:-1:-1;9412:1271:1:o;10688:1785::-;10746:3;10774:6;10815:5;10809:12;10842:2;10837:3;10830:15;10866:45;10907:2;10902:3;10898:12;10884;10866:45;:::i;:::-;10854:57;;;10959:4;10952:5;10948:16;10942:23;11007:3;11001:4;10997:14;10990:4;10985:3;10981:14;10974:38;11035:39;11069:4;11053:14;11035:39;:::i;:::-;11021:53;;;11122:4;11115:5;11111:16;11105:23;11172:3;11164:6;11160:16;11153:4;11148:3;11144:14;11137:40;11200:41;11234:6;11218:14;11200:41;:::i;:::-;11186:55;;;11289:4;11282:5;11278:16;11272:23;11339:3;11331:6;11327:16;11320:4;11315:3;11311:14;11304:40;11367:41;11401:6;11385:14;11367:41;:::i;:::-;11353:55;;;11456:4;11449:5;11445:16;11439:23;11471:49;11514:4;11509:3;11505:14;11489;12554:10;12543:22;12531:35;;12478:94;11471:49;;11568:4;11561:5;11557:16;11551:23;11583:49;11626:4;11621:3;11617:14;11601;12554:10;12543:22;12531:35;;12478:94;11583:49;;11680:4;11673:5;11669:16;11663:23;11695:49;11738:4;11733:3;11729:14;11713;12554:10;12543:22;12531:35;;12478:94;11695:49;;11792:4;11785:5;11781:16;11775:23;11807:49;11850:4;11845:3;11841:14;11825;12554:10;12543:22;12531:35;;12478:94;11807:49;;11875:6;11929:2;11922:5;11918:14;11912:21;11975:3;11967:6;11963:16;11958:2;11953:3;11949:12;11942:38;12003:41;12037:6;12021:14;12003:41;:::i;:::-;11989:55;;;;12063:6;12117:2;12110:5;12106:14;12100:21;12163:3;12155:6;12151:16;12146:2;12141:3;12137:12;12130:38;12191:41;12225:6;12209:14;12191:41;:::i;:::-;12177:55;;;;12251:6;12306:2;12299:5;12295:14;12289:21;12319:49;12364:2;12359:3;12355:12;12338:15;-1:-1:-1;;;;;8834:31:1;8822:44;;8768:104;12319:49;-1:-1:-1;;12387:6:1;12429:14;;;12423:21;12409:12;;;;12402:43;;;;12461:6;10688:1785;-1:-1:-1;10688:1785:1:o;13454:534::-;-1:-1:-1;;;;;13699:32:1;;13681:51;;13768:2;13763;13748:18;;13741:30;;;-1:-1:-1;;13794:62:1;;13837:18;;13829:6;13821;13794:62;:::i;:::-;13904:9;13896:6;13892:22;13887:2;13876:9;13872:18;13865:50;13932;13975:6;13967;13959;13932:50;:::i;:::-;13924:58;13454:534;-1:-1:-1;;;;;;;;13454:534:1:o;13993:274::-;-1:-1:-1;;;;;14185:32:1;;;;14167:51;;14249:2;14234:18;;14227:34;14155:2;14140:18;;13993:274::o;14272:658::-;14443:2;14495:21;;;14565:13;;14468:18;;;14587:22;;;14414:4;;14443:2;14666:15;;;;14640:2;14625:18;;;14414:4;14709:195;14723:6;14720:1;14717:13;14709:195;;;14788:13;;-1:-1:-1;;;;;14784:39:1;14772:52;;14879:15;;;;14844:12;;;;14820:1;14738:9;14709:195;;14935:857;15137:4;15166:2;15206;15195:9;15191:18;15236:2;15225:9;15218:21;15259:6;15294;15288:13;15325:6;15317;15310:22;15363:2;15352:9;15348:18;15341:25;;15425:2;15415:6;15412:1;15408:14;15397:9;15393:30;15389:39;15375:53;;15463:2;15455:6;15451:15;15484:1;15494:269;15508:6;15505:1;15502:13;15494:269;;;15601:2;15597:7;15585:9;15577:6;15573:22;15569:36;15564:3;15557:49;15629:54;15676:6;15667;15661:13;15629:54;:::i;:::-;15619:64;-1:-1:-1;15741:12:1;;;;15706:15;;;;15530:1;15523:9;15494:269;;;-1:-1:-1;15780:6:1;;14935:857;-1:-1:-1;;;;;;;14935:857:1:o;15797:865::-;16005:4;16034:2;16074;16063:9;16059:18;16104:2;16093:9;16086:21;16127:6;16162;16156:13;16193:6;16185;16178:22;16231:2;16220:9;16216:18;16209:25;;16293:2;16283:6;16280:1;16276:14;16265:9;16261:30;16257:39;16243:53;;16331:2;16323:6;16319:15;16352:1;16362:271;16376:6;16373:1;16370:13;16362:271;;;16469:2;16465:7;16453:9;16445:6;16441:22;16437:36;16432:3;16425:49;16497:56;16546:6;16537;16531:13;16497:56;:::i;:::-;16487:66;-1:-1:-1;16611:12:1;;;;16576:15;;;;16398:1;16391:9;16362:271;;17543:220;17692:2;17681:9;17674:21;17655:4;17712:45;17753:2;17742:9;17738:18;17730:6;17712:45;:::i;17768:546::-;18013:2;18002:9;17995:21;17976:4;18039:45;18080:2;18069:9;18065:18;18057:6;18039:45;:::i;:::-;18132:9;18124:6;18120:22;18115:2;18104:9;18100:18;18093:50;18166:33;18192:6;18184;18166:33;:::i;:::-;18152:47;;18247:9;18239:6;18235:22;18230:2;18219:9;18215:18;18208:50;18275:33;18301:6;18293;18275:33;:::i;:::-;18267:41;17768:546;-1:-1:-1;;;;;;17768:546:1:o;18319:1148::-;18707:4;18736:3;18766:2;18755:9;18748:21;18792:45;18833:2;18822:9;18818:18;18810:6;18792:45;:::i;:::-;18778:59;;18885:9;18877:6;18873:22;18868:2;18857:9;18853:18;18846:50;18919:33;18945:6;18937;18919:33;:::i;:::-;18905:47;;19000:9;18992:6;18988:22;18983:2;18972:9;18968:18;18961:50;19034:33;19060:6;19052;19034:33;:::i;:::-;19020:47;;19115:9;19107:6;19103:22;19098:2;19087:9;19083:18;19076:50;19143:33;19169:6;19161;19143:33;:::i;:::-;19195:10;19242:15;;;19236:3;19221:19;;19214:44;19295:15;;;19289:3;19274:19;;19267:44;-1:-1:-1;;19348:15:1;;;19342:3;19327:19;;19320:44;19401:15;;19395:3;19380:19;;19373:44;19448:3;19433:19;19426:35;;;;19135:41;18319:1148;-1:-1:-1;;;;18319:1148:1:o;20238:334::-;20440:2;20422:21;;;20479:2;20459:18;;;20452:30;-1:-1:-1;;;20513:2:1;20498:18;;20491:40;20563:2;20548:18;;20238:334::o;20577:400::-;20779:2;20761:21;;;20818:2;20798:18;;;20791:30;20857:34;20852:2;20837:18;;20830:62;-1:-1:-1;;;20923:2:1;20908:18;;20901:34;20967:3;20952:19;;20577:400::o;21699:398::-;21901:2;21883:21;;;21940:2;21920:18;;;21913:30;21979:34;21974:2;21959:18;;21952:62;-1:-1:-1;;;22045:2:1;22030:18;;22023:32;22087:3;22072:19;;21699:398::o;22102:348::-;22304:2;22286:21;;;22343:2;22323:18;;;22316:30;22382:26;22377:2;22362:18;;22355:54;22441:2;22426:18;;22102:348::o;22455:404::-;22657:2;22639:21;;;22696:2;22676:18;;;22669:30;22735:34;22730:2;22715:18;;22708:62;-1:-1:-1;;;22801:2:1;22786:18;;22779:38;22849:3;22834:19;;22455:404::o;25421:400::-;25623:2;25605:21;;;25662:2;25642:18;;;25635:30;25701:34;25696:2;25681:18;;25674:62;-1:-1:-1;;;25767:2:1;25752:18;;25745:34;25811:3;25796:19;;25421:400::o;28052:355::-;28254:2;28236:21;;;28293:2;28273:18;;;28266:30;28332:33;28327:2;28312:18;;28305:61;28398:2;28383:18;;28052:355::o;29532:405::-;29734:2;29716:21;;;29773:2;29753:18;;;29746:30;29812:34;29807:2;29792:18;;29785:62;-1:-1:-1;;;29878:2:1;29863:18;;29856:39;29927:3;29912:19;;29532:405::o;30297:274::-;30486:2;30475:9;30468:21;30449:4;30506:59;30561:2;30550:9;30546:18;30538:6;30506:59;:::i;30576:491::-;30853:2;30842:9;30835:21;30816:4;30879:59;30934:2;30923:9;30919:18;30911:6;30879:59;:::i;:::-;30986:9;30978:6;30974:22;30969:2;30958:9;30954:18;30947:50;31014:47;31054:6;31046;31014:47;:::i;31072:282::-;31267:2;31256:9;31249:21;31230:4;31287:61;31344:2;31333:9;31329:18;31321:6;31287:61;:::i;31541:353::-;31764:6;31753:9;31746:25;31807:2;31802;31791:9;31787:18;31780:30;31727:4;31827:61;31884:2;31873:9;31869:18;31861:6;31827:61;:::i;:::-;31819:69;31541:353;-1:-1:-1;;;;31541:353:1:o;31899:255::-;31971:2;31965:9;32013:6;32001:19;;32050:18;32035:34;;32071:22;;;32032:62;32029:88;;;32097:18;;:::i;:::-;32133:2;32126:22;31899:255;:::o;32159:275::-;32230:2;32224:9;32295:2;32276:13;;-1:-1:-1;;32272:27:1;32260:40;;32330:18;32315:34;;32351:22;;;32312:62;32309:88;;;32377:18;;:::i;:::-;32413:2;32406:22;32159:275;;-1:-1:-1;32159:275:1:o;32439:187::-;32488:4;32521:18;32513:6;32510:30;32507:56;;;32543:18;;:::i;:::-;-1:-1:-1;32609:2:1;32588:15;-1:-1:-1;;32584:29:1;32615:4;32580:40;;32439:187::o;32631:128::-;32671:3;32702:1;32698:6;32695:1;32692:13;32689:39;;;32708:18;;:::i;:::-;-1:-1:-1;32744:9:1;;32631:128::o;32764:125::-;32804:4;32832:1;32829;32826:8;32823:34;;;32837:18;;:::i;:::-;-1:-1:-1;32874:9:1;;32764:125::o;32894:258::-;32966:1;32976:113;32990:6;32987:1;32984:13;32976:113;;;33066:11;;;33060:18;33047:11;;;33040:39;33012:2;33005:10;32976:113;;;33107:6;33104:1;33101:13;33098:48;;;33142:1;33133:6;33128:3;33124:16;33117:27;33098:48;;32894:258;;;:::o;33157:380::-;33236:1;33232:12;;;;33279;;;33300:61;;33354:4;33346:6;33342:17;33332:27;;33300:61;33407:2;33399:6;33396:14;33376:18;33373:38;33370:161;;;33453:10;33448:3;33444:20;33441:1;33434:31;33488:4;33485:1;33478:15;33516:4;33513:1;33506:15;33370:161;;33157:380;;;:::o;33542:135::-;33581:3;-1:-1:-1;;33602:17:1;;33599:43;;;33622:18;;:::i;:::-;-1:-1:-1;33669:1:1;33658:13;;33542:135::o;33682:201::-;33720:3;33748:10;33793:2;33786:5;33782:14;33820:2;33811:7;33808:15;33805:41;;;33826:18;;:::i;:::-;33875:1;33862:15;;33682:201;-1:-1:-1;;;33682:201:1:o;33888:127::-;33949:10;33944:3;33940:20;33937:1;33930:31;33980:4;33977:1;33970:15;34004:4;34001:1;33994:15;34020:127;34081:10;34076:3;34072:20;34069:1;34062:31;34112:4;34109:1;34102:15;34136:4;34133:1;34126:15;34152:127;34213:10;34208:3;34204:20;34201:1;34194:31;34244:4;34241:1;34234:15;34268:4;34265:1;34258:15;34284:127;34345:10;34340:3;34336:20;34333:1;34326:31;34376:4;34373:1;34366:15;34400:4;34397:1;34390:15;34416:131;-1:-1:-1;;;;;34491:31:1;;34481:42;;34471:70;;34537:1;34534;34527:12;34552:118;34638:5;34631:13;34624:21;34617:5;34614:32;34604:60;;34660:1;34657;34650:12

Swarm Source

ipfs://0c75daca3846d7c3f5017980ba81ed5f63ba4767e5018a1d88435d993f6d4894

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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