Contract Overview
Balance:
0 MOVR
MOVR Value:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
LandSaleMarket
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity Multiple files format)
//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"); 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() external view returns (uint256) { return _claimableEscrow[msg.sender]; } function _getPayAndFee(uint256 price) private view returns (uint256, uint256) { uint256 fee = uint256(price * _creatorFee) / _PRICE_PRECISION; uint256 pay = uint256(price - fee); return (pay, fee); } }
//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; } }
//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); }
//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(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; } 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(uint256[] memory plotIds, uint256[] calldata singleDiscountIndexes, uint256[] calldata multiDiscountIndexes) external view returns (uint) { return _getPurchasePrice(plotIds, singleDiscountIndexes, multiDiscountIndexes); } function _getPurchasePrice(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(msg.sender, 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; } } }
//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; } }
//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; 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 onlyOwner onlyOwnerOrAdmin { _plotDataLock = state; } 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 setPlotOwner(address user, uint256 plotId) internal { address oldOwner = _plotOwners[plotId]; _plotOwners[plotId] = user; _allOwnedPlots[user].push(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 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; } }
//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; } }
[{"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":"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":[],"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":"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":"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":[{"internalType":"uint256","name":"plotId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"makeOffer","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"}]
Contract Creation Code
60e0604052620186a0600c553480156200001857600080fd5b5060405162005eb538038062005eb58339810160408190526200003b9162000191565b600080546001600160a01b031916331790558383836402540be4008311620000aa5760405162461bcd60e51b815260206004820152601f60248201527f436f6d6d6f6e207072696365206d757374206265203e2031207863524d524b0060448201526064015b60405180910390fd5b6402540be4008211620001005760405162461bcd60e51b815260206004820152601d60248201527f52617265207072696365206d757374206265203e2031207863524d524b0000006044820152606401620000a1565b6402540be4008111620001565760405162461bcd60e51b815260206004820152601d60248201527f45706963207072696365206d757374206265203e2031207863524d524b0000006044820152606401620000a1565b60809290925260a05260c052600d805460ff19166001179055600a600e5560135550506012805461010161ffff1990911617905550620001c8565b60008060008060808587031215620001a857600080fd5b505082516020840151604085015160609095015191969095509092509050565b60805160a05160c051615ca86200020d6000396000818161043a015261452701526000818161041401526144e10152600081816103f1015261449b0152615ca86000f3fe608060405234801561001057600080fd5b50600436106103e65760003560e01c8063877850ef1161020a578063c1744fd811610125578063dfa49e6f116100b8578063f2b0a55d11610087578063f2b0a55d14610984578063f2fde38b146109a4578063f38ced47146109b7578063f48dab70146109c2578063fefa9bb1146109d557600080fd5b8063dfa49e6f1461092b578063e5e06d451461094b578063e63c88dc1461095e578063f0b3300f1461097157600080fd5b8063d64d6968116100f4578063d64d6968146108c6578063d6febde8146108f2578063da4e364f14610905578063dd9e9dc81461091857600080fd5b8063c1744fd814610839578063d21c694814610898578063d3a8c4ec146108a0578063d45557cc146108b357600080fd5b8063a1f45dd61161019d578063b7760c8f1161016c578063b7760c8f146107e4578063bc138fe0146107f7578063be08002514610813578063c0ea1f111461082657600080fd5b8063a1f45dd614610782578063a718d525146107ab578063b3de019c146107be578063b6733440146107d157600080fd5b806393c533f2116101d957806393c533f214610729578063964bc33f1461073c578063992274b11461074f578063a11b6fbb1461076257600080fd5b8063877850ef146106d05780638927e627146106e3578063893d20e8146107035780638a3866aa1461071457600080fd5b80633db7a49f116103055780635a5b0f56116102985780637048027511610267578063704802751461067357806379bd6cf9146106865780637a00e2e314610697578063864ca485146106aa5780638708c55e146106bd57600080fd5b80635a5b0f56146106355780635c09d6281461063d5780635f53e07714610650578063635335231461066357600080fd5b806347831ac0116102d457806347831ac0146105f657806350fd7367146105fe578063549458d414610611578063565a2e2c1461062457600080fd5b80633db7a49f146105b05780633e104219146105bb57806342434134146105db578063450d996a146105e357600080fd5b80631c31f7101161037d57806326394dbd1161034c57806326394dbd146105585780632a46841f146105825780632c92f9bc1461058a5780632d3456701461059d57600080fd5b80631c31f710146105145780631da66c27146105275780631e4a81161461053257806324d7806c1461054557600080fd5b80630dd16fd5116103b95780630dd16fd51461049c5780630e15166e146104af578063142a6fca146104c2578063194a9716146104e257600080fd5b8063012a5331146103eb57806301d3f03b1461046d578063024463c11461047f57806305b7cdd314610487575b600080fd5b604080517f000000000000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091526060015b60405180910390f35b600a545b604051908152602001610464565b600c54610471565b61049a610495366004614ab9565b6109e8565b005b61049a6104aa366004614adb565b610ddb565b61049a6104bd366004614b02565b610e19565b6104d56104d0366004614adb565b610e65565b6040516104649190614b6c565b6105046104f0366004614adb565b600090815260146020526040902054151590565b6040519015158152602001610464565b61049a610522366004614b9b565b610f07565b60125460ff16610504565b61049a610540366004614c0e565b610f62565b610504610553366004614b9b565b6114b8565b60065461010090046001600160a01b03165b6040516001600160a01b039091168152602001610464565b61049a6114d7565b61049a610598366004614c64565b6115dc565b61049a6105ab366004614b9b565b61166c565b60065460ff16610504565b6105ce6105c9366004614b9b565b6116b0565b6040516104649190614c90565b600e54610471565b61049a6105f1366004614cd4565b61171b565b600954610471565b61049a61060c366004614ab9565b611799565b61049a61061f366004614b9b565b61192b565b6007546001600160a01b031661056a565b601354610471565b61049a61064b366004614b9b565b61198c565b61049a61065e366004614b02565b6119e7565b601254610100900460ff16610504565b61049a610681366004614b9b565b611a3a565b6008546001600160a01b031661056a565b61049a6106a5366004614b9b565b611ad7565b61049a6106b8366004614adb565b611b2a565b61049a6106cb366004614b02565b611b68565b61049a6106de366004614adb565b611bde565b6106f66106f1366004614e7b565b611c5c565b6040516104649190614eb7565b6000546001600160a01b031661056a565b33600090815260166020526040902054610471565b610471610737366004614f19565b611da4565b61049a61074a366004614adb565b611dbd565b61049a61075d366004614fad565b611e32565b610775610770366004614e7b565b611eae565b604051610464919061500e565b61056a610790366004614adb565b6000908152600360205260409020546001600160a01b031690565b61049a6107b936600461504f565b611f7c565b61049a6107cc366004614ab9565b612011565b61049a6107df3660046150ed565b61211a565b61049a6107f2366004615187565b612261565b601054600f545b60408051928352602083019190915201610464565b61049a610821366004614b02565b61245c565b610504610834366004614adb565b6124a8565b61084c610847366004614b9b565b612536565b6040516104649190815163ffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b600b54610471565b6104716108ae366004614adb565b612612565b61049a6108c1366004614ab9565b612623565b6105046108d4366004614b9b565b6001600160a01b031660009081526011602052604090205460011490565b61049a610900366004614ab9565b612849565b610471610913366004614adb565b612b40565b61049a6109263660046151cb565b612c61565b61093e610939366004614adb565b612cf4565b60405161046491906152b4565b6107fe610959366004614adb565b612d96565b61049a61096c366004614c64565b612df1565b61049a61097f366004615323565b613132565b610997610992366004614adb565b6131de565b6040516104649190615397565b61049a6109b2366004614b9b565b6133b8565b600d5460ff16610504565b6104716109d0366004614adb565b61345a565b61049a6109e3366004614b9b565b613486565b60125460ff1615610a145760405162461bcd60e51b8152600401610a0b906154ae565b60405180910390fd5b60008111610a645760405162461bcd60e51b815260206004820152601b60248201527f5072696365206d75737420626520686967686572207468616e203000000000006044820152606401610a0b565b6000828152600360205260409020546001600160a01b0316338103610ac05760405162461bcd60e51b81526020600482015260126024820152712ab9b2b91034b9903630b7321037bbb732b960711b6044820152606401610a0b565b6001600160a01b038116610b0a5760405162461bcd60e51b8152602060048201526011602482015270506c6f74206e6f742073656c6c61626c6560781b6044820152606401610a0b565b6004600084815260026020526040902054600160681b900460ff166005811115610b3657610b3661535d565b03610b835760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206f66666572206f6e20486172626572676572206c616e6400006044820152606401610a0b565b6000838152601460205260409020548015610be757808310610be75760405162461bcd60e51b815260206004820152601760248201527f4f66666572206f766572206c69737465642070726963650000000000000000006044820152606401610a0b565b600654604051636eb1769f60e11b81523360048201523060248201526101009091046001600160a01b0316908490829063dd62ed3e90604401602060405180830381865afa158015610c3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6191906154d8565b1015610ca65760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f75676820616c6c6f77616e636560601b6044820152606401610a0b565b60408051608081018252338082526020808301888152428486019081526000606086018181528c825260158552878220805460018082018355918452959092208751600496870290910180546001600160a01b0319166001600160a01b039283161781559451928501929092559151600284015590516003909201805460ff19169215159290921790915593516323b872dd60e01b815292938516926323b872dd92610d5892909130918b91016154f1565b6020604051808303816000875af1158015610d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9b9190615520565b50604051858152339087907fbdf1e76c2ba2a5c85b93bf78678a4a3b06d63b18422612dac8d7d5249ed467149060200160405180910390a3505050505050565b6000546001600160a01b0316331480610df85750610df8336114b8565b610e145760405162461bcd60e51b8152600401610a0b9061553d565b601355565b6000546001600160a01b0316331480610e365750610e36336114b8565b610e525760405162461bcd60e51b8152600401610a0b9061553d565b6012805460ff1916911515919091179055565b6000818152600460205260409020805460609190610e8290615574565b80601f0160208091040260200160405190810160405280929190818152602001828054610eae90615574565b8015610efb5780601f10610ed057610100808354040283529160200191610efb565b820191906000526020600020905b815481529060010190602001808311610ede57829003601f168201915b50505050509050919050565b6000546001600160a01b0316331480610f245750610f24336114b8565b610f405760405162461bcd60e51b8152600401610a0b9061553d565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b158015610fb057600080fd5b505afa158015610fc4573d6000803e3d6000fd5b50849250505080610fe75760405162461bcd60e51b8152600401610a0b906155a8565b600854604051637bfb039f60e11b81526000916001600160a01b03169063f7f6073e9061101a90339087906004016155d1565b602060405180830381865afa158015611037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105b91906154d8565b9050818110156110ad5760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f756768206372656469747320696e206163636f756e740000006044820152606401610a0b565b60008060008060006110f18a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061353292505050565b9450945094509450945081816111079190615604565b60009250905060018860058111156111215761112161535d565b03611218578685146111695760405162461bcd60e51b81526020600482015260116024820152704f6e6c7920636f6d6d6f6e206c616e647360781b6044820152606401610a0b565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed906111a29033908b906000908190819060040161561c565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b505050506112138a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509250600191506137229050565b6114ac565b600288600581111561122c5761122c61535d565b036112c2578661123c8587615604565b146112895760405162461bcd60e51b815260206004820152601960248201527f4f6e6c7920636f6d6d6f6e206f722072617265206c616e6473000000000000006044820152606401610a0b565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed906111a29033906000908c908290819060040161561c565b60038860058111156112d6576112d661535d565b036113775786836112e78688615604565b6112f19190615604565b1461133e5760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920636f6d6d6f6e2c2072617265206f722065706963206c616e6473006044820152606401610a0b565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed906111a290339060009081908d90829060040161561c565b600588600581111561138b5761138b61535d565b1480156113b657508681846113a08789615604565b6113aa9190615604565b6113b49190615604565b145b6114025760405162461bcd60e51b815260206004820152601860248201527f556e6578706563746564206372656469742072617269747900000000000000006044820152606401610a0b565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed9061143b903390600090819081908e9060040161561c565b600060405180830381600087803b15801561145557600080fd5b505af1158015611469573d6000803e3d6000fd5b505050506114ac8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509250600191506137229050565b50505050505050505050565b6001600160a01b03166000908152600160208190526040909120541490565b336000908152601660205260409020548061152a5760405162461bcd60e51b815260206004820152601360248201527227379032b9b1b937bb903a37903932ba3ab93760691b6044820152606401610a0b565b60065460405163a9059cbb60e01b8152336004820152602481018390526101009091046001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a39190615520565b5060405181815233907fbf1a0ef092ef679427b427c6a95d51133522541e667b737b795a77f2b61c240d9060200160405180910390a250565b6000546001600160a01b03163314806115f957506115f9336114b8565b6116155760405162461bcd60e51b8152600401610a0b9061553d565b620f4240811061165e5760405162461bcd60e51b81526020600482015260146024820152732b30b63ab29037bb32b910383932b1b4b9b4b7b760611b6044820152606401610a0b565b600a92909255600b55600c55565b6000546001600160a01b031633146116965760405162461bcd60e51b8152600401610a0b9061564a565b6001600160a01b0316600090815260016020526040812055565b6001600160a01b038116600090815260056020908152604091829020805483518184028101840190945280845260609392830182828015610efb57602002820191906000526020600020905b8154815260200190600101908083116116fc5750505050509050919050565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b15801561176957600080fd5b505afa15801561177d573d6000803e3d6000fd5b5050505061179087878787878787613847565b50505050505050565b60008281526003602052604090205482906001600160a01b031633146117d15760405162461bcd60e51b8152600401610a0b90615676565b60125460ff16156117f45760405162461bcd60e51b8152600401610a0b906154ae565b600082116118445760405162461bcd60e51b815260206004820152601c60248201527f5072696365206d7573742062652067726561746572207468616e2030000000006044820152606401610a0b565b6004600084815260026020526040902054600160681b900460ff1660058111156118705761187061535d565b036118bd5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206c69737420486172626572676572206c616e640000000000006044820152606401610a0b565b60408051808201825283815242602080830191825260008781526014909152839020915182555160019091015551339084907f7f5dd6779248014167a5e507bf4a6edb7c0985fd0eb2fe89412fe3783a4b13309061191e9086815260200190565b60405180910390a3505050565b6000546001600160a01b03163314806119485750611948336114b8565b6119645760405162461bcd60e51b8152600401610a0b9061553d565b600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b03163314806119a957506119a9336114b8565b6119c55760405162461bcd60e51b8152600401610a0b9061553d565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331480611a045750611a04336114b8565b611a205760405162461bcd60e51b8152600401610a0b9061553d565b601280549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314611a645760405162461bcd60e51b8152600401610a0b9061564a565b6001600160a01b038116611aba5760405162461bcd60e51b815260206004820181905260248201527f41646d696e2063616e6e6f7420626520746865207a65726f20616464726573736044820152606401610a0b565b6001600160a01b0316600090815260016020819052604090912055565b6000546001600160a01b0316331480611af45750611af4336114b8565b611b105760405162461bcd60e51b8152600401610a0b9061553d565b6001600160a01b0316600090815260116020526040812055565b6000546001600160a01b0316331480611b475750611b47336114b8565b611b635760405162461bcd60e51b8152600401610a0b9061553d565b600e55565b6000546001600160a01b03163314611b925760405162461bcd60e51b8152600401610a0b9061564a565b6000546001600160a01b0316331480611baf5750611baf336114b8565b611bcb5760405162461bcd60e51b8152600401610a0b9061553d565b6006805460ff1916911515919091179055565b6000546001600160a01b0316331480611bfb5750611bfb336114b8565b611c175760405162461bcd60e51b8152600401610a0b9061553d565b6005811115611c575760405162461bcd60e51b815260206004820152600c60248201526b109859081c1a185cd9481a5960a21b6044820152606401610a0b565b600955565b80516060906000816001600160401b03811115611c7b57611c7b614d7e565b604051908082528060200260200182016040528015611cae57816020015b6060815260200190600190039081611c995790505b50905060005b82811015611d9c576000858281518110611cd057611cd06156a6565b60200260200101519050600460008281526020019081526020016000208054611cf890615574565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2490615574565b8015611d715780601f10611d4657610100808354040283529160200191611d71565b820191906000526020600020905b815481529060010190602001808311611d5457829003601f168201915b5050505050838381518110611d8857611d886156a6565b602090810291909101015250600101611cb4565b509392505050565b6000611db38686868686613b60565b9695505050505050565b60008181526003602052604090205481906001600160a01b03163314611df55760405162461bcd60e51b8152600401610a0b90615676565b611e0182600019613cbd565b604051339083907f731e216f3c5263def1695d416b13f97a35d25331ad11ccb640d803ebd105f4e890600090a35050565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b158015611e8057600080fd5b505afa158015611e94573d6000803e3d6000fd5b50505050611ea6868686868686613e35565b505050505050565b80516060906000816001600160401b03811115611ecd57611ecd614d7e565b604051908082528060200260200182016040528015611ef6578160200160208202803683370190505b50905060005b82811015611d9c576000858281518110611f1857611f186156a6565b602002602001015190506003600082815260200190815260200160002060009054906101000a90046001600160a01b0316838381518110611f5b57611f5b6156a6565b6001600160a01b039092166020928302919091019091015250600101611efc565b60008281526003602052604090205482906001600160a01b03163314611fb45760405162461bcd60e51b8152600401610a0b90615676565b60008381526004602090815260409091208351611fd3928501906149c3565b50827f98a3c3986b7677c879cb2d25ed860fa739755d655ee07fd9582d82a343200874836040516120049190614b6c565b60405180910390a2505050565b60008281526003602052604090205482906001600160a01b031633146120495760405162461bcd60e51b8152600401610a0b90615676565b600082116120995760405162461bcd60e51b815260206004820152601c60248201527f5072696365206d7573742062652067726561746572207468616e2030000000006044820152606401610a0b565b600083815260146020526040902054806120c55760405162461bcd60e51b8152600401610a0b906156bc565b6000848152601460209081526040918290208590558151838152908101859052339186917fe4e96eded0c1652afb311b4f5a4d768a48f1544ae888996bedc732c85778061e910160405180910390a350505050565b6000546001600160a01b03163314806121375750612137336114b8565b6121535760405162461bcd60e51b8152600401610a0b9061553d565b60065460ff16156121a65760405162461bcd60e51b815260206004820152601b60248201527f506c6f74206461746120736574746572206973206c6f636b65642e00000000006044820152606401610a0b565b828181146121f65760405162461bcd60e51b815260206004820181905260248201527f417272617973206d7573742068617665207468652073616d65206c656e6774686044820152606401610a0b565b60005b81811015611ea6576000868683818110612215576122156156a6565b905060200201359050848483818110612230576122306156a6565b90506101e00201600260008381526020019081526020016000208181612256919061576b565b5050506001016121f9565b60008281526003602052604090205482906001600160a01b031633146122995760405162461bcd60e51b8152600401610a0b90615676565b336001600160a01b038316036122f15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610a0b565b601254610100900460ff16156123405760405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c9cc8185c99481c185d5cd95960621b6044820152606401610a0b565b6000838152601460205260409020541561239c5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207472616e73666572206c697374656420706c6f7400000000006044820152606401610a0b565b6004600084815260026020526040902054600160681b900460ff1660058111156123c8576123c861535d565b036124155760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74207472616e7366657220486172626572676572206c616e6400006044820152606401610a0b565b61241f8284614074565b6040516001600160a01b03831690339085907f370ed8b5aeb5adcdf0f4852ad764fd28ca4cc2a9d744446d05da996594ea6aa490600090a4505050565b6000546001600160a01b03163314806124795750612479336114b8565b6124955760405162461bcd60e51b8152600401610a0b9061553d565b600d805460ff1916911515919091179055565b600080600083815260026020526040902054600160681b900460ff1660058111156124d5576124d561535d565b036125195760405162461bcd60e51b8152602060048201526014602482015273141b1bdd081b9bdd081a5b9a5d1a585b1a5e995960621b6044820152606401610a0b565b506000908152600360205260409020546001600160a01b03161590565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526001600160a01b0382166000908152600560209081526040808320805482518185028101850190935280835284938493849384936125d2938301828280156125c857602002820191906000526020600020905b8154815260200190600101908083116125b4575b5050505050613532565b6040805160a08101825263ffffffff9687168152948616602086015292851692840192909252831660608301529091166080820152979650505050505050565b600061261d82614299565b92915050565b600082815260156020526040902054811061267b5760405162461bcd60e51b81526020600482015260186024820152774f6666657220696e646578206f7574206f662072616e676560401b6044820152606401610a0b565b600082815260156020526040812080548390811061269b5761269b6156a6565b600091825260209182902060408051608081018252600490930290910180546001600160a01b03168084526001820154948401949094526002810154918301919091526003015460ff16151560608201529150331461273c5760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f74206f66666572206f776e65720000000000000000006044820152606401610a0b565b8060600151156127885760405162461bcd60e51b815260206004820152601760248201527613d999995c88185b1c9958591e4818d85b98d95b1b1959604a1b6044820152606401610a0b565b60208082015182516001600160a01b031660009081526016909252604082208054919290916127b8908490615604565b90915550506000838152601560205260409020805460019190849081106127e1576127e16156a6565b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550336001600160a01b0316837fe2dc0bfd2fc658db980184c3f7c091c2f886874e896043b562d5099c8d95b1dd836020015160405161191e91815260200190565b60125460ff161561286c5760405162461bcd60e51b8152600401610a0b906154ae565b60008281526014602090815260409182902082518084019093528054808452600190910154918301919091526128b45760405162461bcd60e51b8152600401610a0b906156bc565b6006548151604051636eb1769f60e11b81523360048201523060248201526101009092046001600160a01b031691829063dd62ed3e90604401602060405180830381865afa15801561290a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292e91906154d8565b10156129735760405162461bcd60e51b81526020600482015260146024820152734e6f7420656e6f75676820616c6c6f77616e636560601b6044820152606401610a0b565b815183146129ba5760405162461bcd60e51b81526020600482015260146024820152730a0e4d2c6ca40c8decae640dcdee840dac2e8c6d60631b6044820152606401610a0b565b6129c684600019613cbd565b6000848152600360205260409020546001600160a01b03166129e83386614074565b6000806129f88560000151614315565b6040516323b872dd60e01b815291935091506001600160a01b038516906323b872dd90612a2d903390879087906004016154f1565b6020604051808303816000875af1158015612a4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a709190615520565b506007546040516323b872dd60e01b81526001600160a01b03808716926323b872dd92612aa5923392169086906004016154f1565b6020604051808303816000875af1158015612ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae89190615520565b50336001600160a01b0316836001600160a01b0316887f78e40a3f168941f73efe6fbf315c11eca5de75a6575fd334ffa4f1801a05322389604051612b2f91815260200190565b60405180910390a450505050505050565b600081815260156020908152604080832080548251818502810185019093528083528493849084015b82821015612bcb576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460ff16151560608301529083529092019101612b69565b5050505090506000815190506000805b82811015612c5857838181518110612bf557612bf56156a6565b602002602001015160600151158015612c2a575081848281518110612c1c57612c1c6156a6565b602002602001015160200151115b15612c5057838181518110612c4157612c416156a6565b60200260200101516020015191505b600101612bdb565b50949350505050565b600854600954604051636844038560e11b815233600482015260248101919091526001600160a01b039091169063d088070a9060440160006040518083038186803b158015612caf57600080fd5b505afa158015612cc3573d6000803e3d6000fd5b50505050612ce583838360000135846020013585604001358660600135613e35565b6114ac8a8a8a8a8a8a8a613847565b606060156000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015612d8b576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460ff16151560608301529083529092019101612d29565b505050509050919050565b600081815260146020908152604080832081518083019092528054808352600190910154928201929092528291612ddf5760405162461bcd60e51b8152600401610a0b906156bc565b80516020909101519094909350915050565b60008381526003602052604090205483906001600160a01b03163314612e295760405162461bcd60e51b8152600401610a0b90615676565b60125460ff1615612e4c5760405162461bcd60e51b8152600401610a0b906154ae565b6000848152601560205260409020548310612ea45760405162461bcd60e51b81526020600482015260186024820152774f6666657220696e646578206f7574206f662072616e676560401b6044820152606401610a0b565b6000848152601560205260408120805485908110612ec457612ec46156a6565b600091825260209182902060408051608081018252600490930290910180546001600160a01b0316835260018101549383019390935260028301549082015260039091015460ff161580156060830152909150612f5d5760405162461bcd60e51b815260206004820152601760248201527613d999995c88185b1c9958591e4818d85b98d95b1b1959604a1b6044820152606401610a0b565b82816020015114612fa75760405162461bcd60e51b81526020600482015260146024820152730a0e4d2c6ca40c8decae640dcdee840dac2e8c6d60631b6044820152606401610a0b565b612fb18585613cbd565b8051612fbd9086614074565b6000600660019054906101000a90046001600160a01b03169050600080612fe78460200151614315565b60405163a9059cbb60e01b81523360048201526024810183905291935091506001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015613039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305d9190615520565b5060075460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529084169063a9059cbb906044016020604051808303816000875af11580156130b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d59190615520565b5083600001516001600160a01b0316336001600160a01b0316897f78e40a3f168941f73efe6fbf315c11eca5de75a6575fd334ffa4f1801a0532238960405161312091815260200190565b60405180910390a45050505050505050565b6000546001600160a01b031633148061314f575061314f336114b8565b61316b5760405162461bcd60e51b8152600401610a0b9061553d565b60065460ff16156131be5760405162461bcd60e51b815260206004820152601b60248201527f506c6f74206461746120736574746572206973206c6f636b65642e00000000006044820152606401610a0b565b600082815260026020526040902081906131d8828261576b565b50505050565b61325c604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081018290526101808101829052906101a082019081526020016000905290565b60008281526002602090815260409182902082516101e081018452815460ff80821683526101008083048216958401959095526201000082048116958301959095526301000000810485166060830152640100000000810485166080830152650100000000008104851660a083015266010000000000008104851660c08301526701000000000000008104851660e0830152680100000000000000008104851693820193909352690100000000000000000083048416610120820152600160501b83048416610140820152600160581b83048416610160820152600160601b830484166101808201529290916101a0840191600160681b9091041660058111156133685761336861535d565b60058111156133795761337961535d565b81528154602090910190600160701b900460ff16600681111561339e5761339e61535d565b60068111156133af576133af61535d565b90525092915050565b6000546001600160a01b031633146133e25760405162461bcd60e51b8152600401610a0b9061564a565b6001600160a01b0381166134385760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420626520746865207a65726f20616464726573736044820152606401610a0b565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152601460205260408120548061261d5760405162461bcd60e51b8152600401610a0b906156bc565b6000546001600160a01b03163314806134a357506134a3336114b8565b6134bf5760405162461bcd60e51b8152600401610a0b9061553d565b6001600160a01b0381166135155760405162461bcd60e51b815260206004820181905260248201527f52656665727265722063616e6e6f7420626520746865203020616464726573736044820152606401610a0b565b6001600160a01b0316600090815260116020526040902060019055565b60008060008060008060008060008060008b51905060005b8181101561370f5760008d8281518110613566576135666156a6565b60200260200101519050600160058111156135835761358361535d565b600082815260026020526040902054600160681b900460ff1660058111156135ad576135ad61535d565b036135c4576135bd600189615604565b9750613706565b6002600082815260026020526040902054600160681b900460ff1660058111156135f0576135f061535d565b0361360757613600600188615604565b9650613706565b6003600082815260026020526040902054600160681b900460ff1660058111156136335761363361535d565b0361364a57613643600187615604565b9550613706565b6004600082815260026020526040902054600160681b900460ff1660058111156136765761367661535d565b0361368d57613686600186615604565b9450613706565b6005600082815260026020526040902054600160681b900460ff1660058111156136b9576136b961535d565b146136f85760405162461bcd60e51b815260206004820152600f60248201526e426164206c616e642072617269747960881b6044820152606401610a0b565b613703600185615604565b93505b5060010161354a565b50949b939a509198509650945092505050565b825160005b818110156137b5576000858281518110613743576137436156a6565b60200260200101519050613756816124a8565b6137a25760405162461bcd60e51b815260206004820152601f60248201527f524d524b204c616e6473616c653a20506c6f7420756e617661696c61626c65006044820152606401610a0b565b6137ac3382614074565b50600101613727565b5081156137da578351600f60008282546137cf9190615604565b909155506137f39050565b8351601060008282546137ed9190615604565b90915550505b811515836001600160a01b0316336001600160a01b03167f8ab30b0cba3d3325d957c283bcd2f5ac70efe38245303058259d4c9dbb7d4321876040516138399190614c90565b60405180910390a450505050565b856138645760405162461bcd60e51b8152600401610a0b906155a8565b60006138a88888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a925089915088905087613b60565b6008546040516329523dbb60e11b81529192506001600160a01b0316906352a47b76906138e19033908a908a908a908a90600401615a0f565b600060405180830381600087803b1580156138fb57600080fd5b505af115801561390f573d6000803e3d6000fd5b50505050600061391e8361434f565b15613a425760008061392f84614463565b6006546040516323b872dd60e01b815292945090925061010090046001600160a01b0316906323b872dd9061396c903390899086906004016154f1565b6020604051808303816000875af115801561398b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139af9190615520565b92508215613a3b576006546007546040516323b872dd60e01b81526101009092046001600160a01b03908116926323b872dd926139f592339291169087906004016154f1565b6020604051808303816000875af1158015613a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a389190615520565b92505b5050613aca565b6006546007546040516323b872dd60e01b8152600095506101009092046001600160a01b03908116926323b872dd92613a8492339291169087906004016154f1565b6020604051808303816000875af1158015613aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac79190615520565b90505b80613b175760405162461bcd60e51b815260206004820152601e60248201527f4c616e6473616c653a205472616e7366657246726f6d206661696c75726500006044820152606401610a0b565b613b55898980806020026020016040519081016040528093929190818152602001838360200280828437600092018290525088935091506137229050565b505050505050505050565b8451600090841580613b725750806001145b613bbe5760405162461bcd60e51b815260206004820181905260248201527f5573652073696e676c6520646973636f756e74732077697468203120706c6f746044820152606401610a0b565b6008546040516315b6e8ab60e01b815260009182916001600160a01b03909116906315b6e8ab90613bfb9033908c908c908c908c90600401615a0f565b600060405180830381865afa158015613c18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613c409190810190615a6a565b905060005b83811015613c9a576000613c718b8381518110613c6457613c646156a6565b60200260200101516131de565b90506000613c7f8285614477565b9050613c8b8186615604565b94508260010192505050613c45565b50600954600503613cb157613cae82614299565b91505b50979650505050505050565b60008281526014602090815260408083208381556001018390556015825280832080548251818502810185019093528083529192909190849084015b82821015613d5b576000848152602090819020604080516080810182526004860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003015460ff16151560608301529083529092019101613cf9565b5050825192935060009150505b81811015613e1d57828181518110613d8257613d826156a6565b602002602001015160600151158015613d9b5750838114155b15613e1557828181518110613db257613db26156a6565b60200260200101516020015160166000858481518110613dd457613dd46156a6565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206000828254613e0f9190615604565b90915550505b600101613d68565b5060008481526015602052604081206131d891614a47565b84613e525760405162461bcd60e51b8152600401610a0b906155a8565b6000806000806000613e968b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061353292505050565b945094509450945094508181613eac9190615604565b90506000915088851115613ee757613ec48986615c04565b613ece9085615604565b9350613eda8986615c04565b613ee49086615c04565b94505b87841115613f1c57613ef98885615c04565b613f039084615604565b9250613f0f8885615c04565b613f199085615c04565b93505b86831115613f5157613f2e8784615c04565b613f389082615604565b9050613f448784615c04565b613f4e9084615c04565b92505b848910158015613f615750838810155b8015613f6d5750828710155b8015613f795750808610155b613fbe5760405162461bcd60e51b8152602060048201526016602482015275139bdd08195b9bdd59da0818dc99591a5d1cc81cd95d60521b6044820152606401610a0b565b60085460405163036954ed60e01b81526001600160a01b039091169063036954ed90613ff6903390899089908990889060040161561c565b600060405180830381600087803b15801561401057600080fd5b505af1158015614024573d6000803e3d6000fd5b505050506140678b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201829052509250600191506137229050565b5050505050505050505050565b600081815260036020908152604080832080546001600160a01b038781166001600160a01b03198316811790935591855260058452918420805460018101825590855292909320909101839055168015614294576001600160a01b03811660009081526005602090815260408083208054825181850281018501909352808352919290919083018282801561412857602002820191906000526020600020905b815481526020019060010190808311614114575b50508351939450600019925060009150505b828110156141725785848281518110614155576141556156a6565b60200260200101510361416a57809150614172565b60010161413a565b5080196141c15760405162461bcd60e51b815260206004820152601b60248201527f506c6f74206e6f7420666f756e6420696e206f6c64206f776e657200000000006044820152606401610a0b565b6141cc600183615c04565b8114614253576001600160a01b03841660009081526005602052604090206141f5600184615c04565b81548110614205576142056156a6565b906000526020600020015460056000866001600160a01b03166001600160a01b031681526020019081526020016000208281548110614246576142466156a6565b6000918252602090912001555b6001600160a01b038416600090815260056020526040902080548061427a5761427a615c1b565b600190038181906000526020600020016000905590555050505b505050565b6000806142af6142a7614942565b600b54614965565b600b549091506000906127106142c58483615c04565b6142cf9190615c31565b6142d99190615c50565b6142e590612710615c04565b905060006142f9620f4240600c548461497d565b90506000620f424061430b8784615c31565b611db39190615c50565b6000806000620f42406013548561432c9190615c31565b6143369190615c50565b905060006143448286615c04565b959194509092505050565b60006001600160a01b038216158061436f57506001600160a01b03821633145b8061437d5750600d5460ff16155b1561438a57506000919050565b6001600160a01b0382166000908152601160205260409020546001036143b257506001919050565b6001600160a01b038216600090815260056020908152604080832080548251818502810185019093528083528493849361442193909290918301828280156125c857602002820191906000526020600020908154815260200190600101908083116125b4575050505050613532565b5050925092509250600e548160056144399190615c31565b614444846003615c31565b61444e9086615604565b6144589190615604565b101595945050505050565b60008080620f424061432c61c35086615c31565b600080806001856101a0015160058111156144945761449461535d565b036144c1577f00000000000000000000000000000000000000000000000000000000000000009150614587565b6002856101a0015160058111156144da576144da61535d565b03614507577f00000000000000000000000000000000000000000000000000000000000000009150614587565b6003856101a0015160058111156145205761452061535d565b0361454d577f00000000000000000000000000000000000000000000000000000000000000009150614587565b60405162461bcd60e51b815260206004820152600f60248201526e426164206c616e642072617269747960881b6044820152606401610a0b565b8351600081900361459d5782935050505061261d565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c08101829052905b8281101561490257868181518110614631576146316156a6565b60200260200101519150816101c001511561466257815161465b906001600160801b031685615604565b93506148fa565b6028886000015160ff1611801561467a575081602001515b1561469457815161465b906001600160801b031685615604565b6028886020015160ff161180156146ac575081604001515b156146c657815161465b906001600160801b031685615604565b6028886040015160ff161180156146de575081606001515b156146f857815161465b906001600160801b031685615604565b6028886060015160ff16118015614710575081608001515b1561472a57815161465b906001600160801b031685615604565b6028886080015160ff1611801561474257508160a001515b1561475c57815161465b906001600160801b031685615604565b60288860a0015160ff1611801561477457508160c001515b1561478e57815161465b906001600160801b031685615604565b60288860c0015160ff161180156147a657508160e001515b156147c057815161465b906001600160801b031685615604565b60288860e0015160ff161180156147d957508161010001515b156147f357815161465b906001600160801b031685615604565b602888610100015160ff1611801561480d57508161012001515b1561482757815161465b906001600160801b031685615604565b602888610120015160ff1611801561484157508161014001515b1561485b57815161465b906001600160801b031685615604565b87610160015160ff16600114801561487557508161018001515b1561488f57815161465b906001600160801b031685615604565b87610140015160ff1660011480156148a957508161016001515b156148c357815161465b906001600160801b031685615604565b87610180015160ff1660011480156148dd5750816101a001515b156148fa5781516148f7906001600160801b031685615604565b93505b600101614617565b506207a120831115614915576207a12092505b620f42406149238482615c04565b61492d9086615c31565b6149379190615c50565b979650505050505050565b600042600a54106149535750600090565b600a546149609042615c04565b905090565b60008183101561497657508161261d565b508061261d565b60008061271061498d8585615c31565b8661499a86612710615c04565b6149a49190615c31565b6149ae9190615604565b6149b89190615c50565b9150505b9392505050565b8280546149cf90615574565b90600052602060002090601f0160209004810192826149f15760008555614a37565b82601f10614a0a57805160ff1916838001178555614a37565b82800160010185558215614a37579182015b82811115614a37578251825591602001919060010190614a1c565b50614a43929150614a6b565b5090565b5080546000825560040290600052602060002090810190614a689190614a80565b50565b5b80821115614a435760008155600101614a6c565b5b80821115614a435780546001600160a01b0319168155600060018201819055600282015560038101805460ff19169055600401614a81565b60008060408385031215614acc57600080fd5b50508035926020909101359150565b600060208284031215614aed57600080fd5b5035919050565b8015158114614a6857600080fd5b600060208284031215614b1457600080fd5b81356149bc81614af4565b6000815180845260005b81811015614b4557602081850181015186830182015201614b29565b81811115614b57576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006149bc6020830184614b1f565b80356001600160a01b0381168114614b9657600080fd5b919050565b600060208284031215614bad57600080fd5b6149bc82614b7f565b60008083601f840112614bc857600080fd5b5081356001600160401b03811115614bdf57600080fd5b6020830191508360208260051b8501011115614bfa57600080fd5b9250929050565b60068110614a6857600080fd5b600080600060408486031215614c2357600080fd5b83356001600160401b03811115614c3957600080fd5b614c4586828701614bb6565b9094509250506020840135614c5981614c01565b809150509250925092565b600080600060608486031215614c7957600080fd5b505081359360208301359350604090920135919050565b6020808252825182820181905260009190848201906040850190845b81811015614cc857835183529284019291840191600101614cac565b50909695505050505050565b60008060008060008060006080888a031215614cef57600080fd5b87356001600160401b0380821115614d0657600080fd5b614d128b838c01614bb6565b909950975060208a0135915080821115614d2b57600080fd5b614d378b838c01614bb6565b909750955060408a0135915080821115614d5057600080fd5b50614d5d8a828b01614bb6565b9094509250614d70905060608901614b7f565b905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b6040516101e081016001600160401b0381118282101715614db757614db7614d7e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614de557614de5614d7e565b604052919050565b60006001600160401b03821115614e0657614e06614d7e565b5060051b60200190565b600082601f830112614e2157600080fd5b81356020614e36614e3183614ded565b614dbd565b82815260059290921b84018101918181019086841115614e5557600080fd5b8286015b84811015614e705780358352918301918301614e59565b509695505050505050565b600060208284031215614e8d57600080fd5b81356001600160401b03811115614ea357600080fd5b614eaf84828501614e10565b949350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015614f0c57603f19888603018452614efa858351614b1f565b94509285019290850190600101614ede565b5092979650505050505050565b600080600080600060608688031215614f3157600080fd5b85356001600160401b0380821115614f4857600080fd5b614f5489838a01614e10565b96506020880135915080821115614f6a57600080fd5b614f7689838a01614bb6565b90965094506040880135915080821115614f8f57600080fd5b50614f9c88828901614bb6565b969995985093965092949392505050565b60008060008060008060a08789031215614fc657600080fd5b86356001600160401b03811115614fdc57600080fd5b614fe889828a01614bb6565b909a90995060208901359860408101359850606081013597506080013595509350505050565b6020808252825182820181905260009190848201906040850190845b81811015614cc85783516001600160a01b03168352928401929184019160010161502a565b6000806040838503121561506257600080fd5b823591506020808401356001600160401b038082111561508157600080fd5b818601915086601f83011261509557600080fd5b8135818111156150a7576150a7614d7e565b6150b9601f8201601f19168501614dbd565b915080825287848285010111156150cf57600080fd5b80848401858401376000848284010152508093505050509250929050565b6000806000806040858703121561510357600080fd5b84356001600160401b038082111561511a57600080fd5b61512688838901614bb6565b9096509450602087013591508082111561513f57600080fd5b818701915087601f83011261515357600080fd5b81358181111561516257600080fd5b8860206101e08302850101111561517857600080fd5b95989497505060200194505050565b6000806040838503121561519a57600080fd5b823591506151aa60208401614b7f565b90509250929050565b6000608082840312156151c557600080fd5b50919050565b6000806000806000806000806000806101208b8d0312156151eb57600080fd5b8a356001600160401b038082111561520257600080fd5b61520e8e838f01614bb6565b909c509a5060208d013591508082111561522757600080fd5b6152338e838f01614bb6565b909a50985060408d013591508082111561524c57600080fd5b6152588e838f01614bb6565b909850965086915061526c60608e01614b7f565b955060808d013591508082111561528257600080fd5b5061528f8d828e01614bb6565b90945092506152a390508c60a08d016151b3565b90509295989b9194979a5092959850565b602080825282518282018190526000919060409081850190868401855b8281101561531657815180516001600160a01b0316855286810151878601528581015186860152606090810151151590850152608090930192908501906001016152d1565b5091979650505050505050565b60008082840361020081121561533857600080fd5b833592506101e0601f198201121561534f57600080fd5b506020830190509250929050565b634e487b7160e01b600052602160045260246000fd5b600681106153835761538361535d565b9052565b600781106153835761538361535d565b815160ff1681526101e0810160208301516153b7602084018260ff169052565b5060408301516153cc604084018260ff169052565b5060608301516153e1606084018260ff169052565b5060808301516153f6608084018260ff169052565b5060a083015161540b60a084018260ff169052565b5060c083015161542060c084018260ff169052565b5060e083015161543560e084018260ff169052565b506101008381015160ff9081169184019190915261012080850151821690840152610140808501518216908401526101608085015182169084015261018080850151909116908301526101a08084015161549182850182615373565b50506101c0808401516154a682850182615387565b505092915050565b60208082526010908201526f14d85b195cc8185c99481c185d5cd95960821b604082015260600190565b6000602082840312156154ea57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b8051614b9681614af4565b60006020828403121561553257600080fd5b81516149bc81614af4565b6020808252601b908201527f55736572206973206e6f74206f776e6572206f722061646d696e2e0000000000604082015260600190565b600181811c9082168061558857607f821691505b6020821081036151c557634e487b7160e01b600052602260045260246000fd5b6020808252600f908201526e4e6f20706c6f747320746f2062757960881b604082015260600190565b6001600160a01b0383168152604081016149bc6020830184615373565b634e487b7160e01b600052601160045260246000fd5b60008219821115615617576156176155ee565b500190565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b6020808252601290820152712ab9b2b91034b9903737ba1037bbb732b91760711b604082015260600190565b6020808252601690820152752ab9b2b91034b9903737ba103630b7321037bbb732b960511b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600a9082015269139bdd081b1a5cdd195960b21b604082015260600190565b6000813560ff8116811461261d57600080fd5b6000813561261d81614c01565b600682106157105761571061535d565b805460ff60681b191660689290921b60ff60681b16919091179055565b600081356007811061261d57600080fd5b6007821061574e5761574e61535d565b805460ff60701b191660709290921b60ff60701b16919091179055565b615788615777836156e0565b825460ff191660ff91909116178255565b6157ad615797602084016156e0565b825461ff00191660089190911b61ff0016178255565b6157d46157bc604084016156e0565b825462ff0000191660109190911b62ff000016178255565b6157fd6157e3606084016156e0565b825463ff000000191660189190911b63ff00000016178255565b61582861580c608084016156e0565b825464ff00000000191660209190911b64ff0000000016178255565b61585561583760a084016156e0565b825465ff0000000000191660289190911b65ff000000000016178255565b61588461586460c084016156e0565b825466ff000000000000191660309190911b66ff00000000000016178255565b6158b561589360e084016156e0565b825467ff00000000000000191660389190911b67ff0000000000000016178255565b6158e96158c561010084016156e0565b825468ff0000000000000000191660409190911b68ff000000000000000016178255565b61591f6158f961012084016156e0565b825469ff000000000000000000191660489190911b69ff00000000000000000016178255565b61594d61592f61014084016156e0565b82805460ff60501b191660509290921b60ff60501b16919091179055565b61597b61595d61016084016156e0565b82805460ff60581b191660589290921b60ff60581b16919091179055565b6159a961598b61018084016156e0565b82805460ff60601b191660609290921b60ff60601b16919091179055565b6159bf6159b96101a084016156f3565b82615700565b6159d56159cf6101c0840161572d565b8261573e565b5050565b81835260006001600160fb1b038311156159f257600080fd5b8260051b8083602087013760009401602001938452509192915050565b6001600160a01b0386168152606060208201819052600090615a3490830186886159d9565b8281036040840152615a478185876159d9565b98975050505050505050565b80516001600160801b0381168114614b9657600080fd5b60006020808385031215615a7d57600080fd5b82516001600160401b03811115615a9357600080fd5b8301601f81018513615aa457600080fd5b8051615ab2614e3182614ded565b8181526101e09182028301840191848201919088841115615ad257600080fd5b938501935b83851015613cb15780858a031215615aef5760008081fd5b615af7614d94565b615b0086615a53565b8152615b0d878701615515565b878201526040615b1e818801615515565b908201526060615b2f878201615515565b908201526080615b40878201615515565b9082015260a0615b51878201615515565b9082015260c0615b62878201615515565b9082015260e0615b73878201615515565b90820152610100615b85878201615515565b90820152610120615b97878201615515565b90820152610140615ba9878201615515565b90820152610160615bbb878201615515565b90820152610180615bcd878201615515565b908201526101a0615bdf878201615515565b908201526101c0615bf1878201615515565b9082015283529384019391850191615ad7565b600082821015615c1657615c166155ee565b500390565b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615615c4b57615c4b6155ee565b500290565b600082615c6d57634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220f97f949cc6fedde5d9324c2689c16fb55fa6d9c5b5cd43255fefddfb519f0aad64736f6c634300080d0033000000000000000000000000000000000000000000000000000000746a5288000000000000000000000000000000000000000000000000000000015d3ef7980000000000000000000000000000000000000000000000000000000246139ca800000000000000000000000000000000000000000000000000000000000000c350
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:9037: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;;;;;;;;15788:91;15861:11;;15788:91;;;484:25:7;;;472:2;457:18;15788:91:2;338:177:7;15988:107:2;16069:19;;15988:107;;4617:993:4;;;;;;:::i;:::-;;:::i;:::-;;1926:110;;;;;;:::i;:::-;;:::i;1705:101::-;;;;;;:::i;:::-;;:::i;6168:118:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7793::4:-;;;;;;:::i;:::-;7853:4;7876:17;;;:9;:17;;;;;:23;:27;;;7793:118;;;;2194:14:7;;2187:22;2169:41;;2157:2;2142:18;7793:118:4;2029:187:7;14884:111:2;;;;;;:::i;:::-;;:::i;2042:91:4:-;2114:12;;;;2042:91;;5314:1950:2;;;;;;:::i;:::-;;:::i;784:102:0:-;;;;;;:::i;:::-;;:::i;15390:82:2:-;15459:6;;;;;-1:-1:-1;;;;;15459:6:2;15390:82;;;-1:-1:-1;;;;;3828:32:7;;;3810:51;;3798:2;3783:18;15390:82:2;3664:203:7;6992:272:4;;;:::i;15001:281:2:-;;;;;;:::i;:::-;;:::i;685:93:0:-;;;;;;:::i;:::-;;:::i;1453::5:-;1526:13;;;;1453:93;;4701:121;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2355:116:2:-;2441:23;;2355:116;;3211:299;;;;;;:::i;:::-;;:::i;15683:99::-;15760:15;;15683:99;;2369:352:4;;;;;;:::i;:::-;;:::i;14651:101:2:-;;;;;;:::i;:::-;;:::i;15585:92::-;15659:11;;-1:-1:-1;;;;;15659:11:2;15585:92;;2244::4;2318:11;;2244:92;;14758:120:2;;;;;;:::i;:::-;;:::i;1811:109:4:-;;;;;;:::i;:::-;;:::i;2139:99::-;2215:16;;;;;;;2139:99;;518:161:0;;;;;;:::i;:::-;;:::i;15478:101:2:-;15556:16;;-1:-1:-1;;;;;15556:16:2;15478:101;;2822:120;;;;;;:::i;:::-;;:::i;2477:142::-;;;;;;:::i;:::-;;:::i;1336:111:5:-;;;;;;:::i;:::-;;:::i;16120:159:2:-;;;;;;:::i;:::-;;:::i;6292:395:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1073:81:0:-;1115:7;1141:6;-1:-1:-1;;;;;1141:6:0;1073:81;;8800:114:4;8896:10;8853:7;8879:28;;;:16;:28;;;;;;8800:114;;10291:259:2;;;;;;:::i;:::-;;:::i;3099:210:4:-;;;;;;:::i;:::-;;:::i;7916:319:2:-;;;;;;:::i;:::-;;:::i;4310:385:5:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1219:111::-;;;;;;:::i;:::-;1278:7;1304:19;;;:11;:19;;;;;;-1:-1:-1;;;;;1304:19:5;;1219:111;5977:185;;;;;;:::i;:::-;;:::i;2727:366:4:-;;;;;;:::i;:::-;;:::i;1843:454:5:-;;;;;;:::i;:::-;;:::i;7287:483:4:-;;;;;;:::i;:::-;;:::i;3078:127:2:-;3164:15;;3181:16;;3078:127;;;;13307:25:7;;;13363:2;13348:18;;13341:34;;;;13280:18;3078:127:2;13133:248:7;2234:115:2;;;;;;:::i;:::-;;:::i;4094:210:5:-;;;;;;:::i;:::-;;:::i;3584:504::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;13654:13:7;;13613:10;13650:22;;;13632:41;;13733:4;13721:17;;;13715:24;13711:33;;13689:20;;;13682:63;13805:4;13793:17;;;13787:24;13783:33;;13761:20;;;13754:63;13877:4;13865:17;;;13859:24;13855:33;;13833:20;;;13826:63;13949:4;13937:17;;;13931:24;13927:33;13905:20;;;13898:63;;;;13590:3;13575:19;;13386:581;15885:97:2;15961:14;;15885:97;;16285: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;8361:433::-;;;;;;:::i;:::-;;:::i;9740:545:2:-;;;;;;:::i;:::-;;:::i;6140:112:4:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7917:240::-;;;;;;:::i;:::-;;:::i;6258:728::-;;;;;;:::i;:::-;;:::i;2303:200:5:-;;;;;;:::i;:::-;;:::i;1552:115::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;892:175:0:-;;;;;;:::i;:::-;;:::i;2127:101:2:-;2204:17;;;;2127:101;;8163:192:4;;;;;;:::i;:::-;;:::i;2625:191:2:-;;;;;;:::i;:::-;;:::i;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;;20178:2:7;4696:49:4::1;::::0;::::1;20160:21:7::0;20217:2;20197:18;;;20190:30;20256:29;20236:18;;;20229:57;20303:18;;4696:49:4::1;19976:351:7::0;4696:49:4::1;4755:17;1304:19:5::0;;;:11;:19;;;;;;-1:-1:-1;;;;;1304:19:5;4826:10:4::1;4813:23:::0;;4805:54:::1;;;::::0;-1:-1:-1;;;4805:54:4;;20534:2:7;4805:54:4::1;::::0;::::1;20516:21:7::0;20573:2;20553:18;;;20546:30;-1:-1:-1;;;20592:18:7;;;20585:48;20650:18;;4805:54:4::1;20332:342:7::0;4805:54:4::1;-1:-1:-1::0;;;;;4877:23:4;::::1;4869:53;;;::::0;-1:-1:-1;;;4869:53:4;;20881:2:7;4869:53:4::1;::::0;::::1;20863:21:7::0;20920:2;20900:18;;;20893:30;-1:-1:-1;;;20939:18:7;;;20932:47;20996:18;;4869:53:4::1;20679:341:7::0;4869:53:4::1;4968:11;1734:6:5::0;1759:17;;;:9;:17;;;;;:24;-1:-1:-1;;;1759:24:5;;;;4943:36:4::1;;;;;;;;:::i;:::-;::::0;4935:79:::1;;;::::0;-1:-1:-1;;;4935:79:4;;21227:2:7;4935:79:4::1;::::0;::::1;21209:21:7::0;21266:2;21246:18;;;21239:30;21305:32;21285:18;;;21278:60;21355:18;;4935:79:4::1;21025: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;;21586:2:7;5160:56:4::1;::::0;::::1;21568:21:7::0;21625:2;21605:18;;;21598:30;21664:25;21644:18;;;21637:53;21707:18;;5160:56:4::1;21384: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;21948:34:7::0;5328:4:4::1;21998:18:7::0;;;21991:43;5263:6:4::1;::::0;;::::1;-1:-1:-1::0;;;;;5263:6:4::1;::::0;5338:5;;5263:6;;5288:19:::1;::::0;21883:18:7;;5288:46:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;5280:88;;;::::0;-1:-1:-1;;;5280:88:4;;22436:2:7;5280:88:4::1;::::0;::::1;22418:21:7::0;22475:2;22455:18;;;22448:30;-1:-1:-1;;;22494:18:7;;;22487:50;22554:18;;5280:88:4::1;22234: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;6168:118:5:-;6263:16;;;;:8;:16;;;;;6256:23;;6231:13;;6263:16;6256:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6168:118;;;:::o;14884: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;:::-;14964:11:2::1;:24:::0;;-1:-1:-1;;;;;;14964:24:2::1;-1:-1:-1::0;;;;;14964:24:2;;;::::1;::::0;;;::::1;::::0;;14884:111::o;5314:1950::-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;24265:51:7;24332:18;;;24325:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;24238:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5437:7:2;;-1:-1:-1;;;5469:12:2;5461:40:::1;;;;-1:-1:-1::0;;;5461:40:2::1;;;;;;;:::i;:::-;5551:16;::::0;5542:76:::1;::::0;-1:-1:-1;;;5542:76:2;;5511:28:::1;::::0;-1:-1:-1;;;;;5551:16:2::1;::::0;5542:50:::1;::::0;:76:::1;::::0;5593:10:::1;::::0;5605:12;;5542:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5511:107;;5660:8;5636:20;:32;;5628:74;;;::::0;-1:-1:-1;;;5628:74:2;;25220:2:7;5628:74:2::1;::::0;::::1;25202:21:7::0;25259:2;25239:18;;;25232:30;25298:31;25278:18;;;25271:59;25347:18;;5628:74:2::1;25018:353:7::0;5628:74:2::1;5714:17;5733:15:::0;5750::::1;5767::::0;5784:18:::1;5806:26;5824:7;;5806:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5806:17:2::1;::::0;-1:-1:-1;;;5806:26:2:i:1;:::-;5713:119;;;;;;;;;;5931:7;5917:21;;;;;:::i;:::-;5958:1;::::0;-1:-1:-1;5917:21:2;-1:-1:-1;5990:13:2::1;5974:12;:29;;;;;;;;:::i;:::-;::::0;5970:1288:::1;;6040:8;6027:9;:21;6019:51;;;::::0;-1:-1:-1;;;6019:51:2;;25843:2:7;6019:51:2::1;::::0;::::1;25825:21:7::0;25882:2;25862:18;;;25855:30;-1:-1:-1;;;25901:18:7;;;25894:47;25958:18;;6019:51:2::1;25641:341:7::0;6019:51:2::1;6093:16;::::0;6084:70:::1;::::0;-1:-1:-1;;;6084:70:2;;-1:-1:-1;;;;;6093:16:2;;::::1;::::0;6084:39:::1;::::0;:70:::1;::::0;6124:10:::1;::::0;6136:8;;6093:16:::1;::::0;;;;;6084:70:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6168:42;6184:7;;6168:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;6168:42:2;-1:-1:-1;6205:4:2::1;::::0;-1:-1:-1;6168:15:2::1;::::0;-1:-1:-1;6168:42:2:i:1;:::-;5970:1288;;;6256:11;6240:12;:27;;;;;;;;:::i;:::-;::::0;6236:1022:::1;;6314:8:::0;6291:19:::1;6303:7:::0;6291:9;:19:::1;:::i;:::-;:31;6283:69;;;::::0;-1:-1:-1;;;6283:69:2;;26707:2:7;6283:69:2::1;::::0;::::1;26689:21:7::0;26746:2;26726:18;;;26719:30;26785:27;26765:18;;;26758:55;26830:18;;6283:69:2::1;26505:349:7::0;6283:69:2::1;6375:16;::::0;6366:70:::1;::::0;-1:-1:-1;;;6366:70:2;;-1:-1:-1;;;;;6375:16:2;;::::1;::::0;6366:39:::1;::::0;:70:::1;::::0;6406:10:::1;::::0;6375:16:::1;::::0;6421:8;;6375:16;;;;6366:70:::1;;;:::i;6236:1022::-;6538:11;6522:12;:27;;;;;;;;:::i;:::-;::::0;6518:740:::1;;6606:8:::0;6595:7;6573:19:::1;6585:7:::0;6573:9;:19:::1;:::i;:::-;:29;;;;:::i;:::-;:41;6565:85;;;::::0;-1:-1:-1;;;6565:85:2;;27579:2:7;6565:85:2::1;::::0;::::1;27561:21:7::0;27618:2;27598:18;;;27591:30;27657:33;27637:18;;;27630:61;27708:18;;6565:85:2::1;27377:355:7::0;6565:85:2::1;6673:16;::::0;6664:70:::1;::::0;-1:-1:-1;;;6664:70:2;;-1:-1:-1;;;;;6673:16:2;;::::1;::::0;6664:39:::1;::::0;:70:::1;::::0;6704:10:::1;::::0;6673:16:::1;::::0;;;6722:8;;6673:16;;6664:70:::1;;;:::i;6518:740::-;6961:14;6945:12;:30;;;;;;;;:::i;:::-;;:104;;;;-1:-1:-1::0;7041:8:2;7027:10;7017:7;6995:19:::1;7007:7:::0;6995:9;:19:::1;:::i;:::-;:29;;;;:::i;:::-;:42;;;;:::i;:::-;:54;6945:104;6920:187;;;::::0;-1:-1:-1;;;6920:187:2;;28457:2:7;6920:187:2::1;::::0;::::1;28439:21:7::0;28496:2;28476:18;;;28469:30;28535:26;28515:18;;;28508:54;28579:18;;6920:187:2::1;28255:348:7::0;6920:187:2::1;7130:16;::::0;7121:70:::1;::::0;-1:-1:-1;;;7121:70:2;;-1:-1:-1;;;;;7130:16:2;;::::1;::::0;7121:39:::1;::::0;:70:::1;::::0;7161:10:::1;::::0;7130:16:::1;::::0;;;;;7182:8;;7121:70:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7205:42;7221:7;;7205:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;7205:42:2;-1:-1:-1;7242:4:2::1;::::0;-1:-1:-1;7205:15:2::1;::::0;-1:-1:-1;7205:42:2:i:1;:::-;5411:1853;;;;;;;5314:1950:::0;;;:::o;784:102:0:-;-1:-1:-1;;;;;860:14:0;837:4;860:14;;;:7;:14;;;;;;;;;:19;;784:102::o;6992:272:4:-;7076:10;7037:19;7059:28;;;:16;:28;;;;;;7105:15;7097:47;;;;-1:-1:-1;;;7097:47:4;;29328:2:7;7097:47:4;;;29310:21:7;29367:2;29347:18;;;29340:30;-1:-1:-1;;;29386:18:7;;;29379:49;29445:18;;7097:47:4;29126:343:7;7097:47:4;7161:6;;7154:48;;-1:-1:-1;;;7154:48:4;;7178:10;7154:48;;;24265:51:7;24332:18;;;24325:34;;;7161:6:4;;;;-1:-1:-1;;;;;7161:6:4;;7154:23;;24238:18:7;;7154:48:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7218:39:4;;484:25:7;;;7233:10:4;;7218:39;;472:2:7;457:18;7218:39:4;;;;;;;7027:237;6992:272::o;15001: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;:::-;15135:9:2::1;15122:10;:22;15114:55;;;::::0;-1:-1:-1;;;15114:55:2;;29676:2:7;15114:55:2::1;::::0;::::1;29658:21:7::0;29715:2;29695:18;;;29688:30;-1:-1:-1;;;29734:18:7;;;29727:50;29794:18;;15114:55:2::1;29474:344:7::0;15114:55:2::1;15179:11;:19:::0;;;;15208:14:::1;:25:::0;15243:19:::1;:32:::0;15001: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;4701:121:5:-;-1:-1:-1;;;;;4795:20:5;;;;;;:14;:20;;;;;;;;;4788:27;;;;;;;;;;;;;;;;;4760:16;;4788:27;;;4795:20;4788:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4701:121;;;:::o;3211:299:2:-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;24265:51:7;24332:18;;;24325:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;24238: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:-;1149:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1149:19:5;1135:10;:33;1127:68;;;;-1:-1:-1;;;1127: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;;30723:2:7;2465:50:4::2;::::0;::::2;30705:21:7::0;30762:2;30742:18;;;30735:30;30801;30781:18;;;30774:58;30849:18;;2465:50:4::2;30521:352:7::0;2465:50:4::2;2558:11;1734:6:5::0;1759:17;;;:9;:17;;;;;:24;-1:-1:-1;;;1759:24:5;;;;2533:36:4::2;;;;;;;;:::i;:::-;::::0;2525:75:::2;;;::::0;-1:-1:-1;;;2525:75:4;;31080:2:7;2525:75:4::2;::::0;::::2;31062:21:7::0;31119:2;31099:18;;;31092:30;31158:28;31138:18;;;31131:56;31204:18;;2525:75:4::2;30878: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;14651: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;:::-;14726:6:2::1;:19:::0;;-1:-1:-1;;;;;14726:19:2;;::::1;;;-1:-1:-1::0;;;;;;14726:19:2;;::::1;::::0;;;::::1;::::0;;14651:101::o;14758: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;:::-;14842:16:2::1;:29:::0;;-1:-1:-1;;;;;;14842:29:2::1;-1:-1:-1::0;;;;;14842:29:2;;;::::1;::::0;;;::::1;::::0;;14758: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;;31435:2:7;580:64:0::1;::::0;::::1;31417:21:7::0;;;31454:18;;;31447:30;31513:34;31493:18;;;31486:62;31565:18;;580:64:0::1;31233: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;1336:111:5:-;265:6:0;;-1:-1:-1;;;;;265:6:0;251:10;:20;243:51;;;;-1:-1:-1;;;243:51:0;;;;;;;:::i;:::-;376:6:::1;::::0;-1:-1:-1;;;;;376:6:0::1;362:10;:20;::::0;:43:::1;;;386:19;394:10;386:7;:19::i;:::-;354:83;;;;-1:-1:-1::0;;;354:83:0::1;;;;;;;:::i;:::-;1419:13:5::2;:21:::0;;-1:-1:-1;;1419:21:5::2;::::0;::::2;;::::0;;;::::2;::::0;;1336:111::o;16120: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;:::-;16219:1:2::1;16208:7;:12;;16200:37;;;::::0;-1:-1:-1;;;16200:37:2;;31796:2:7;16200:37:2::1;::::0;::::1;31778:21:7::0;31835:2;31815:18;;;31808:30;-1:-1:-1;;;31854:18:7;;;31847:42;31906:18;;16200:37:2::1;31594:336:7::0;16200:37:2::1;16247:15;:25:::0;16120:159::o;6292:395:5:-;6416:14;;6370:15;;6397:16;6416:14;-1:-1:-1;;;;;6468:22:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6440:50;;6505:6;6501:153;6515:8;6513:1;:10;6501:153;;;6540:14;6557:7;6565:1;6557:10;;;;;;;;:::i;:::-;;;;;;;6540:27;;6596:8;:16;6605:6;6596:16;;;;;;;;;;;6581:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;6591:1;6581:12;;;;;;;;:::i;:::-;;;;;;;;;;:31;-1:-1:-1;6638:3:5;;6501:153;;;-1:-1:-1;6671:9:5;6292:395;-1:-1:-1;;;6292:395:5:o;10291:259:2:-;10449:4;10472:71;10490:7;10499:21;;10522:20;;10472:17;:71::i;:::-;10465:78;10291:259;-1:-1:-1;;;;;;10291:259:2:o;3099:210:4:-;1149:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1149:19:5;1135:10;:33;1127:68;;;;-1:-1:-1;;;1127: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;7916:319:2:-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;24265:51:7;24332:18;;;24325:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;24238:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8142:86:::1;8163:7;;8172:13;8187:11;8200;8213:14;8142:20;:86::i;:::-;7916:319:::0;;;;;;:::o;4310:385:5:-;4428:14;;4381:16;;4409;4428:14;-1:-1:-1;;;;;4478:23:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4478:23:5;;4452:49;;4516:6;4512:153;4526:8;4524:1;:10;4512:153;;;4551:14;4568:7;4576:1;4568:10;;;;;;;;:::i;:::-;;;;;;;4551:27;;4604:11;:19;4616:6;4604:19;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4604:19:5;4592:6;4599:1;4592:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4592:31:5;;;:9;;;;;;;;;;;:31;-1:-1:-1;4649:3:5;;4512:153;;5977:185;1149:19;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1149:19:5;1135:10;:33;1127:68;;;;-1:-1:-1;;;1127:68:5;;;;;;;:::i;:::-;6082:16:::1;::::0;;;:8:::1;:16;::::0;;;;;;;:26;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;6139:6;6123:32;6147:7;6123:32;;;;;;:::i;:::-;;;;;;;;5977:185:::0;;;:::o;2727:366:4:-;1149:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1149:19:5;1135:10;:33;1127:68;;;;-1:-1:-1;;;1127:68:5;;;;;;;:::i;:::-;2842:1:4::1;2831:8;:12;2823:53;;;::::0;-1:-1:-1;;;2823:53:4;;30723:2:7;2823:53:4::1;::::0;::::1;30705:21:7::0;30762:2;30742:18;;;30735:30;30801;30781:18;;;30774:58;30849:18;;2823:53:4::1;30521: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;;13307:25:7;;;13348:18;;;13341:34;;;3055:10:4::1;::::0;2980:17;;3030:56:::1;::::0;13280:18:7;3030:56:4::1;;;;;;;2813:280;2727:366:::0;;;:::o;1843: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;:::-;1973:13:5::1;::::0;::::1;;1972:14;1964:54;;;::::0;-1:-1:-1;;;1964:54:5;;32608:2:7;1964:54:5::1;::::0;::::1;32590:21:7::0;32647:2;32627:18;;;32620:30;32686:29;32666:18;;;32659:57;32733:18;;1964:54:5::1;32406:351:7::0;1964:54:5::1;2042:7:::0;2074:21;;::::1;2066:66;;;::::0;-1:-1:-1;;;2066:66:5;;32964:2:7;2066:66:5::1;::::0;::::1;32946:21:7::0;;;32983:18;;;32976:30;33042:34;33022:18;;;33015:62;33094:18;;2066:66:5::1;32762:356:7::0;2066:66:5::1;2146:6;2142:149;2156:3;2154:1;:5;2142:149;;;2176:14;2193:7;;2201:1;2193:10;;;;;;;:::i;:::-;;;;;;;2176:27;;2237:9;;2247:1;2237:12;;;;;;;:::i;:::-;;;;;;2217:9;:17;2227:6;2217:17;;;;;;;;;;;:32;;;;;;:::i;:::-;-1:-1:-1::0;;;2275:3:5::1;;2142:149;;7287:483:4::0;1149:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1149:19:5;1135:10;:33;1127:68;;;;-1:-1:-1;;;1127:68:5;;;;;;;:::i;:::-;7397:10:4::1;-1:-1:-1::0;;;;;7385:22:4;::::1;::::0;7377:58:::1;;;::::0;-1:-1:-1;;;7377:58:4;;38791:2:7;7377:58:4::1;::::0;::::1;38773:21:7::0;38830:2;38810:18;;;38803:30;38869:25;38849:18;;;38842:53;38912:18;;7377:58:4::1;38589:347:7::0;7377:58:4::1;7454:16;::::0;::::1;::::0;::::1;;;7453:17;7445:50;;;::::0;-1:-1:-1;;;7445:50:4;;39143:2:7;7445:50:4::1;::::0;::::1;39125:21:7::0;39182:2;39162:18;;;39155:30;-1:-1:-1;;;39201:18:7;;;39194:50;39261:18;;7445:50:4::1;38941:344:7::0;7445:50:4::1;7513:17;::::0;;;:9:::1;:17;::::0;;;;:23;:28;7505:68:::1;;;::::0;-1:-1:-1;;;7505:68:4;;39492:2:7;7505:68:4::1;::::0;::::1;39474:21:7::0;39531:2;39511:18;;;39504:30;39570:29;39550:18;;;39543:57;39617:18;;7505:68:4::1;39290:351:7::0;7505:68:4::1;7616:11;1734:6:5::0;1759:17;;;:9;:17;;;;;:24;-1:-1:-1;;;1759:24:5;;;;7591:36:4::1;;;;;;;;:::i;:::-;::::0;7583:79:::1;;;::::0;-1:-1:-1;;;7583:79:4;;39848:2:7;7583:79:4::1;::::0;::::1;39830:21:7::0;39887:2;39867:18;;;39860:30;39926:32;39906:18;;;39899:60;39976:18;;7583:79:4::1;39646:354:7::0;7583:79:4::1;7673:30;7686:8;7696:6;7673:12;:30::i;:::-;7718:45;::::0;-1:-1:-1;;;;;7718:45:4;::::1;::::0;7742:10:::1;::::0;7734:6;;7718:45:::1;::::0;;;::::1;7287: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;4094:210:5:-;4159:4;;4183:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;4183:24:5;;;;:39;;;;;;;;:::i;:::-;;4175:72;;;;-1:-1:-1;;;4175:72:5;;40207:2:7;4175:72:5;;;40189:21:7;40246:2;40226:18;;;40219:30;-1:-1:-1;;;40265:18:7;;;40258:50;40325:18;;4175:72:5;40005:344:7;4175:72:5;-1:-1:-1;4295:1:5;4264:19;;;:11;:19;;;;;;-1:-1:-1;;;;;4264:19:5;:33;;4094:210::o;3584:504::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3815:20:5;;3705:17;3815:20;;;:14;:20;;;;;;;;3797:39;;;;;;;;;;;;;;;;;3705:17;;;;;;;;3797:39;;;;3815:20;3797:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:39::i;:::-;3867:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;3584:504:5:o;16285:111:2:-;16345:4;16368:21;16383:5;16368:14;:21::i;:::-;16361:28;16285:111;-1:-1:-1;;16285:111:2:o;5616:518:4:-;5713:15;;;;:7;:15;;;;;:22;5700:35;;5692:72;;;;-1:-1:-1;;;5692:72:4;;40556:2:7;5692:72:4;;;40538:21:7;40595:2;40575:18;;;40568:30;-1:-1:-1;;;40614:18:7;;;40607:54;40678:18;;5692:72:4;40354: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;;40909:2:7;5832:61:4;;;40891:21:7;40948:2;40928:18;;;40921:30;40987:25;40967:18;;;40960:53;41030:18;;5832:61:4;40707:347:7;5832:61:4;5912:5;:15;;;5911:16;5903:52;;;;-1:-1:-1;;;5903:52:4;;41261:2:7;5903:52:4;;;41243:21:7;41300:2;41280:18;;;41273:30;-1:-1:-1;;;41319:18:7;;;41312:53;41382:18;;5903:52:4;41059: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;21948:34:7::0;4043:4:4::1;21998:18:7::0;;;21991:43;3978:6:4::1;::::0;;::::1;-1:-1:-1::0;;;;;3978:6:4::1;::::0;;;4003:19:::1;::::0;21883:18:7;;4003:46:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;3995:96;;;::::0;-1:-1:-1;;;3995:96:4;;22436:2:7;3995:96:4::1;::::0;::::1;22418:21:7::0;22475:2;22455:18;;;22448:30;-1:-1:-1;;;22494:18:7;;;22487:50;22554:18;;3995:96:4::1;22234:344:7::0;3995:96:4::1;4118:13:::0;;4109:22;::::1;4101:55;;;::::0;-1:-1:-1;;;4101:55:4;;41613:2:7;4101:55:4::1;::::0;::::1;41595:21:7::0;41652:2;41632:18;;;41625:30;-1:-1:-1;;;41671:18:7;;;41664:50;41731:18;;4101:55:4::1;41411:344:7::0;4101:55:4::1;4167:83;4175:6;-1:-1:-1::0;;4167:7:4::1;:83::i;:::-;4260:21;1304:19:5::0;;;:11;:19;;;;;;-1:-1:-1;;;;;1304:19:5;4314:32:4::1;4327:10;1304: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;8361:433::-;8423:7;8466:15;;;:7;:15;;;;;;;;8442:39;;;;;;;;;;;;;;;;;8423:7;;;;8442:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8442:39:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8491:14;8508:6;:13;8491:30;;8531:15;8565:6;8560:201;8575:9;8573:1;:11;8560:201;;;8606:6;8613:1;8606:9;;;;;;;;:::i;:::-;;;;;;;:19;;;8605:20;:52;;;;;8647:10;8629:6;8636:1;8629:9;;;;;;;;:::i;:::-;;;;;;;:15;;;:28;8605:52;8601:119;;;8690:6;8697:1;8690:9;;;;;;;;:::i;:::-;;;;;;;:15;;;8677:28;;8601:119;8745:3;;8560:201;;;-1:-1:-1;8777:10:4;8361:433;-1:-1:-1;;;;8361:433:4:o;9740:545:2:-;1385:16;;1430:15;;1376:70;;-1:-1:-1;;;1376:70:2;;1418:10;1376:70;;;24265:51:7;24332:18;;;24325:34;;;;-1:-1:-1;;;;;1385:16:2;;;;1376:41;;24238:18:7;;1376:70:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:141:::1;10069:14;;10085:11;:25;;;10112:11;:23;;;10137:11;:23;;;10162:11;:26;;;10048:20;:141::i;:::-;10199:79;10209:13;;10224:21;;10247:20;;10269:8;10199: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;7917:240::-;7979:7;8032:17;;;:9;:17;;;;;;;;8007:42;;;;;;;;;;;;;;;;;;;;;;;;;7979:7;;8059:40;;;;-1:-1:-1;;;8059:40:4;;;;;;;:::i;:::-;8117:13;;8132:17;;;;;8117:13;;8132:17;;-1:-1:-1;7917:240:4;-1:-1:-1;;7917:240:4:o;6258:728::-;1149:19:5;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;1149:19:5;1135:10;:33;1127:68;;;;-1:-1:-1;;;1127: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;;40556:2:7;6381:72:4::2;::::0;::::2;40538:21:7::0;40595:2;40575:18;;;40568:30;-1:-1:-1;;;40614:18:7;;;40607:54;40678:18;;6381:72:4::2;40354: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;;41261:2:7;6521:52:4::2;::::0;::::2;41243:21:7::0;41300:2;41280:18;;;41273:30;-1:-1:-1;;;41319:18:7;;;41312:53;41382:18;;6521:52:4::2;41059:347:7::0;6521:52:4::2;6606:5;6591;:11;;;:20;6583:53;;;::::0;-1:-1:-1;;;6583:53:4;;41613:2:7;6583:53:4::2;::::0;::::2;41595:21:7::0;41652:2;41632:18;;;41625:30;-1:-1:-1;;;41671:18:7;;;41664:50;41731:18;;6583:53:4::2;41411: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;24265:51:7::0;24332:18;;;24325:34;;;6771:49:4;;-1:-1:-1;6771:49:4;-1:-1:-1;;;;;;6830:18:4;::::2;::::0;::::2;::::0;24238::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;24265:51:7::0;24332:18;;;24325:34;;;6875:18:4;;::::2;::::0;::::2;::::0;24238::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;2303: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;:::-;2413:13:5::1;::::0;::::1;;2412:14;2404:54;;;::::0;-1:-1:-1;;;2404:54:5;;32608:2:7;2404:54:5::1;::::0;::::1;32590:21:7::0;32647:2;32627:18;;;32620:30;32686:29;32666:18;;;32659:57;32733:18;;2404:54:5::1;32406:351:7::0;2404:54:5::1;2468:17;::::0;;;:9:::1;:17;::::0;;;;2488:8;;2468:28:::1;2488:8:::0;2468:17;:28:::1;:::i;:::-;-1:-1:-1::0;;;;2303:200:5:o;1552:115::-;1609:15;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1609:15:5;1643:17;;;;:9;:17;;;;;;;;;1636:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1636:24:5;;;;;;;;-1:-1:-1;;;1636:24:5;;;;;;;;-1:-1:-1;;;1636:24:5;;;;;;;;;1643:17;;1636:24;;;;-1:-1:-1;;;1636:24:5;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;1636:24:5;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;1636:24:5;1552:115;-1:-1:-1;;1552: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;;41962:2:7;966:67:0::1;::::0;::::1;41944:21:7::0;;;41981:18;;;41974:30;42040:34;42020:18;;;42013:62;42092:18;;966:67:0::1;41760: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;8163:192:4:-;8226:7;8261:17;;;:9;:17;;;;;:23;8302:9;8294:32;;;;-1:-1:-1;;;8294: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;;42323:2:7;2700:67:2::1;::::0;::::1;42305:21:7::0;;;42342:18;;;42335:30;42401:34;42381:18;;;42374:62;42453:18;;2700:67:2::1;42121: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;2509:1069:5:-;2585:4;2591;2597;2603;2609;2626:15;2651:13;2674;2697;2720:15;2746:11;2760:7;:14;2746:28;;2789:6;2785:730;2799:3;2797:1;:5;2785:730;;;2819:14;2836:7;2844:1;2836:10;;;;;;;;:::i;:::-;;;;;;;2819:27;;2893:13;2865:41;;;;;;;;:::i;:::-;:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;2865:24:5;;;;:41;;;;;;;;:::i;:::-;;2861:612;;2926:11;2936:1;2926:11;;:::i;:::-;;;2861:612;;;3002:11;2974:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;2974:24:5;;;;:39;;;;;;;;:::i;:::-;;2970:503;;3033:9;3041:1;3033:9;;:::i;:::-;;;2970:503;;;3107:11;3079:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3079:24:5;;;;:39;;;;;;;;:::i;:::-;;3075:398;;3138:9;3146:1;3138:9;;:::i;:::-;;;3075:398;;;3212:11;3184:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3184:24:5;;;;:39;;;;;;;;:::i;:::-;;3180:293;;3243:9;3251:1;3243:9;;:::i;:::-;;;3180:293;;;3395:14;3367:17;;;;:9;:17;;;;;:24;-1:-1:-1;;;3367:24:5;;;;:42;;;;;;;;:::i;:::-;;3359:70;;;;-1:-1:-1;;;3359:70:5;;42684:2:7;3359:70:5;;;42666:21:7;42723:2;42703:18;;;42696:30;-1:-1:-1;;;42742:18:7;;;42735:45;42797:18;;3359:70:5;42482:339:7;3359:70:5;3447:11;3457:1;3447:11;;:::i;:::-;;;3180:293;-1:-1:-1;3499:3:5;;2785:730;;;-1:-1:-1;3533:7:5;;3542:5;;-1:-1:-1;3549:5:5;;-1:-1:-1;3549:5:5;-1:-1:-1;3542:5:5;-1:-1:-1;2509:1069:5;-1:-1:-1;;;2509:1069:5:o;7270:640:2:-;7400:14;;7381:16;7424:239;7438:8;7436:1;:10;7424:239;;;7463:14;7480:7;7488:1;7480:10;;;;;;;;:::i;:::-;;;;;;;7463:27;;7512;7532:6;7512:19;:27::i;:::-;7504:71;;;;-1:-1:-1;;;7504:71:2;;43028:2:7;7504:71:2;;;43010:21:7;43067:2;43047:18;;;43040:30;43106:33;43086:18;;;43079:61;43157:18;;7504:71:2;42826:355:7;7504:71:2;7589:32;7602:10;7614:6;7589:12;:32::i;:::-;-1:-1:-1;7647:3:2;;7424:239;;;;7677:17;7673:154;;;7730:7;:14;7710:16;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;7673:154:2;;-1:-1:-1;7673:154:2;;7802:7;:14;7783:15;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;7673:154:2;7885:17;7842:61;;7875:8;-1:-1:-1;;;;;7842:61:2;7863:10;-1:-1:-1;;;;;7842:61:2;;7854:7;7842:61;;;;;;:::i;:::-;;;;;;;;7371:539;7270:640;;;:::o;3516:1062::-;3729:18;3721:46;;;;-1:-1:-1;;;3721:46:2;;;;;;;:::i;:::-;3777:13;3793:71;3811:7;;3793:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3820:21:2;;-1:-1:-1;3820:21:2;;-1:-1:-1;3843:20:2;;-1:-1:-1;3843:20:2;3793:17;:71::i;:::-;3883:16;;3874:98;;-1:-1:-1;;;3874:98:2;;3777:87;;-1:-1:-1;;;;;;3883:16:2;;3874:41;;:98;;3916:10;;3928:21;;;;3951:20;;;;3874:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3982:12;4008:26;4025:8;4008:16;:26::i;:::-;4004:455;;;4051:8;4061;4073:28;4095:5;4073:21;:28::i;:::-;4132:6;;4125:54;;-1:-1:-1;;;4125:54:2;;4050:51;;-1:-1:-1;4050:51:2;;-1:-1:-1;4132:6:2;;;-1:-1:-1;;;;;4132:6:2;;4125:27;;:54;;4153:10;;4165:8;;4050:51;;4125:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4115:64;;4197:7;4193:113;;;4241:6;;4274:11;;4234:57;;-1:-1:-1;;;4234:57:2;;4241:6;;;;-1:-1:-1;;;;;4241:6:2;;;;4234:27;;:57;;4262:10;;4274:11;;;4287:3;;4234:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4224:67;;4193:113;4036:280;;4004:455;;;4396:6;;4429:11;;4389:59;;-1:-1:-1;;;4389:59:2;;4363:1;;-1:-1:-1;4396:6:2;;;;-1:-1:-1;;;;;4396:6:2;;;;4389:27;;:59;;4417:10;;4429:11;;;4442:5;;4389:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4379:69;;4004:455;4477:7;4469:50;;;;-1:-1:-1;;;4469:50:2;;44368:2:7;4469:50:2;;;44350:21:7;44407:2;44387:18;;;44380:30;44446:32;44426:18;;;44419:60;44496:18;;4469:50:2;44166:354:7;4469:50:2;4530:41;4546:7;;4530:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4555:8:2;;-1:-1:-1;4530:41:2;-1:-1:-1;4530:15:2;;-1:-1:-1;4530:41:2:i;:::-;3711:867;;3516:1062;;;;;;;:::o;10556:917::-;10746:14;;10714:4;;10778:33;;;:50;;;10815:8;10827:1;10815:13;10778:50;10770:95;;;;-1:-1:-1;;;10770:95:2;;44727:2:7;10770:95:2;;;44709:21:7;;;44746:18;;;44739:30;44805:34;44785:18;;;44778:62;44857:18;;10770:95:2;44525:356:7;10770:95:2;11019:16;;11010:97;;-1:-1:-1;;;11010:97:2;;10876:13;;;;-1:-1:-1;;;;;11019:16:2;;;;11010:40;;:97;;11051:10;;11063:21;;;;11086:20;;;;11010:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11010:97:2;;;;;;;;;;;;:::i;:::-;10971:136;;11123:6;11118:241;11133:8;11131:1;:10;11118:241;;;11158:24;11185:23;11197:7;11205:1;11197:10;;;;;;;;:::i;:::-;;;;;;;11185:11;:23::i;:::-;11158:50;;11222:17;11242:42;11264:8;11274:9;11242:21;:42::i;:::-;11222:62;-1:-1:-1;11298:18:2;11222:62;11298:18;;:::i;:::-;;;11343:3;;;;;11144:215;;11118:241;;;-1:-1:-1;15357:15:2;;15376:1;15357:20;11369:75;;11412:21;11427:5;11412:14;:21::i;:::-;11404:29;;11369:75;-1:-1:-1;11461:5:2;10556:917;-1:-1:-1;;;;;;;10556:917:2: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;8241:1493:2:-;8461:18;8453:46;;;;-1:-1:-1;;;8453:46:2;;;;;;;:::i;:::-;8510:17;8529:15;8546;8563;8580:18;8602:26;8620:7;;8602:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8602:17:2;;-1:-1:-1;;;8602:26:2:i;:::-;8509:119;;;;;;;;;;8728:7;8714:21;;;;;:::i;:::-;;;8755:1;8745:11;;8842:13;8830:9;:25;8827:147;;;8883:25;8895:13;8883:9;:25;:::i;:::-;8871:38;;;;:::i;:::-;;-1:-1:-1;8937:25:2;8949:13;8937:9;:25;:::i;:::-;8923:40;;;;:::i;:::-;;;8827:147;9057:11;9047:7;:21;9044:133;;;9096:21;9106:11;9096:7;:21;:::i;:::-;9084:34;;;;:::i;:::-;;-1:-1:-1;9144:21:2;9154:11;9144:7;:21;:::i;:::-;9132:34;;;;:::i;:::-;;;9044:133;9260:11;9250:7;:21;9247:136;;;9302:21;9312:11;9302:7;:21;:::i;:::-;9287:37;;;;:::i;:::-;;-1:-1:-1;9350:21:2;9360:11;9350:7;:21;:::i;:::-;9338:34;;;;:::i;:::-;;;9247:136;9431:9;9414:13;:26;;:52;;;;;9459:7;9444:11;:22;;9414:52;:78;;;;;9485:7;9470:11;:22;;9414:78;:110;;;;;9514:10;9496:14;:28;;9414:110;9393:179;;;;-1:-1:-1;;;9393:179:2;;48028:2:7;9393:179:2;;;48010:21:7;48067:2;48047:18;;;48040:30;-1:-1:-1;;;48086:18:7;;;48079:52;48148:18;;9393:179:2;47826:346:7;9393:179:2;9592:16;;9583:92;;-1:-1:-1;;;9583:92:2;;-1:-1:-1;;;;;9592:16:2;;;;9583:39;;:92;;9623:10;;9635:9;;9646:7;;9655;;9664:10;;9583:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9685:42;9701:7;;9685:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9685:42:2;-1:-1:-1;9722:4:2;;-1:-1:-1;9685:15:2;;-1:-1:-1;9685:42:2:i;:::-;8443:1291;;;;;8241:1493;;;;;;:::o;4828:1143:5:-;4899:16;4918:19;;;:11;:19;;;;;;;;;;-1:-1:-1;;;;;4947:26:5;;;-1:-1:-1;;;;;;4947:26:5;;;;;;;4983:20;;;:14;:20;;;;;:33;;4918:19;4983:33;;;;;;;;;;;;;;;;;4918:19;5069:22;;5065:900;;-1:-1:-1;;;;;5140:24:5;;5107:30;5140:24;;;:14;:24;;;;;;;;5107:57;;;;;;;;;;;;;;;;;;;5140:24;;5107:57;;;5140:24;5107:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5192:20:5;;5107:57;;-1:-1:-1;;;5245:66:5;-1:-1:-1;5178:11:5;;-1:-1:-1;;5325:199:5;5339:3;5337:1;:5;5325:199;;;5387:6;5367:13;5381:1;5367:16;;;;;;;;:::i;:::-;;;;;;;:26;5363:112;;5428:1;5417:12;;5451:5;;5363:112;5504:3;;5325:199;;;-1:-1:-1;5597:78:5;;5589:118;;;;-1:-1:-1;;;5589:118:5;;48873:2:7;5589:118:5;;;48855:21:7;48912:2;48892:18;;;48885:30;48951:29;48931:18;;;48924:57;48998:18;;5589:118:5;48671:351:7;5589:118:5;5803:5;5807:1;5803:3;:5;:::i;:::-;5791:8;:17;5787:124;;-1:-1:-1;;;;;5865:24:5;;;;;;:14;:24;;;;;5890:5;5894:1;5890:3;:5;:::i;:::-;5865:31;;;;;;;;:::i;:::-;;;;;;;;;5828:14;:24;5843:8;-1:-1:-1;;;;;5828:24:5;-1:-1:-1;;;;;5828:24:5;;;;;;;;;;;;5853:8;5828:34;;;;;;;;:::i;:::-;;;;;;;;;;:68;5787:124;-1:-1:-1;;;;;5924:24:5;;;;;;:14;:24;;;;;:30;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5093:872;;;5065:900;4889:1082;4828:1143;;:::o;16402:753:2:-;16462:4;16607:15;16625:46;16637:17;:15;:17::i;:::-;16656:14;;16625:11;:46::i;:::-;16879:14;;16607:64;;-1:-1:-1;16784:27:2;;575:6;16833:24;16607:64;16879:14;16833:24;:::i;:::-;16832:44;;;;:::i;:::-;:61;;;;:::i;:::-;16814:79;;575:6;16814:79;:::i;:::-;16784:109;;16939:29;16971:65;395:9;16995:19;;17016;16971:5;:65::i;:::-;16939:97;-1:-1:-1;17046:21:2;395:9;17070:29;17094:5;16939:97;17070:29;:::i;:::-;:48;;;;:::i;8920:227:4:-;8980:7;8989;9008:11;395:9:2;9038:11:4;;9030:5;:19;;;;:::i;:::-;9022:47;;;;:::i;:::-;9008:61;-1:-1:-1;9079:11:4;9101;9008:61;9101:5;:11;:::i;:::-;9079:34;9136:3;;-1:-1:-1;8920:227:4;;-1:-1:-1;;;8920:227:4:o;4584:481:2:-;4651:4;-1:-1:-1;;;;;4671:22:2;;;;:48;;-1:-1:-1;;;;;;4697:22:2;;4709:10;4697:22;4671:48;:70;;;-1:-1:-1;4724:17:2;;;;4723:18;4671:70;4667:113;;;-1:-1:-1;4764:5:2;;4584:481;-1:-1:-1;4584:481:2:o;4667:113::-;-1:-1:-1;;;;;4793:28:2;;;;;;:18;:28;;;;;;4825:1;4793:33;4789:75;;-1:-1:-1;4849:4:2;;4584:481;-1:-1:-1;4584:481:2:o;4789:75::-;-1:-1:-1;;;;;4951:24:2;;4874:17;4951:24;;;:14;:24;;;;;;;;4933:43;;;;;;;;;;;;;;;;;4874:17;;;;4933:43;;;;4951:24;;4933:43;;4951:24;4933:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:43::i;:::-;4873:103;;;;;;;;5034:23;;5019:7;5029:1;5019:11;;;;:::i;:::-;5005;:7;5015:1;5005:11;:::i;:::-;4993:23;;:9;:23;:::i;:::-;:37;;;;:::i;:::-;:64;;;4584:481;-1:-1:-1;;;;;4584:481:2:o;5071:237::-;5139:7;;;395:9;5189:21;514:6;5189:5;:21;:::i;11479:3166::-;11596:4;;;11692:13;11673:8;:15;;;:32;;;;;;;;:::i;:::-;;11669:348;;11733:12;11721:24;;11669:348;;;11794:11;11775:8;:15;;;:30;;;;;;;;:::i;:::-;;11771:246;;11833:10;11821:22;;11771:246;;;11892:11;11873:8;:15;;;:30;;;;;;;;:::i;:::-;;11869:148;;11931:10;11919:22;;11869:148;;;11981:25;;-1:-1:-1;;;11981:25:2;;42684:2:7;11981:25:2;;;42666:21:7;42723:2;42703:18;;;42696:30;-1:-1:-1;;;42742:18:7;;;42735:45;42797:18;;11981:25:2;42482:339:7;11869:148:2;12047:16;;12027:17;12119;;;12115:63;;12158:9;12151:16;;;;;;;12115:63;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12231:2231:2;12248:12;12244:1;:16;12231:2231;;;12288:9;12298:1;12288:12;;;;;;;;:::i;:::-;;;;;;;12277:23;;12318:8;:15;;;12314:2107;;;12368:17;;12353:32;;-1:-1:-1;;;;;12353:32:2;;;:::i;:::-;;;12314:2107;;;643:2;12422:8;:14;;;:45;;;:71;;;;;12471:8;:22;;;12422:71;12418:2003;;;12528:17;;12513:32;;-1:-1:-1;;;;;12513:32:2;;;:::i;12418:2003::-;643:2;12582:8;:18;;;:49;;;:79;;;;;12635:8;:26;;;12582:79;12578:1843;;;12696:17;;12681:32;;-1:-1:-1;;;;;12681:32:2;;;:::i;12578:1843::-;643:2;12750:8;:13;;;:44;;;:69;;;;;12798:8;:21;;;12750:69;12746:1675;;;12854:17;;12839:32;;-1:-1:-1;;;;;12839:32:2;;;:::i;12746:1675::-;643:2;12908:8;:16;;;:47;;;:75;;;;;12959:8;:24;;;12908:75;12904:1517;;;13018:17;;13003:32;;-1:-1:-1;;;;;13003:32:2;;;:::i;12904:1517::-;643:2;13072:8;:13;;;:44;;;:69;;;;;13120:8;:21;;;13072:69;13068:1353;;;13176:17;;13161:32;;-1:-1:-1;;;;;13161:32:2;;;:::i;13068:1353::-;643:2;13230:8;:14;;;:45;;;:71;;;;;13279:8;:22;;;13230:71;13226:1195;;;13336:17;;13321:32;;-1:-1:-1;;;;;13321:32:2;;;:::i;13226:1195::-;643:2;13390:8;:14;;;:45;;;:71;;;;;13439:8;:22;;;13390:71;13386:1035;;;13496:17;;13481:32;;-1:-1:-1;;;;;13481:32:2;;;:::i;13386:1035::-;643:2;13550:8;:14;;;:45;;;:71;;;;;13599:8;:22;;;13550:71;13546:875;;;13656:17;;13641:32;;-1:-1:-1;;;;;13641:32:2;;;:::i;13546:875::-;643:2;13710:8;:15;;;:46;;;:73;;;;;13760:8;:23;;;13710:73;13706:715;;;13818:17;;13803:32;;-1:-1:-1;;;;;13803:32:2;;;:::i;13706:715::-;643:2;13872:8;:15;;;:46;;;:73;;;;;13922:8;:23;;;13872:73;13868:553;;;13980:17;;13965:32;;-1:-1:-1;;;;;13965:32:2;;;:::i;13868:553::-;14034:8;:17;;;:22;;14055:1;14034:22;:44;;;;;14060:8;:18;;;14034:44;14030:391;;;14113:17;;14098:32;;-1:-1:-1;;;;;14098:32:2;;;:::i;14030:391::-;14167:8;:16;;;:21;;14187:1;14167:21;:42;;;;;14192:8;:17;;;14167:42;14163:258;;;14244:17;;14229:32;;-1:-1:-1;;;;;14229:32:2;;;:::i;14163:258::-;14298:8;:23;;;:28;;14325:1;14298:28;:56;;;;;14330:8;:24;;;14298:56;14294:127;;;14389:17;;14374:32;;-1:-1:-1;;;;;14374:32:2;;;:::i;:::-;;;14294:127;14446:3;;12231:2231;;;;452:7;14476:11;:27;14472:85;;;452:7;14519:27;;14472:85;395:9;14587:30;14606:11;395:9;14587:30;:::i;:::-;14574:44;;:9;:44;:::i;:::-;14573:65;;;;:::i;:::-;14566:72;11479:3166;-1:-1:-1;;;;;;;11479:3166:2:o;17161:146::-;17209:4;17246:15;17232:11;;:29;:67;;-1:-1:-1;17298:1:2;;17161:146::o;17232:67::-;17283:11;;17265:29;;:15;:29;:::i;:::-;17225:74;;17161:146;:::o;17611:200::-;17683:4;17711:5;17703;:13;17699:106;;;-1:-1:-1;17738:5:2;17731:12;;17699:106;-1:-1:-1;17789:5:2;17782:12;;17384:221;17466:7;;575:6;17542:15;17553:4;17542:8;:15;:::i;:::-;17533:4;17503:26;17521:8;575:6;17503:26;:::i;:::-;17502:35;;;;:::i;:::-;17501:57;;;;:::i;:::-;17500:77;;;;:::i;:::-;17485:93;-1:-1:-1;;17384: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:472::-;1369:3;1407:5;1401:12;1434:6;1429:3;1422:19;1459:1;1469:162;1483:6;1480:1;1477:13;1469:162;;;1545:4;1601:13;;;1597:22;;1591:29;1573:11;;;1569:20;;1562:59;1498:12;1469:162;;;1649:6;1646:1;1643:13;1640:87;;;1715:1;1708:4;1699:6;1694:3;1690:16;1686:27;1679:38;1640:87;-1:-1:-1;1781:2:7;1760:15;-1:-1:-1;;1756:29:7;1747:39;;;;1788:4;1743:50;;1327:472;-1:-1:-1;;1327:472:7:o;1804:220::-;1953:2;1942:9;1935:21;1916:4;1973:45;2014:2;2003:9;1999:18;1991:6;1973:45;:::i;2221:173::-;2289:20;;-1:-1:-1;;;;;2338:31:7;;2328:42;;2318:70;;2384:1;2381;2374:12;2318:70;2221:173;;;:::o;2399:186::-;2458:6;2511:2;2499:9;2490:7;2486:23;2482:32;2479:52;;;2527:1;2524;2517:12;2479:52;2550:29;2569:9;2550:29;:::i;2590:367::-;2653:8;2663:6;2717:3;2710:4;2702:6;2698:17;2694:27;2684:55;;2735:1;2732;2725:12;2684:55;-1:-1:-1;2758:20:7;;-1:-1:-1;;;;;2790:30:7;;2787:50;;;2833:1;2830;2823:12;2787:50;2870:4;2862:6;2858:17;2846:29;;2930:3;2923:4;2913:6;2910:1;2906:14;2898:6;2894:27;2890:38;2887:47;2884:67;;;2947:1;2944;2937:12;2884:67;2590:367;;;;;:::o;2962:105::-;3041:1;3034:5;3031:12;3021:40;;3057:1;3054;3047:12;3072:587;3178:6;3186;3194;3247:2;3235:9;3226:7;3222:23;3218:32;3215:52;;;3263:1;3260;3253:12;3215:52;3303:9;3290:23;-1:-1:-1;;;;;3328:6:7;3325:30;3322:50;;;3368:1;3365;3358:12;3322:50;3407:70;3469:7;3460:6;3449:9;3445:22;3407:70;:::i;:::-;3496:8;;-1:-1:-1;3381:96:7;-1:-1:-1;;3581:2:7;3566:18;;3553:32;3594:35;3553:32;3594:35;:::i;:::-;3648:5;3638:15;;;3072:587;;;;;:::o;3872:316::-;3949:6;3957;3965;4018:2;4006:9;3997:7;3993:23;3989:32;3986:52;;;4034:1;4031;4024:12;3986:52;-1:-1:-1;;4057:23:7;;;4127:2;4112:18;;4099:32;;-1:-1:-1;4178:2:7;4163:18;;;4150:32;;3872:316;-1:-1:-1;3872:316:7:o;4193:632::-;4364:2;4416:21;;;4486:13;;4389:18;;;4508:22;;;4335:4;;4364:2;4587:15;;;;4561:2;4546:18;;;4335:4;4630:169;4644:6;4641:1;4638:13;4630:169;;;4705:13;;4693:26;;4774:15;;;;4739:12;;;;4666:1;4659:9;4630:169;;;-1:-1:-1;4816:3:7;;4193:632;-1:-1:-1;;;;;;4193:632:7:o;4830:1163::-;4997:6;5005;5013;5021;5029;5037;5045;5098:3;5086:9;5077:7;5073:23;5069:33;5066:53;;;5115:1;5112;5105:12;5066:53;5155:9;5142:23;-1:-1:-1;;;;;5225:2:7;5217:6;5214:14;5211:34;;;5241:1;5238;5231:12;5211:34;5280:70;5342:7;5333:6;5322:9;5318:22;5280:70;:::i;:::-;5369:8;;-1:-1:-1;5254:96:7;-1:-1:-1;5457:2:7;5442:18;;5429:32;;-1:-1:-1;5473:16:7;;;5470:36;;;5502:1;5499;5492:12;5470:36;5541:72;5605:7;5594:8;5583:9;5579:24;5541:72;:::i;:::-;5632:8;;-1:-1:-1;5515:98:7;-1:-1:-1;5720:2:7;5705:18;;5692:32;;-1:-1:-1;5736:16:7;;;5733:36;;;5765:1;5762;5755:12;5733:36;;5804:72;5868:7;5857:8;5846:9;5842:24;5804:72;:::i;:::-;5895:8;;-1:-1:-1;5778:98:7;-1:-1:-1;5949:38:7;;-1:-1:-1;5983:2:7;5968:18;;5949:38;:::i;:::-;5939:48;;4830:1163;;;;;;;;;;:::o;5998:127::-;6059:10;6054:3;6050:20;6047:1;6040:31;6090:4;6087:1;6080:15;6114:4;6111:1;6104:15;6130:255;6202:2;6196:9;6244:6;6232:19;;-1:-1:-1;;;;;6266:34:7;;6302:22;;;6263:62;6260:88;;;6328:18;;:::i;:::-;6364:2;6357:22;6130:255;:::o;6390:275::-;6461:2;6455:9;6526:2;6507:13;;-1:-1:-1;;6503:27:7;6491:40;;-1:-1:-1;;;;;6546:34:7;;6582:22;;;6543:62;6540:88;;;6608:18;;:::i;:::-;6644:2;6637:22;6390:275;;-1:-1:-1;6390:275:7:o;6670:183::-;6730:4;-1:-1:-1;;;;;6755:6:7;6752:30;6749:56;;;6785:18;;:::i;:::-;-1:-1:-1;6830:1:7;6826:14;6842:4;6822:25;;6670:183::o;6858:662::-;6912:5;6965:3;6958:4;6950:6;6946:17;6942:27;6932:55;;6983:1;6980;6973:12;6932:55;7019:6;7006:20;7045:4;7069:60;7085:43;7125:2;7085:43;:::i;:::-;7069:60;:::i;:::-;7163:15;;;7249:1;7245:10;;;;7233:23;;7229:32;;;7194:12;;;;7273:15;;;7270:35;;;7301:1;7298;7291:12;7270:35;7337:2;7329:6;7325:15;7349:142;7365:6;7360:3;7357:15;7349:142;;;7431:17;;7419:30;;7469:12;;;;7382;;7349:142;;;-1:-1:-1;7509:5:7;6858:662;-1:-1:-1;;;;;;6858:662:7:o;7525:348::-;7609:6;7662:2;7650:9;7641:7;7637:23;7633:32;7630:52;;;7678:1;7675;7668:12;7630:52;7718:9;7705:23;-1:-1:-1;;;;;7743:6:7;7740:30;7737:50;;;7783:1;7780;7773:12;7737:50;7806:61;7859:7;7850:6;7839:9;7835:22;7806:61;:::i;:::-;7796:71;7525:348;-1:-1:-1;;;;7525:348:7:o;7878:803::-;8040:4;8069:2;8109;8098:9;8094:18;8139:2;8128:9;8121:21;8162:6;8197;8191:13;8228:6;8220;8213:22;8266:2;8255:9;8251:18;8244:25;;8328:2;8318:6;8315:1;8311:14;8300:9;8296:30;8292:39;8278:53;;8366:2;8358:6;8354:15;8387:1;8397:255;8411:6;8408:1;8405:13;8397:255;;;8504:2;8500:7;8488:9;8480:6;8476:22;8472:36;8467:3;8460:49;8532:40;8565:6;8556;8550:13;8532:40;:::i;:::-;8522:50;-1:-1:-1;8630:12:7;;;;8595:15;;;;8433:1;8426:9;8397:255;;;-1:-1:-1;8669:6:7;;7878:803;-1:-1:-1;;;;;;;7878:803:7:o;8686:999::-;8842:6;8850;8858;8866;8874;8927:2;8915:9;8906:7;8902:23;8898:32;8895:52;;;8943:1;8940;8933:12;8895:52;8983:9;8970:23;-1:-1:-1;;;;;9053:2:7;9045:6;9042:14;9039:34;;;9069:1;9066;9059:12;9039:34;9092:61;9145:7;9136:6;9125:9;9121:22;9092:61;:::i;:::-;9082:71;;9206:2;9195:9;9191:18;9178:32;9162:48;;9235:2;9225:8;9222:16;9219:36;;;9251:1;9248;9241:12;9219:36;9290:72;9354:7;9343:8;9332:9;9328:24;9290:72;:::i;:::-;9381:8;;-1:-1:-1;9264:98:7;-1:-1:-1;9469:2:7;9454:18;;9441:32;;-1:-1:-1;9485:16:7;;;9482:36;;;9514:1;9511;9504:12;9482:36;;9553:72;9617:7;9606:8;9595:9;9591:24;9553:72;:::i;:::-;8686:999;;;;-1:-1:-1;8686:999:7;;-1:-1:-1;9644:8:7;;9527:98;8686:999;-1:-1:-1;;;8686:999:7:o;9690:711::-;9812:6;9820;9828;9836;9844;9852;9905:3;9893:9;9884:7;9880:23;9876:33;9873:53;;;9922:1;9919;9912:12;9873:53;9962:9;9949:23;-1:-1:-1;;;;;9987:6:7;9984:30;9981:50;;;10027:1;10024;10017:12;9981:50;10066:70;10128:7;10119:6;10108:9;10104:22;10066:70;:::i;:::-;10155:8;;10040:96;;-1:-1:-1;10237:2:7;10222:18;;10209:32;;10288:2;10273:18;;10260:32;;-1:-1:-1;10339:2:7;10324:18;;10311:32;;-1:-1:-1;10390:3:7;10375:19;10362:33;;-1:-1:-1;9690:711:7;-1:-1:-1;;;;9690:711:7:o;10406:658::-;10577:2;10629:21;;;10699:13;;10602:18;;;10721:22;;;10548:4;;10577:2;10800:15;;;;10774:2;10759:18;;;10548:4;10843:195;10857:6;10854:1;10851:13;10843:195;;;10922:13;;-1:-1:-1;;;;;10918:39:7;10906:52;;11013:15;;;;10978:12;;;;10954:1;10872:9;10843:195;;11069:832;11147:6;11155;11208:2;11196:9;11187:7;11183:23;11179:32;11176:52;;;11224:1;11221;11214:12;11176:52;11260:9;11247:23;11237:33;;11289:2;11342;11331:9;11327:18;11314:32;-1:-1:-1;;;;;11406:2:7;11398:6;11395:14;11392:34;;;11422:1;11419;11412:12;11392:34;11460:6;11449:9;11445:22;11435:32;;11505:7;11498:4;11494:2;11490:13;11486:27;11476:55;;11527:1;11524;11517:12;11476:55;11563:2;11550:16;11585:2;11581;11578:10;11575:36;;;11591:18;;:::i;:::-;11633:53;11676:2;11657:13;;-1:-1:-1;;11653:27:7;11649:36;;11633:53;:::i;:::-;11620:66;;11709:2;11702:5;11695:17;11749:7;11744:2;11739;11735;11731:11;11727:20;11724:33;11721:53;;;11770:1;11767;11760:12;11721:53;11825:2;11820;11816;11812:11;11807:2;11800:5;11796:14;11783:45;11869:1;11864:2;11859;11852:5;11848:14;11844:23;11837:34;;11890:5;11880:15;;;;;11069:832;;;;;:::o;11906:963::-;12056:6;12064;12072;12080;12133:2;12121:9;12112:7;12108:23;12104:32;12101:52;;;12149:1;12146;12139:12;12101:52;12189:9;12176:23;-1:-1:-1;;;;;12259:2:7;12251:6;12248:14;12245:34;;;12275:1;12272;12265:12;12245:34;12314:70;12376:7;12367:6;12356:9;12352:22;12314:70;:::i;:::-;12403:8;;-1:-1:-1;12288:96:7;-1:-1:-1;12491:2:7;12476:18;;12463:32;;-1:-1:-1;12507:16:7;;;12504:36;;;12536:1;12533;12526:12;12504:36;12574:8;12563:9;12559:24;12549:34;;12621:7;12614:4;12610:2;12606:13;12602:27;12592:55;;12643:1;12640;12633:12;12592:55;12683:2;12670:16;12709:2;12701:6;12698:14;12695:34;;;12725:1;12722;12715:12;12695:34;12783:7;12778:2;12768:6;12760;12756:19;12752:2;12748:28;12744:37;12741:50;12738:70;;;12804:1;12801;12794:12;12738:70;11906:963;;;;-1:-1:-1;;12835:2:7;12827:11;;-1:-1:-1;;;11906:963:7:o;12874:254::-;12942:6;12950;13003:2;12991:9;12982:7;12978:23;12974:32;12971:52;;;13019:1;13016;13009:12;12971:52;13055:9;13042:23;13032:33;;13084:38;13118:2;13107:9;13103:18;13084:38;:::i;:::-;13074:48;;12874:254;;;;;:::o;13972:160::-;14036:5;14081:3;14072:6;14067:3;14063:16;14059:26;14056:46;;;14098:1;14095;14088:12;14056:46;-1:-1:-1;14120:6:7;13972:160;-1:-1:-1;13972:160:7:o;14137:1614::-;14380:6;14388;14396;14404;14412;14420;14428;14436;14444;14452;14505:3;14493:9;14484:7;14480:23;14476:33;14473:53;;;14522:1;14519;14512:12;14473:53;14562:9;14549:23;-1:-1:-1;;;;;14632:2:7;14624:6;14621:14;14618:34;;;14648:1;14645;14638:12;14618:34;14687:70;14749:7;14740:6;14729:9;14725:22;14687:70;:::i;:::-;14776:8;;-1:-1:-1;14661:96:7;-1:-1:-1;14864:2:7;14849:18;;14836:32;;-1:-1:-1;14880:16:7;;;14877:36;;;14909:1;14906;14899:12;14877:36;14948:72;15012:7;15001:8;14990:9;14986:24;14948:72;:::i;:::-;15039:8;;-1:-1:-1;14922:98:7;-1:-1:-1;15127:2:7;15112:18;;15099:32;;-1:-1:-1;15143:16:7;;;15140:36;;;15172:1;15169;15162:12;15140:36;15211:72;15275:7;15264:8;15253:9;15249:24;15211:72;:::i;:::-;15302:8;;-1:-1:-1;15185:98:7;-1:-1:-1;15185:98:7;;-1:-1:-1;15356:38:7;15390:2;15375:18;;15356:38;:::i;:::-;15346:48;;15447:3;15436:9;15432:19;15419:33;15403:49;;15477:2;15467:8;15464:16;15461:36;;;15493:1;15490;15483:12;15461:36;;15532:72;15596:7;15585:8;15574:9;15570:24;15532:72;:::i;:::-;15623:8;;-1:-1:-1;15506:98:7;-1:-1:-1;15677:68:7;;-1:-1:-1;15737:7:7;15731:3;15716:19;;15677:68;:::i;:::-;15667:78;;14137:1614;;;;;;;;;;;;;:::o;15756:961::-;15973:2;16025:21;;;16095:13;;15998:18;;;16117:22;;;15944:4;;15973:2;16158;;16176:18;;;;16217:15;;;15944:4;16260:431;16274:6;16271:1;16268:13;16260:431;;;16333:13;;16375:9;;-1:-1:-1;;;;;16371:35:7;16359:48;;16447:11;;;16441:18;16427:12;;;16420:40;16500:11;;;16494:18;16480:12;;;16473:40;16536:4;16594:11;;;16588:18;16581:26;16574:34;16560:12;;;16553:56;16638:4;16629:14;;;;16666:15;;;;16403:1;16289:9;16260:431;;;-1:-1:-1;16708:3:7;;15756:961;-1:-1:-1;;;;;;;15756:961:7:o;16722:339::-;16818:6;16826;16870:9;16861:7;16857:23;16900:3;16896:2;16892:12;16889:32;;;16917:1;16914;16907:12;16889:32;16940:23;;;-1:-1:-1;16997:3:7;-1:-1:-1;;16979:16:7;;16975:26;16972:46;;;17014:1;17011;17004:12;16972:46;;17052:2;17041:9;17037:18;17027:28;;16722:339;;;;;:::o;17146:127::-;17207:10;17202:3;17198:20;17195:1;17188:31;17238:4;17235:1;17228:15;17262:4;17259:1;17252:15;17278:137;17356:1;17349:5;17346:12;17336:46;;17362:18;;:::i;:::-;17391;;17278:137::o;17420:138::-;17499:1;17492:5;17489:12;17479:46;;17505:18;;:::i;17563:2063::-;17779:13;;17133:4;17122:16;17110:29;;17749:3;17734:19;;17851:4;17843:6;17839:17;17833:24;17866:52;17912:4;17901:9;17897:20;17883:12;17133:4;17122:16;17110:29;;17066:75;17866:52;;17967:4;17959:6;17955:17;17949:24;17982:54;18030:4;18019:9;18015:20;17999:14;17133:4;17122:16;17110:29;;17066:75;17982:54;;18085:4;18077:6;18073:17;18067:24;18100:54;18148:4;18137:9;18133:20;18117:14;17133:4;17122:16;17110:29;;17066:75;18100:54;;18203:4;18195:6;18191:17;18185:24;18218:54;18266:4;18255:9;18251:20;18235:14;17133:4;17122:16;17110:29;;17066:75;18218:54;;18321:4;18313:6;18309:17;18303:24;18336:54;18384:4;18373:9;18369:20;18353:14;17133:4;17122:16;17110:29;;17066:75;18336:54;;18439:4;18431:6;18427:17;18421:24;18454:54;18502:4;18491:9;18487:20;18471:14;17133:4;17122:16;17110:29;;17066:75;18454:54;;18557:4;18549:6;18545:17;18539:24;18572:54;18620:4;18609:9;18605:20;18589:14;17133:4;17122:16;17110:29;;17066:75;18572:54;-1:-1:-1;18645:6:7;18688:15;;;18682:22;17133:4;17122:16;;;18746:18;;;17110:29;;;;18784:6;18827:15;;;18821:22;17122:16;;18885:18;;;17110:29;18923:6;18966:15;;;18960:22;17122:16;;19024:18;;;17110:29;19062:6;19106:15;;;19100:22;17122:16;;19165:18;;;17110:29;19203:6;19247:15;;;19241:22;17122:16;;;19306:18;;;17110:29;19344:6;19388:15;;;19382:22;19413:59;19453:18;;;19382:22;19413:59;:::i;:::-;;;19491:6;19547:2;19539:6;19535:15;19529:22;19560:60;19616:2;19605:9;19601:18;19584:15;19560:60;:::i;:::-;;;17563:2063;;;;:::o;19631:340::-;19833:2;19815:21;;;19872:2;19852:18;;;19845:30;-1:-1:-1;;;19906:2:7;19891:18;;19884:46;19962:2;19947:18;;19631:340::o;22045:184::-;22115:6;22168:2;22156:9;22147:7;22143:23;22139:32;22136:52;;;22184:1;22181;22174:12;22136:52;-1:-1:-1;22207:16:7;;22045:184;-1:-1:-1;22045:184:7:o;22583:375::-;-1:-1:-1;;;;;22841:15:7;;;22823:34;;22893:15;;;;22888:2;22873:18;;22866:43;22940:2;22925:18;;22918:34;;;;22773:2;22758:18;;22583:375::o;22963:132::-;23039:13;;23061:28;23039:13;23061:28;:::i;23100:245::-;23167:6;23220:2;23208:9;23199:7;23195:23;23191:32;23188:52;;;23236:1;23233;23226:12;23188:52;23268:9;23262:16;23287:28;23309:5;23287:28;:::i;23350:351::-;23552:2;23534:21;;;23591:2;23571:18;;;23564:30;23630:29;23625:2;23610:18;;23603:57;23692:2;23677:18;;23350:351::o;23706:380::-;23785:1;23781:12;;;;23828;;;23849:61;;23903:4;23895:6;23891:17;23881:27;;23849:61;23956:2;23948:6;23945:14;23925:18;23922:38;23919:161;;24002:10;23997:3;23993:20;23990:1;23983:31;24037:4;24034:1;24027:15;24065:4;24062:1;24055:15;24370:339;24572:2;24554:21;;;24611:2;24591:18;;;24584:30;-1:-1:-1;;;24645:2:7;24630:18;;24623:45;24700:2;24685:18;;24370:339::o;24714:299::-;-1:-1:-1;;;;;24915:32:7;;24897:51;;24885:2;24870:18;;24957:50;25003:2;24988:18;;24980:6;24957:50;:::i;25376:127::-;25437:10;25432:3;25428:20;25425:1;25418:31;25468:4;25465:1;25458:15;25492:4;25489:1;25482:15;25508:128;25548:3;25579:1;25575:6;25572:1;25569:13;25566:39;;;25585:18;;:::i;:::-;-1:-1:-1;25621:9:7;;25508:128::o;25987:513::-;-1:-1:-1;;;;;26288:32:7;;;;26270:51;;26352:2;26337:18;;26330:34;;;;26395:2;26380:18;;26373:34;;;;26438:2;26423:18;;26416:34;26481:3;26466:19;;26459:35;26257:3;26242:19;;25987:513::o;29823:342::-;30025:2;30007:21;;;30064:2;30044:18;;;30037:30;-1:-1:-1;;;30098:2:7;30083:18;;30076:48;30156:2;30141:18;;29823:342::o;30170:346::-;30372:2;30354:21;;;30411:2;30391:18;;;30384:30;-1:-1:-1;;;30445:2:7;30430:18;;30423:52;30507:2;30492:18;;30170:346::o;31935:127::-;31996:10;31991:3;31987:20;31984:1;31977:31;32027:4;32024:1;32017:15;32051:4;32048:1;32041:15;32067:334;32269:2;32251:21;;;32308:2;32288:18;;;32281:30;-1:-1:-1;;;32342:2:7;32327:18;;32320:40;32392:2;32377:18;;32067:334::o;33123:198::-;33166:11;33218:3;33205:17;33262:4;33255:5;33251:16;33244:5;33241:27;33231:55;;33282:1;33279;33272:12;35939:184;35988:11;36040:3;36027:17;36053:35;36082:5;36053:35;:::i;36128:265::-;36240:1;36233:5;36230:12;36220:46;;36246:18;;:::i;:::-;36285:11;;-1:-1:-1;;;;36321:27:7;36375:3;36354:15;;;;-1:-1:-1;;;36350:35:7;36318:68;;;;36305:82;;36128:265::o;36398:190::-;36448:11;36500:3;36487:17;36533:1;36526:5;36523:12;36513:40;;36549:1;36546;36539:12;36593:267;36707:1;36700:5;36697:12;36687:46;;36713:18;;:::i;:::-;36752:11;;-1:-1:-1;;;;36788:27:7;36842:3;36821:15;;;;-1:-1:-1;;;36817:35:7;36785:68;;;;36772:82;;36593:267::o;36865:1719::-;37004:85;37056:32;37082:5;37056:32;:::i;:::-;33428:11;;-1:-1:-1;;33424:26:7;33463:4;33452:16;;;;33421:48;33408:62;;33326:150;37004:85;37098:94;37150:41;37187:2;37180:5;37176:14;37150:41;:::i;:::-;33573:11;;-1:-1:-1;;33609:19:7;33638:1;33634:13;;;;33649:5;33630:25;33606:50;33593:64;;33481:182;37098:94;37201;37253:41;37290:2;37283:5;37279:14;37253:41;:::i;:::-;33760:11;;-1:-1:-1;;33796:22:7;33828:2;33824:14;;;;33840:8;33820:29;33793:57;33780:71;;33668:189;37201:94;37304:92;37354:41;37391:2;37384:5;37380:14;37354:41;:::i;:::-;33952:11;;-1:-1:-1;;33988:24:7;34022:2;34018:14;;;;34034:10;34014:31;33985:61;33972:75;;33862:191;37304:92;37405:95;37457:42;37494:3;37487:5;37483:15;37457:42;:::i;:::-;34150:11;;-1:-1:-1;;34186:26:7;34222:2;34218:14;;;;34234:12;34214:33;34183:65;34170:79;;34058:197;37405:95;37509;37561:42;37598:3;37591:5;37587:15;37561:42;:::i;:::-;34352:11;;-1:-1:-1;;34388:28:7;34426:2;34422:14;;;;34438;34418:35;34385:69;34372:83;;34260:201;37509:95;37613;37665:42;37702:3;37695:5;37691:15;37665:42;:::i;:::-;34558:11;;-1:-1:-1;;34594:30:7;34634:2;34630:14;;;;34646:16;34626:37;34591:73;34578:87;;34466:205;37613:95;37717;37769:42;37806:3;37799:5;37795:15;37769:42;:::i;:::-;34768:11;;-1:-1:-1;;34804:32:7;34846:2;34842:14;;;;34858:18;34838:39;34801:77;34788:91;;34676:209;37717:95;37821;37873:42;37910:3;37903:5;37899:15;37873:42;:::i;:::-;34982:11;;-1:-1:-1;;35018:34:7;35062:2;35058:14;;;;35074:20;35054:41;35015:81;35002:95;;34890:213;37821:95;37925;37977:42;38014:3;38007:5;38003:15;37977:42;:::i;:::-;35200:11;;-1:-1:-1;;35236:36:7;35282:2;35278:14;;;;35294:22;35274:43;35233:85;35220:99;;35108:217;37925:95;38029:96;38082:42;38119:3;38112:5;38108:15;38082:42;:::i;:::-;38076:4;35423:11;;-1:-1:-1;;;;35459:26:7;35511:2;35491:14;;;;-1:-1:-1;;;35487:33:7;35456:65;;;;35443:79;;35330:198;38029:96;38134;38187:42;38224:3;38217:5;38213:15;38187:42;:::i;:::-;38181:4;35626:11;;-1:-1:-1;;;;35662:26:7;35714:2;35694:14;;;;-1:-1:-1;;;35690:33:7;35659:65;;;;35646:79;;35533:198;38134:96;38239;38292:42;38329:3;38322:5;38318:15;38292:42;:::i;:::-;38286:4;35829:11;;-1:-1:-1;;;;35865:26:7;35917:2;35897:14;;;;-1:-1:-1;;;35893:33:7;35862:65;;;;35849:79;;35736:198;38239:96;38344:111;38406:48;38449:3;38442:5;38438:15;38406:48;:::i;:::-;38400:4;38344:111;:::i;:::-;38464:114;38528:49;38572:3;38565:5;38561:15;38528:49;:::i;:::-;38522:4;38464:114;:::i;:::-;;;36865:1719::o;43186:354::-;43274:19;;;43256:3;-1:-1:-1;;;;;43305:31:7;;43302:51;;;43349:1;43346;43339:12;43302:51;43385:6;43382:1;43378:14;43437:8;43430:5;43423:4;43418:3;43414:14;43401:45;43514:1;43469:18;;43489:4;43465:29;43503:13;;;-1:-1:-1;43465:29:7;;43186:354;-1:-1:-1;;43186:354:7:o;43545:616::-;-1:-1:-1;;;;;43850:32:7;;43832:51;;43919:2;43914;43899:18;;43892:30;;;-1:-1:-1;;43945:73:7;;43999:18;;43991:6;43983;43945:73;:::i;:::-;44066:9;44058:6;44054:22;44049:2;44038:9;44034:18;44027:50;44094:61;44148:6;44140;44132;44094:61;:::i;:::-;44086:69;43545:616;-1:-1:-1;;;;;;;;43545:616:7:o;44886:192::-;44965:13;;-1:-1:-1;;;;;45007:46:7;;44997:57;;44987:85;;45068:1;45065;45058:12;45083:2608;45204:6;45235:2;45278;45266:9;45257:7;45253:23;45249:32;45246:52;;;45294:1;45291;45284:12;45246:52;45327:9;45321:16;-1:-1:-1;;;;;45352:6:7;45349:30;45346:50;;;45392:1;45389;45382:12;45346:50;45415:22;;45468:4;45460:13;;45456:27;-1:-1:-1;45446:55:7;;45497:1;45494;45487:12;45446:55;45526:2;45520:9;45549:60;45565:43;45605:2;45565:43;:::i;45549:60::-;45643:15;;;45705:6;45746:11;;;45738:20;;45734:29;;;45674:12;;;;45631:3;45775:19;;;45772:39;;;45807:1;45804;45797:12;45772:39;45831:11;;;;45851:1810;45867:6;45862:3;45859:15;45851:1810;;;45947:2;45941:3;45932:7;45928:17;45924:26;45921:116;;;45991:1;46020:2;46016;46009:14;45921:116;46063:22;;:::i;:::-;46112:34;46142:3;46112:34;:::i;:::-;46105:5;46098:49;46183:40;46219:2;46214:3;46210:12;46183:40;:::i;:::-;46178:2;46171:5;46167:14;46160:64;46247:2;46285:40;46321:2;46316:3;46312:12;46285:40;:::i;:::-;46269:14;;;46262:64;46349:2;46387:40;46414:12;;;46387:40;:::i;:::-;46371:14;;;46364:64;46451:3;46490:40;46517:12;;;46490:40;:::i;:::-;46474:14;;;46467:64;46554:3;46593:40;46620:12;;;46593:40;:::i;:::-;46577:14;;;46570:64;46658:3;46698:41;46725:13;;;46698:41;:::i;:::-;46681:15;;;46674:66;46764:3;46804:41;46831:13;;;46804:41;:::i;:::-;46787:15;;;46780:66;46870:3;46910:41;46937:13;;;46910:41;:::i;:::-;46893:15;;;46886:66;46976:3;47016:41;47043:13;;;47016:41;:::i;:::-;46999:15;;;46992:66;47082:3;47122:41;47149:13;;;47122:41;:::i;:::-;47105:15;;;47098:66;47188:3;47228:41;47255:13;;;47228:41;:::i;:::-;47211:15;;;47204:66;47294:3;47334:41;47361:13;;;47334:41;:::i;:::-;47317:15;;;47310:66;47400:3;47440:41;47467:13;;;47440:41;:::i;:::-;47423:15;;;47416:66;47506:3;47546:41;47573:13;;;47546:41;:::i;:::-;47529:15;;;47522:66;47601:18;;45884:12;;;;47639;;;;45851:1810;;47696:125;47736:4;47764:1;47761;47758:8;47755:34;;;47769:18;;:::i;:::-;-1:-1:-1;47806:9:7;;47696:125::o;49027:127::-;49088:10;49083:3;49079:20;49076:1;49069:31;49119:4;49116:1;49109:15;49143:4;49140:1;49133:15;49159:168;49199:7;49265:1;49261;49257:6;49253:14;49250:1;49247:21;49242:1;49235:9;49228:17;49224:45;49221:71;;;49272:18;;:::i;:::-;-1:-1:-1;49312:9:7;;49159:168::o;49332:217::-;49372:1;49398;49388:132;;49442:10;49437:3;49433:20;49430:1;49423:31;49477:4;49474:1;49467:15;49505:4;49502:1;49495:15;49388:132;-1:-1:-1;49534:9:7;;49332:217::o
Swarm Source
ipfs://f97f949cc6fedde5d9324c2689c16fb55fa6d9c5b5cd43255fefddfb519f0aad
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.