Contract 0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d

Contract Overview

Balance:
0 MOVR

MOVR Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa47912fa77fb913d312eb96604316cb43aa535a7453bc70582fafe95300a4784Set Plot Resourc...23683362022-08-12 21:50:3638 secs ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000294265
0xea79122fbfe3afb98b08719d617f876d295b4d00b7d47956024fb76af7105f6dSet Plot Resourc...23683282022-08-12 21:48:422 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0x9df91093287e81a4f0473ba06123459c7700e21e6954ad2e9d2cb189e10542d8Set Plot Resourc...23683272022-08-12 21:48:242 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0x0a39eabca850299630106c53ce8369e51525ef5f676defb5721f1845794b7d9cSet Plot Resourc...23683252022-08-12 21:48:003 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0xc92054b9d08f3a798f2612bdbaa9734a48a1423f20be5f2460155db09288ebf1Set Plot Resourc...23683232022-08-12 21:47:243 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0x8596fe5dd62a00ef8bc111fabf171a4e0c417d2fad47e47d8b7ab6bb255036fdSet Plot Resourc...23683212022-08-12 21:46:544 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0x866493b42d89e340daed96db625e13fc95c8b5df6a9e8387b487552ac6b89719Buy Plots23683202022-08-12 21:46:424 mins ago0x81ea2eddc12c8c2903a738584041d352aab0bb4b IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍00034199
0x8659f8594dffca1935fdb60817d7b3887ca236ce710ba94353dcbe2a7af7004dSet Plot Resourc...23683182022-08-12 21:46:184 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0x8507b600e571f0c7a35e54d7fa839ce514a8f8a2cdf5684424276847d59fd963Set Plot Resourc...23683162022-08-12 21:45:545 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0x7b76eb2794e5d278974cbe8ee40d2957fe8f71f87879efc911d93786d156e930Set Plot Resourc...23683122022-08-12 21:45:006 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0x95de05d013d09b9d5c3a0723439605fa1820a7215fe670f05a0fc54735506a6cSet Plot Resourc...23683112022-08-12 21:44:366 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0x1f2f383c6b5b4c06b3054c80a6b38c883bb73b7aaa0b1563867cc31c2c0902a5Buy Plots23683112022-08-12 21:44:366 mins ago0x81ea2eddc12c8c2903a738584041d352aab0bb4b IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍00034199
0x55978ae9fca5fb1c2cbd58cbd65148fa8d05baedd89d31fbbc20ece833b3f54eBuy Plots23683062022-08-12 21:43:247 mins ago0x81ea2eddc12c8c2903a738584041d352aab0bb4b IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍00034199
0xd41ad12f621a98e3a9c08ee239e56b20cbd0611381c367c2ef775657e9a39a94Set Plot Resourc...23683052022-08-12 21:43:128 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0x14fe63a4fe8b070812191ded63fba5a260fd7fe810733355ef6102386501913aSet Plot Resourc...23683022022-08-12 21:42:368 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍0000712925
0x50140be58e85fc3d2086b01cd381d6f552134dc8d9fd7e5d9b57bac5e4727b46Change Price23682522022-08-12 21:30:4820 mins ago0x4367cb52c9369e472c3d7e171cd3b8b4d7e03b56 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000071115
0xc5c3dfc829dea0c97a4cb5d57b3ca123ab287189757f942ccd2ae8ce4dd9a4fbSet Plot Resourc...23682112022-08-12 21:21:0030 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000294265
0x6b158a532cde4b8d77cf563212f9cbc93090bd5d6d285112a3a36e62e1d4281fSet Plot Resourc...23682032022-08-12 21:19:0632 mins ago0xa12bde7741c3213c6ad485a40254b2f8fbdc064a IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000294265
0x9161cb3f1b35870a6008fd13d7f23f7f1cacb8fe244d398622d760a51cde076fSet Plot Resourc...23681932022-08-12 21:16:3634 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000294265
0x43c63a2a95a93eaca5f0b4d01368910a78db0288a26901f8852ee523089f8d00Set Plot Resourc...23681912022-08-12 21:16:0035 mins ago0xa12bde7741c3213c6ad485a40254b2f8fbdc064a IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000294265
0x8ee38341cbfbc92ded07e8102f4f90a0185dbf0821fcf9b297ea71d4f65b2bd2Set Plot Resourc...23681872022-08-12 21:15:0036 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000294265
0x24370a65c0b800d4cbd523f4c16b8215190c8bdbd660a5aa9c51a0a740dbbab6Set Plot Resourc...23681842022-08-12 21:14:2436 mins ago0xa12bde7741c3213c6ad485a40254b2f8fbdc064a IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000294265
0xbaf6f510bbf2766248d65818f0373bb15a90ba55f45861cbccbcd98555986b1bSet Plot Resourc...23681812022-08-12 21:13:3037 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000294265
0xe4f18617ab7ff7d253283ec605a25c5e0da5cb308b81647faa24237ae3442c89Set Plot Resourc...23681792022-08-12 21:13:0038 mins ago0x7188f0554c915e0535f366a8c2f1b546dda0f8c0 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000294265
0x6b54264ca9face9145aa2c4135a6e7610efb19f828116ba65d64c3547b8e6cafSet Plot Resourc...23681752022-08-12 21:12:1239 mins ago0x56e10746c70a0d0c36d87641c9904203e968a3c4 IN  0x913a3e067a559ba24a7a06a6cdea4837eeeaf72d0 MOVR0.‍000294265
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LandSaleMarket

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: LandSaleMarket.sol
//SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.13;

import "./LandSale.sol";
import "./IERC20.sol";

contract LandSaleMarket is LandSale {

    event PlotListed(uint256 indexed plotId, address indexed seller, uint256 price);
    event PlotPriceChanged(uint256 indexed plotId, address indexed seller, uint256 oldPrice, uint256 newPrice);
    event PlotDelisted(uint256 indexed plotId, address indexed seller);
    event PlotPurchased(uint256 indexed plotId, address indexed seller, address indexed buyer, uint256 price);
    event OfferMade(uint256 indexed plotId, address indexed buyer, uint256 price);
    event OfferCancelled(uint256 indexed plotId, address indexed buyer, uint256 price);
    event EscrowReturned(address indexed buyer, uint256 value);
    event PlotTransferred(uint256 indexed plotIds, address indexed oldOwner, address indexed newOwner);

    struct Listing {
        uint256 price;
        uint256 timestamp;
    }

    struct Offer {
        address buyer;
        uint256 price;
        uint256 timestamp;
        bool cancelled;
    }

    bool private _pausedSales;
    bool private _pausedTransfers;
    uint256 private _creatorFee;

    mapping(uint256 => Listing) private _listings;
    mapping(uint256 => Offer[]) private _offers;
    mapping(address => uint256) private _claimableEscrow;

    constructor(uint256 commonPrice, uint256 rarePrice, uint256 epicPrice, uint256 creatorFee)
        LandSale(commonPrice, rarePrice, epicPrice)
    {
        _creatorFee = creatorFee;
        _pausedSales = true;
        _pausedTransfers = true;
    }

    modifier notPaused () {
        require(!_pausedSales, "Sales are paused");
        _;
    }

    // Setings
    function setPausedSales(bool paused) external onlyOwnerOrAdmin {
        _pausedSales = paused;
    }
    function setPausedTransfers(bool paused) external onlyOwnerOrAdmin {
        _pausedTransfers = paused;
    }

    function setCreatorFee(uint256 creatorFee) external onlyOwnerOrAdmin {
        _creatorFee = creatorFee;
    }

    function getPausedSales() external view returns (bool) {
        return _pausedSales;
    }

    function getPausedTransfers() external view returns (bool) {
        return _pausedTransfers;
    }

    function getCreatorFee() external view returns (uint256) {
        return _creatorFee;
    }

    // List - Buy - Offer

    function list(uint256 plotId, uint256 price) external onlyPlotOwner(plotId) notPaused {
        require(price > 0, "Price must be greater than 0");
        require(getPlotRarity(plotId) != Rarity.Harb, "Cannot list Harberger land");
        _listings[plotId] = Listing(price, block.timestamp);

        emit PlotListed(plotId, msg.sender, price);
    }

    function changePrice(uint256 plotId, uint256 newPrice) external onlyPlotOwner(plotId) {
        require(newPrice > 0, "Price must be greater than 0");
        uint oldPrice = _listings[plotId].price;
        require(oldPrice > 0, "Not listed");
        _listings[plotId].price = newPrice;

        emit PlotPriceChanged(plotId, msg.sender, oldPrice, newPrice);
    }

    function delist(uint256 plotId) external onlyPlotOwner(plotId) {
        _delist(plotId, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        emit PlotDelisted(plotId, msg.sender);
    }

    function _delist(uint256 plotId, uint256 doNotReturnIndex) private {
        delete _listings[plotId];
        Offer[] memory offers = _offers[plotId];
        uint numOffers = offers.length;
        for (uint i; i<numOffers;) {
            if (!offers[i].cancelled && i != doNotReturnIndex) {
                _claimableEscrow[offers[i].buyer] += offers[i].price;
            }
            unchecked { ++i; }
        }
        delete _offers[plotId];
    }

    function buy(uint256 plotId, uint256 price) external notPaused {
        Listing memory listing = _listings[plotId];
        require(listing.price > 0, "Not listed");
        IERC20 rmrkToken = IERC20(xcRMRK);
        require(rmrkToken.allowance(msg.sender, address(this)) >= listing.price, "Not enough allowance");
        require(price == listing.price, "Price does not match");

        _delist(plotId, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        address previousOwner = getPlotOwner(plotId);
        setPlotOwner(msg.sender, plotId);
        (uint pay, uint fee) = _getPayAndFee(listing.price);
        rmrkToken.transferFrom(msg.sender, previousOwner, pay);
        rmrkToken.transferFrom(msg.sender, beneficiary, fee);

        emit PlotPurchased(plotId, previousOwner, msg.sender, price);
    }

    function makeOffer(uint256 plotId, uint256 price) external notPaused {
        require(price > 0, "Price must be higher than 0");
        address plotOwner = getPlotOwner(plotId);
        require(plotOwner != msg.sender, "User is land owner");
        require(plotOwner != address(0), "Plot not sellable"); //
        require(getPlotRarity(plotId) != Rarity.Harb, "Cannot offer on Harberger land");

        uint listingPrice = _listings[plotId].price;
        // This check only applies if listed:
        if (listingPrice > 0) {
            require(price < listingPrice, "Offer over listed price");
        }

        IERC20 rmrkToken = IERC20(xcRMRK);
        require(rmrkToken.allowance(msg.sender, address(this)) >= price, "Not enough allowance");

        Offer memory offer = Offer(msg.sender, price, block.timestamp, false);
        _offers[plotId].push(offer);
        rmrkToken.transferFrom(msg.sender, address(this), price);

        emit OfferMade(plotId, msg.sender, price);
    }

    function cancelOffer(uint256 plotId, uint256 offerIndex) external {
        require(offerIndex < _offers[plotId].length, "Offer index out of range");
        Offer memory offer = _offers[plotId][offerIndex];
        require(msg.sender == offer.buyer, "User is not offer owner");
        require(!offer.cancelled, "Offer already cancelled");

        _claimableEscrow[offer.buyer] += offer.price;
        _offers[plotId][offerIndex].cancelled = true;

        emit OfferCancelled(plotId, msg.sender, offer.price);
    }

    function getOffers(uint256 plotId) external view returns(Offer[] memory) {
        return _offers[plotId];
    }

    function acceptOffer(uint256 plotId, uint256 offerIndex, uint256 price) external onlyPlotOwner(plotId) notPaused {
        require(offerIndex < _offers[plotId].length, "Offer index out of range");
        Offer memory offer = _offers[plotId][offerIndex];
        require(!offer.cancelled, "Offer already cancelled");
        require(offer.price == price, "Price does not match");

        _delist(plotId, offerIndex);
        setPlotOwner(offer.buyer, plotId);

        IERC20 rmrkToken = IERC20(xcRMRK);
        (uint pay, uint fee) = _getPayAndFee(offer.price);
        rmrkToken.transfer(msg.sender, pay);
        rmrkToken.transfer(beneficiary, fee);
        emit PlotPurchased(plotId, msg.sender, offer.buyer, price);
    }

    function returnEscrowed() external {
        uint256 returnValue = _claimableEscrow[msg.sender];
        require(returnValue > 0, "No escrow to return");
        _claimableEscrow[msg.sender] = 0;
        IERC20(xcRMRK).transfer(msg.sender, returnValue);

        emit EscrowReturned(msg.sender, returnValue);
    }

    // Transfer

    function transfer(uint plotId, address newOwner) external onlyPlotOwner(plotId) {
        require(newOwner != msg.sender, "Cannot transfer to self");
        require(!_pausedTransfers, "Transfers are paused");
        require(_listings[plotId].price == 0, "Cannot transfer listed plot");
        require(getPlotRarity(plotId) != Rarity.Harb, "Cannot transfer Harberger land");

        setPlotOwner(newOwner, plotId);
        emit PlotTransferred(plotId, msg.sender, newOwner);
    }

    // Utilities
    function getIsListed(uint256 plotId) external view returns (bool) {
        return _listings[plotId].price > 0; 
    }

    function getListedInfo(uint256 plotId) external view returns (uint256, uint256) {
        Listing memory listing = _listings[plotId];
        require(listing.price > 0, "Not listed");
        return (listing.price, listing.timestamp);
    }

    function getListedPrice(uint256 plotId) external view returns (uint256) {
        uint256 price = _listings[plotId].price;
        require(price > 0, "Not listed");
        return price;
    }

    function getCurrentBid(uint256 plotId) external view returns (uint256) {
        Offer[] memory offers = _offers[plotId];
        uint numOffers = offers.length;
        uint currentBid = 0;
        for (uint i; i<numOffers;) {
            if (!offers[i].cancelled && offers[i].price > currentBid) {
                currentBid = offers[i].price;
            }
            unchecked { ++i; }
        }
        return currentBid;
    }

    function getClaimableEscrow(address buyer) external view returns (uint256) {
        return _claimableEscrow[buyer];
    }

    function _getPayAndFee(uint256 price) private view returns (uint256, uint256) {
        uint256 fee = uint256(price * _creatorFee) / _PRICE_PRECISION;
        uint256 pay = uint256(price - fee);
        return (pay, fee);
    }

}

File 2 of 7: AdminAccessible.sol
//SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.13;

contract AdminAccesible {
    address private _owner;
    // int as value is cheaper than boolean:
    mapping(address => uint) private _admins;

    modifier onlyOwner {
        require(msg.sender == _owner, "User is not owner.");
        _;
    }

    modifier onlyOwnerOrAdmin {
        require(msg.sender == _owner || isAdmin(msg.sender), "User is not owner or admin.");
        _;
    }

    constructor () {
        _owner = msg.sender;
    }

    function addAdmin(address admin) external onlyOwner {
        require(admin != address(0), "Admin cannot be the zero address");
        _admins[admin] = 1;
    }

    function revokeAdmin(address admin) external onlyOwner {
        delete _admins[admin];
    }

    function isAdmin(address admin) public view returns (bool) {
        return _admins[admin] == 1;
    }

    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Owner cannot be the zero address");
        _owner = newOwner;
    }

    function getOwner() external view returns(address) {
        return _owner;
    }
}

File 3 of 7: IERC20.sol
//SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.13;

interface IERC20 {
    function transfer(
        address to,
        uint256 amount
    ) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);
}

File 4 of 7: LandSale.sol
//SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.13;

import "./UserData.sol";
import "./Plots.sol";
import "./IERC20.sol";

contract LandSale is Plots {

    event PlotsBought(uint256[] plotIds, address indexed buyer, address indexed referrer, bool indexed boughtWithCredits);

    // All discounts should be in terms of x / 1_000_000
    uint256 internal constant _PRICE_PRECISION = 1_000_000;
    uint256 internal constant _MAX_DISCOUNT = 500_000; // 50%
    uint256 internal constant _REFERRER_FEE = 50_000; // 5%
    uint256 private constant _LERP_PRECISION = 10_000;
    uint256 private constant _MIN_MASS_FOR_BIOME_DISCOUNT = 40;

    uint256 private immutable _commonPrice;
    uint256 private immutable _rarePrice;
    uint256 private immutable _epicPrice;

    uint256 private constant _XCRMRK_DECIMALS = 1*10**10;

    address internal xcRMRK;
    address internal beneficiary;
    address private _userDataAddress;

    uint256 private _whiteListPhase;
    uint256 private _dutchStart;
    uint256 private _dutchDuration;
    uint256 private _dutchMinMultiplier = 100_000;
    bool private _referralIsActive;
    uint256 private _referralMinCommonPlots; // Or equivalent in XCRMRK

    uint256 private _soldWithCredits;
    uint256 private _soldWithxcRMRK;

    mapping(address => uint) private _approvedReferrers;

    modifier checkWhitelist {
        UserData(_userDataAddress).checkWhitelist(msg.sender, _whiteListPhase);
        _;
    }

    constructor(uint256 commonPrice_, uint256 rarePrice_, uint256 epicPrice_) {
        require(commonPrice_ > _XCRMRK_DECIMALS, "Common price must be > 1 xcRMRK");
        require(rarePrice_ > _XCRMRK_DECIMALS, "Rare price must be > 1 xcRMRK");
        require(epicPrice_ > _XCRMRK_DECIMALS, "Epic price must be > 1 xcRMRK");
        _commonPrice = commonPrice_;
        _rarePrice = rarePrice_;
        _epicPrice = epicPrice_;
        _referralIsActive = true;
        _referralMinCommonPlots = 10;
    }

    function getPricesPerRarity() external view returns (uint256, uint256, uint256) {
        return (_commonPrice, _rarePrice, _epicPrice);
    }

    function getReferralIsActive() external view returns (bool) {
        return _referralIsActive;
    }

    function setReferralIsActive(bool isActive) external onlyOwnerOrAdmin {
        _referralIsActive = isActive;
    }

    function getReferralMinCommonPlots() external view returns (uint256) {
        return _referralMinCommonPlots;
    }

    function setReferralMinCommonPlots(uint256 minCommonPlots) external onlyOwnerOrAdmin {
        _referralMinCommonPlots = minCommonPlots;
    }

    function addReferrer(address referrer) external onlyOwnerOrAdmin {
        require(referrer != address(0), "Referrer cannot be the 0 address");
        _approvedReferrers[referrer] = 1;
    }

    function removeReferrer(address referrer) external onlyOwnerOrAdmin {
        delete _approvedReferrers[referrer];
    }

    function isReferrer(address referrer) external view returns (bool) {
        return _approvedReferrers[referrer] == 1;
    }

    function getNumPlotsSold() external view returns (uint256, uint256) {
        return (_soldWithxcRMRK, _soldWithCredits);
    }

    function buyPlots(
        uint256[] calldata plotIds,
        uint256[] calldata singleDiscountIndexes,
        uint256[] calldata multiDiscountIndexes,
        address referrer
    ) external checkWhitelist {
        _buyPlots(plotIds, singleDiscountIndexes, multiDiscountIndexes, referrer);
    }

    function _buyPlots(
        uint256[] calldata plotIds,
        uint256[] calldata singleDiscountIndexes,
        uint256[] calldata multiDiscountIndexes,
        address referrer
    ) internal {
        require(plotIds.length > 0, "No plots to buy");
        uint256 price = _getPurchasePrice(msg.sender, plotIds, singleDiscountIndexes, multiDiscountIndexes);
        UserData(_userDataAddress).spendDiscounts(msg.sender, singleDiscountIndexes, multiDiscountIndexes);
        bool success;
        if (_referrerApplies(referrer)) {
            (uint pay, uint fee) = _getPayAndReferrerFee(price);
            success = IERC20(xcRMRK).transferFrom(msg.sender, referrer, fee);
            if (success) {
                success = IERC20(xcRMRK).transferFrom(msg.sender, beneficiary, pay);
            }
        }
        else {
            referrer = address(0);
            success = IERC20(xcRMRK).transferFrom(msg.sender, beneficiary, price);
        }

        require(success, "Landsale: TransferFrom failure");

        _processPlotBuy(plotIds, referrer, false);
    }

    function _referrerApplies(address referrer) internal view returns (bool) {
        if (referrer == address(0) || referrer == msg.sender || !_referralIsActive) {
            return false;
        }
        return canRefer(referrer);

    }

    function canRefer(address referrer) public view returns(bool) {
        if (_approvedReferrers[referrer] == 1) {
            return true;
        }
        (uint256 numCommon, uint256 numRare, uint256 numEpic, , ) = countPlotRarities(_allOwnedPlots[referrer]);
        return numCommon + numRare * 3 + numEpic * 5 >= _referralMinCommonPlots;
    }

    function _getPayAndReferrerFee(uint256 price) private pure returns (uint256, uint256) {
        uint256 fee = uint256(price * _REFERRER_FEE) / _PRICE_PRECISION;
        uint256 pay = uint256(price - fee);
        return (pay, fee);
    }

    function buyWithCredits(uint256[] calldata plotIds, Rarity creditRarity) external checkWhitelist {
        uint numPlots = plotIds.length;
        require(numPlots > 0, "No plots to buy");
        uint256 userAvailableCredits = UserData(_userDataAddress).getUserCreditsForRarity(msg.sender, creditRarity);
        require(userAvailableCredits >= numPlots, "Not enough credits in account");

        (uint256 numCommon, uint256 numRare, uint256 numEpic, uint256 numHarb, uint256 numPremium) = countPlotRarities(plotIds);
        // There are no Harb credits, but Harb can be bought with premium.
        numPremium += numHarb;
        numHarb = 0;

        if (creditRarity == Rarity.Common) {
            require(numCommon == numPlots, "Only common lands");
            UserData(_userDataAddress).spendCredits(msg.sender, numPlots, 0, 0, 0);
            _processPlotBuy(plotIds, address(0), true);
        }

        else if (creditRarity == Rarity.Rare) {
            require(numCommon + numRare == numPlots, "Only common or rare lands");
            UserData(_userDataAddress).spendCredits(msg.sender, 0, numPlots, 0, 0);
            _processPlotBuy(plotIds, address(0), true);
        }

        else if (creditRarity == Rarity.Epic) {
            require(numCommon + numRare + numEpic == numPlots, "Only common, rare or epic lands");
            UserData(_userDataAddress).spendCredits(msg.sender, 0, 0, numPlots, 0);
            _processPlotBuy(plotIds, address(0), true);
        }

        else {
            // These conditions could only break if the in chain plot data was corrupted:
            require(
                creditRarity == Rarity.Premium
                && numCommon + numRare + numEpic + numPremium == numPlots,
                "Unexpected credit rarity"
            );
            UserData(_userDataAddress).spendCredits(msg.sender, 0, 0, 0, numPlots);
            _processPlotBuy(plotIds, address(0), true);
        }
    }

    function _processPlotBuy(uint256[] memory plotIds, address referrer, bool boughtWithCredits) private {
        uint256 numPlots = plotIds.length;
        for(uint i; i<numPlots;) {
            uint256 plotId = plotIds[i];
            require(getPlotAvailability(plotId), "RMRK Landsale: Plot unavailable");
            setPlotOwner(msg.sender, plotId);
            unchecked { ++i; }
        }

        if (boughtWithCredits) {
            _soldWithCredits += plotIds.length;
        }
        else {
            _soldWithxcRMRK += plotIds.length;
        }

        emit PlotsBought(plotIds, msg.sender, referrer, boughtWithCredits);
    }

    function smartBuyWithCredits(
        uint256[] calldata plotIds,
        uint256 commonCredits,
        uint256 rareCredits,
        uint256 epicCredits,
        uint256 premiumCredits
    ) external checkWhitelist {
        _smartBuyWithCredits(plotIds, commonCredits, rareCredits, epicCredits, premiumCredits);
    }

    function _smartBuyWithCredits(
        uint256[] calldata plotIds,
        uint256 commonCredits,
        uint256 rareCredits,
        uint256 epicCredits,
        uint256 premiumCredits
    ) internal {
        require(plotIds.length > 0, "No plots to buy");
        (uint256 numCommon, uint256 numRare, uint256 numEpic, uint256 numHarb, uint256 numPremium) = countPlotRarities(plotIds);

        // There are no Harb credits, but Harb can be bought with premium.
        numPremium += numHarb;
        numHarb = 0;

        // Pass missing to the next tier, order is critical
        if(numCommon > commonCredits) {
            numRare += (numCommon - commonCredits);
            numCommon -= (numCommon - commonCredits);
        }

        // Pass missing to the next tier, order is critical
        if(numRare > rareCredits) {
            numEpic += (numRare - rareCredits);
            numRare -= (numRare - rareCredits);
        }

        // Pass missing to the next tier, order is critical
        if(numEpic > epicCredits) {
            numPremium += (numEpic - epicCredits);
            numEpic -= (numEpic - epicCredits);
        }

        require(
            commonCredits >= numCommon && rareCredits >= numRare && epicCredits >= numEpic && premiumCredits >= numPremium,
            "Not enough credits set"
        );

        UserData(_userDataAddress).spendCredits(msg.sender, numCommon, numRare, numEpic, numPremium);
        _processPlotBuy(plotIds, address(0), true);
    }

    function mixBuy(
        uint256[] calldata xcRmrkPlotIds,
        uint256[] calldata singleDiscountIndexes,
        uint256[] calldata multiDiscountIndexes,
        address referrer,
        uint256[] calldata creditsPlotIds,
        UserCredits calldata userCredits
    ) external checkWhitelist {
        _smartBuyWithCredits(creditsPlotIds, userCredits.commonCredits, userCredits.rareCredits, userCredits.epicCredits, userCredits.premiumCredits);
        _buyPlots(xcRmrkPlotIds, singleDiscountIndexes, multiDiscountIndexes, referrer);
    }

    function getPurchasePrice(
        address buyer,
        uint256[] memory plotIds,
        uint256[] calldata singleDiscountIndexes,
        uint256[] calldata multiDiscountIndexes
    ) external view returns (uint) {
        return _getPurchasePrice(buyer, plotIds, singleDiscountIndexes, multiDiscountIndexes);
    }

    function _getPurchasePrice(
        address buyer,
        uint256[] memory plotIds,
        uint256[] calldata singleDiscountIndexes,
        uint256[] calldata multiDiscountIndexes
    ) private view returns (uint) {
        uint numPlots = plotIds.length;
        require(singleDiscountIndexes.length == 0 || numPlots == 1, "Use single discounts with 1 plot");

        uint256 price = 0;
        // We load all discounts into a single array for simplicity
        UserData.Discount[] memory discounts = UserData(_userDataAddress).loadDiscounts(buyer, singleDiscountIndexes, multiDiscountIndexes);

        for (uint i; i<numPlots;) {
            PlotData memory plotData = getPlotData(plotIds[i]);
            uint256 plotPrice = _getPriceWithDiscount(plotData, discounts);
            price += plotPrice;

            unchecked { ++i; }
        }

        if (_isDutchPhase()) {
            price = _getDutchPrice(price);
        }

        return price;
    }

    function _getPriceWithDiscount(PlotData memory plotData, UserData.Discount[] memory discounts) private view returns (uint) {
        uint256 initPrice;
        uint256 discountSum;

        if (plotData.rarity == Rarity.Common) {
            initPrice = _commonPrice;
        }

        else if (plotData.rarity == Rarity.Rare) {
            initPrice = _rarePrice;
        }

        else if (plotData.rarity == Rarity.Epic) {
            initPrice = _epicPrice;
        }

        else {
            revert("Bad land rarity");
        }

        uint numDiscounts = discounts.length;
        // This should be the common case
        if (numDiscounts == 0){
            return initPrice;
        }
        UserData.Discount memory discount;

        for (uint i; i < numDiscounts;) {
            discount = discounts[i];
            if (discount.forAll) {
                discountSum += discount.discount;
            }
            else if (plotData.cyber > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forCyberBiome) {
                discountSum += discount.discount;
            }
            else if (plotData.steampunk > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forSteampunkBiome) {
                discountSum += discount.discount;
            }
            else if (plotData.wind > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forWindBiome) {
                discountSum += discount.discount;
            }
            else if (plotData.volcano > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forVolcanoBiome) {
                discountSum += discount.discount;
            }
            else if (plotData.fire > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forFireBiome) {
                discountSum += discount.discount;
            }
            else if (plotData.water > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forWaterBiome) {
                discountSum += discount.discount;
            }
            else if (plotData.necro > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forNecroBiome) {
                discountSum += discount.discount;
            }
            else if (plotData.mecha > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forMechaBiome) {
                discountSum += discount.discount;
            }
            else if (plotData.dragon > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forDragonBiome) {
                discountSum += discount.discount;
            }
            else if (plotData.meadow > _MIN_MASS_FOR_BIOME_DISCOUNT && discount.forMeadowBiome) {
                discountSum += discount.discount;
            }
            else if (plotData.isIsland == 1 && discount.forIsland) {
                discountSum += discount.discount;
            }
            else if (plotData.isShore == 1 && discount.forShore) {
                discountSum += discount.discount;
            }
            else if (plotData.isMountainFoot == 1 && discount.forMountainFoot) {
                discountSum += discount.discount;
            }
            unchecked { ++i; }
        }

        if (discountSum > _MAX_DISCOUNT) {
            discountSum = _MAX_DISCOUNT;
        }
        return (initPrice * (_PRICE_PRECISION - discountSum)) / _PRICE_PRECISION;
    }

    function setxcRMRK(address newAddress) external onlyOwnerOrAdmin {
        xcRMRK = newAddress;
    }

    function setUserDataAddress(address newAddress) external onlyOwnerOrAdmin {
        _userDataAddress = newAddress;
    }

    function setBeneficiary(address newAddress) external onlyOwnerOrAdmin {
        beneficiary = newAddress;
    }

    function setDutchConfig(uint256 start, uint256 duration, uint256 multiplier) external onlyOwnerOrAdmin {
        require(multiplier < 1_000_000, "Value over precision");
        _dutchStart = start;
        _dutchDuration = duration;
        _dutchMinMultiplier = multiplier;
    }

    function _isDutchPhase() private view returns(bool) {
        return _whiteListPhase == 5;
    }

    function getXcRMRK() external view returns(address) {
        return xcRMRK;
    }

    function getUserDataAddress() external view returns(address) {
        return _userDataAddress;
    }

    function getBeneficiary() external view returns(address) {
        return beneficiary;
    }

    function getWhiteListPhase() external view returns(uint256) {
        return _whiteListPhase;
    }

    function getDutchStart() external view returns(uint256) {
        return _dutchStart;
    }

    function getDutchDuration() external view returns(uint256) {
        return _dutchDuration;
    }

    function getDutchMinMultiplier() external view returns(uint256) {
        return _dutchMinMultiplier;
    }

    // White list:
    function setWhitelistPhase(uint256 phaseId) external onlyOwnerOrAdmin {
        require(phaseId <= 5, "Bad phase id");
        _whiteListPhase = phaseId;
    }

    function getDutchPrice(uint256 price) external view returns(uint) {
        return _getDutchPrice(price);
    }

    function _getDutchPrice(uint256 price) private view returns(uint) {
        //Clamp to prevent underflow on currentElapsedRatio calculation
        // elapsed must be between 0 and _dutchDuration:
        uint256 elapsed = _clampUpper(_getTimeElapsed(), _dutchDuration);
        // currentElapsedRatio is between 0 (beginning of auction) to _LERP_PRECISION (end of auction)
        uint256 currentElapsedRatio = _LERP_PRECISION - (_dutchDuration - elapsed) * _LERP_PRECISION / _dutchDuration;
        // _PRICE_PRECISION is 100%
        uint256 currentPriceMultipler = _lerp(_PRICE_PRECISION, _dutchMinMultiplier, currentElapsedRatio);
        uint256 adjustedPrice = currentPriceMultipler * price / _PRICE_PRECISION;
        return adjustedPrice;
    }

    function _getTimeElapsed() private view returns(uint) {
        return _dutchStart < block.timestamp ? (block.timestamp - _dutchStart) : 0 ;
    }

    //Linear interpellation. Position has precision of _LERP_PRECISION
    function _lerp(uint256 val0, uint256 val1, uint256 position) private pure returns(uint256) {
        uint256 res = ((((_LERP_PRECISION - position) * val0) + (position * val1)) / _LERP_PRECISION);
        return res;
    }

    function _clampUpper(uint256 value, uint256 clamp) private pure returns(uint) {
        if (value < clamp){
            return value;
        }
        else {
            return clamp;
        }
    }

}

File 5 of 7: LandSaleCore.sol
//SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.13;


contract LandSaleCore {

    enum Rarity { None, Common, Rare, Epic, Harb, Premium }
    enum Entropy { None, Seldom, Infrequent, Uncommon, Common, Frequent, Constant }

    struct UserCredits {
        uint256 commonCredits;
        uint256 rareCredits;
        uint256 epicCredits;
        uint256 premiumCredits;
    }
}

File 6 of 7: Plots.sol
//SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.13;

import "./AdminAccessible.sol";
import "./LandSaleCore.sol";


contract Plots is AdminAccesible, LandSaleCore {

    event PlotResourceSet(uint256 indexed plotId, string buyer);

    struct PlotData {
        uint8 cyber;
        uint8 steampunk;
        uint8 wind;
        uint8 volcano;
        uint8 fire;
        uint8 water;
        uint8 necro;
        uint8 mecha;
        uint8 dragon;
        uint8 meadow;
        uint8 isShore; // 0 = no, 1 = yes
        uint8 isIsland; // 0 = mainland, 1 = island
        uint8 isMountainFoot; // 0 = no, 1 = yes
        Rarity rarity;
        Entropy entropy;
    }

    struct OwnedPlotRarities {
        uint32 common;
        uint32 rare;
        uint32 epic;
        uint32 harb;
        uint32 premium;
    }

    mapping(uint256 => PlotData) private _plotData;
    mapping(uint256 => address) private _plotOwners;
    mapping(uint256 => string) private _plotImg;
    mapping(address => uint256[]) internal _allOwnedPlots;
    bool private _plotDataLock;
    bool private _migrationLock;

    modifier onlyPlotOwner (uint256 plotId) {
        require(msg.sender == _plotOwners[plotId], "User is not land owner");
        _;
    }

    function getPlotOwner(uint256 plotId) public view returns (address) {
        return _plotOwners[plotId];
    }

    function setPlotDataLock(bool state) external onlyOwnerOrAdmin {
        _plotDataLock = state;
    }

    function getMigrationLock() external view returns (bool) {
        return _migrationLock;
    }

    function lockMigration() external onlyOwnerOrAdmin {
        _migrationLock = true;
    }

    function getPlotDataLock() external view returns (bool) {
        return _plotDataLock;
    }

    function getPlotData(uint256 plotId) public view returns(PlotData memory) {
        return _plotData[plotId];
    }

    function getPlotRarity(uint256 plotId) internal view returns(Rarity) {
        return _plotData[plotId].rarity;
    }

    //Expects all arrays to be identical size.
    function setPlotDataMulti(uint256[] calldata plotIds, PlotData[] calldata plotsData) external onlyOwnerOrAdmin {
        require(!_plotDataLock, "Plot data setter is locked.");
        uint256 len = plotIds.length;
        require(len==plotsData.length, "Arrays must have the same length");
        for(uint i; i<len;) {
            uint256 plotId = plotIds[i];
            _plotData[plotId] = plotsData[i];
            unchecked { ++i; }
        }
    }

    function setPlotData(uint256 plotId, PlotData calldata plotData) external onlyOwnerOrAdmin {
        require(!_plotDataLock, "Plot data setter is locked.");
        _plotData[plotId] = plotData;
    }

    function countPlotRarities(uint256[] memory plotIds) internal view returns (uint, uint, uint, uint, uint) {

        uint256 commons;
        uint256 rares;
        uint256 epics;
        uint256 harbs;
        uint256 premium;

        uint256 len = plotIds.length;

        for(uint i; i<len;) {
            uint256 plotId = plotIds[i];

            if (_plotData[plotId].rarity == Rarity.Common) {
                commons +=1;
            }
            else if (_plotData[plotId].rarity == Rarity.Rare) {
                rares +=1;
            }
            else if (_plotData[plotId].rarity == Rarity.Epic) {
                epics +=1;
            }
            else if (_plotData[plotId].rarity == Rarity.Harb) {
                harbs +=1;
            }
            else {
                // This condition should be unreachable
                require(_plotData[plotId].rarity == Rarity.Premium, "Bad land rarity");
                premium +=1;
            }

            unchecked { ++i; }
        }

        return (commons, rares, epics, harbs, premium);
    }

    function getOwnedPlotRarities(address user) external view returns(OwnedPlotRarities memory ownedPlotRarities) {
        (uint256 numCommon, uint256 numRare, uint256 numEpic, uint256 numHarb, uint256 numPremium) = countPlotRarities(_allOwnedPlots[user]);

        ownedPlotRarities = OwnedPlotRarities({
            common: uint32(numCommon),
            rare: uint32(numRare),
            epic: uint32(numEpic),
            harb: uint32(numHarb),
            premium: uint32(numPremium)
        });
    }

    function getPlotAvailability(uint256 plotId) public view returns(bool) {
        require(_plotData[plotId].rarity != Rarity.None, "Plot not initialized");
        return _plotOwners[plotId] == address(0);
    }

    function getPlotOwners(uint256[] memory plotIds) external view returns(address[] memory) {
        uint256 numPlots = plotIds.length;
        address[] memory owners = new address[](numPlots);

        for(uint i; i<numPlots;) {
            uint256 plotId = plotIds[i];
            owners[i] = _plotOwners[plotId];
            unchecked { ++i; }
        }

        return owners;
    }

    function getOwnedPlots(address user) external view returns(uint256[] memory) {
        return _allOwnedPlots[user];
    }

    function migratePlotOwners(
        address[] memory users,
        uint256[] memory plotIds
    ) public onlyOwnerOrAdmin {
        // We'll lock after migration is complete so not even the owner can do it.
        require(!_migrationLock, "Migration is now locked");
        uint numUsers = users.length;
        require(numUsers == plotIds.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _setPlotOwner(users[i], plotIds[i]);
            unchecked { ++i; }
        }
    }

    function setPlotOwner(address user, uint256 plotId) internal {
        address oldOwner = _plotOwners[plotId];
        _setPlotOwner(user, plotId);

        // Remove plot from old owner
        if (oldOwner != address(0)) {
            uint256[] memory oldOwnerPlots = _allOwnedPlots[oldOwner];
            uint256 len = oldOwnerPlots.length;
            uint256 oldIndex = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
            for(uint i; i<len;) {
                if (oldOwnerPlots[i] == plotId) {
                    oldIndex = i;
                    break;
                }
                unchecked { ++i; }
            }
            // This condition should be unreachable
            require(oldIndex != 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, "Plot not found in old owner");
            // No need to swap if we're removing the last element
            if (oldIndex != len-1) {
                _allOwnedPlots[oldOwner][oldIndex] = _allOwnedPlots[oldOwner][len-1];
            }
            _allOwnedPlots[oldOwner].pop();
        }
    }

    function _setPlotOwner(address user, uint256 plotId) private {
        _plotOwners[plotId] = user;
        _allOwnedPlots[user].push(plotId);
    }

    function setPlotResource(uint256 plotId, string memory imgData) external onlyPlotOwner(plotId) {
        _plotImg[plotId] = imgData;
        emit PlotResourceSet(plotId, imgData);
    }

    function getPlotResource(uint256 plotId) external view returns(string memory) {
        return _plotImg[plotId];
    }

    function getPlotResourceBatch(uint256[] memory plotIds) external view returns(string[] memory) {
        uint256 numPlots = plotIds.length;
        string[] memory resources = new string[](numPlots);

        for(uint i; i<numPlots;) {
            uint256 plotId = plotIds[i];
            resources[i] = _plotImg[plotId];
            unchecked { ++i; }
        }

        return resources;
    }
}

File 7 of 7: UserData.sol
//SPDX-License-Identifier: Apache 2.0
pragma solidity ^0.8.13;

import "./AdminAccessible.sol";
import "./LandSaleCore.sol";


contract UserData is AdminAccesible, LandSaleCore {

    event CreditsSpent(address indexed user, uint common, uint rare, uint epic, uint premium);
    event DiscountsSpent(address indexed user, uint256[] singleDiscountIndexes, uint256[] multiDiscountIndexes);

    struct UserWhiteList {
        bool phase1;
        bool phase2;
        bool phase3;
    }

    struct Discount {
        uint128 discount;
        bool forCyberBiome;
        bool forSteampunkBiome;
        bool forWindBiome;
        bool forVolcanoBiome;
        bool forFireBiome;
        bool forWaterBiome;
        bool forNecroBiome;
        bool forMechaBiome;
        bool forDragonBiome;
        bool forMeadowBiome;
        bool forShore;
        bool forIsland;
        bool forMountainFoot;
        bool forAll;
    }

    struct UserDiscounts {
        Discount[] single;
        Discount[] multi;
    }

    //getter composition
    struct UserDataIntake {
        uint256 commonCredits;
        uint256 rareCredits;
        uint256 epicCredits;
        uint256 premiumCredits;
        Discount[] singleDiscounts;
        Discount[] multiDiscounts;
        bool whiteListPhase1;
        bool whiteListPhase2;
        bool whiteListPhase3;
    }

    // Credits
    mapping(address => mapping(Rarity => uint256)) private _userCredits;
    // Whitelist
    address private _landSaleAddress;
    uint256 private _lastUpdate;
    mapping(address => UserWhiteList) private _userWL;
    // Discounts
    mapping(address => Discount[]) private _userDiscountsSingle;
    mapping(address => Discount[]) private _userDiscountsMulti;

    modifier onlyLandsale {
        require(_landSaleAddress == msg.sender, "Forbidden");
        _;
    }

    function checkWhitelist(address user, uint256 whiteListPhase) external view {
        if (whiteListPhase == 0) {
            revert("Sale not open");
        }
        else if (whiteListPhase == 1) {
            require(
                _userWL[user].phase1,
                "Kokopelli: Not whitelisted"
                );
        }
        else if (whiteListPhase == 2) {
            require(
                _userWL[user].phase1 ||
                _userWL[user].phase2,
                "Kanaria: Not whitelisted"
                );
        }
        else if (whiteListPhase == 3) {
            require(
                _userWL[user].phase1 ||
                _userWL[user].phase2 ||
                _userWL[user].phase3,
                "WL: Not whitelisted");
        }
        // 4 is public, 5 is dutch, they require no whitelist
    }


    // LandSale
    function setLandSaleAddress(address landSaleAddress) external onlyOwnerOrAdmin {
        _landSaleAddress = landSaleAddress;
    }

    function getLandSaleAddress() external view returns(address) {
        return _landSaleAddress;
    }

    // Credits
    function setUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) external onlyOwnerOrAdmin {
        _setUserCredits(user, commonCredits, rareCredits, epicCredits, premiumCredits);
        _setLastUpdate();
    }

    function setUserCreditsBatch(
        address[] calldata users,
        uint256[] calldata commonCredits,
        uint256[] calldata rareCredits,
        uint256[] calldata epicCredits,
        uint256[] calldata premiumCredits
    ) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == commonCredits.length && numUsers == rareCredits.length && numUsers == epicCredits.length && numUsers == premiumCredits.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _setUserCredits(users[i], commonCredits[i], rareCredits[i], epicCredits[i], premiumCredits[i]);
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    function _setUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) private {
        _userCredits[user][Rarity.Common] = commonCredits;
        _userCredits[user][Rarity.Rare] = rareCredits;
        _userCredits[user][Rarity.Epic] = epicCredits;
        _userCredits[user][Rarity.Premium] = premiumCredits;
    }

    function addUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) external onlyOwnerOrAdmin {
        _addUserCredits(user, commonCredits, rareCredits, epicCredits, premiumCredits);
        _setLastUpdate();
    }

    function addUserCreditsBatch(
        address[] calldata users,
        uint256[] calldata commonCredits,
        uint256[] calldata rareCredits,
        uint256[] calldata epicCredits,
        uint256[] calldata premiumCredits
    ) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == commonCredits.length && numUsers == rareCredits.length && numUsers == epicCredits.length && numUsers == premiumCredits.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _addUserCredits(users[i], commonCredits[i], rareCredits[i], epicCredits[i], premiumCredits[i]);
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    function _addUserCredits(address user, uint256 commonCredits, uint256 rareCredits, uint256 epicCredits, uint256 premiumCredits) internal {
        _userCredits[user][Rarity.Common] += commonCredits;
        _userCredits[user][Rarity.Rare] += rareCredits;
        _userCredits[user][Rarity.Epic] += epicCredits;
        _userCredits[user][Rarity.Premium] += premiumCredits;
    }

    function removeAllUserCredits(address user) external onlyOwnerOrAdmin {
        delete _userCredits[user][Rarity.Common];
        delete _userCredits[user][Rarity.Rare];
        delete _userCredits[user][Rarity.Epic];
        delete _userCredits[user][Rarity.Premium];
    }

    function getUserCreditData(address user) external view returns (UserCredits memory userCreditData) {
        userCreditData = UserCredits ({
            commonCredits: _userCredits[user][Rarity.Common],
            rareCredits: _userCredits[user][Rarity.Rare],
            epicCredits: _userCredits[user][Rarity.Epic],
            premiumCredits: _userCredits[user][Rarity.Premium]
        });
    }

    function getUserCreditsForRarity(address user, Rarity rarity) external view returns (uint256) {
        return _userCredits[user][rarity];
    }

    function spendCredits(address user, uint common, uint rare, uint epic, uint premium) external onlyLandsale {
        require(_userCredits[user][Rarity.Common] >= common, "Not enough common credits");
        require(_userCredits[user][Rarity.Rare] >= rare, "Not enough rare credits");
        require(_userCredits[user][Rarity.Epic] >= epic, "Not enough epic credits");
        require(_userCredits[user][Rarity.Premium] >= premium, "Not enough premium credits");

        _userCredits[user][Rarity.Common] -= common;
        _userCredits[user][Rarity.Rare] -= rare;
        _userCredits[user][Rarity.Epic] -= epic;
        _userCredits[user][Rarity.Premium] -= premium;
        emit CreditsSpent(user, common, rare, epic, premium);
    }

    function setUserWhitelist(address user, bool phase1, bool phase2, bool phase3) external onlyOwnerOrAdmin {
        _setUserWhitelist(user, phase1, phase2, phase3);
        _setLastUpdate();
    }

    function setUserWhitelistBatch(
        address[] calldata users,
        bool[] calldata phase1,
        bool[] calldata phase2,
        bool[] calldata phase3
    ) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == phase1.length && numUsers == phase2.length && numUsers == phase3.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _setUserWhitelist(users[i], phase1[i], phase2[i], phase3[i]);
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    // Specific function to save gas since we expect to call this more.
    function setUserWhitelistBatchPhass3( address[] calldata users, bool[] calldata phase3) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == phase3.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _userWL[users[i]].phase3 = phase3[i];
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    function _setUserWhitelist(address user, bool phase1, bool phase2, bool phase3) private {
        _userWL[user] = UserWhiteList ({
            phase1: phase1,
            phase2: phase2,
            phase3: phase3
        });
    }

    function removeUserWhitelist(address user) external onlyOwnerOrAdmin {
        delete _userWL[user];
    }

    function getUserWhitelistStatus(address user) external view returns(UserWhiteList memory userWhitelistData) {
        userWhitelistData = _userWL[user];
    }

    // Discounts
    function setUserDiscounts(address user, Discount[] calldata singleDiscounts, Discount[] calldata multiDiscounts) external onlyOwnerOrAdmin {
        _setUserDiscounts(user, singleDiscounts, multiDiscounts);
        _setLastUpdate();
    }

    function setUserDiscountsBatch(
        address[] calldata users,
        Discount[][] calldata singleDiscounts,
        Discount[][] calldata multiDiscounts
    ) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == singleDiscounts.length && numUsers == multiDiscounts.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            _setUserDiscounts(users[i], singleDiscounts[i], multiDiscounts[i]);
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    function _setUserDiscounts(address user, Discount[] calldata singleDiscounts, Discount[] calldata multiDiscounts) private {
        delete _userDiscountsSingle[user];
        delete _userDiscountsMulti[user];

        _addUserDiscounts(_userDiscountsSingle[user], singleDiscounts);
        _addUserDiscounts(_userDiscountsMulti[user], multiDiscounts);
    }

    function _addUserDiscounts(Discount[] storage localDiscounts, Discount[] calldata newDiscounts) internal {
        uint numDiscounts = newDiscounts.length;
        for(uint i; i<numDiscounts;) {
            localDiscounts.push(newDiscounts[i]);
            unchecked { ++i; }
        }
    }

    function addUserDiscounts(address user, Discount[] calldata singleDiscounts, Discount[] calldata multiDiscounts) external onlyOwnerOrAdmin {
        _addUserDiscounts(_userDiscountsSingle[user], singleDiscounts);
        _addUserDiscounts(_userDiscountsMulti[user], multiDiscounts);
        _setLastUpdate();
    }

    function addUserDiscountsBatch(
        address[] calldata users,
        Discount[][] calldata singleDiscounts,
        Discount[][] calldata multiDiscounts
    ) external onlyOwnerOrAdmin {
        uint numUsers = users.length;
        require(numUsers == singleDiscounts.length && numUsers == multiDiscounts.length, "Arrays must have the same length");
        for (uint i; i<numUsers;) {
            address user = users[i];
            _addUserDiscounts(_userDiscountsSingle[user], singleDiscounts[i]);
            _addUserDiscounts(_userDiscountsMulti[user], multiDiscounts[i]);
            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    function removeAllUserDiscoutns(address user) external onlyOwnerOrAdmin {
        delete _userDiscountsSingle[user];
        delete _userDiscountsMulti[user];
    }

    function getUserDiscountData(address user) external view returns (UserDiscounts memory userDiscountData) {
        userDiscountData = UserDiscounts ({
            single: _userDiscountsSingle[user],
            multi: _userDiscountsMulti[user]
        });
    }

    function loadDiscounts(address user, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes) external view returns (Discount[] memory) {
        uint numSingleDiscounts = singleDiscountIndexes.length;
        uint numMultiDiscounts = multiDiscountIndexes.length;

        Discount[] memory discounts = new Discount[](numSingleDiscounts + numMultiDiscounts);

        if (numSingleDiscounts > 0) {
            for (uint i; i<numSingleDiscounts;) {
                require(singleDiscountIndexes[i] < _userDiscountsSingle[user].length, "Bad single discount index");
                discounts[i] = _userDiscountsSingle[user][singleDiscountIndexes[i]];
                unchecked { ++i; }
            }
        }

        if (numMultiDiscounts > 0) {
            for (uint i; i<numMultiDiscounts;) {
                require(multiDiscountIndexes[i] < _userDiscountsMulti[user].length, "Bad multi discount index");
                // Mind to start from after the last index for single discounts
                discounts[numSingleDiscounts + i] = _userDiscountsMulti[user][multiDiscountIndexes[i]];
                unchecked { ++i; }
            }
        }
        return discounts;
    }

    function spendDiscounts(address user, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes) external onlyLandsale {
        _removeDiscountsByIndex(_userDiscountsSingle[user], singleDiscountIndexes);
        _removeDiscountsByIndex(_userDiscountsMulti[user], multiDiscountIndexes);
        if (singleDiscountIndexes.length > 0 || multiDiscountIndexes.length > 0) {
            emit DiscountsSpent(user, singleDiscountIndexes, multiDiscountIndexes);
        }
    }

    function _removeDiscountsByIndex(Discount[] storage array, uint256[] calldata indexes) internal {
        uint numDiscounts = indexes.length;
        if (numDiscounts == 0) {
            return;
        }
        // Since we move the last element to a lower position on deletion
        // We may save gas by deleting higher indexes first, so we go last to first
        // and enforce order using lastIndex variable.
        uint lastIndex = indexes[numDiscounts - 1];
        for (uint i; i<numDiscounts;) {
            uint index = indexes[numDiscounts - i - 1];
            uint arrayLen = array.length;
            require(index <= lastIndex, "Discount indexes must be ordered");
            // This condition should be unreachable, since discounts were already loaded.
            require(index < arrayLen, "Bad array index");
            if (index != arrayLen - 1) {
                array[index] = array[arrayLen - 1];
            }
            array.pop();
            lastIndex = index;
            unchecked { ++i; }
        }
    }

    // All in one
    function getUserData(address user) external view returns (UserDataIntake memory userData) {
        UserWhiteList memory userWhitelist = _userWL[user];

        userData = UserDataIntake ({
            commonCredits: _userCredits[user][Rarity.Common],
            rareCredits: _userCredits[user][Rarity.Rare],
            epicCredits: _userCredits[user][Rarity.Epic],
            premiumCredits: _userCredits[user][Rarity.Premium],
            singleDiscounts: _userDiscountsSingle[user],
            multiDiscounts: _userDiscountsMulti[user],
            whiteListPhase1: userWhitelist.phase1,
            whiteListPhase2: userWhitelist.phase2,
            whiteListPhase3: userWhitelist.phase3
        });
    }

    function setUserData(address user, UserDataIntake calldata intakeData) external onlyOwnerOrAdmin {
        _setUserWhitelist(user, intakeData.whiteListPhase1, intakeData.whiteListPhase2, intakeData.whiteListPhase3);
        _setUserCredits(user, intakeData.commonCredits, intakeData.rareCredits, intakeData.epicCredits, intakeData.premiumCredits);
        _setUserDiscounts(user, intakeData.singleDiscounts, intakeData.multiDiscounts);
        _setLastUpdate();
    }

    function setUserDataBatch(address[] calldata users, UserDataIntake[] calldata intakeData) external onlyOwnerOrAdmin {
        uint256 len = users.length;
        require(len == intakeData.length, "Arrays must have the same length");

        for(uint i; i<len;) {
            _setUserWhitelist(users[i], intakeData[i].whiteListPhase1, intakeData[i].whiteListPhase2, intakeData[i].whiteListPhase3);
            _setUserCredits(users[i], intakeData[i].commonCredits, intakeData[i].rareCredits, intakeData[i].epicCredits, intakeData[i].premiumCredits);
            _setUserDiscounts(users[i], intakeData[i].singleDiscounts, intakeData[i].multiDiscounts);

            unchecked { ++i; }
        }
        _setLastUpdate();
    }

    // Last Update

    function _setLastUpdate() private {
        _lastUpdate = block.timestamp;
    }

    function getLastUpdate() external view returns (uint256) {
        return _lastUpdate;
    }

}

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"commonPrice","type":"uint256"},{"internalType":"uint256","name":"rarePrice","type":"uint256"},{"internalType":"uint256","name":"epicPrice","type":"uint256"},{"internalType":"uint256","name":"creatorFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"EscrowReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"OfferCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"OfferMade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"}],"name":"PlotDelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"PlotListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"PlotPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"PlotPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotId","type":"uint256"},{"indexed":false,"internalType":"string","name":"buyer","type":"string"}],"name":"PlotResourceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"plotIds","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"PlotTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"bool","name":"boughtWithCredits","type":"bool"}],"name":"PlotsBought","type":"event"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"acceptOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"addReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"internalType":"uint256[]","name":"singleDiscountIndexes","type":"uint256[]"},{"internalType":"uint256[]","name":"multiDiscountIndexes","type":"uint256[]"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyPlots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"internalType":"enum LandSaleCore.Rarity","name":"creditRarity","type":"uint8"}],"name":"buyWithCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"canRefer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"offerIndex","type":"uint256"}],"name":"cancelOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"delist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBeneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"getClaimableEscrow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCreatorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getCurrentBid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDutchDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDutchMinMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"getDutchPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDutchStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getIsListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getListedInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getListedPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMigrationLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumPlotsSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getOffers","outputs":[{"components":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"bool","name":"cancelled","type":"bool"}],"internalType":"struct LandSaleMarket.Offer[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOwnedPlotRarities","outputs":[{"components":[{"internalType":"uint32","name":"common","type":"uint32"},{"internalType":"uint32","name":"rare","type":"uint32"},{"internalType":"uint32","name":"epic","type":"uint32"},{"internalType":"uint32","name":"harb","type":"uint32"},{"internalType":"uint32","name":"premium","type":"uint32"}],"internalType":"struct Plots.OwnedPlotRarities","name":"ownedPlotRarities","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOwnedPlots","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPausedSales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPausedTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getPlotAvailability","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getPlotData","outputs":[{"components":[{"internalType":"uint8","name":"cyber","type":"uint8"},{"internalType":"uint8","name":"steampunk","type":"uint8"},{"internalType":"uint8","name":"wind","type":"uint8"},{"internalType":"uint8","name":"volcano","type":"uint8"},{"internalType":"uint8","name":"fire","type":"uint8"},{"internalType":"uint8","name":"water","type":"uint8"},{"internalType":"uint8","name":"necro","type":"uint8"},{"internalType":"uint8","name":"mecha","type":"uint8"},{"internalType":"uint8","name":"dragon","type":"uint8"},{"internalType":"uint8","name":"meadow","type":"uint8"},{"internalType":"uint8","name":"isShore","type":"uint8"},{"internalType":"uint8","name":"isIsland","type":"uint8"},{"internalType":"uint8","name":"isMountainFoot","type":"uint8"},{"internalType":"enum LandSaleCore.Rarity","name":"rarity","type":"uint8"},{"internalType":"enum LandSaleCore.Entropy","name":"entropy","type":"uint8"}],"internalType":"struct Plots.PlotData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPlotDataLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getPlotOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"}],"name":"getPlotOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"}],"name":"getPlotResource","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"}],"name":"getPlotResourceBatch","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricesPerRarity","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"internalType":"uint256[]","name":"singleDiscountIndexes","type":"uint256[]"},{"internalType":"uint256[]","name":"multiDiscountIndexes","type":"uint256[]"}],"name":"getPurchasePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReferralIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReferralMinCommonPlots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUserDataAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhiteListPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getXcRMRK","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"isReferrer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"list","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"makeOffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"}],"name":"migratePlotOwners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"xcRmrkPlotIds","type":"uint256[]"},{"internalType":"uint256[]","name":"singleDiscountIndexes","type":"uint256[]"},{"internalType":"uint256[]","name":"multiDiscountIndexes","type":"uint256[]"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256[]","name":"creditsPlotIds","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"commonCredits","type":"uint256"},{"internalType":"uint256","name":"rareCredits","type":"uint256"},{"internalType":"uint256","name":"epicCredits","type":"uint256"},{"internalType":"uint256","name":"premiumCredits","type":"uint256"}],"internalType":"struct LandSaleCore.UserCredits","name":"userCredits","type":"tuple"}],"name":"mixBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"removeReferrer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnEscrowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"revokeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"creatorFee","type":"uint256"}],"name":"setCreatorFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"multiplier","type":"uint256"}],"name":"setDutchConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPausedSales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPausedTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"components":[{"internalType":"uint8","name":"cyber","type":"uint8"},{"internalType":"uint8","name":"steampunk","type":"uint8"},{"internalType":"uint8","name":"wind","type":"uint8"},{"internalType":"uint8","name":"volcano","type":"uint8"},{"internalType":"uint8","name":"fire","type":"uint8"},{"internalType":"uint8","name":"water","type":"uint8"},{"internalType":"uint8","name":"necro","type":"uint8"},{"internalType":"uint8","name":"mecha","type":"uint8"},{"internalType":"uint8","name":"dragon","type":"uint8"},{"internalType":"uint8","name":"meadow","type":"uint8"},{"internalType":"uint8","name":"isShore","type":"uint8"},{"internalType":"uint8","name":"isIsland","type":"uint8"},{"internalType":"uint8","name":"isMountainFoot","type":"uint8"},{"internalType":"enum LandSaleCore.Rarity","name":"rarity","type":"uint8"},{"internalType":"enum LandSaleCore.Entropy","name":"entropy","type":"uint8"}],"internalType":"struct Plots.PlotData","name":"plotData","type":"tuple"}],"name":"setPlotData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setPlotDataLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"components":[{"internalType":"uint8","name":"cyber","type":"uint8"},{"internalType":"uint8","name":"steampunk","type":"uint8"},{"internalType":"uint8","name":"wind","type":"uint8"},{"internalType":"uint8","name":"volcano","type":"uint8"},{"internalType":"uint8","name":"fire","type":"uint8"},{"internalType":"uint8","name":"water","type":"uint8"},{"internalType":"uint8","name":"necro","type":"uint8"},{"internalType":"uint8","name":"mecha","type":"uint8"},{"internalType":"uint8","name":"dragon","type":"uint8"},{"internalType":"uint8","name":"meadow","type":"uint8"},{"internalType":"uint8","name":"isShore","type":"uint8"},{"internalType":"uint8","name":"isIsland","type":"uint8"},{"internalType":"uint8","name":"isMountainFoot","type":"uint8"},{"internalType":"enum LandSaleCore.Rarity","name":"rarity","type":"uint8"},{"internalType":"enum LandSaleCore.Entropy","name":"entropy","type":"uint8"}],"internalType":"struct Plots.PlotData[]","name":"plotsData","type":"tuple[]"}],"name":"setPlotDataMulti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"string","name":"imgData","type":"string"}],"name":"setPlotResource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setReferralIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minCommonPlots","type":"uint256"}],"name":"setReferralMinCommonPlots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setUserDataAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"phaseId","type":"uint256"}],"name":"setWhitelistPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setxcRMRK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"plotIds","type":"uint256[]"},{"internalType":"uint256","name":"commonCredits","type":"uint256"},{"internalType":"uint256","name":"rareCredits","type":"uint256"},{"internalType":"uint256","name":"epicCredits","type":"uint256"},{"internalType":"uint256","name":"premiumCredits","type":"uint256"}],"name":"smartBuyWithCredits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052620186a0600c553480156200001857600080fd5b50604051620061b2380380620061b28339810160408190526200003b9162000191565b600080546001600160a01b031916331790558383836402540be4008311620000aa5760405162461bcd60e51b815260206004820152601f60248201527f436f6d6d6f6e207072696365206d757374206265203e2031207863524d524b0060448201526064015b60405180910390fd5b6402540be4008211620001005760405162461bcd60e51b815260206004820152601d60248201527f52617265207072696365206d757374206265203e2031207863524d524b0000006044820152606401620000a1565b6402540be4008111620001565760405162461bcd60e51b815260206004820152601d60248201527f45706963207072696365206d757374206265203e2031207863524d524b0000006044820152606401620000a1565b60809290925260a05260c052600d805460ff19166001179055600a600e5560135550506012805461010161ffff1990911617905550620001c8565b60008060008060808587031215620001a857600080fd5b505082516020840151604085015160609095015191969095509092509050565b60805160a05160c051615fa56200020d6000396000818161046601526146fc01526000818161044001526146b601526000818161041d01526146700152615fa56000f3fe608060405234801561001057600080fd5b50600436106104125760003560e01c80638708c55e11610220578063d21c694811610130578063e5e06d45116100b8578063f2fde38b11610087578063f2fde38b14610a13578063f38ced4714610a26578063f48dab7014610a31578063fefa9bb114610a44578063ff39a2ea14610a5757600080fd5b8063e5e06d45146109ba578063e63c88dc146109cd578063f0b3300f146109e0578063f2b0a55d146109f357600080fd5b8063d64d6968116100ff578063d64d696814610935578063d6febde814610961578063da4e364f14610974578063dd9e9dc814610987578063dfa49e6f1461099a57600080fd5b8063d21c6948146108f4578063d2839e79146108fc578063d3a8c4ec1461090f578063d45557cc1461092257600080fd5b8063a718d525116101b3578063b79df7e111610182578063b79df7e11461082a578063bc138fe014610853578063be0800251461086f578063c0ea1f1114610882578063c1744fd81461089557600080fd5b8063a718d525146107de578063b3de019c146107f1578063b673344014610804578063b7760c8f1461081757600080fd5b8063964bc33f116101ef578063964bc33f1461076f578063992274b114610782578063a11b6fbb14610795578063a1f45dd6146107b557600080fd5b80638708c55e14610718578063877850ef1461072b5780638927e6271461073e578063893d20e81461075e57600080fd5b80632d34567011610326578063565a2e2c116102ae578063635335231161027d57806363533523146106be57806370480275146106ce57806379bd6cf9146106e15780637a00e2e3146106f2578063864ca4851461070557600080fd5b8063565a2e2c1461067f5780635a5b0f56146106905780635c09d628146106985780635f53e077146106ab57600080fd5b806342434134116102f55780634243413414610636578063450d996a1461063e57806347831ac01461065157806350fd736714610659578063549458d41461066c57600080fd5b80632d345670146105e55780633bb9fcab146105f85780633db7a49f1461060b5780633e1042191461061657600080fd5b8063142a6fca116103a95780631e4a8116116103785780631e4a81161461057957806324d7806c1461058c57806326394dbd1461059f5780632a46841f146105ca5780632c92f9bc146105d257600080fd5b8063142a6fca14610509578063194a9716146105295780631c31f7101461055b5780631da66c271461056e57600080fd5b80630dd16fd5116103e55780630dd16fd5146104c85780630e15166e146104db5780630fc0482a146104ee57806311ea8857146104f657600080fd5b8063012a53311461041757806301d3f03b14610499578063024463c1146104ab57806305b7cdd3146104b3575b600080fd5b604080517f000000000000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091526060015b60405180910390f35b600a545b604051908152602001610490565b600c5461049d565b6104c66104c1366004614cdb565b610a67565b005b6104c66104d6366004614cfd565b610e5b565b6104c66104e9366004614d24565b610e99565b6104c6610ee5565b61049d610504366004614ea5565b610f2f565b61051c610517366004614cfd565b610f4a565b6040516104909190614f96565b61054b610537366004614cfd565b600090815260146020526040902054151590565b6040519015158152602001610490565b6104c6610569366004614fa9565b610fec565b60125460ff1661054b565b6104c6610587366004614fd1565b611047565b61054b61059a366004614fa9565b61159d565b6006546201000090046001600160a01b03165b6040516001600160a01b039091168152602001610490565b6104c66115bc565b6104c66105e0366004615027565b6116d6565b6104c66105f3366004614fa9565b611766565b6104c6610606366004615053565b6117aa565b60065460ff1661054b565b610629610624366004614fa9565b6118e2565b6040516104909190615112565b600e5461049d565b6104c661064c366004615156565b61194d565b60095461049d565b6104c6610667366004614cdb565b6119cb565b6104c661067a366004614fa9565b611b5d565b6007546001600160a01b03166105b2565b60135461049d565b6104c66106a6366004614fa9565b611bc0565b6104c66106b9366004614d24565b611c1b565b601254610100900460ff1661054b565b6104c66106dc366004614fa9565b611c6e565b6008546001600160a01b03166105b2565b6104c6610700366004614fa9565b611d0b565b6104c6610713366004614cfd565b611d5e565b6104c6610726366004614d24565b611d9c565b6104c6610739366004614cfd565b611de8565b61075161074c366004615200565b611e66565b604051610490919061523c565b6000546001600160a01b03166105b2565b6104c661077d366004614cfd565b611fae565b6104c661079036600461529e565b612023565b6107a86107a3366004615200565b61209f565b60405161049091906152ff565b6105b26107c3366004614cfd565b6000908152600360205260409020546001600160a01b031690565b6104c66107ec366004615340565b61216d565b6104c66107ff366004614cdb565b612202565b6104c66108123660046153de565b61230b565b6104c6610825366004615478565b612452565b61049d610838366004614fa9565b6001600160a01b031660009081526016602052604090205490565b601054600f545b60408051928352602083019190915201610490565b6104c661087d366004614d24565b61264d565b61054b610890366004614cfd565b612699565b6108a86108a3366004614fa9565b612727565b6040516104909190815163ffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b600b5461049d565b61054b61090a366004614fa9565b612803565b61049d61091d366004614cfd565b6128dc565b6104c6610930366004614cdb565b6128ed565b61054b610943366004614fa9565b6001600160a01b031660009081526011602052604090205460011490565b6104c661096f366004614cdb565b612b13565b61049d610982366004614cfd565b612e0b565b6104c66109953660046154bc565b612f2c565b6109ad6109a8366004614cfd565b612fbf565b60405161049091906155a5565b61085a6109c8366004614cfd565b613061565b6104c66109db366004615027565b6130bc565b6104c66109ee366004615614565b6133fd565b610a06610a01366004614cfd565b6134a3565b6040516104909190615688565b6104c6610a21366004614fa9565b61367d565b600d5460ff1661054b565b61049d610a3f366004614cfd565b61371f565b6104c6610a52366004614fa9565b61374b565b600654610100900460ff1661054b565b60125460ff1615610a935760405162461bcd60e51b8152600401610a8a9061579f565b60405180910390fd5b60008111610ae35760405162461bcd60e51b815260206004820152601b60248201527f5072696365206d75737420626520686967686572207468616e203000000000006044820152606401610a8a565b6000828152600360205260409020546001600160a01b0316338103610b3f5760405162461bcd60e51b81526020600482015260126024820152712ab9b2b91034b9903630b7321037bbb732b960711b6044820152606401610a8a565b6001600160a01b038116610b895760405162461bcd60e51b8152602060048201526011602482015270506c6f74206e6f742073656c6c61626c6560781b6044820152606401610a8a565b6004600084815260026020526040902054600160681b900460ff166005811115610bb557610bb561564e565b03610c025760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206f66666572206f6e20486172626572676572206c616e6400006044820152606401610a8a565b6000838152601460205260409020548015610c6657808310610c665760405162461bcd60e51b815260206004820152601760248201527f4f66666572206f766572206c69737465642070726963650000000000000000006044820152606401610a8a565b600654604051636eb1769f60e11b8152336004820152306024820152620100009091046001600160a01b0316908490829063dd62ed3e90604401602060405180830381865afa158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce191906157c9565b1015610d265760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f75676820616c6c6f77616e636560601b6044820152606401610a8a565b60408051608081018252338082526020808301888152428486019081526000606086018181528c825260158552878220805460018082018355918452959092208751600496870290910180546001600160a01b0319166001600160a01b039283161781559451928501929092559151600284015590516003909201805460ff19169215159290921790915593516323b872dd60e01b815292938516926323b872dd92610dd892909130918b91016157e2565b6020604051808303816000875af1158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190615811565b50604051858152339087907fbdf1e76c2ba2a5c85b93bf78678a4a3b06d63b18422612dac8d7d5249ed467149060200160405180910390a3505050505050565b6000546001600160a01b0316331480610e785750610e783361159d565b610e945760405162461bcd60e51b8152600401610a8a9061582e565b601355565b6000546001600160a01b0316331480610eb65750610eb63361159d565b610ed25760405162461bcd60e51b8152600401610a8a9061582e565b6012805460ff1916911515919091179055565b6000546001600160a01b0316331480610f025750610f023361159d565b610f1e5760405162461bcd60e51b8152600401610a8a9061582e565b6006805461ff001916610100179055565b6000610f3f8787878787876137f7565b979650505050505050565b6000818152600460205260409020805460609190610f6790615865565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9390615865565b8015610fe05780601f10610fb557610100808354040283529160200191610fe0565b820191906000526020600020905b815481529060010190602001808311610fc357829003601f168201915b50505050509050919050565b6000546001600160a01b031633148061100957506110093361159d565b6110255760405162461bcd60e51b8152600401610a8a9061582e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b15801561109557600080fd5b505afa1580156110a9573d6000803e3d6000fd5b508492505050806110cc5760405162461bcd60e51b8152600401610a8a90615899565b600854604051637bfb039f60e11b81526000916001600160a01b03169063f7f6073e906110ff90339087906004016158c2565b602060405180830381865afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114091906157c9565b9050818110156111925760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f756768206372656469747320696e206163636f756e740000006044820152606401610a8a565b60008060008060006111d68a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061395592505050565b9450945094509450945081816111ec91906158f5565b60009250905060018860058111156112065761120661564e565b036112fd5786851461124e5760405162461bcd60e51b81526020600482015260116024820152704f6e6c7920636f6d6d6f6e206c616e647360781b6044820152606401610a8a565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed906112879033908b906000908190819060040161590d565b600060405180830381600087803b1580156112a157600080fd5b505af11580156112b5573d6000803e3d6000fd5b505050506112f88a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925060019150613b459050565b611591565b60028860058111156113115761131161564e565b036113a7578661132185876158f5565b1461136e5760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920636f6d6d6f6e206f722072617265206c616e6473000000000000006044820152606401610a8a565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed906112879033906000908c908290819060040161590d565b60038860058111156113bb576113bb61564e565b0361145c5786836113cc86886158f5565b6113d691906158f5565b146114235760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920636f6d6d6f6e2c2072617265206f722065706963206c616e6473006044820152606401610a8a565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed9061128790339060009081908d90829060040161590d565b60058860058111156114705761147061564e565b14801561149b575086818461148587896158f5565b61148f91906158f5565b61149991906158f5565b145b6114e75760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564206372656469742072617269747900000000000000006044820152606401610a8a565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed90611520903390600090819081908e9060040161590d565b600060405180830381600087803b15801561153a57600080fd5b505af115801561154e573d6000803e3d6000fd5b505050506115918a8a808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925060019150613b459050565b50505050505050505050565b6001600160a01b03166000908152600160208190526040909120541490565b336000908152601660205260409020548061160f5760405162461bcd60e51b815260206004820152601360248201527227379032b9b1b937bb903a37903932ba3ab93760691b6044820152606401610a8a565b3360008181526016602052604080822091909155600654905163a9059cbb60e01b81526004810192909252602482018390526201000090046001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169d9190615811565b5060405181815233907fbf1a0ef092ef679427b427c6a95d51133522541e667b737b795a77f2b61c240d9060200160405180910390a250565b6000546001600160a01b03163314806116f357506116f33361159d565b61170f5760405162461bcd60e51b8152600401610a8a9061582e565b620f424081106117585760405162461bcd60e51b81526020600482015260146024820152732b30b63ab29037bb32b910383932b1b4b9b4b7b760611b6044820152606401610a8a565b600a92909255600b55600c55565b6000546001600160a01b031633146117905760405162461bcd60e51b8152600401610a8a9061593b565b6001600160a01b0316600090815260016020526040812055565b6000546001600160a01b03163314806117c757506117c73361159d565b6117e35760405162461bcd60e51b8152600401610a8a9061582e565b600654610100900460ff161561183b5760405162461bcd60e51b815260206004820152601760248201527f4d6967726174696f6e206973206e6f77206c6f636b65640000000000000000006044820152606401610a8a565b81518151811461188d5760405162461bcd60e51b815260206004820181905260248201527f417272617973206d7573742068617665207468652073616d65206c656e6774686044820152606401610a8a565b60005b818110156118dc576118d48482815181106118ad576118ad615967565b60200260200101518483815181106118c7576118c7615967565b6020026020010151613c6a565b600101611890565b50505050565b6001600160a01b038116600090815260056020908152604091829020805483518184028101840190945280845260609392830182828015610fe057602002820191906000526020600020905b81548152602001906001019080831161192e5750505050509050919050565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b15801561199b57600080fd5b505afa1580156119af573d6000803e3d6000fd5b505050506119c287878787878787613cb6565b50505050505050565b60008281526003602052604090205482906001600160a01b03163314611a035760405162461bcd60e51b8152600401610a8a9061597d565b60125460ff1615611a265760405162461bcd60e51b8152600401610a8a9061579f565b60008211611a765760405162461bcd60e51b815260206004820152601c60248201527f5072696365206d7573742062652067726561746572207468616e2030000000006044820152606401610a8a565b6004600084815260026020526040902054600160681b900460ff166005811115611aa257611aa261564e565b03611aef5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206c69737420486172626572676572206c616e640000000000006044820152606401610a8a565b60408051808201825283815242602080830191825260008781526014909152839020915182555160019091015551339084907f7f5dd6779248014167a5e507bf4a6edb7c0985fd0eb2fe89412fe3783a4b133090611b509086815260200190565b60405180910390a3505050565b6000546001600160a01b0316331480611b7a5750611b7a3361159d565b611b965760405162461bcd60e51b8152600401610a8a9061582e565b600680546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6000546001600160a01b0316331480611bdd5750611bdd3361159d565b611bf95760405162461bcd60e51b8152600401610a8a9061582e565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480611c385750611c383361159d565b611c545760405162461bcd60e51b8152600401610a8a9061582e565b601280549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314611c985760405162461bcd60e51b8152600401610a8a9061593b565b6001600160a01b038116611cee5760405162461bcd60e51b815260206004820181905260248201527f41646d696e2063616e6e6f7420626520746865207a65726f20616464726573736044820152606401610a8a565b6001600160a01b0316600090815260016020819052604090912055565b6000546001600160a01b0316331480611d285750611d283361159d565b611d445760405162461bcd60e51b8152600401610a8a9061582e565b6001600160a01b0316600090815260116020526040812055565b6000546001600160a01b0316331480611d7b5750611d7b3361159d565b611d975760405162461bcd60e51b8152600401610a8a9061582e565b600e55565b6000546001600160a01b0316331480611db95750611db93361159d565b611dd55760405162461bcd60e51b8152600401610a8a9061582e565b6006805460ff1916911515919091179055565b6000546001600160a01b0316331480611e055750611e053361159d565b611e215760405162461bcd60e51b8152600401610a8a9061582e565b6005811115611e615760405162461bcd60e51b815260206004820152600c60248201526b109859081c1a185cd9481a5960a21b6044820152606401610a8a565b600955565b80516060906000816001600160401b03811115611e8557611e85614d5d565b604051908082528060200260200182016040528015611eb857816020015b6060815260200190600190039081611ea35790505b50905060005b82811015611fa6576000858281518110611eda57611eda615967565b60200260200101519050600460008281526020019081526020016000208054611f0290615865565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2e90615865565b8015611f7b5780601f10611f5057610100808354040283529160200191611f7b565b820191906000526020600020905b815481529060010190602001808311611f5e57829003601f168201915b5050505050838381518110611f9257611f92615967565b602090810291909101015250600101611ebe565b509392505050565b60008181526003602052604090205481906001600160a01b03163314611fe65760405162461bcd60e51b8152600401610a8a9061597d565b611ff282600019613fd3565b604051339083907f731e216f3c5263def1695d416b13f97a35d25331ad11ccb640d803ebd105f4e890600090a35050565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b15801561207157600080fd5b505afa158015612085573d6000803e3d6000fd5b5050505061209786868686868661414b565b505050505050565b80516060906000816001600160401b038111156120be576120be614d5d565b6040519080825280602002602001820160405280156120e7578160200160208202803683370190505b50905060005b82811015611fa657600085828151811061210957612109615967565b602002602001015190506003600082815260200190815260200160002060009054906101000a90046001600160a01b031683838151811061214c5761214c615967565b6001600160a01b0390921660209283029190910190910152506001016120ed565b60008281526003602052604090205482906001600160a01b031633146121a55760405162461bcd60e51b8152600401610a8a9061597d565b600083815260046020908152604090912083516121c492850190614be5565b50827f98a3c3986b7677c879cb2d25ed860fa739755d655ee07fd9582d82a343200874836040516121f59190614f96565b60405180910390a2505050565b60008281526003602052604090205482906001600160a01b0316331461223a5760405162461bcd60e51b8152600401610a8a9061597d565b6000821161228a5760405162461bcd60e51b815260206004820152601c60248201527f5072696365206d7573742062652067726561746572207468616e2030000000006044820152606401610a8a565b600083815260146020526040902054806122b65760405162461bcd60e51b8152600401610a8a906159ad565b6000848152601460209081526040918290208590558151838152908101859052339186917fe4e96eded0c1652afb311b4f5a4d768a48f1544ae888996bedc732c85778061e910160405180910390a350505050565b6000546001600160a01b031633148061232857506123283361159d565b6123445760405162461bcd60e51b8152600401610a8a9061582e565b60065460ff16156123975760405162461bcd60e51b815260206004820152601b60248201527f506c6f74206461746120736574746572206973206c6f636b65642e00000000006044820152606401610a8a565b828181146123e75760405162461bcd60e51b815260206004820181905260248201527f417272617973206d7573742068617665207468652073616d65206c656e6774686044820152606401610a8a565b60005b8181101561209757600086868381811061240657612406615967565b90506020020135905084848381811061242157612421615967565b90506101e002016002600083815260200190815260200160002081816124479190615a5c565b5050506001016123ea565b60008281526003602052604090205482906001600160a01b0316331461248a5760405162461bcd60e51b8152600401610a8a9061597d565b336001600160a01b038316036124e25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610a8a565b601254610100900460ff16156125315760405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c9cc8185c99481c185d5cd95960621b6044820152606401610a8a565b6000838152601460205260409020541561258d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207472616e73666572206c697374656420706c6f7400000000006044820152606401610a8a565b6004600084815260026020526040902054600160681b900460ff1660058111156125b9576125b961564e565b036126065760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207472616e7366657220486172626572676572206c616e6400006044820152606401610a8a565b612610828461438a565b6040516001600160a01b03831690339085907f370ed8b5aeb5adcdf0f4852ad764fd28ca4cc2a9d744446d05da996594ea6aa490600090a4505050565b6000546001600160a01b031633148061266a575061266a3361159d565b6126865760405162461bcd60e51b8152600401610a8a9061582e565b600d805460ff1916911515919091179055565b600080600083815260026020526040902054600160681b900460ff1660058111156126c6576126c661564e565b0361270a5760405162461bcd60e51b8152602060048201526014602482015273141b1bdd081b9bdd081a5b9a5d1a585b1a5e995960621b6044820152606401610a8a565b506000908152600360205260409020546001600160a01b03161590565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526001600160a01b0382166000908152600560209081526040808320805482518185028101850190935280835284938493849384936127c3938301828280156127b957602002820191906000526020600020905b8154815260200190600101908083116127a5575b5050505050613955565b6040805160a08101825263ffffffff9687168152948616602086015292851692840192909252831660608301529091166080820152979650505050505050565b6001600160a01b03811660009081526011602052604081205460010361282b57506001919050565b6001600160a01b038216600090815260056020908152604080832080548251818502810185019093528083528493849361289a93909290918301828280156127b957602002820191906000526020600020908154815260200190600101908083116127a5575050505050613955565b5050925092509250600e548160056128b29190615cca565b6128bd846003615cca565b6128c790866158f5565b6128d191906158f5565b101595945050505050565b60006128e78261458c565b92915050565b60008281526015602052604090205481106129455760405162461bcd60e51b81526020600482015260186024820152774f6666657220696e646578206f7574206f662072616e676560401b6044820152606401610a8a565b600082815260156020526040812080548390811061296557612965615967565b600091825260209182902060408051608081018252600490930290910180546001600160a01b03168084526001820154948401949094526002810154918301919091526003015460ff161515606082015291503314612a065760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f74206f66666572206f776e65720000000000000000006044820152606401610a8a565b806060015115612a525760405162461bcd60e51b815260206004820152601760248201527613d999995c88185b1c9958591e4818d85b98d95b1b1959604a1b6044820152606401610a8a565b60208082015182516001600160a01b03166000908152601690925260408220805491929091612a829084906158f5565b9091555050600083815260156020526040902080546001919084908110612aab57612aab615967565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550336001600160a01b0316837fe2dc0bfd2fc658db980184c3f7c091c2f886874e896043b562d5099c8d95b1dd8360200151604051611b5091815260200190565b60125460ff1615612b365760405162461bcd60e51b8152600401610a8a9061579f565b6000828152601460209081526040918290208251808401909352805480845260019091015491830191909152612b7e5760405162461bcd60e51b8152600401610a8a906159ad565b6006548151604051636eb1769f60e11b8152336004820152306024820152620100009092046001600160a01b031691829063dd62ed3e90604401602060405180830381865afa158015612bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf991906157c9565b1015612c3e5760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f75676820616c6c6f77616e636560601b6044820152606401610a8a565b81518314612c855760405162461bcd60e51b81526020600482015260146024820152730a0e4d2c6ca40c8decae640dcdee840dac2e8c6d60631b6044820152606401610a8a565b612c9184600019613fd3565b6000848152600360205260409020546001600160a01b0316612cb3338661438a565b600080612cc38560000151614612565b6040516323b872dd60e01b815291935091506001600160a01b038516906323b872dd90612cf8903390879087906004016157e2565b6020604051808303816000875af1158015612d17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3b9190615811565b506007546040516323b872dd60e01b81526001600160a01b03808716926323b872dd92612d70923392169086906004016157e2565b6020604051808303816000875af1158015612d8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db39190615811565b50336001600160a01b0316836001600160a01b0316887f78e40a3f168941f73efe6fbf315c11eca5de75a6575fd334ffa4f1801a05322389604051612dfa91815260200190565b60405180910390a450505050505050565b600081815260156020908152604080832080548251818502810185019093528083528493849084015b82821015612e96576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460ff16151560608301529083529092019101612e34565b5050505090506000815190506000805b82811015612f2357838181518110612ec057612ec0615967565b602002602001015160600151158015612ef5575081848281518110612ee757612ee7615967565b602002602001015160200151115b15612f1b57838181518110612f0c57612f0c615967565b60200260200101516020015191505b600101612ea6565b50949350505050565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b158015612f7a57600080fd5b505afa158015612f8e573d6000803e3d6000fd5b50505050612fb08383836000013584602001358560400135866060013561414b565b6115918a8a8a8a8a8a8a613cb6565b606060156000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015613056576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460ff16151560608301529083529092019101612ff4565b505050509050919050565b6000818152601460209081526040808320815180830190925280548083526001909101549282019290925282916130aa5760405162461bcd60e51b8152600401610a8a906159ad565b80516020909101519094909350915050565b60008381526003602052604090205483906001600160a01b031633146130f45760405162461bcd60e51b8152600401610a8a9061597d565b60125460ff16156131175760405162461bcd60e51b8152600401610a8a9061579f565b600084815260156020526040902054831061316f5760405162461bcd60e51b81526020600482015260186024820152774f6666657220696e646578206f7574206f662072616e676560401b6044820152606401610a8a565b600084815260156020526040812080548590811061318f5761318f615967565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460ff1615801560608301529091506132285760405162461bcd60e51b815260206004820152601760248201527613d999995c88185b1c9958591e4818d85b98d95b1b1959604a1b6044820152606401610a8a565b828160200151146132725760405162461bcd60e51b81526020600482015260146024820152730a0e4d2c6ca40c8decae640dcdee840dac2e8c6d60631b6044820152606401610a8a565b61327c8585613fd3565b8051613288908661438a565b6000600660029054906101000a90046001600160a01b031690506000806132b28460200151614612565b60405163a9059cbb60e01b81523360048201526024810183905291935091506001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015613304573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133289190615811565b5060075460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529084169063a9059cbb906044016020604051808303816000875af115801561337c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a09190615811565b5083600001516001600160a01b0316336001600160a01b0316897f78e40a3f168941f73efe6fbf315c11eca5de75a6575fd334ffa4f1801a053223896040516133eb91815260200190565b60405180910390a45050505050505050565b6000546001600160a01b031633148061341a575061341a3361159d565b6134365760405162461bcd60e51b8152600401610a8a9061582e565b60065460ff16156134895760405162461bcd60e51b815260206004820152601b60248201527f506c6f74206461746120736574746572206973206c6f636b65642e00000000006044820152606401610a8a565b600082815260026020526040902081906118dc8282615a5c565b613521604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018290526101808101829052906101a082019081526020016000905290565b60008281526002602090815260409182902082516101e081018452815460ff80821683526101008083048216958401959095526201000082048116958301959095526301000000810485166060830152640100000000810485166080830152650100000000008104851660a083015266010000000000008104851660c08301526701000000000000008104851660e0830152680100000000000000008104851693820193909352690100000000000000000083048416610120820152600160501b83048416610140820152600160581b83048416610160820152600160601b830484166101808201529290916101a0840191600160681b90910416600581111561362d5761362d61564e565b600581111561363e5761363e61564e565b81528154602090910190600160701b900460ff1660068111156136635761366361564e565b60068111156136745761367461564e565b90525092915050565b6000546001600160a01b031633146136a75760405162461bcd60e51b8152600401610a8a9061593b565b6001600160a01b0381166136fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420626520746865207a65726f20616464726573736044820152606401610a8a565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260146020526040812054806128e75760405162461bcd60e51b8152600401610a8a906159ad565b6000546001600160a01b031633148061376857506137683361159d565b6137845760405162461bcd60e51b8152600401610a8a9061582e565b6001600160a01b0381166137da5760405162461bcd60e51b815260206004820181905260248201527f52656665727265722063616e6e6f7420626520746865203020616464726573736044820152606401610a8a565b6001600160a01b0316600090815260116020526040902060019055565b84516000908415806138095750806001145b6138555760405162461bcd60e51b815260206004820181905260248201527f5573652073696e676c6520646973636f756e74732077697468203120706c6f746044820152606401610a8a565b6008546040516315b6e8ab60e01b815260009182916001600160a01b03909116906315b6e8ab90613892908d908c908c908c908c90600401615d1f565b600060405180830381865afa1580156138af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138d79190810190615d7a565b905060005b838110156139315760006139088b83815181106138fb576138fb615967565b60200260200101516134a3565b90506000613916828561464c565b905061392281866158f5565b945082600101925050506138dc565b50600954600503613948576139458261458c565b91505b5098975050505050505050565b60008060008060008060008060008060008b51905060005b81811015613b325760008d828151811061398957613989615967565b60200260200101519050600160058111156139a6576139a661564e565b600082815260026020526040902054600160681b900460ff1660058111156139d0576139d061564e565b036139e7576139e06001896158f5565b9750613b29565b6002600082815260026020526040902054600160681b900460ff166005811115613a1357613a1361564e565b03613a2a57613a236001886158f5565b9650613b29565b6003600082815260026020526040902054600160681b900460ff166005811115613a5657613a5661564e565b03613a6d57613a666001876158f5565b9550613b29565b6004600082815260026020526040902054600160681b900460ff166005811115613a9957613a9961564e565b03613ab057613aa96001866158f5565b9450613b29565b6005600082815260026020526040902054600160681b900460ff166005811115613adc57613adc61564e565b14613b1b5760405162461bcd60e51b815260206004820152600f60248201526e426164206c616e642072617269747960881b6044820152606401610a8a565b613b266001856158f5565b93505b5060010161396d565b50949b939a509198509650945092505050565b825160005b81811015613bd8576000858281518110613b6657613b66615967565b60200260200101519050613b7981612699565b613bc55760405162461bcd60e51b815260206004820152601f60248201527f524d524b204c616e6473616c653a20506c6f7420756e617661696c61626c65006044820152606401610a8a565b613bcf338261438a565b50600101613b4a565b508115613bfd578351600f6000828254613bf291906158f5565b90915550613c169050565b835160106000828254613c1091906158f5565b90915550505b811515836001600160a01b0316336001600160a01b03167f8ab30b0cba3d3325d957c283bcd2f5ac70efe38245303058259d4c9dbb7d432187604051613c5c9190615112565b60405180910390a450505050565b600081815260036020908152604080832080546001600160a01b039096166001600160a01b03199096168617905593825260058152928120805460018101825590825292902090910155565b85613cd35760405162461bcd60e51b8152600401610a8a90615899565b6000613d18338989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b92508a9150899050886137f7565b6008546040516329523dbb60e11b81529192506001600160a01b0316906352a47b7690613d519033908a908a908a908a90600401615d1f565b600060405180830381600087803b158015613d6b57600080fd5b505af1158015613d7f573d6000803e3d6000fd5b505050506000613d8e83614b0c565b15613eb457600080613d9f84614b50565b6006546040516323b872dd60e01b81529294509092506201000090046001600160a01b0316906323b872dd90613ddd903390899086906004016157e2565b6020604051808303816000875af1158015613dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e209190615811565b92508215613ead576006546007546040516323b872dd60e01b8152620100009092046001600160a01b03908116926323b872dd92613e6792339291169087906004016157e2565b6020604051808303816000875af1158015613e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eaa9190615811565b92505b5050613f3d565b6006546007546040516323b872dd60e01b815260009550620100009092046001600160a01b03908116926323b872dd92613ef792339291169087906004016157e2565b6020604051808303816000875af1158015613f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3a9190615811565b90505b80613f8a5760405162461bcd60e51b815260206004820152601e60248201527f4c616e6473616c653a205472616e7366657246726f6d206661696c75726500006044820152606401610a8a565b613fc889898080602002602001604051908101604052809392919081815260200183836020028082843760009201829052508893509150613b459050565b505050505050505050565b60008281526014602090815260408083208381556001018390556015825280832080548251818502810185019093528083529192909190849084015b82821015614071576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460ff1615156060830152908352909201910161400f565b5050825192935060009150505b818110156141335782818151811061409857614098615967565b6020026020010151606001511580156140b15750838114155b1561412b578281815181106140c8576140c8615967565b602002602001015160200151601660008584815181106140ea576140ea615967565b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461412591906158f5565b90915550505b60010161407e565b5060008481526015602052604081206118dc91614c69565b846141685760405162461bcd60e51b8152600401610a8a90615899565b60008060008060006141ac8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061395592505050565b9450945094509450945081816141c291906158f5565b905060009150888511156141fd576141da8986615f20565b6141e490856158f5565b93506141f08986615f20565b6141fa9086615f20565b94505b878411156142325761420f8885615f20565b61421990846158f5565b92506142258885615f20565b61422f9085615f20565b93505b86831115614267576142448784615f20565b61424e90826158f5565b905061425a8784615f20565b6142649084615f20565b92505b8489101580156142775750838810155b80156142835750828710155b801561428f5750808610155b6142d45760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da0818dc99591a5d1cc81cd95d60521b6044820152606401610a8a565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed9061430c903390899089908990889060040161590d565b600060405180830381600087803b15801561432657600080fd5b505af115801561433a573d6000803e3d6000fd5b5050505061437d8b8b808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250925060019150613b459050565b5050505050505050505050565b6000818152600360205260409020546001600160a01b03166143ac8383613c6a565b6001600160a01b03811615614587576001600160a01b03811660009081526005602090815260408083208054825181850281018501909352808352919290919083018282801561441b57602002820191906000526020600020905b815481526020019060010190808311614407575b50508351939450600019925060009150505b82811015614465578584828151811061444857614448615967565b60200260200101510361445d57809150614465565b60010161442d565b5080196144b45760405162461bcd60e51b815260206004820152601b60248201527f506c6f74206e6f7420666f756e6420696e206f6c64206f776e657200000000006044820152606401610a8a565b6144bf600183615f20565b8114614546576001600160a01b03841660009081526005602052604090206144e8600184615f20565b815481106144f8576144f8615967565b906000526020600020015460056000866001600160a01b03166001600160a01b03168152602001908152602001600020828154811061453957614539615967565b6000918252602090912001555b6001600160a01b038416600090815260056020526040902080548061456d5761456d615f37565b600190038181906000526020600020016000905590555050505b505050565b6000806145a261459a614b64565b600b54614b87565b600b549091506000906127106145b88483615f20565b6145c29190615cca565b6145cc9190615f4d565b6145d890612710615f20565b905060006145ec620f4240600c5484614b9f565b90506000620f42406145fe8784615cca565b6146089190615f4d565b9695505050505050565b6000806000620f4240601354856146299190615cca565b6146339190615f4d565b905060006146418286615f20565b959194509092505050565b600080806001856101a0015160058111156146695761466961564e565b03614696577f0000000000000000000000000000000000000000000000000000000000000000915061475c565b6002856101a0015160058111156146af576146af61564e565b036146dc577f0000000000000000000000000000000000000000000000000000000000000000915061475c565b6003856101a0015160058111156146f5576146f561564e565b03614722577f0000000000000000000000000000000000000000000000000000000000000000915061475c565b60405162461bcd60e51b815260206004820152600f60248201526e426164206c616e642072617269747960881b6044820152606401610a8a565b83516000819003614772578293505050506128e7565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101829052905b82811015614ad75786818151811061480657614806615967565b60200260200101519150816101c0015115614837578151614830906001600160801b0316856158f5565b9350614acf565b6028886000015160ff1611801561484f575081602001515b15614869578151614830906001600160801b0316856158f5565b6028886020015160ff16118015614881575081604001515b1561489b578151614830906001600160801b0316856158f5565b6028886040015160ff161180156148b3575081606001515b156148cd578151614830906001600160801b0316856158f5565b6028886060015160ff161180156148e5575081608001515b156148ff578151614830906001600160801b0316856158f5565b6028886080015160ff1611801561491757508160a001515b15614931578151614830906001600160801b0316856158f5565b60288860a0015160ff1611801561494957508160c001515b15614963578151614830906001600160801b0316856158f5565b60288860c0015160ff1611801561497b57508160e001515b15614995578151614830906001600160801b0316856158f5565b60288860e0015160ff161180156149ae57508161010001515b156149c8578151614830906001600160801b0316856158f5565b602888610100015160ff161180156149e257508161012001515b156149fc578151614830906001600160801b0316856158f5565b602888610120015160ff16118015614a1657508161014001515b15614a30578151614830906001600160801b0316856158f5565b87610160015160ff166001148015614a4a57508161018001515b15614a64578151614830906001600160801b0316856158f5565b87610140015160ff166001148015614a7e57508161016001515b15614a98578151614830906001600160801b0316856158f5565b87610180015160ff166001148015614ab25750816101a001515b15614acf578151614acc906001600160801b0316856158f5565b93505b6001016147ec565b506207a120831115614aea576207a12092505b620f4240614af88482615f20565b614b029086615cca565b610f3f9190615f4d565b60006001600160a01b0382161580614b2c57506001600160a01b03821633145b80614b3a5750600d5460ff16155b15614b4757506000919050565b6128e782612803565b60008080620f424061462961c35086615cca565b600042600a5410614b755750600090565b600a54614b829042615f20565b905090565b600081831015614b985750816128e7565b50806128e7565b600080612710614baf8585615cca565b86614bbc86612710615f20565b614bc69190615cca565b614bd091906158f5565b614bda9190615f4d565b9150505b9392505050565b828054614bf190615865565b90600052602060002090601f016020900481019282614c135760008555614c59565b82601f10614c2c57805160ff1916838001178555614c59565b82800160010185558215614c59579182015b82811115614c59578251825591602001919060010190614c3e565b50614c65929150614c8d565b5090565b5080546000825560040290600052602060002090810190614c8a9190614ca2565b50565b5b80821115614c655760008155600101614c8e565b5b80821115614c655780546001600160a01b0319168155600060018201819055600282015560038101805460ff19169055600401614ca3565b60008060408385031215614cee57600080fd5b50508035926020909101359150565b600060208284031215614d0f57600080fd5b5035919050565b8015158114614c8a57600080fd5b600060208284031215614d3657600080fd5b8135614bde81614d16565b80356001600160a01b0381168114614d5857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6040516101e081016001600160401b0381118282101715614d9657614d96614d5d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614dc457614dc4614d5d565b604052919050565b60006001600160401b03821115614de557614de5614d5d565b5060051b60200190565b600082601f830112614e0057600080fd5b81356020614e15614e1083614dcc565b614d9c565b82815260059290921b84018101918181019086841115614e3457600080fd5b8286015b84811015614e4f5780358352918301918301614e38565b509695505050505050565b60008083601f840112614e6c57600080fd5b5081356001600160401b03811115614e8357600080fd5b6020830191508360208260051b8501011115614e9e57600080fd5b9250929050565b60008060008060008060808789031215614ebe57600080fd5b614ec787614d41565b955060208701356001600160401b0380821115614ee357600080fd5b614eef8a838b01614def565b96506040890135915080821115614f0557600080fd5b614f118a838b01614e5a565b90965094506060890135915080821115614f2a57600080fd5b50614f3789828a01614e5a565b979a9699509497509295939492505050565b6000815180845260005b81811015614f6f57602081850181015186830182015201614f53565b81811115614f81576000602083870101525b50601f01601f19169290920160200192915050565b602081526000614bde6020830184614f49565b600060208284031215614fbb57600080fd5b614bde82614d41565b60068110614c8a57600080fd5b600080600060408486031215614fe657600080fd5b83356001600160401b03811115614ffc57600080fd5b61500886828701614e5a565b909450925050602084013561501c81614fc4565b809150509250925092565b60008060006060848603121561503c57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561506657600080fd5b82356001600160401b038082111561507d57600080fd5b818501915085601f83011261509157600080fd5b813560206150a1614e1083614dcc565b82815260059290921b840181019181810190898411156150c057600080fd5b948201945b838610156150e5576150d686614d41565b825294820194908201906150c5565b965050860135925050808211156150fb57600080fd5b5061510885828601614def565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561514a5783518352928401929184019160010161512e565b50909695505050505050565b60008060008060008060006080888a03121561517157600080fd5b87356001600160401b038082111561518857600080fd5b6151948b838c01614e5a565b909950975060208a01359150808211156151ad57600080fd5b6151b98b838c01614e5a565b909750955060408a01359150808211156151d257600080fd5b506151df8a828b01614e5a565b90945092506151f2905060608901614d41565b905092959891949750929550565b60006020828403121561521257600080fd5b81356001600160401b0381111561522857600080fd5b61523484828501614def565b949350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561529157603f1988860301845261527f858351614f49565b94509285019290850190600101615263565b5092979650505050505050565b60008060008060008060a087890312156152b757600080fd5b86356001600160401b038111156152cd57600080fd5b6152d989828a01614e5a565b909a90995060208901359860408101359850606081013597506080013595509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561514a5783516001600160a01b03168352928401929184019160010161531b565b6000806040838503121561535357600080fd5b823591506020808401356001600160401b038082111561537257600080fd5b818601915086601f83011261538657600080fd5b81358181111561539857615398614d5d565b6153aa601f8201601f19168501614d9c565b915080825287848285010111156153c057600080fd5b80848401858401376000848284010152508093505050509250929050565b600080600080604085870312156153f457600080fd5b84356001600160401b038082111561540b57600080fd5b61541788838901614e5a565b9096509450602087013591508082111561543057600080fd5b818701915087601f83011261544457600080fd5b81358181111561545357600080fd5b8860206101e08302850101111561546957600080fd5b95989497505060200194505050565b6000806040838503121561548b57600080fd5b8235915061549b60208401614d41565b90509250929050565b6000608082840312156154b657600080fd5b50919050565b6000806000806000806000806000806101208b8d0312156154dc57600080fd5b8a356001600160401b03808211156154f357600080fd5b6154ff8e838f01614e5a565b909c509a5060208d013591508082111561551857600080fd5b6155248e838f01614e5a565b909a50985060408d013591508082111561553d57600080fd5b6155498e838f01614e5a565b909850965086915061555d60608e01614d41565b955060808d013591508082111561557357600080fd5b506155808d828e01614e5a565b909450925061559490508c60a08d016154a4565b90509295989b9194979a5092959850565b602080825282518282018190526000919060409081850190868401855b8281101561560757815180516001600160a01b0316855286810151878601528581015186860152606090810151151590850152608090930192908501906001016155c2565b5091979650505050505050565b60008082840361020081121561562957600080fd5b833592506101e0601f198201121561564057600080fd5b506020830190509250929050565b634e487b7160e01b600052602160045260246000fd5b600681106156745761567461564e565b9052565b600781106156745761567461564e565b815160ff1681526101e0810160208301516156a8602084018260ff169052565b5060408301516156bd604084018260ff169052565b5060608301516156d2606084018260ff169052565b5060808301516156e7608084018260ff169052565b5060a08301516156fc60a084018260ff169052565b5060c083015161571160c084018260ff169052565b5060e083015161572660e084018260ff169052565b506101008381015160ff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015182169084015261018080850151909116908301526101a08084015161578282850182615664565b50506101c08084015161579782850182615678565b505092915050565b60208082526010908201526f14d85b195cc8185c99481c185d5cd95960821b604082015260600190565b6000602082840312156157db57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b8051614d5881614d16565b60006020828403121561582357600080fd5b8151614bde81614d16565b6020808252601b908201527f55736572206973206e6f74206f776e6572206f722061646d696e2e0000000000604082015260600190565b600181811c9082168061587957607f821691505b6020821081036154b657634e487b7160e01b600052602260045260246000fd5b6020808252600f908201526e4e6f20706c6f747320746f2062757960881b604082015260600190565b6001600160a01b038316815260408101614bde6020830184615664565b634e487b7160e01b600052601160045260246000fd5b60008219821115615908576159086158df565b500190565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b6020808252601290820152712ab9b2b91034b9903737ba1037bbb732b91760711b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252601690820152752ab9b2b91034b9903737ba103630b7321037bbb732b960511b604082015260600190565b6020808252600a9082015269139bdd081b1a5cdd195960b21b604082015260600190565b6000813560ff811681146128e757600080fd5b600081356128e781614fc4565b60068210615a0157615a0161564e565b805460ff60681b191660689290921b60ff60681b16919091179055565b60008135600781106128e757600080fd5b60078210615a3f57615a3f61564e565b805460ff60701b191660709290921b60ff60701b16919091179055565b615a79615a68836159d1565b825460ff191660ff91909116178255565b615a9e615a88602084016159d1565b825461ff00191660089190911b61ff0016178255565b615ac5615aad604084016159d1565b825462ff0000191660109190911b62ff000016178255565b615aee615ad4606084016159d1565b825463ff000000191660189190911b63ff00000016178255565b615b19615afd608084016159d1565b825464ff00000000191660209190911b64ff0000000016178255565b615b46615b2860a084016159d1565b825465ff0000000000191660289190911b65ff000000000016178255565b615b75615b5560c084016159d1565b825466ff000000000000191660309190911b66ff00000000000016178255565b615ba6615b8460e084016159d1565b825467ff00000000000000191660389190911b67ff0000000000000016178255565b615bda615bb661010084016159d1565b825468ff0000000000000000191660409190911b68ff000000000000000016178255565b615c10615bea61012084016159d1565b825469ff000000000000000000191660489190911b69ff00000000000000000016178255565b615c3e615c2061014084016159d1565b82805460ff60501b191660509290921b60ff60501b16919091179055565b615c6c615c4e61016084016159d1565b82805460ff60581b191660589290921b60ff60581b16919091179055565b615c9a615c7c61018084016159d1565b82805460ff60601b191660609290921b60ff60601b16919091179055565b615cb0615caa6101a084016159e4565b826159f1565b615cc6615cc06101c08401615a1e565b82615a2f565b5050565b6000816000190483118215151615615ce457615ce46158df565b500290565b81835260006001600160fb1b03831115615d0257600080fd5b8260051b8083602087013760009401602001938452509192915050565b6001600160a01b0386168152606060208201819052600090615d449083018688615ce9565b8281036040840152615d57818587615ce9565b98975050505050505050565b80516001600160801b0381168114614d5857600080fd5b60006020808385031215615d8d57600080fd5b82516001600160401b03811115615da357600080fd5b8301601f81018513615db457600080fd5b8051615dc2614e1082614dcc565b8181526101e09182028301840191848201919088841115615de257600080fd5b938501935b83851015615f145780858a031215615dff5760008081fd5b615e07614d73565b615e1086615d63565b8152615e1d878701615806565b878201526040615e2e818801615806565b908201526060615e3f878201615806565b908201526080615e50878201615806565b9082015260a0615e61878201615806565b9082015260c0615e72878201615806565b9082015260e0615e83878201615806565b90820152610100615e95878201615806565b90820152610120615ea7878201615806565b90820152610140615eb9878201615806565b90820152610160615ecb878201615806565b90820152610180615edd878201615806565b908201526101a0615eef878201615806565b908201526101c0615f01878201615806565b9082015283529384019391850191615de7565b50979650505050505050565b600082821015615f3257615f326158df565b500390565b634e487b7160e01b600052603160045260246000fd5b600082615f6a57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220587189e6446d9770b5882175c2d99054862a54212a1cbce1509faf08f0208b9e64736f6c634300080d0033000000000000000000000000000000000000000000000000000000746a5288000000000000000000000000000000000000000000000000000000015d3ef7980000000000000000000000000000000000000000000000000000000246139ca800000000000000000000000000000000000000000000000000000000000000c350

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000746a5288000000000000000000000000000000000000000000000000000000015d3ef7980000000000000000000000000000000000000000000000000000000246139ca800000000000000000000000000000000000000000000000000000000000000c350

-----Decoded View---------------
Arg [0] : commonPrice (uint256): 500000000000
Arg [1] : rarePrice (uint256): 1500000000000
Arg [2] : epicPrice (uint256): 2500000000000
Arg [3] : creatorFee (uint256): 50000

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000746a528800
Arg [1] : 0000000000000000000000000000000000000000000000000000015d3ef79800
Arg [2] : 00000000000000000000000000000000000000000000000000000246139ca800
Arg [3] : 000000000000000000000000000000000000000000000000000000000000c350


Deployed ByteCode Sourcemap

113:9087:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1979:142:2;;;;2077:12;216:25:7;;2091:10:2;272:2:7;257:18;;250:34;2103:10:2;300:18:7;;;293:34;;;;204:2;189:18;1979:142:2;;;;;;;;16018:91;16091:11;;16018:91;;;484:25:7;;;472:2;457:18;16018:91:2;338:177:7;16218:107:2;16299:19;;16218:107;;4617:993:4;;;;;;:::i;:::-;;:::i;:::-;;1926:110;;;;;;:::i;:::-;;:::i;1705:101::-;;;;;;:::i;:::-;;:::i;1577:89:5:-;;;:::i;10413:319:2:-;;;;;;:::i;:::-;;:::i;7023:118:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7835::4:-;;;;;;:::i;:::-;7895:4;7918:17;;;:9;:17;;;;;:23;:27;;;7835:118;;;;5350:14:7;;5343:22;5325:41;;5313:2;5298:18;7835:118:4;5185:187:7;15114:111:2;;;;;;:::i;:::-;;:::i;2042:91:4:-;2114:12;;;;2042:91;;5436:1950:2;;;;;;:::i;:::-;;:::i;784:102:0:-;;;;;;:::i;:::-;;:::i;15620:82:2:-;15689:6;;;;;-1:-1:-1;;;;;15689:6:2;15620:82;;;-1:-1:-1;;;;;6434:32:7;;;6416:51;;6404:2;6389:18;15620:82:2;6270:203:7;6992:314:4;;;:::i;15231:281:2:-;;;;;;:::i;:::-;;:::i;685:93:0:-;;;;;;:::i;:::-;;:::i;5047:519:5:-;;;;;;:::i;:::-;;:::i;1672:93::-;1745:13;;;;1672:93;;4920:121;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2355:116:2:-;2441:23;;2355:116;;3211:299;;;;;;:::i;:::-;;:::i;15913:99::-;15990:15;;15913:99;;2369:352:4;;;;;;:::i;:::-;;:::i;14881:101:2:-;;;;;;:::i;:::-;;:::i;15815:92::-;15889:11;;-1:-1:-1;;;;;15889:11:2;15815:92;;2244::4;2318:11;;2244:92;;14988:120:2;;;;;;:::i;:::-;;:::i;1811:109:4:-;;;;;;:::i;:::-;;:::i;2139:99::-;2215:16;;;;;;;2139:99;;518:161:0;;;;;;:::i;:::-;;:::i;15708:101:2:-;15786:16;;-1:-1:-1;;;;;15786:16:2;15708:101;;2822:120;;;;;;:::i;:::-;;:::i;2477:142::-;;;;;;:::i;:::-;;:::i;1369:101:5:-;;;;;;:::i;:::-;;:::i;16350:159:2:-;;;;;;:::i;:::-;;:::i;7147:395:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1073:81:0:-;1115:7;1141:6;-1:-1:-1;;;;;1141:6:0;1073:81;;3099:210:4;;;;;;:::i;:::-;;:::i;8038:319:2:-;;;;;;:::i;:::-;;:::i;4529:385:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1252:111::-;;;;;;:::i;:::-;1311:7;1337:19;;;:11;:19;;;;;;-1:-1:-1;;;;;1337:19:5;;1252:111;6832:185;;;;;;:::i;:::-;;:::i;2727:366:4:-;;;;;;:::i;:::-;;:::i;2062:454:5:-;;;;;;:::i;:::-;;:::i;7329:483:4:-;;;;;;:::i;:::-;;:::i;8842:122::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8934:23:4;8908:7;8934:23;;;:16;:23;;;;;;;8842:122;3078:127:2;3164:15;;3181:16;;3078:127;;;;14533:25:7;;;14589:2;14574:18;;14567:34;;;;14506:18;3078:127:2;14359:248:7;2234:115:2;;;;;;:::i;:::-;;:::i;4313:210:5:-;;;;;;:::i;:::-;;:::i;3803:504::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;14880:13:7;;14839:10;14876:22;;;14858:41;;14959:4;14947:17;;;14941:24;14937:33;;14915:20;;;14908:63;15031:4;15019:17;;;15013:24;15009:33;;14987:20;;;14980:63;15103:4;15091:17;;;15085:24;15081:33;;15059:20;;;15052:63;15175:4;15163:17;;;15157:24;15153:33;15131:20;;;15124:63;;;;14816:3;14801:19;;14612:581;16115:97:2;16191:14;;16115:97;;4840:347;;;;;;:::i;:::-;;:::i;16515:111::-;;;;;;:::i;:::-;;:::i;5616:518:4:-;;;;;;:::i;:::-;;:::i;2948:124:2:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3032:28:2;3009:4;3032:28;;;:18;:28;;;;;;3064:1;3032:33;;2948:124;3777:834:4;;;;;;:::i;:::-;;:::i;8403:433::-;;;;;;:::i;:::-;;:::i;9862:545:2:-;;;;;;:::i;:::-;;:::i;6140:112:4:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7959:240::-;;;;;;:::i;:::-;;:::i;6258:728::-;;;;;;:::i;:::-;;:::i;2522:200:5:-;;;;;;:::i;:::-;;:::i;1771:115::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;892:175:0:-;;;;;;:::i;:::-;;:::i;2127:101:2:-;2204:17;;;;2127:101;;8205:192:4;;;;;;:::i;:::-;;:::i;2625:191:2:-;;;;;;:::i;:::-;;:::i;1476:95:5:-;1550:14;;;;;;;1476:95;;4617:993:4;1633:12;;;;1632:13;1624:42;;;;-1:-1:-1;;;1624:42:4;;;;;;;:::i;:::-;;;;;;;;;4712:1:::1;4704:5;:9;4696:49;;;::::0;-1:-1:-1;;;4696:49:4;;21404:2:7;4696:49:4::1;::::0;::::1;21386:21:7::0;21443:2;21423:18;;;21416:30;21482:29;21462:18;;;21455:57;21529:18;;4696:49:4::1;21202:351:7::0;4696:49:4::1;4755:17;1337:19:5::0;;;:11;:19;;;;;;-1:-1:-1;;;;;1337:19:5;4826:10:4::1;4813:23:::0;;4805:54:::1;;;::::0;-1:-1:-1;;;4805:54:4;;21760:2:7;4805:54:4::1;::::0;::::1;21742:21:7::0;21799:2;21779:18;;;21772:30;-1:-1:-1;;;21818:18:7;;;21811:48;21876:18;;4805:54:4::1;21558:342:7::0;4805:54:4::1;-1:-1:-1::0;;;;;4877:23:4;::::1;4869:53;;;::::0;-1:-1:-1;;;4869:53:4;;22107:2:7;4869:53:4::1;::::0;::::1;22089:21:7::0;22146:2;22126:18;;;22119:30;-1:-1:-1;;;22165:18:7;;;22158:47;22222:18;;4869:53:4::1;21905:341:7::0;4869:53:4::1;4968:11;1953:6:5::0;1978:17;;;:9;:17;;;;;:24;-1:-1:-1;;;1978:24:5;;;;4943:36:4::1;;;;;;;;:::i;:::-;::::0;4935:79:::1;;;::::0;-1:-1:-1;;;4935:79:4;;22453:2:7;4935:79:4::1;::::0;::::1;22435:21:7::0;22492:2;22472:18;;;22465:30;22531:32;22511:18;;;22504:60;22581:18;;4935:79:4::1;22251:354:7::0;4935:79:4::1;5025:17;5045::::0;;;:9:::1;:17;::::0;;;;:23;5128:16;;5124:103:::1;;5176:12;5168:5;:20;5160:56;;;::::0;-1:-1:-1;;;5160:56:4;;22812:2:7;5160:56:4::1;::::0;::::1;22794:21:7::0;22851:2;22831:18;;;22824:30;22890:25;22870:18;;;22863:53;22933:18;;5160:56:4::1;22610:347:7::0;5160:56:4::1;5263:6;::::0;5288:46:::1;::::0;-1:-1:-1;;;5288:46:4;;5308:10:::1;5288:46;::::0;::::1;23174:34:7::0;5328:4:4::1;23224:18:7::0;;;23217:43;5263:6:4;;;::::1;-1:-1:-1::0;;;;;5263:6:4::1;::::0;5338:5;;5263:6;;5288:19:::1;::::0;23109:18:7;;5288:46:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;5280:88;;;::::0;-1:-1:-1;;;5280:88:4;;23662:2:7;5280:88:4::1;::::0;::::1;23644:21:7::0;23701:2;23681:18;;;23674:30;-1:-1:-1;;;23720:18:7;;;23713:50;23780:18;;5280:88:4::1;23460:344:7::0;5280:88:4::1;5400:48;::::0;;::::1;::::0;::::1;::::0;;5406:10:::1;5400:48:::0;;;::::1;::::0;;::::1;::::0;;;5425:15:::1;5400:48:::0;;;;;;-1:-1:-1;5400:48:4;;;;;;5458:15;;;:7:::1;:15:::0;;;;;:27;;5400:48;5458:27;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;5458:27:4::1;-1:-1:-1::0;;;;;5458:27:4;;::::1;;::::0;;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;5458:27:4::1;::::0;::::1;;::::0;;;::::1;::::0;;;5495:56;;-1:-1:-1;;;5495:56:4;;5400:48;;5495:22;::::1;::::0;::::1;::::0;:56:::1;::::0;5406:10;;5538:4:::1;::::0;5400:48;;5495:56:::1;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;5567:36:4::1;::::0;484:25:7;;;5585:10:4::1;::::0;5577:6;;5567:36:::1;::::0;472:2:7;457:18;5567:36:4::1;;;;;;;4686:924;;;;4617:993:::0;;:::o;1926:110::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2005:11:4::1;:24:::0;1926:110::o;1705:101::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;1778:12:4::1;:21:::0;;-1:-1:-1;;1778:21:4::1;::::0;::::1;;::::0;;;::::1;::::0;;1705:101::o;1577:89:5:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;1638:14:5::1;:21:::0;;-1:-1:-1;;1638:21:5::1;;;::::0;;1577:89::o;10413:319:2:-;10624:4;10647:78;10665:5;10672:7;10681:21;;10704:20;;10647:17;:78::i;:::-;10640:85;10413:319;-1:-1:-1;;;;;;;10413:319:2:o;7023:118:5:-;7118:16;;;;:8;:16;;;;;7111:23;;7086:13;;7118:16;7111:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7023:118;;;:::o;15114:111:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;15194:11:2::1;:24:::0;;-1:-1:-1;;;;;;15194:24:2::1;-1:-1:-1::0;;;;;15194:24:2;;;::::1;::::0;;;::::1;::::0;;15114:111::o;5436:1950::-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;25491:51:7;25558:18;;;25551:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;25464:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5559:7:2;;-1:-1:-1;;;5591:12:2;5583:40:::1;;;;-1:-1:-1::0;;;5583:40:2::1;;;;;;;:::i;:::-;5673:16;::::0;5664:76:::1;::::0;-1:-1:-1;;;5664:76:2;;5633:28:::1;::::0;-1:-1:-1;;;;;5673:16:2::1;::::0;5664:50:::1;::::0;:76:::1;::::0;5715:10:::1;::::0;5727:12;;5664:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5633:107;;5782:8;5758:20;:32;;5750:74;;;::::0;-1:-1:-1;;;5750:74:2;;26446:2:7;5750:74:2::1;::::0;::::1;26428:21:7::0;26485:2;26465:18;;;26458:30;26524:31;26504:18;;;26497:59;26573:18;;5750:74:2::1;26244:353:7::0;5750:74:2::1;5836:17;5855:15:::0;5872::::1;5889::::0;5906:18:::1;5928:26;5946:7;;5928:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5928:17:2::1;::::0;-1:-1:-1;;;5928:26:2:i:1;:::-;5835:119;;;;;;;;;;6053:7;6039:21;;;;;:::i;:::-;6080:1;::::0;-1:-1:-1;6039:21:2;-1:-1:-1;6112:13:2::1;6096:12;:29;;;;;;;;:::i;:::-;::::0;6092:1288:::1;;6162:8;6149:9;:21;6141:51;;;::::0;-1:-1:-1;;;6141:51:2;;27069:2:7;6141:51:2::1;::::0;::::1;27051:21:7::0;27108:2;27088:18;;;27081:30;-1:-1:-1;;;27127:18:7;;;27120:47;27184:18;;6141:51:2::1;26867:341:7::0;6141:51:2::1;6215:16;::::0;6206:70:::1;::::0;-1:-1:-1;;;6206:70:2;;-1:-1:-1;;;;;6215:16:2;;::::1;::::0;6206:39:::1;::::0;:70:::1;::::0;6246:10:::1;::::0;6258:8;;6215:16:::1;::::0;;;;;6206:70:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6290:42;6306:7;;6290:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;6290:42:2;-1:-1:-1;6327:4:2::1;::::0;-1:-1:-1;6290:15:2::1;::::0;-1:-1:-1;6290:42:2:i:1;:::-;6092:1288;;;6378:11;6362:12;:27;;;;;;;;:::i;:::-;::::0;6358:1022:::1;;6436:8:::0;6413:19:::1;6425:7:::0;6413:9;:19:::1;:::i;:::-;:31;6405:69;;;::::0;-1:-1:-1;;;6405:69:2;;27933:2:7;6405:69:2::1;::::0;::::1;27915:21:7::0;27972:2;27952:18;;;27945:30;28011:27;27991:18;;;27984:55;28056:18;;6405:69:2::1;27731:349:7::0;6405:69:2::1;6497:16;::::0;6488:70:::1;::::0;-1:-1:-1;;;6488:70:2;;-1:-1:-1;;;;;6497:16:2;;::::1;::::0;6488:39:::1;::::0;:70:::1;::::0;6528:10:::1;::::0;6497:16:::1;::::0;6543:8;;6497:16;;;;6488:70:::1;;;:::i;6358:1022::-;6660:11;6644:12;:27;;;;;;;;:::i;:::-;::::0;6640:740:::1;;6728:8:::0;6717:7;6695:19:::1;6707:7:::0;6695:9;:19:::1;:::i;:::-;:29;;;;:::i;:::-;:41;6687:85;;;::::0;-1:-1:-1;;;6687:85:2;;28805:2:7;6687:85:2::1;::::0;::::1;28787:21:7::0;28844:2;28824:18;;;28817:30;28883:33;28863:18;;;28856:61;28934:18;;6687:85:2::1;28603:355:7::0;6687:85:2::1;6795:16;::::0;6786:70:::1;::::0;-1:-1:-1;;;6786:70:2;;-1:-1:-1;;;;;6795:16:2;;::::1;::::0;6786:39:::1;::::0;:70:::1;::::0;6826:10:::1;::::0;6795:16:::1;::::0;;;6844:8;;6795:16;;6786:70:::1;;;:::i;6640:740::-;7083:14;7067:12;:30;;;;;;;;:::i;:::-;;:104;;;;-1:-1:-1::0;7163:8:2;7149:10;7139:7;7117:19:::1;7129:7:::0;7117:9;:19:::1;:::i;:::-;:29;;;;:::i;:::-;:42;;;;:::i;:::-;:54;7067:104;7042:187;;;::::0;-1:-1:-1;;;7042:187:2;;29683:2:7;7042:187:2::1;::::0;::::1;29665:21:7::0;29722:2;29702:18;;;29695:30;29761:26;29741:18;;;29734:54;29805:18;;7042:187:2::1;29481:348:7::0;7042:187:2::1;7252:16;::::0;7243:70:::1;::::0;-1:-1:-1;;;7243:70:2;;-1:-1:-1;;;;;7252:16:2;;::::1;::::0;7243:39:::1;::::0;:70:::1;::::0;7283:10:::1;::::0;7252:16:::1;::::0;;;;;7304:8;;7243:70:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7327:42;7343:7;;7327:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;7327:42:2;-1:-1:-1;7364:4:2::1;::::0;-1:-1:-1;7327:15:2::1;::::0;-1:-1:-1;7327:42:2:i:1;:::-;5533:1853;;;;;;;5436:1950:::0;;;:::o;784:102:0:-;-1:-1:-1;;;;;860:14:0;837:4;860:14;;;:7;:14;;;;;;;;;:19;;784:102::o;6992:314:4:-;7076:10;7037:19;7059:28;;;:16;:28;;;;;;7105:15;7097:47;;;;-1:-1:-1;;;7097:47:4;;30554:2:7;7097:47:4;;;30536:21:7;30593:2;30573:18;;;30566:30;-1:-1:-1;;;30612:18:7;;;30605:49;30671:18;;7097:47:4;30352:343:7;7097:47:4;7171:10;7185:1;7154:28;;;:16;:28;;;;;;:32;;;;7203:6;;7196:48;;-1:-1:-1;;;7196:48:4;;;;;25491:51:7;;;;25558:18;;;25551:34;;;7203:6:4;;;-1:-1:-1;;;;;7203:6:4;;7196:23;;25464:18:7;;7196:48:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7260:39:4;;484:25:7;;;7275:10:4;;7260:39;;472:2:7;457:18;7260:39:4;;;;;;;7027:279;6992:314::o;15231:281:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;15365:9:2::1;15352:10;:22;15344:55;;;::::0;-1:-1:-1;;;15344:55:2;;30902:2:7;15344:55:2::1;::::0;::::1;30884:21:7::0;30941:2;30921:18;;;30914:30;-1:-1:-1;;;30960:18:7;;;30953:50;31020:18;;15344:55:2::1;30700:344:7::0;15344:55:2::1;15409:11;:19:::0;;;;15438:14:::1;:25:::0;15473:19:::1;:32:::0;15231:281::o;685:93:0:-;265:6;;-1:-1:-1;;;;;265:6:0;251:10;:20;243:51;;;;-1:-1:-1;;;243:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;757:14:0::1;;::::0;;;:7:::1;:14;::::0;;;;750:21;685:93::o;5047:519:5:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;5272:14:5::1;::::0;::::1;::::0;::::1;;;5271:15;5263:51;;;::::0;-1:-1:-1;;;5263:51:5;;31598:2:7;5263:51:5::1;::::0;::::1;31580:21:7::0;31637:2;31617:18;;;31610:30;31676:25;31656:18;;;31649:53;31719:18;;5263:51:5::1;31396:347:7::0;5263:51:5::1;5340:12:::0;;5382:14;;5370:26;::::1;5362:71;;;::::0;-1:-1:-1;;;5362:71:5;;31950:2:7;5362:71:5::1;::::0;::::1;31932:21:7::0;;;31969:18;;;31962:30;32028:34;32008:18;;;32001:62;32080:18;;5362:71:5::1;31748:356:7::0;5362:71:5::1;5448:6;5443:117;5458:8;5456:1;:10;5443:117;;;5483:35;5497:5;5503:1;5497:8;;;;;;;;:::i;:::-;;;;;;;5507:7;5515:1;5507:10;;;;;;;;:::i;:::-;;;;;;;5483:13;:35::i;:::-;5544:3;;5443:117;;;;5170:396;5047:519:::0;;:::o;4920:121::-;-1:-1:-1;;;;;5014:20:5;;;;;;:14;:20;;;;;;;;;5007:27;;;;;;;;;;;;;;;;;4979:16;;5007:27;;;5014:20;5007:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4920:121;;;:::o;3211:299:2:-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;25491:51:7;25558:18;;;25551:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;25464:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3430:73:::1;3440:7;;3449:21;;3472:20;;3494:8;3430:9;:73::i;:::-;3211:299:::0;;;;;;;:::o;2369:352:4:-;1182:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;1633:12:4::1;::::0;::::1;;1632:13;1624:42;;;;-1:-1:-1::0;;;1624:42:4::1;;;;;;;:::i;:::-;2481:1:::2;2473:5;:9;2465:50;;;::::0;-1:-1:-1;;;2465:50:4;;32794:2:7;2465:50:4::2;::::0;::::2;32776:21:7::0;32833:2;32813:18;;;32806:30;32872;32852:18;;;32845:58;32920:18;;2465:50:4::2;32592:352:7::0;2465:50:4::2;2558:11;1953:6:5::0;1978:17;;;:9;:17;;;;;:24;-1:-1:-1;;;1978:24:5;;;;2533:36:4::2;;;;;;;;:::i;:::-;::::0;2525:75:::2;;;::::0;-1:-1:-1;;;2525:75:4;;33151:2:7;2525:75:4::2;::::0;::::2;33133:21:7::0;33190:2;33170:18;;;33163:30;33229:28;33209:18;;;33202:56;33275:18;;2525:75:4::2;32949:350:7::0;2525:75:4::2;2630:31;::::0;;;;::::2;::::0;;;;;2645:15:::2;2630:31;::::0;;::::2;::::0;;;-1:-1:-1;2610:17:4;;;:9:::2;:17:::0;;;;;;:51;;;;;::::2;::::0;;::::2;::::0;2677:37;2696:10:::2;::::0;2620:6;;2677:37:::2;::::0;::::2;::::0;2638:5;484:25:7;;472:2;457:18;;338:177;2677:37:4::2;;;;;;;;2369:352:::0;;;:::o;14881:101:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;14956:6:2::1;:19:::0;;-1:-1:-1;;;;;14956:19:2;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;14956:19:2;;::::1;::::0;;;::::1;::::0;;14881:101::o;14988:120::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;15072:16:2::1;:29:::0;;-1:-1:-1;;;;;;15072:29:2::1;-1:-1:-1::0;;;;;15072:29:2;;;::::1;::::0;;;::::1;::::0;;14988:120::o;1811:109:4:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;1888:16:4::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;1888:25:4;;::::1;::::0;;;::::1;::::0;;1811:109::o;518:161:0:-;265:6;;-1:-1:-1;;;;;265:6:0;251:10;:20;243:51;;;;-1:-1:-1;;;243:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;588:19:0;::::1;580:64;;;::::0;-1:-1:-1;;;580:64:0;;33506:2:7;580:64:0::1;::::0;::::1;33488:21:7::0;;;33525:18;;;33518:30;33584:34;33564:18;;;33557:62;33636:18;;580:64:0::1;33304:356:7::0;580:64:0::1;-1:-1:-1::0;;;;;654:14:0::1;;::::0;;;671:1:::1;654:14;::::0;;;;;;;:18;518:161::o;2822:120:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2907:28:2::1;;::::0;;;:18:::1;:28;::::0;;;;2900:35;2822:120::o;2477:142::-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2572:23:2::1;:40:::0;2477:142::o;1369:101:5:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;1442:13:5::1;:21:::0;;-1:-1:-1;;1442:21:5::1;::::0;::::1;;::::0;;;::::1;::::0;;1369:101::o;16350:159:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;16449:1:2::1;16438:7;:12;;16430:37;;;::::0;-1:-1:-1;;;16430:37:2;;33867:2:7;16430:37:2::1;::::0;::::1;33849:21:7::0;33906:2;33886:18;;;33879:30;-1:-1:-1;;;33925:18:7;;;33918:42;33977:18;;16430:37:2::1;33665:336:7::0;16430:37:2::1;16477:15;:25:::0;16350:159::o;7147:395:5:-;7271:14;;7225:15;;7252:16;7271:14;-1:-1:-1;;;;;7323:22:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7295:50;;7360:6;7356:153;7370:8;7368:1;:10;7356:153;;;7395:14;7412:7;7420:1;7412:10;;;;;;;;:::i;:::-;;;;;;;7395:27;;7451:8;:16;7460:6;7451:16;;;;;;;;;;;7436:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;7446:1;7436:12;;;;;;;;:::i;:::-;;;;;;;;;;:31;-1:-1:-1;7493:3:5;;7356:153;;;-1:-1:-1;7526:9:5;7147:395;-1:-1:-1;;;7147:395:5:o;3099:210:4:-;1182:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;3172:83:4::1;3180:6;-1:-1:-1::0;;3172:7:4::1;:83::i;:::-;3270:32;::::0;3291:10:::1;::::0;3283:6;;3270:32:::1;::::0;;;::::1;3099:210:::0;;:::o;8038:319:2:-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;25491:51:7;25558:18;;;25551:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;25464:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8264:86:::1;8285:7;;8294:13;8309:11;8322;8335:14;8264:20;:86::i;:::-;8038:319:::0;;;;;;:::o;4529:385:5:-;4647:14;;4600:16;;4628;4647:14;-1:-1:-1;;;;;4697:23:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4697:23:5;;4671:49;;4735:6;4731:153;4745:8;4743:1;:10;4731:153;;;4770:14;4787:7;4795:1;4787:10;;;;;;;;:::i;:::-;;;;;;;4770:27;;4823:11;:19;4835:6;4823:19;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4823:19:5;4811:6;4818:1;4811:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4811:31:5;;;:9;;;;;;;;;;;:31;-1:-1:-1;4868:3:5;;4731:153;;6832:185;1182:19;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;6937:16:::1;::::0;;;:8:::1;:16;::::0;;;;;;;:26;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;6994:6;6978:32;7002:7;6978:32;;;;;;:::i;:::-;;;;;;;;6832:185:::0;;;:::o;2727:366:4:-;1182:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;2842:1:4::1;2831:8;:12;2823:53;;;::::0;-1:-1:-1;;;2823:53:4;;32794:2:7;2823:53:4::1;::::0;::::1;32776:21:7::0;32833:2;32813:18;;;32806:30;32872;32852:18;;;32845:58;32920:18;;2823:53:4::1;32592:352:7::0;2823:53:4::1;2886:13;2902:17:::0;;;:9:::1;:17;::::0;;;;:23;2943:12;2935:35:::1;;;;-1:-1:-1::0;;;2935:35:4::1;;;;;;;:::i;:::-;2980:17;::::0;;;:9:::1;:17;::::0;;;;;;;;:34;;;3030:56;;14533:25:7;;;14574:18;;;14567:34;;;3055:10:4::1;::::0;2980:17;;3030:56:::1;::::0;14506:18:7;3030:56:4::1;;;;;;;2813:280;2727:366:::0;;;:::o;2062:454:5:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2192:13:5::1;::::0;::::1;;2191:14;2183:54;;;::::0;-1:-1:-1;;;2183:54:5;;34547:2:7;2183:54:5::1;::::0;::::1;34529:21:7::0;34586:2;34566:18;;;34559:30;34625:29;34605:18;;;34598:57;34672:18;;2183:54:5::1;34345:351:7::0;2183:54:5::1;2261:7:::0;2293:21;;::::1;2285:66;;;::::0;-1:-1:-1;;;2285:66:5;;31950:2:7;2285:66:5::1;::::0;::::1;31932:21:7::0;;;31969:18;;;31962:30;32028:34;32008:18;;;32001:62;32080:18;;2285:66:5::1;31748:356:7::0;2285:66:5::1;2365:6;2361:149;2375:3;2373:1;:5;2361:149;;;2395:14;2412:7;;2420:1;2412:10;;;;;;;:::i;:::-;;;;;;;2395:27;;2456:9;;2466:1;2456:12;;;;;;;:::i;:::-;;;;;;2436:9;:17;2446:6;2436:17;;;;;;;;;;;:32;;;;;;:::i;:::-;-1:-1:-1::0;;;2494:3:5::1;;2361:149;;7329:483:4::0;1182:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;7439:10:4::1;-1:-1:-1::0;;;;;7427:22:4;::::1;::::0;7419:58:::1;;;::::0;-1:-1:-1;;;7419:58:4;;40369:2:7;7419:58:4::1;::::0;::::1;40351:21:7::0;40408:2;40388:18;;;40381:30;40447:25;40427:18;;;40420:53;40490:18;;7419:58:4::1;40167:347:7::0;7419:58:4::1;7496:16;::::0;::::1;::::0;::::1;;;7495:17;7487:50;;;::::0;-1:-1:-1;;;7487:50:4;;40721:2:7;7487:50:4::1;::::0;::::1;40703:21:7::0;40760:2;40740:18;;;40733:30;-1:-1:-1;;;40779:18:7;;;40772:50;40839:18;;7487:50:4::1;40519:344:7::0;7487:50:4::1;7555:17;::::0;;;:9:::1;:17;::::0;;;;:23;:28;7547:68:::1;;;::::0;-1:-1:-1;;;7547:68:4;;41070:2:7;7547:68:4::1;::::0;::::1;41052:21:7::0;41109:2;41089:18;;;41082:30;41148:29;41128:18;;;41121:57;41195:18;;7547:68:4::1;40868:351:7::0;7547:68:4::1;7658:11;1953:6:5::0;1978:17;;;:9;:17;;;;;:24;-1:-1:-1;;;1978:24:5;;;;7633:36:4::1;;;;;;;;:::i;:::-;::::0;7625:79:::1;;;::::0;-1:-1:-1;;;7625:79:4;;41426:2:7;7625:79:4::1;::::0;::::1;41408:21:7::0;41465:2;41445:18;;;41438:30;41504:32;41484:18;;;41477:60;41554:18;;7625:79:4::1;41224:354:7::0;7625:79:4::1;7715:30;7728:8;7738:6;7715:12;:30::i;:::-;7760:45;::::0;-1:-1:-1;;;;;7760:45:4;::::1;::::0;7784:10:::1;::::0;7776:6;;7760:45:::1;::::0;;;::::1;7329:483:::0;;;:::o;2234:115:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2314:17:2::1;:28:::0;;-1:-1:-1;;2314:28:2::1;::::0;::::1;;::::0;;;::::1;::::0;;2234:115::o;4313:210:5:-;4378:4;;4402:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;4402:24:5;;;;:39;;;;;;;;:::i;:::-;;4394:72;;;;-1:-1:-1;;;4394:72:5;;41785:2:7;4394:72:5;;;41767:21:7;41824:2;41804:18;;;41797:30;-1:-1:-1;;;41843:18:7;;;41836:50;41903:18;;4394:72:5;41583:344:7;4394:72:5;-1:-1:-1;4514:1:5;4483:19;;;:11;:19;;;;;;-1:-1:-1;;;;;4483:19:5;:33;;4313:210::o;3803:504::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4034:20:5;;3924:17;4034:20;;;:14;:20;;;;;;;;4016:39;;;;;;;;;;;;;;;;;3924:17;;;;;;;;4016:39;;;;4034:20;4016:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:39::i;:::-;4086:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;3803:504:5:o;4840:347:2:-;-1:-1:-1;;;;;4916:28:2;;4896:4;4916:28;;;:18;:28;;;;;;4948:1;4916:33;4912:75;;-1:-1:-1;4972:4:2;;4840:347;-1:-1:-1;4840:347:2:o;4912:75::-;-1:-1:-1;;;;;5074:24:2;;4997:17;5074:24;;;:14;:24;;;;;;;;5056:43;;;;;;;;;;;;;;;;;4997:17;;;;5056:43;;;;5074:24;;5056:43;;5074:24;5056:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:43::i;:::-;4996:103;;;;;;;;5157:23;;5142:7;5152:1;5142:11;;;;:::i;:::-;5128;:7;5138:1;5128:11;:::i;:::-;5116:23;;:9;:23;:::i;:::-;:37;;;;:::i;:::-;:64;;;4840:347;-1:-1:-1;;;;;4840:347:2:o;16515:111::-;16575:4;16598:21;16613:5;16598:14;:21::i;:::-;16591:28;16515:111;-1:-1:-1;;16515:111:2:o;5616:518:4:-;5713:15;;;;:7;:15;;;;;:22;5700:35;;5692:72;;;;-1:-1:-1;;;5692:72:4;;42307:2:7;5692:72:4;;;42289:21:7;42346:2;42326:18;;;42319:30;-1:-1:-1;;;42365:18:7;;;42358:54;42429:18;;5692:72:4;42105:348:7;5692:72:4;5774:18;5795:15;;;:7;:15;;;;;:27;;5811:10;;5795:27;;;;;;:::i;:::-;;;;;;;;;;5774:48;;;;;;;;5795:27;;;;;;;5774:48;;-1:-1:-1;;;;;5774:48:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5840:10:4;:25;5832:61;;;;-1:-1:-1;;;5832:61:4;;42660:2:7;5832:61:4;;;42642:21:7;42699:2;42679:18;;;42672:30;42738:25;42718:18;;;42711:53;42781:18;;5832:61:4;42458:347:7;5832:61:4;5912:5;:15;;;5911:16;5903:52;;;;-1:-1:-1;;;5903:52:4;;43012:2:7;5903:52:4;;;42994:21:7;43051:2;43031:18;;;43024:30;-1:-1:-1;;;43070:18:7;;;43063:53;43133:18;;5903:52:4;42810:347:7;5903:52:4;5999:11;;;;;5983;;-1:-1:-1;;;;;5966:29:4;;;;;:16;:29;;;;;;:44;;5999:11;;5966:29;;:44;;5999:11;;5966:44;:::i;:::-;;;;-1:-1:-1;;6020:15:4;;;;:7;:15;;;;;:27;;6060:4;;6020:15;6036:10;;6020:27;;;;;;:::i;:::-;;;;;;;;;;;:37;;;:44;;;;;;;;;;;;;;;;;;6103:10;-1:-1:-1;;;;;6080:47:4;6095:6;6080:47;6115:5;:11;;;6080:47;;;;484:25:7;;472:2;457:18;;338:177;3777:834:4;1633:12;;;;1632:13;1624:42;;;;-1:-1:-1;;;1624:42:4;;;;;;;:::i;:::-;3850:22:::1;3875:17:::0;;;:9:::1;:17;::::0;;;;;;;;3850:42;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;3902:40:::1;;;;-1:-1:-1::0;;;3902:40:4::1;;;;;;;:::i;:::-;3978:6;::::0;4053:13;;4003:46:::1;::::0;-1:-1:-1;;;4003:46:4;;4023:10:::1;4003:46;::::0;::::1;23174:34:7::0;4043:4:4::1;23224:18:7::0;;;23217:43;3978:6:4;;;::::1;-1:-1:-1::0;;;;;3978:6:4::1;::::0;;;4003:19:::1;::::0;23109:18:7;;4003:46:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;3995:96;;;::::0;-1:-1:-1;;;3995:96:4;;23662:2:7;3995:96:4::1;::::0;::::1;23644:21:7::0;23701:2;23681:18;;;23674:30;-1:-1:-1;;;23720:18:7;;;23713:50;23780:18;;3995:96:4::1;23460:344:7::0;3995:96:4::1;4118:13:::0;;4109:22;::::1;4101:55;;;::::0;-1:-1:-1;;;4101:55:4;;43364:2:7;4101:55:4::1;::::0;::::1;43346:21:7::0;43403:2;43383:18;;;43376:30;-1:-1:-1;;;43422:18:7;;;43415:50;43482:18;;4101:55:4::1;43162:344:7::0;4101:55:4::1;4167:83;4175:6;-1:-1:-1::0;;4167:7:4::1;:83::i;:::-;4260:21;1337:19:5::0;;;:11;:19;;;;;;-1:-1:-1;;;;;1337:19:5;4314:32:4::1;4327:10;1337:19:5::0;4314:12:4::1;:32::i;:::-;4357:8;4367::::0;4379:28:::1;4393:7;:13;;;4379;:28::i;:::-;4417:54;::::0;-1:-1:-1;;;4417:54:4;;4356:51;;-1:-1:-1;4356:51:4;-1:-1:-1;;;;;;4417:22:4;::::1;::::0;::::1;::::0;:54:::1;::::0;4440:10:::1;::::0;4452:13;;4356:51;;4417:54:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;4516:11:4::1;::::0;4481:52:::1;::::0;-1:-1:-1;;;4481:52:4;;-1:-1:-1;;;;;4481:22:4;;::::1;::::0;::::1;::::0;:52:::1;::::0;4504:10:::1;::::0;4516:11:::1;::::0;4529:3;;4481:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4586:10;-1:-1:-1::0;;;;;4549:55:4::1;4571:13;-1:-1:-1::0;;;;;4549:55:4::1;4563:6;4549:55;4598:5;4549:55;;;;484:25:7::0;;472:2;457:18;;338:177;4549:55:4::1;;;;;;;;3840:771;;;;;3777:834:::0;;:::o;8403:433::-;8465:7;8508:15;;;:7;:15;;;;;;;;8484:39;;;;;;;;;;;;;;;;;8465:7;;;;8484:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8484:39:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8533:14;8550:6;:13;8533:30;;8573:15;8607:6;8602:201;8617:9;8615:1;:11;8602:201;;;8648:6;8655:1;8648:9;;;;;;;;:::i;:::-;;;;;;;:19;;;8647:20;:52;;;;;8689:10;8671:6;8678:1;8671:9;;;;;;;;:::i;:::-;;;;;;;:15;;;:28;8647:52;8643:119;;;8732:6;8739:1;8732:9;;;;;;;;:::i;:::-;;;;;;;:15;;;8719:28;;8643:119;8787:3;;8602:201;;;-1:-1:-1;8819:10:4;8403:433;-1:-1:-1;;;;8403:433:4:o;9862:545:2:-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;25491:51:7;25558:18;;;25551:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;25464:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10170:141:::1;10191:14;;10207:11;:25;;;10234:11;:23;;;10259:11;:23;;;10284:11;:26;;;10170:20;:141::i;:::-;10321:79;10331:13;;10346:21;;10369:20;;10391:8;10321:9;:79::i;6140:112:4:-:0;6197:14;6230:7;:15;6238:6;6230:15;;;;;;;;;;;6223:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6223:22:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6140:112;;;:::o;7959:240::-;8021:7;8074:17;;;:9;:17;;;;;;;;8049:42;;;;;;;;;;;;;;;;;;;;;;;;;8021:7;;8101:40;;;;-1:-1:-1;;;8101:40:4;;;;;;;:::i;:::-;8159:13;;8174:17;;;;;8159:13;;8174:17;;-1:-1:-1;7959:240:4;-1:-1:-1;;7959:240:4:o;6258:728::-;1182:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1182:19:5;1168:10;:33;1160:68;;;;-1:-1:-1;;;1160:68:5;;;;;;;:::i;:::-;1633:12:4::1;::::0;::::1;;1632:13;1624:42;;;;-1:-1:-1::0;;;1624:42:4::1;;;;;;;:::i;:::-;6402:15:::2;::::0;;;:7:::2;:15;::::0;;;;:22;6389:35;::::2;6381:72;;;::::0;-1:-1:-1;;;6381:72:4;;42307:2:7;6381:72:4::2;::::0;::::2;42289:21:7::0;42346:2;42326:18;;;42319:30;-1:-1:-1;;;42365:18:7;;;42358:54;42429:18;;6381:72:4::2;42105:348:7::0;6381:72:4::2;6463:18;6484:15:::0;;;:7:::2;:15;::::0;;;;:27;;6500:10;;6484:27;::::2;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;6463:48:::2;::::0;;::::2;::::0;::::2;::::0;;6484:27:::2;::::0;;::::2;::::0;;::::2;6463:48:::0;;-1:-1:-1;;;;;6463:48:4::2;::::0;;;;::::2;::::0;;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;;::::2;::::0;::::2;;;::::0;::::2;::::0;;;;;;-1:-1:-1;6521:52:4::2;;;::::0;-1:-1:-1;;;6521:52:4;;43012:2:7;6521:52:4::2;::::0;::::2;42994:21:7::0;43051:2;43031:18;;;43024:30;-1:-1:-1;;;43070:18:7;;;43063:53;43133:18;;6521:52:4::2;42810:347:7::0;6521:52:4::2;6606:5;6591;:11;;;:20;6583:53;;;::::0;-1:-1:-1;;;6583:53:4;;43364:2:7;6583:53:4::2;::::0;::::2;43346:21:7::0;43403:2;43383:18;;;43376:30;-1:-1:-1;;;43422:18:7;;;43415:50;43482:18;;6583:53:4::2;43162:344:7::0;6583:53:4::2;6647:27;6655:6;6663:10;6647:7;:27::i;:::-;6697:11:::0;;6684:33:::2;::::0;6710:6;6684:12:::2;:33::i;:::-;6728:16;6754:6;;;;;;;;;-1:-1:-1::0;;;;;6754:6:4::2;6728:33;;6772:8;6782::::0;6794:26:::2;6808:5;:11;;;6794:13;:26::i;:::-;6830:35;::::0;-1:-1:-1;;;6830:35:4;;6849:10:::2;6830:35;::::0;::::2;25491:51:7::0;25558:18;;;25551:34;;;6771:49:4;;-1:-1:-1;6771:49:4;-1:-1:-1;;;;;;6830:18:4;::::2;::::0;::::2;::::0;25464::7;;6830:35:4::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;6894:11:4::2;::::0;6875:36:::2;::::0;-1:-1:-1;;;6875:36:4;;-1:-1:-1;;;;;6894:11:4;;::::2;6875:36;::::0;::::2;25491:51:7::0;25558:18;;;25551:34;;;6875:18:4;;::::2;::::0;::::2;::::0;25464::7;;6875:36:4::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6960:5;:11;;;-1:-1:-1::0;;;;;6926:53:4::2;6948:10;-1:-1:-1::0;;;;;6926:53:4::2;6940:6;6926:53;6973:5;6926:53;;;;484:25:7::0;;472:2;457:18;;338:177;6926:53:4::2;;;;;;;;6371:615;;;;6258:728:::0;;;;:::o;2522:200:5:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;2632:13:5::1;::::0;::::1;;2631:14;2623:54;;;::::0;-1:-1:-1;;;2623:54:5;;34547:2:7;2623:54:5::1;::::0;::::1;34529:21:7::0;34586:2;34566:18;;;34559:30;34625:29;34605:18;;;34598:57;34672:18;;2623:54:5::1;34345:351:7::0;2623:54:5::1;2687:17;::::0;;;:9:::1;:17;::::0;;;;2707:8;;2687:28:::1;2707:8:::0;2687:17;:28:::1;:::i;1771:115::-:0;1828:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1828:15:5;1862:17;;;;:9;:17;;;;;;;;;1855:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1855:24:5;;;;;;;;-1:-1:-1;;;1855:24:5;;;;;;;;-1:-1:-1;;;1855:24:5;;;;;;;;;1862:17;;1855:24;;;;-1:-1:-1;;;1855:24:5;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;1855:24:5;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;1855:24:5;1771:115;-1:-1:-1;;1771:115:5:o;892:175:0:-;265:6;;-1:-1:-1;;;;;265:6:0;251:10;:20;243:51;;;;-1:-1:-1;;;243:51:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;974:22:0;::::1;966:67;;;::::0;-1:-1:-1;;;966:67:0;;43713:2:7;966:67:0::1;::::0;::::1;43695:21:7::0;;;43732:18;;;43725:30;43791:34;43771:18;;;43764:62;43843:18;;966:67:0::1;43511:356:7::0;966:67:0::1;1043:6;:17:::0;;-1:-1:-1;;;;;;1043:17:0::1;-1:-1:-1::0;;;;;1043:17:0;;;::::1;::::0;;;::::1;::::0;;892:175::o;8205:192:4:-;8268:7;8303:17;;;:9;:17;;;;;:23;8344:9;8336:32;;;;-1:-1:-1;;;8336:32:4;;;;;;;:::i;2625:191:2:-;376:6:0;;-1:-1:-1;;;;;376:6:0;362:10;:20;;:43;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1;;;354:83:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2708:22:2;::::1;2700:67;;;::::0;-1:-1:-1;;;2700:67:2;;44074:2:7;2700:67:2::1;::::0;::::1;44056:21:7::0;;;44093:18;;;44086:30;44152:34;44132:18;;;44125:62;44204:18;;2700:67:2::1;43872:356:7::0;2700:67:2::1;-1:-1:-1::0;;;;;2777:28:2::1;;::::0;;;:18:::1;:28;::::0;;;;2808:1:::1;2777:32:::0;;2625:191::o;10738:965::-;10981:14;;10949:4;;11013:33;;;:50;;;11050:8;11062:1;11050:13;11013:50;11005:95;;;;-1:-1:-1;;;11005:95:2;;44435:2:7;11005:95:2;;;44417:21:7;;;44454:18;;;44447:30;44513:34;44493:18;;;44486:62;44565:18;;11005:95:2;44233:356:7;11005:95:2;11254:16;;11245:92;;-1:-1:-1;;;11245:92:2;;11111:13;;;;-1:-1:-1;;;;;11254:16:2;;;;11245:40;;:92;;11286:5;;11293:21;;;;11316:20;;;;11245:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11245:92:2;;;;;;;;;;;;:::i;:::-;11206:131;;11353:6;11348:241;11363:8;11361:1;:10;11348:241;;;11388:24;11415:23;11427:7;11435:1;11427:10;;;;;;;;:::i;:::-;;;;;;;11415:11;:23::i;:::-;11388:50;;11452:17;11472:42;11494:8;11504:9;11472:21;:42::i;:::-;11452:62;-1:-1:-1;11528:18:2;11452:62;11528:18;;:::i;:::-;;;11573:3;;;;;11374:215;;11348:241;;;-1:-1:-1;15587:15:2;;15606:1;15587:20;11599:75;;11642:21;11657:5;11642:14;:21::i;:::-;11634:29;;11599:75;-1:-1:-1;11691:5:2;10738:965;-1:-1:-1;;;;;;;;10738:965:2:o;2728:1069:5:-;2804:4;2810;2816;2822;2828;2845:15;2870:13;2893;2916;2939:15;2965:11;2979:7;:14;2965:28;;3008:6;3004:730;3018:3;3016:1;:5;3004:730;;;3038:14;3055:7;3063:1;3055:10;;;;;;;;:::i;:::-;;;;;;;3038:27;;3112:13;3084:41;;;;;;;;:::i;:::-;:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3084:24:5;;;;:41;;;;;;;;:::i;:::-;;3080:612;;3145:11;3155:1;3145:11;;:::i;:::-;;;3080:612;;;3221:11;3193:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3193:24:5;;;;:39;;;;;;;;:::i;:::-;;3189:503;;3252:9;3260:1;3252:9;;:::i;:::-;;;3189:503;;;3326:11;3298:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3298:24:5;;;;:39;;;;;;;;:::i;:::-;;3294:398;;3357:9;3365:1;3357:9;;:::i;:::-;;;3294:398;;;3431:11;3403:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3403:24:5;;;;:39;;;;;;;;:::i;:::-;;3399:293;;3462:9;3470:1;3462:9;;:::i;:::-;;;3399:293;;;3614:14;3586:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3586:24:5;;;;:42;;;;;;;;:::i;:::-;;3578:70;;;;-1:-1:-1;;;3578:70:5;;48586:2:7;3578:70:5;;;48568:21:7;48625:2;48605:18;;;48598:30;-1:-1:-1;;;48644:18:7;;;48637:45;48699:18;;3578:70:5;48384:339:7;3578:70:5;3666:11;3676:1;3666:11;;:::i;:::-;;;3399:293;-1:-1:-1;3718:3:5;;3004:730;;;-1:-1:-1;3752:7:5;;3761:5;;-1:-1:-1;3768:5:5;;-1:-1:-1;3768:5:5;-1:-1:-1;3761:5:5;-1:-1:-1;2728:1069:5;-1:-1:-1;;;2728:1069:5:o;7392:640:2:-;7522:14;;7503:16;7546:239;7560:8;7558:1;:10;7546:239;;;7585:14;7602:7;7610:1;7602:10;;;;;;;;:::i;:::-;;;;;;;7585:27;;7634;7654:6;7634:19;:27::i;:::-;7626:71;;;;-1:-1:-1;;;7626:71:2;;48930:2:7;7626:71:2;;;48912:21:7;48969:2;48949:18;;;48942:30;49008:33;48988:18;;;48981:61;49059:18;;7626:71:2;48728:355:7;7626:71:2;7711:32;7724:10;7736:6;7711:12;:32::i;:::-;-1:-1:-1;7769:3:2;;7546:239;;;;7799:17;7795:154;;;7852:7;:14;7832:16;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;7795:154:2;;-1:-1:-1;7795:154:2;;7924:7;:14;7905:15;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;7795:154:2;8007:17;7964:61;;7997:8;-1:-1:-1;;;;;7964:61:2;7985:10;-1:-1:-1;;;;;7964:61:2;;7976:7;7964:61;;;;;;:::i;:::-;;;;;;;;7493:539;7392:640;;;:::o;6679:147:5:-;6750:19;;;;:11;:19;;;;;;;;:26;;-1:-1:-1;;;;;6750:26:5;;;-1:-1:-1;;;;;;6750:26:5;;;;;;;6786:20;;;:14;:20;;;;;:33;;6750:26;6786:33;;;;;;;;;;;;;;6679:147::o;3516:1074:2:-;3729:18;3721:46;;;;-1:-1:-1;;;3721:46:2;;;;;;;:::i;:::-;3777:13;3793:83;3811:10;3823:7;;3793:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3832:21:2;;-1:-1:-1;3832:21:2;;-1:-1:-1;3855:20:2;;-1:-1:-1;3855:20:2;3793:17;:83::i;:::-;3895:16;;3886:98;;-1:-1:-1;;;3886:98:2;;3777:99;;-1:-1:-1;;;;;;3895:16:2;;3886:41;;:98;;3928:10;;3940:21;;;;3963:20;;;;3886:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3994:12;4020:26;4037:8;4020:16;:26::i;:::-;4016:455;;;4063:8;4073;4085:28;4107:5;4085:21;:28::i;:::-;4144:6;;4137:54;;-1:-1:-1;;;4137:54:2;;4062:51;;-1:-1:-1;4062:51:2;;-1:-1:-1;4144:6:2;;;-1:-1:-1;;;;;4144:6:2;;4137:27;;:54;;4165:10;;4177:8;;4062:51;;4137:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4127:64;;4209:7;4205:113;;;4253:6;;4286:11;;4246:57;;-1:-1:-1;;;4246:57:2;;4253:6;;;;-1:-1:-1;;;;;4253:6:2;;;;4246:27;;:57;;4274:10;;4286:11;;;4299:3;;4246:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4236:67;;4205:113;4048:280;;4016:455;;;4408:6;;4441:11;;4401:59;;-1:-1:-1;;;4401:59:2;;4375:1;;-1:-1:-1;4408:6:2;;;;-1:-1:-1;;;;;4408:6:2;;;;4401:27;;:59;;4429:10;;4441:11;;;4454:5;;4401:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4391:69;;4016:455;4489:7;4481:50;;;;-1:-1:-1;;;4481:50:2;;49290:2:7;4481:50:2;;;49272:21:7;49329:2;49309:18;;;49302:30;49368:32;49348:18;;;49341:60;49418:18;;4481:50:2;49088:354:7;4481:50:2;4542:41;4558:7;;4542:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4567:8:2;;-1:-1:-1;4542:41:2;-1:-1:-1;4542:15:2;;-1:-1:-1;4542:41:2:i;:::-;3711:879;;3516:1074;;;;;;;:::o;3315:456:4:-;3399:17;;;;:9;:17;;;;;;;;3392:24;;;;;;;;3450:7;:15;;;;;3426:39;;;;;;;;;;;;;;;;;;;3450:15;;3426:39;3399:17;;3426:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3426:39:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3492:13:4;;3426:39;;-1:-1:-1;3475:14:4;;-1:-1:-1;;3515:218:4;3530:9;3528:1;:11;3515:218;;;3561:6;3568:1;3561:9;;;;;;;;:::i;:::-;;;;;;;:19;;;3560:20;:45;;;;;3589:16;3584:1;:21;;3560:45;3556:136;;;3662:6;3669:1;3662:9;;;;;;;;:::i;:::-;;;;;;;:15;;;3625:16;:33;3642:6;3649:1;3642:9;;;;;;;;:::i;:::-;;;;;;;:15;;;-1:-1:-1;;;;;3625:33:4;-1:-1:-1;;;;;3625:33:4;;;;;;;;;;;;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;3556:136:4;3717:3;;3515:218;;;-1:-1:-1;3749:15:4;;;;:7;:15;;;;;3742:22;;;:::i;8363:1493:2:-;8583:18;8575:46;;;;-1:-1:-1;;;8575:46:2;;;;;;;:::i;:::-;8632:17;8651:15;8668;8685;8702:18;8724:26;8742:7;;8724:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8724:17:2;;-1:-1:-1;;;8724:26:2:i;:::-;8631:119;;;;;;;;;;8850:7;8836:21;;;;;:::i;:::-;;;8877:1;8867:11;;8964:13;8952:9;:25;8949:147;;;9005:25;9017:13;9005:9;:25;:::i;:::-;8993:38;;;;:::i;:::-;;-1:-1:-1;9059:25:2;9071:13;9059:9;:25;:::i;:::-;9045:40;;;;:::i;:::-;;;8949:147;9179:11;9169:7;:21;9166:133;;;9218:21;9228:11;9218:7;:21;:::i;:::-;9206:34;;;;:::i;:::-;;-1:-1:-1;9266:21:2;9276:11;9266:7;:21;:::i;:::-;9254:34;;;;:::i;:::-;;;9166:133;9382:11;9372:7;:21;9369:136;;;9424:21;9434:11;9424:7;:21;:::i;:::-;9409:37;;;;:::i;:::-;;-1:-1:-1;9472:21:2;9482:11;9472:7;:21;:::i;:::-;9460:34;;;;:::i;:::-;;;9369:136;9553:9;9536:13;:26;;:52;;;;;9581:7;9566:11;:22;;9536:52;:78;;;;;9607:7;9592:11;:22;;9536:78;:110;;;;;9636:10;9618:14;:28;;9536:110;9515:179;;;;-1:-1:-1;;;9515:179:2;;49779:2:7;9515:179:2;;;49761:21:7;49818:2;49798:18;;;49791:30;-1:-1:-1;;;49837:18:7;;;49830:52;49899:18;;9515:179:2;49577:346:7;9515:179:2;9714:16;;9705:92;;-1:-1:-1;;;9705:92:2;;-1:-1:-1;;;;;9714:16:2;;;;9705:39;;:92;;9745:10;;9757:9;;9768:7;;9777;;9786:10;;9705:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9807:42;9823:7;;9807:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9807:42:2;-1:-1:-1;9844:4:2;;-1:-1:-1;9807:15:2;;-1:-1:-1;9807:42:2:i;:::-;8565:1291;;;;;8363:1493;;;;;;:::o;5572:1101:5:-;5643:16;5662:19;;;:11;:19;;;;;;-1:-1:-1;;;;;5662:19:5;5691:27;5705:4;5674:6;5691:13;:27::i;:::-;-1:-1:-1;;;;;5771:22:5;;;5767:900;;-1:-1:-1;;;;;5842:24:5;;5809:30;5842:24;;;:14;:24;;;;;;;;5809:57;;;;;;;;;;;;;;;;;;;5842:24;;5809:57;;;5842:24;5809:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5894:20:5;;5809:57;;-1:-1:-1;;;5947:66:5;-1:-1:-1;5880:11:5;;-1:-1:-1;;6027:199:5;6041:3;6039:1;:5;6027:199;;;6089:6;6069:13;6083:1;6069:16;;;;;;;;:::i;:::-;;;;;;;:26;6065:112;;6130:1;6119:12;;6153:5;;6065:112;6206:3;;6027:199;;;-1:-1:-1;6299:78:5;;6291:118;;;;-1:-1:-1;;;6291:118:5;;50624:2:7;6291:118:5;;;50606:21:7;50663:2;50643:18;;;50636:30;50702:29;50682:18;;;50675:57;50749:18;;6291:118:5;50422:351:7;6291:118:5;6505:5;6509:1;6505:3;:5;:::i;:::-;6493:8;:17;6489:124;;-1:-1:-1;;;;;6567:24:5;;;;;;:14;:24;;;;;6592:5;6596:1;6592:3;:5;:::i;:::-;6567:31;;;;;;;;:::i;:::-;;;;;;;;;6530:14;:24;6545:8;-1:-1:-1;;;;;6530:24:5;-1:-1:-1;;;;;6530:24:5;;;;;;;;;;;;6555:8;6530:34;;;;;;;;:::i;:::-;;;;;;;;;;:68;6489:124;-1:-1:-1;;;;;6626:24:5;;;;;;:14;:24;;;;;:30;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5795:872;;;5767:900;5633:1040;5572:1101;;:::o;16632:753:2:-;16692:4;16837:15;16855:46;16867:17;:15;:17::i;:::-;16886:14;;16855:11;:46::i;:::-;17109:14;;16837:64;;-1:-1:-1;17014:27:2;;575:6;17063:24;16837:64;17109:14;17063:24;:::i;:::-;17062:44;;;;:::i;:::-;:61;;;;:::i;:::-;17044:79;;575:6;17044:79;:::i;:::-;17014:109;;17169:29;17201:65;395:9;17225:19;;17246;17201:5;:65::i;:::-;17169:97;-1:-1:-1;17276:21:2;395:9;17300:29;17324:5;17169:97;17300:29;:::i;:::-;:48;;;;:::i;:::-;17276:72;16632:753;-1:-1:-1;;;;;;16632:753:2:o;8970:227:4:-;9030:7;9039;9058:11;395:9:2;9088:11:4;;9080:5;:19;;;;:::i;:::-;9072:47;;;;:::i;:::-;9058:61;-1:-1:-1;9129:11:4;9151;9058:61;9151:5;:11;:::i;:::-;9129:34;9186:3;;-1:-1:-1;8970:227:4;;-1:-1:-1;;;8970:227:4:o;11709:3166:2:-;11826:4;;;11922:13;11903:8;:15;;;:32;;;;;;;;:::i;:::-;;11899:348;;11963:12;11951:24;;11899:348;;;12024:11;12005:8;:15;;;:30;;;;;;;;:::i;:::-;;12001:246;;12063:10;12051:22;;12001:246;;;12122:11;12103:8;:15;;;:30;;;;;;;;:::i;:::-;;12099:148;;12161:10;12149:22;;12099:148;;;12211:25;;-1:-1:-1;;;12211:25:2;;48586:2:7;12211:25:2;;;48568:21:7;48625:2;48605:18;;;48598:30;-1:-1:-1;;;48644:18:7;;;48637:45;48699:18;;12211:25:2;48384:339:7;12099:148:2;12277:16;;12257:17;12349;;;12345:63;;12388:9;12381:16;;;;;;;12345:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12461:2231:2;12478:12;12474:1;:16;12461:2231;;;12518:9;12528:1;12518:12;;;;;;;;:::i;:::-;;;;;;;12507:23;;12548:8;:15;;;12544:2107;;;12598:17;;12583:32;;-1:-1:-1;;;;;12583:32:2;;;:::i;:::-;;;12544:2107;;;643:2;12652:8;:14;;;:45;;;:71;;;;;12701:8;:22;;;12652:71;12648:2003;;;12758:17;;12743:32;;-1:-1:-1;;;;;12743:32:2;;;:::i;12648:2003::-;643:2;12812:8;:18;;;:49;;;:79;;;;;12865:8;:26;;;12812:79;12808:1843;;;12926:17;;12911:32;;-1:-1:-1;;;;;12911:32:2;;;:::i;12808:1843::-;643:2;12980:8;:13;;;:44;;;:69;;;;;13028:8;:21;;;12980:69;12976:1675;;;13084:17;;13069:32;;-1:-1:-1;;;;;13069:32:2;;;:::i;12976:1675::-;643:2;13138:8;:16;;;:47;;;:75;;;;;13189:8;:24;;;13138:75;13134:1517;;;13248:17;;13233:32;;-1:-1:-1;;;;;13233:32:2;;;:::i;13134:1517::-;643:2;13302:8;:13;;;:44;;;:69;;;;;13350:8;:21;;;13302:69;13298:1353;;;13406:17;;13391:32;;-1:-1:-1;;;;;13391:32:2;;;:::i;13298:1353::-;643:2;13460:8;:14;;;:45;;;:71;;;;;13509:8;:22;;;13460:71;13456:1195;;;13566:17;;13551:32;;-1:-1:-1;;;;;13551:32:2;;;:::i;13456:1195::-;643:2;13620:8;:14;;;:45;;;:71;;;;;13669:8;:22;;;13620:71;13616:1035;;;13726:17;;13711:32;;-1:-1:-1;;;;;13711:32:2;;;:::i;13616:1035::-;643:2;13780:8;:14;;;:45;;;:71;;;;;13829:8;:22;;;13780:71;13776:875;;;13886:17;;13871:32;;-1:-1:-1;;;;;13871:32:2;;;:::i;13776:875::-;643:2;13940:8;:15;;;:46;;;:73;;;;;13990:8;:23;;;13940:73;13936:715;;;14048:17;;14033:32;;-1:-1:-1;;;;;14033:32:2;;;:::i;13936:715::-;643:2;14102:8;:15;;;:46;;;:73;;;;;14152:8;:23;;;14102:73;14098:553;;;14210:17;;14195:32;;-1:-1:-1;;;;;14195:32:2;;;:::i;14098:553::-;14264:8;:17;;;:22;;14285:1;14264:22;:44;;;;;14290:8;:18;;;14264:44;14260:391;;;14343:17;;14328:32;;-1:-1:-1;;;;;14328:32:2;;;:::i;14260:391::-;14397:8;:16;;;:21;;14417:1;14397:21;:42;;;;;14422:8;:17;;;14397:42;14393:258;;;14474:17;;14459:32;;-1:-1:-1;;;;;14459:32:2;;;:::i;14393:258::-;14528:8;:23;;;:28;;14555:1;14528:28;:56;;;;;14560:8;:24;;;14528:56;14524:127;;;14619:17;;14604:32;;-1:-1:-1;;;;;14604:32:2;;;:::i;:::-;;;14524:127;14676:3;;12461:2231;;;;452:7;14706:11;:27;14702:85;;;452:7;14749:27;;14702:85;395:9;14817:30;14836:11;395:9;14817:30;:::i;:::-;14804:44;;:9;:44;:::i;:::-;14803:65;;;;:::i;4596:238::-;4663:4;-1:-1:-1;;;;;4683:22:2;;;;:48;;-1:-1:-1;;;;;;4709:22:2;;4721:10;4709:22;4683:48;:70;;;-1:-1:-1;4736:17:2;;;;4735:18;4683:70;4679:113;;;-1:-1:-1;4776:5:2;;4596:238;-1:-1:-1;4596:238:2:o;4679:113::-;4808:18;4817:8;4808;:18::i;5193:237::-;5261:7;;;395:9;5311:21;514:6;5311:5;:21;:::i;17391:146::-;17439:4;17476:15;17462:11;;:29;:67;;-1:-1:-1;17528:1:2;;17391:146::o;17462:67::-;17513:11;;17495:29;;:15;:29;:::i;:::-;17455:74;;17391:146;:::o;17841:200::-;17913:4;17941:5;17933;:13;17929:106;;;-1:-1:-1;17968:5:2;17961:12;;17929:106;-1:-1:-1;18019:5:2;18012:12;;17614:221;17696:7;;575:6;17772:15;17783:4;17772:8;:15;:::i;:::-;17763:4;17733:26;17751:8;575:6;17733:26;:::i;:::-;17732:35;;;;:::i;:::-;17731:57;;;;:::i;:::-;17730:77;;;;:::i;:::-;17715:93;-1:-1:-1;;17614:221:2;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;520:248:7;588:6;596;649:2;637:9;628:7;624:23;620:32;617:52;;;665:1;662;655:12;617:52;-1:-1:-1;;688:23:7;;;758:2;743:18;;;730:32;;-1:-1:-1;520:248:7:o;773:180::-;832:6;885:2;873:9;864:7;860:23;856:32;853:52;;;901:1;898;891:12;853:52;-1:-1:-1;924:23:7;;773:180;-1:-1:-1;773:180:7:o;958:118::-;1044:5;1037:13;1030:21;1023:5;1020:32;1010:60;;1066:1;1063;1056:12;1081:241;1137:6;1190:2;1178:9;1169:7;1165:23;1161:32;1158:52;;;1206:1;1203;1196:12;1158:52;1245:9;1232:23;1264:28;1286:5;1264:28;:::i;1327:173::-;1395:20;;-1:-1:-1;;;;;1444:31:7;;1434:42;;1424:70;;1490:1;1487;1480:12;1424:70;1327:173;;;:::o;1505:127::-;1566:10;1561:3;1557:20;1554:1;1547:31;1597:4;1594:1;1587:15;1621:4;1618:1;1611:15;1637:255;1709:2;1703:9;1751:6;1739:19;;-1:-1:-1;;;;;1773:34:7;;1809:22;;;1770:62;1767:88;;;1835:18;;:::i;:::-;1871:2;1864:22;1637:255;:::o;1897:275::-;1968:2;1962:9;2033:2;2014:13;;-1:-1:-1;;2010:27:7;1998:40;;-1:-1:-1;;;;;2053:34:7;;2089:22;;;2050:62;2047:88;;;2115:18;;:::i;:::-;2151:2;2144:22;1897:275;;-1:-1:-1;1897:275:7:o;2177:183::-;2237:4;-1:-1:-1;;;;;2262:6:7;2259:30;2256:56;;;2292:18;;:::i;:::-;-1:-1:-1;2337:1:7;2333:14;2349:4;2329:25;;2177:183::o;2365:662::-;2419:5;2472:3;2465:4;2457:6;2453:17;2449:27;2439:55;;2490:1;2487;2480:12;2439:55;2526:6;2513:20;2552:4;2576:60;2592:43;2632:2;2592:43;:::i;:::-;2576:60;:::i;:::-;2670:15;;;2756:1;2752:10;;;;2740:23;;2736:32;;;2701:12;;;;2780:15;;;2777:35;;;2808:1;2805;2798:12;2777:35;2844:2;2836:6;2832:15;2856:142;2872:6;2867:3;2864:15;2856:142;;;2938:17;;2926:30;;2976:12;;;;2889;;2856:142;;;-1:-1:-1;3016:5:7;2365:662;-1:-1:-1;;;;;;2365:662:7:o;3032:367::-;3095:8;3105:6;3159:3;3152:4;3144:6;3140:17;3136:27;3126:55;;3177:1;3174;3167:12;3126:55;-1:-1:-1;3200:20:7;;-1:-1:-1;;;;;3232:30:7;;3229:50;;;3275:1;3272;3265:12;3229:50;3312:4;3304:6;3300:17;3288:29;;3372:3;3365:4;3355:6;3352:1;3348:14;3340:6;3336:27;3332:38;3329:47;3326:67;;;3389:1;3386;3379:12;3326:67;3032:367;;;;;:::o;3404:1074::-;3569:6;3577;3585;3593;3601;3609;3662:3;3650:9;3641:7;3637:23;3633:33;3630:53;;;3679:1;3676;3669:12;3630:53;3702:29;3721:9;3702:29;:::i;:::-;3692:39;;3782:2;3771:9;3767:18;3754:32;-1:-1:-1;;;;;3846:2:7;3838:6;3835:14;3832:34;;;3862:1;3859;3852:12;3832:34;3885:61;3938:7;3929:6;3918:9;3914:22;3885:61;:::i;:::-;3875:71;;3999:2;3988:9;3984:18;3971:32;3955:48;;4028:2;4018:8;4015:16;4012:36;;;4044:1;4041;4034:12;4012:36;4083:72;4147:7;4136:8;4125:9;4121:24;4083:72;:::i;:::-;4174:8;;-1:-1:-1;4057:98:7;-1:-1:-1;4262:2:7;4247:18;;4234:32;;-1:-1:-1;4278:16:7;;;4275:36;;;4307:1;4304;4297:12;4275:36;;4346:72;4410:7;4399:8;4388:9;4384:24;4346:72;:::i;:::-;3404:1074;;;;-1:-1:-1;3404:1074:7;;-1:-1:-1;3404:1074:7;;4437:8;;3404:1074;-1:-1:-1;;;3404:1074:7:o;4483:472::-;4525:3;4563:5;4557:12;4590:6;4585:3;4578:19;4615:1;4625:162;4639:6;4636:1;4633:13;4625:162;;;4701:4;4757:13;;;4753:22;;4747:29;4729:11;;;4725:20;;4718:59;4654:12;4625:162;;;4805:6;4802:1;4799:13;4796:87;;;4871:1;4864:4;4855:6;4850:3;4846:16;4842:27;4835:38;4796:87;-1:-1:-1;4937:2:7;4916:15;-1:-1:-1;;4912:29:7;4903:39;;;;4944:4;4899:50;;4483:472;-1:-1:-1;;4483:472:7:o;4960:220::-;5109:2;5098:9;5091:21;5072:4;5129:45;5170:2;5159:9;5155:18;5147:6;5129:45;:::i;5377:186::-;5436:6;5489:2;5477:9;5468:7;5464:23;5460:32;5457:52;;;5505:1;5502;5495:12;5457:52;5528:29;5547:9;5528:29;:::i;5568:105::-;5647:1;5640:5;5637:12;5627:40;;5663:1;5660;5653:12;5678:587;5784:6;5792;5800;5853:2;5841:9;5832:7;5828:23;5824:32;5821:52;;;5869:1;5866;5859:12;5821:52;5909:9;5896:23;-1:-1:-1;;;;;5934:6:7;5931:30;5928:50;;;5974:1;5971;5964:12;5928:50;6013:70;6075:7;6066:6;6055:9;6051:22;6013:70;:::i;:::-;6102:8;;-1:-1:-1;5987:96:7;-1:-1:-1;;6187:2:7;6172:18;;6159:32;6200:35;6159:32;6200:35;:::i;:::-;6254:5;6244:15;;;5678:587;;;;;:::o;6478:316::-;6555:6;6563;6571;6624:2;6612:9;6603:7;6599:23;6595:32;6592:52;;;6640:1;6637;6630:12;6592:52;-1:-1:-1;;6663:23:7;;;6733:2;6718:18;;6705:32;;-1:-1:-1;6784:2:7;6769:18;;;6756:32;;6478:316;-1:-1:-1;6478:316:7:o;6799:1146::-;6917:6;6925;6978:2;6966:9;6957:7;6953:23;6949:32;6946:52;;;6994:1;6991;6984:12;6946:52;7034:9;7021:23;-1:-1:-1;;;;;7104:2:7;7096:6;7093:14;7090:34;;;7120:1;7117;7110:12;7090:34;7158:6;7147:9;7143:22;7133:32;;7203:7;7196:4;7192:2;7188:13;7184:27;7174:55;;7225:1;7222;7215:12;7174:55;7261:2;7248:16;7283:4;7307:60;7323:43;7363:2;7323:43;:::i;7307:60::-;7401:15;;;7483:1;7479:10;;;;7471:19;;7467:28;;;7432:12;;;;7507:19;;;7504:39;;;7539:1;7536;7529:12;7504:39;7563:11;;;;7583:148;7599:6;7594:3;7591:15;7583:148;;;7665:23;7684:3;7665:23;:::i;:::-;7653:36;;7616:12;;;;7709;;;;7583:148;;;7750:5;-1:-1:-1;;7793:18:7;;7780:32;;-1:-1:-1;;7824:16:7;;;7821:36;;;7853:1;7850;7843:12;7821:36;;7876:63;7931:7;7920:8;7909:9;7905:24;7876:63;:::i;:::-;7866:73;;;6799:1146;;;;;:::o;7950:632::-;8121:2;8173:21;;;8243:13;;8146:18;;;8265:22;;;8092:4;;8121:2;8344:15;;;;8318:2;8303:18;;;8092:4;8387:169;8401:6;8398:1;8395:13;8387:169;;;8462:13;;8450:26;;8531:15;;;;8496:12;;;;8423:1;8416:9;8387:169;;;-1:-1:-1;8573:3:7;;7950:632;-1:-1:-1;;;;;;7950:632:7:o;8587:1163::-;8754:6;8762;8770;8778;8786;8794;8802;8855:3;8843:9;8834:7;8830:23;8826:33;8823:53;;;8872:1;8869;8862:12;8823:53;8912:9;8899:23;-1:-1:-1;;;;;8982:2:7;8974:6;8971:14;8968:34;;;8998:1;8995;8988:12;8968:34;9037:70;9099:7;9090:6;9079:9;9075:22;9037:70;:::i;:::-;9126:8;;-1:-1:-1;9011:96:7;-1:-1:-1;9214:2:7;9199:18;;9186:32;;-1:-1:-1;9230:16:7;;;9227:36;;;9259:1;9256;9249:12;9227:36;9298:72;9362:7;9351:8;9340:9;9336:24;9298:72;:::i;:::-;9389:8;;-1:-1:-1;9272:98:7;-1:-1:-1;9477:2:7;9462:18;;9449:32;;-1:-1:-1;9493:16:7;;;9490:36;;;9522:1;9519;9512:12;9490:36;;9561:72;9625:7;9614:8;9603:9;9599:24;9561:72;:::i;:::-;9652:8;;-1:-1:-1;9535:98:7;-1:-1:-1;9706:38:7;;-1:-1:-1;9740:2:7;9725:18;;9706:38;:::i;:::-;9696:48;;8587:1163;;;;;;;;;;:::o;9755:348::-;9839:6;9892:2;9880:9;9871:7;9867:23;9863:32;9860:52;;;9908:1;9905;9898:12;9860:52;9948:9;9935:23;-1:-1:-1;;;;;9973:6:7;9970:30;9967:50;;;10013:1;10010;10003:12;9967:50;10036:61;10089:7;10080:6;10069:9;10065:22;10036:61;:::i;:::-;10026:71;9755:348;-1:-1:-1;;;;9755:348:7:o;10108:803::-;10270:4;10299:2;10339;10328:9;10324:18;10369:2;10358:9;10351:21;10392:6;10427;10421:13;10458:6;10450;10443:22;10496:2;10485:9;10481:18;10474:25;;10558:2;10548:6;10545:1;10541:14;10530:9;10526:30;10522:39;10508:53;;10596:2;10588:6;10584:15;10617:1;10627:255;10641:6;10638:1;10635:13;10627:255;;;10734:2;10730:7;10718:9;10710:6;10706:22;10702:36;10697:3;10690:49;10762:40;10795:6;10786;10780:13;10762:40;:::i;:::-;10752:50;-1:-1:-1;10860:12:7;;;;10825:15;;;;10663:1;10656:9;10627:255;;;-1:-1:-1;10899:6:7;;10108:803;-1:-1:-1;;;;;;;10108:803:7:o;10916:711::-;11038:6;11046;11054;11062;11070;11078;11131:3;11119:9;11110:7;11106:23;11102:33;11099:53;;;11148:1;11145;11138:12;11099:53;11188:9;11175:23;-1:-1:-1;;;;;11213:6:7;11210:30;11207:50;;;11253:1;11250;11243:12;11207:50;11292:70;11354:7;11345:6;11334:9;11330:22;11292:70;:::i;:::-;11381:8;;11266:96;;-1:-1:-1;11463:2:7;11448:18;;11435:32;;11514:2;11499:18;;11486:32;;-1:-1:-1;11565:2:7;11550:18;;11537:32;;-1:-1:-1;11616:3:7;11601:19;11588:33;;-1:-1:-1;10916:711:7;-1:-1:-1;;;;10916:711:7:o;11632:658::-;11803:2;11855:21;;;11925:13;;11828:18;;;11947:22;;;11774:4;;11803:2;12026:15;;;;12000:2;11985:18;;;11774:4;12069:195;12083:6;12080:1;12077:13;12069:195;;;12148:13;;-1:-1:-1;;;;;12144:39:7;12132:52;;12239:15;;;;12204:12;;;;12180:1;12098:9;12069:195;;12295:832;12373:6;12381;12434:2;12422:9;12413:7;12409:23;12405:32;12402:52;;;12450:1;12447;12440:12;12402:52;12486:9;12473:23;12463:33;;12515:2;12568;12557:9;12553:18;12540:32;-1:-1:-1;;;;;12632:2:7;12624:6;12621:14;12618:34;;;12648:1;12645;12638:12;12618:34;12686:6;12675:9;12671:22;12661:32;;12731:7;12724:4;12720:2;12716:13;12712:27;12702:55;;12753:1;12750;12743:12;12702:55;12789:2;12776:16;12811:2;12807;12804:10;12801:36;;;12817:18;;:::i;:::-;12859:53;12902:2;12883:13;;-1:-1:-1;;12879:27:7;12875:36;;12859:53;:::i;:::-;12846:66;;12935:2;12928:5;12921:17;12975:7;12970:2;12965;12961;12957:11;12953:20;12950:33;12947:53;;;12996:1;12993;12986:12;12947:53;13051:2;13046;13042;13038:11;13033:2;13026:5;13022:14;13009:45;13095:1;13090:2;13085;13078:5;13074:14;13070:23;13063:34;;13116:5;13106:15;;;;;12295:832;;;;;:::o;13132:963::-;13282:6;13290;13298;13306;13359:2;13347:9;13338:7;13334:23;13330:32;13327:52;;;13375:1;13372;13365:12;13327:52;13415:9;13402:23;-1:-1:-1;;;;;13485:2:7;13477:6;13474:14;13471:34;;;13501:1;13498;13491:12;13471:34;13540:70;13602:7;13593:6;13582:9;13578:22;13540:70;:::i;:::-;13629:8;;-1:-1:-1;13514:96:7;-1:-1:-1;13717:2:7;13702:18;;13689:32;;-1:-1:-1;13733:16:7;;;13730:36;;;13762:1;13759;13752:12;13730:36;13800:8;13789:9;13785:24;13775:34;;13847:7;13840:4;13836:2;13832:13;13828:27;13818:55;;13869:1;13866;13859:12;13818:55;13909:2;13896:16;13935:2;13927:6;13924:14;13921:34;;;13951:1;13948;13941:12;13921:34;14009:7;14004:2;13994:6;13986;13982:19;13978:2;13974:28;13970:37;13967:50;13964:70;;;14030:1;14027;14020:12;13964:70;13132:963;;;;-1:-1:-1;;14061:2:7;14053:11;;-1:-1:-1;;;13132:963:7:o;14100:254::-;14168:6;14176;14229:2;14217:9;14208:7;14204:23;14200:32;14197:52;;;14245:1;14242;14235:12;14197:52;14281:9;14268:23;14258:33;;14310:38;14344:2;14333:9;14329:18;14310:38;:::i;:::-;14300:48;;14100:254;;;;;:::o;15198:160::-;15262:5;15307:3;15298:6;15293:3;15289:16;15285:26;15282:46;;;15324:1;15321;15314:12;15282:46;-1:-1:-1;15346:6:7;15198:160;-1:-1:-1;15198:160:7:o;15363:1614::-;15606:6;15614;15622;15630;15638;15646;15654;15662;15670;15678;15731:3;15719:9;15710:7;15706:23;15702:33;15699:53;;;15748:1;15745;15738:12;15699:53;15788:9;15775:23;-1:-1:-1;;;;;15858:2:7;15850:6;15847:14;15844:34;;;15874:1;15871;15864:12;15844:34;15913:70;15975:7;15966:6;15955:9;15951:22;15913:70;:::i;:::-;16002:8;;-1:-1:-1;15887:96:7;-1:-1:-1;16090:2:7;16075:18;;16062:32;;-1:-1:-1;16106:16:7;;;16103:36;;;16135:1;16132;16125:12;16103:36;16174:72;16238:7;16227:8;16216:9;16212:24;16174:72;:::i;:::-;16265:8;;-1:-1:-1;16148:98:7;-1:-1:-1;16353:2:7;16338:18;;16325:32;;-1:-1:-1;16369:16:7;;;16366:36;;;16398:1;16395;16388:12;16366:36;16437:72;16501:7;16490:8;16479:9;16475:24;16437:72;:::i;:::-;16528:8;;-1:-1:-1;16411:98:7;-1:-1:-1;16411:98:7;;-1:-1:-1;16582:38:7;16616:2;16601:18;;16582:38;:::i;:::-;16572:48;;16673:3;16662:9;16658:19;16645:33;16629:49;;16703:2;16693:8;16690:16;16687:36;;;16719:1;16716;16709:12;16687:36;;16758:72;16822:7;16811:8;16800:9;16796:24;16758:72;:::i;:::-;16849:8;;-1:-1:-1;16732:98:7;-1:-1:-1;16903:68:7;;-1:-1:-1;16963:7:7;16957:3;16942:19;;16903:68;:::i;:::-;16893:78;;15363:1614;;;;;;;;;;;;;:::o;16982:961::-;17199:2;17251:21;;;17321:13;;17224:18;;;17343:22;;;17170:4;;17199:2;17384;;17402:18;;;;17443:15;;;17170:4;17486:431;17500:6;17497:1;17494:13;17486:431;;;17559:13;;17601:9;;-1:-1:-1;;;;;17597:35:7;17585:48;;17673:11;;;17667:18;17653:12;;;17646:40;17726:11;;;17720:18;17706:12;;;17699:40;17762:4;17820:11;;;17814:18;17807:26;17800:34;17786:12;;;17779:56;17864:4;17855:14;;;;17892:15;;;;17629:1;17515:9;17486:431;;;-1:-1:-1;17934:3:7;;16982:961;-1:-1:-1;;;;;;;16982:961:7:o;17948:339::-;18044:6;18052;18096:9;18087:7;18083:23;18126:3;18122:2;18118:12;18115:32;;;18143:1;18140;18133:12;18115:32;18166:23;;;-1:-1:-1;18223:3:7;-1:-1:-1;;18205:16:7;;18201:26;18198:46;;;18240:1;18237;18230:12;18198:46;;18278:2;18267:9;18263:18;18253:28;;17948:339;;;;;:::o;18372:127::-;18433:10;18428:3;18424:20;18421:1;18414:31;18464:4;18461:1;18454:15;18488:4;18485:1;18478:15;18504:137;18582:1;18575:5;18572:12;18562:46;;18588:18;;:::i;:::-;18617;;18504:137::o;18646:138::-;18725:1;18718:5;18715:12;18705:46;;18731:18;;:::i;18789:2063::-;19005:13;;18359:4;18348:16;18336:29;;18975:3;18960:19;;19077:4;19069:6;19065:17;19059:24;19092:52;19138:4;19127:9;19123:20;19109:12;18359:4;18348:16;18336:29;;18292:75;19092:52;;19193:4;19185:6;19181:17;19175:24;19208:54;19256:4;19245:9;19241:20;19225:14;18359:4;18348:16;18336:29;;18292:75;19208:54;;19311:4;19303:6;19299:17;19293:24;19326:54;19374:4;19363:9;19359:20;19343:14;18359:4;18348:16;18336:29;;18292:75;19326:54;;19429:4;19421:6;19417:17;19411:24;19444:54;19492:4;19481:9;19477:20;19461:14;18359:4;18348:16;18336:29;;18292:75;19444:54;;19547:4;19539:6;19535:17;19529:24;19562:54;19610:4;19599:9;19595:20;19579:14;18359:4;18348:16;18336:29;;18292:75;19562:54;;19665:4;19657:6;19653:17;19647:24;19680:54;19728:4;19717:9;19713:20;19697:14;18359:4;18348:16;18336:29;;18292:75;19680:54;;19783:4;19775:6;19771:17;19765:24;19798:54;19846:4;19835:9;19831:20;19815:14;18359:4;18348:16;18336:29;;18292:75;19798:54;-1:-1:-1;19871:6:7;19914:15;;;19908:22;18359:4;18348:16;;;19972:18;;;18336:29;;;;20010:6;20053:15;;;20047:22;18348:16;;20111:18;;;18336:29;20149:6;20192:15;;;20186:22;18348:16;;20250:18;;;18336:29;20288:6;20332:15;;;20326:22;18348:16;;20391:18;;;18336:29;20429:6;20473:15;;;20467:22;18348:16;;;20532:18;;;18336:29;20570:6;20614:15;;;20608:22;20639:59;20679:18;;;20608:22;20639:59;:::i;:::-;;;20717:6;20773:2;20765:6;20761:15;20755:22;20786:60;20842:2;20831:9;20827:18;20810:15;20786:60;:::i;:::-;;;18789:2063;;;;:::o;20857:340::-;21059:2;21041:21;;;21098:2;21078:18;;;21071:30;-1:-1:-1;;;21132:2:7;21117:18;;21110:46;21188:2;21173:18;;20857:340::o;23271:184::-;23341:6;23394:2;23382:9;23373:7;23369:23;23365:32;23362:52;;;23410:1;23407;23400:12;23362:52;-1:-1:-1;23433:16:7;;23271:184;-1:-1:-1;23271:184:7:o;23809:375::-;-1:-1:-1;;;;;24067:15:7;;;24049:34;;24119:15;;;;24114:2;24099:18;;24092:43;24166:2;24151:18;;24144:34;;;;23999:2;23984:18;;23809:375::o;24189:132::-;24265:13;;24287:28;24265:13;24287:28;:::i;24326:245::-;24393:6;24446:2;24434:9;24425:7;24421:23;24417:32;24414:52;;;24462:1;24459;24452:12;24414:52;24494:9;24488:16;24513:28;24535:5;24513:28;:::i;24576:351::-;24778:2;24760:21;;;24817:2;24797:18;;;24790:30;24856:29;24851:2;24836:18;;24829:57;24918:2;24903:18;;24576:351::o;24932:380::-;25011:1;25007:12;;;;25054;;;25075:61;;25129:4;25121:6;25117:17;25107:27;;25075:61;25182:2;25174:6;25171:14;25151:18;25148:38;25145:161;;25228:10;25223:3;25219:20;25216:1;25209:31;25263:4;25260:1;25253:15;25291:4;25288:1;25281:15;25596:339;25798:2;25780:21;;;25837:2;25817:18;;;25810:30;-1:-1:-1;;;25871:2:7;25856:18;;25849:45;25926:2;25911:18;;25596:339::o;25940:299::-;-1:-1:-1;;;;;26141:32:7;;26123:51;;26111:2;26096:18;;26183:50;26229:2;26214:18;;26206:6;26183:50;:::i;26602:127::-;26663:10;26658:3;26654:20;26651:1;26644:31;26694:4;26691:1;26684:15;26718:4;26715:1;26708:15;26734:128;26774:3;26805:1;26801:6;26798:1;26795:13;26792:39;;;26811:18;;:::i;:::-;-1:-1:-1;26847:9:7;;26734:128::o;27213:513::-;-1:-1:-1;;;;;27514:32:7;;;;27496:51;;27578:2;27563:18;;27556:34;;;;27621:2;27606:18;;27599:34;;;;27664:2;27649:18;;27642:34;27707:3;27692:19;;27685:35;27483:3;27468:19;;27213:513::o;31049:342::-;31251:2;31233:21;;;31290:2;31270:18;;;31263:30;-1:-1:-1;;;31324:2:7;31309:18;;31302:48;31382:2;31367:18;;31049:342::o;32109:127::-;32170:10;32165:3;32161:20;32158:1;32151:31;32201:4;32198:1;32191:15;32225:4;32222:1;32215:15;32241:346;32443:2;32425:21;;;32482:2;32462:18;;;32455:30;-1:-1:-1;;;32516:2:7;32501:18;;32494:52;32578:2;32563:18;;32241:346::o;34006:334::-;34208:2;34190:21;;;34247:2;34227:18;;;34220:30;-1:-1:-1;;;34281:2:7;34266:18;;34259:40;34331:2;34316:18;;34006:334::o;34701:198::-;34744:11;34796:3;34783:17;34840:4;34833:5;34829:16;34822:5;34819:27;34809:55;;34860:1;34857;34850:12;37517:184;37566:11;37618:3;37605:17;37631:35;37660:5;37631:35;:::i;37706:265::-;37818:1;37811:5;37808:12;37798:46;;37824:18;;:::i;:::-;37863:11;;-1:-1:-1;;;;37899:27:7;37953:3;37932:15;;;;-1:-1:-1;;;37928:35:7;37896:68;;;;37883:82;;37706:265::o;37976:190::-;38026:11;38078:3;38065:17;38111:1;38104:5;38101:12;38091:40;;38127:1;38124;38117:12;38171:267;38285:1;38278:5;38275:12;38265:46;;38291:18;;:::i;:::-;38330:11;;-1:-1:-1;;;;38366:27:7;38420:3;38399:15;;;;-1:-1:-1;;;38395:35:7;38363:68;;;;38350:82;;38171:267::o;38443:1719::-;38582:85;38634:32;38660:5;38634:32;:::i;:::-;35006:11;;-1:-1:-1;;35002:26:7;35041:4;35030:16;;;;34999:48;34986:62;;34904:150;38582:85;38676:94;38728:41;38765:2;38758:5;38754:14;38728:41;:::i;:::-;35151:11;;-1:-1:-1;;35187:19:7;35216:1;35212:13;;;;35227:5;35208:25;35184:50;35171:64;;35059:182;38676:94;38779;38831:41;38868:2;38861:5;38857:14;38831:41;:::i;:::-;35338:11;;-1:-1:-1;;35374:22:7;35406:2;35402:14;;;;35418:8;35398:29;35371:57;35358:71;;35246:189;38779:94;38882:92;38932:41;38969:2;38962:5;38958:14;38932:41;:::i;:::-;35530:11;;-1:-1:-1;;35566:24:7;35600:2;35596:14;;;;35612:10;35592:31;35563:61;35550:75;;35440:191;38882:92;38983:95;39035:42;39072:3;39065:5;39061:15;39035:42;:::i;:::-;35728:11;;-1:-1:-1;;35764:26:7;35800:2;35796:14;;;;35812:12;35792:33;35761:65;35748:79;;35636:197;38983:95;39087;39139:42;39176:3;39169:5;39165:15;39139:42;:::i;:::-;35930:11;;-1:-1:-1;;35966:28:7;36004:2;36000:14;;;;36016;35996:35;35963:69;35950:83;;35838:201;39087:95;39191;39243:42;39280:3;39273:5;39269:15;39243:42;:::i;:::-;36136:11;;-1:-1:-1;;36172:30:7;36212:2;36208:14;;;;36224:16;36204:37;36169:73;36156:87;;36044:205;39191:95;39295;39347:42;39384:3;39377:5;39373:15;39347:42;:::i;:::-;36346:11;;-1:-1:-1;;36382:32:7;36424:2;36420:14;;;;36436:18;36416:39;36379:77;36366:91;;36254:209;39295:95;39399;39451:42;39488:3;39481:5;39477:15;39451:42;:::i;:::-;36560:11;;-1:-1:-1;;36596:34:7;36640:2;36636:14;;;;36652:20;36632:41;36593:81;36580:95;;36468:213;39399:95;39503;39555:42;39592:3;39585:5;39581:15;39555:42;:::i;:::-;36778:11;;-1:-1:-1;;36814:36:7;36860:2;36856:14;;;;36872:22;36852:43;36811:85;36798:99;;36686:217;39503:95;39607:96;39660:42;39697:3;39690:5;39686:15;39660:42;:::i;:::-;39654:4;37001:11;;-1:-1:-1;;;;37037:26:7;37089:2;37069:14;;;;-1:-1:-1;;;37065:33:7;37034:65;;;;37021:79;;36908:198;39607:96;39712;39765:42;39802:3;39795:5;39791:15;39765:42;:::i;:::-;39759:4;37204:11;;-1:-1:-1;;;;37240:26:7;37292:2;37272:14;;;;-1:-1:-1;;;37268:33:7;37237:65;;;;37224:79;;37111:198;39712:96;39817;39870:42;39907:3;39900:5;39896:15;39870:42;:::i;:::-;39864:4;37407:11;;-1:-1:-1;;;;37443:26:7;37495:2;37475:14;;;;-1:-1:-1;;;37471:33:7;37440:65;;;;37427:79;;37314:198;39817:96;39922:111;39984:48;40027:3;40020:5;40016:15;39984:48;:::i;:::-;39978:4;39922:111;:::i;:::-;40042:114;40106:49;40150:3;40143:5;40139:15;40106:49;:::i;:::-;40100:4;40042:114;:::i;:::-;;;38443:1719::o;41932:168::-;41972:7;42038:1;42034;42030:6;42026:14;42023:1;42020:21;42015:1;42008:9;42001:17;41997:45;41994:71;;;42045:18;;:::i;:::-;-1:-1:-1;42085:9:7;;41932:168::o;44594:354::-;44682:19;;;44664:3;-1:-1:-1;;;;;44713:31:7;;44710:51;;;44757:1;44754;44747:12;44710:51;44793:6;44790:1;44786:14;44845:8;44838:5;44831:4;44826:3;44822:14;44809:45;44922:1;44877:18;;44897:4;44873:29;44911:13;;;-1:-1:-1;44873:29:7;;44594:354;-1:-1:-1;;44594:354:7:o;44953:616::-;-1:-1:-1;;;;;45258:32:7;;45240:51;;45327:2;45322;45307:18;;45300:30;;;-1:-1:-1;;45353:73:7;;45407:18;;45399:6;45391;45353:73;:::i;:::-;45474:9;45466:6;45462:22;45457:2;45446:9;45442:18;45435:50;45502:61;45556:6;45548;45540;45502:61;:::i;:::-;45494:69;44953:616;-1:-1:-1;;;;;;;;44953:616:7:o;45574:192::-;45653:13;;-1:-1:-1;;;;;45695:46:7;;45685:57;;45675:85;;45756:1;45753;45746:12;45771:2608;45892:6;45923:2;45966;45954:9;45945:7;45941:23;45937:32;45934:52;;;45982:1;45979;45972:12;45934:52;46015:9;46009:16;-1:-1:-1;;;;;46040:6:7;46037:30;46034:50;;;46080:1;46077;46070:12;46034:50;46103:22;;46156:4;46148:13;;46144:27;-1:-1:-1;46134:55:7;;46185:1;46182;46175:12;46134:55;46214:2;46208:9;46237:60;46253:43;46293:2;46253:43;:::i;46237:60::-;46331:15;;;46393:6;46434:11;;;46426:20;;46422:29;;;46362:12;;;;46319:3;46463:19;;;46460:39;;;46495:1;46492;46485:12;46460:39;46519:11;;;;46539:1810;46555:6;46550:3;46547:15;46539:1810;;;46635:2;46629:3;46620:7;46616:17;46612:26;46609:116;;;46679:1;46708:2;46704;46697:14;46609:116;46751:22;;:::i;:::-;46800:34;46830:3;46800:34;:::i;:::-;46793:5;46786:49;46871:40;46907:2;46902:3;46898:12;46871:40;:::i;:::-;46866:2;46859:5;46855:14;46848:64;46935:2;46973:40;47009:2;47004:3;47000:12;46973:40;:::i;:::-;46957:14;;;46950:64;47037:2;47075:40;47102:12;;;47075:40;:::i;:::-;47059:14;;;47052:64;47139:3;47178:40;47205:12;;;47178:40;:::i;:::-;47162:14;;;47155:64;47242:3;47281:40;47308:12;;;47281:40;:::i;:::-;47265:14;;;47258:64;47346:3;47386:41;47413:13;;;47386:41;:::i;:::-;47369:15;;;47362:66;47452:3;47492:41;47519:13;;;47492:41;:::i;:::-;47475:15;;;47468:66;47558:3;47598:41;47625:13;;;47598:41;:::i;:::-;47581:15;;;47574:66;47664:3;47704:41;47731:13;;;47704:41;:::i;:::-;47687:15;;;47680:66;47770:3;47810:41;47837:13;;;47810:41;:::i;:::-;47793:15;;;47786:66;47876:3;47916:41;47943:13;;;47916:41;:::i;:::-;47899:15;;;47892:66;47982:3;48022:41;48049:13;;;48022:41;:::i;:::-;48005:15;;;47998:66;48088:3;48128:41;48155:13;;;48128:41;:::i;:::-;48111:15;;;48104:66;48194:3;48234:41;48261:13;;;48234:41;:::i;:::-;48217:15;;;48210:66;48289:18;;46572:12;;;;48327;;;;46539:1810;;;-1:-1:-1;48368:5:7;45771:2608;-1:-1:-1;;;;;;;45771:2608:7:o;49447:125::-;49487:4;49515:1;49512;49509:8;49506:34;;;49520:18;;:::i;:::-;-1:-1:-1;49557:9:7;;49447:125::o;50778:127::-;50839:10;50834:3;50830:20;50827:1;50820:31;50870:4;50867:1;50860:15;50894:4;50891:1;50884:15;50910:217;50950:1;50976;50966:132;;51020:10;51015:3;51011:20;51008:1;51001:31;51055:4;51052:1;51045:15;51083:4;51080:1;51073:15;50966:132;-1:-1:-1;51112:9:7;;50910:217::o

Swarm Source

ipfs://587189e6446d9770b5882175c2d99054862a54212a1cbce1509faf08f0208b9e
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.