More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 403 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Tokens | 11399232 | 1547 days ago | IN | 0 ETH | 0.00089263 | ||||
Buy NFT | 11396051 | 1548 days ago | IN | 0 ETH | 0.00894119 | ||||
Buy NFT | 11394676 | 1548 days ago | IN | 0 ETH | 0.00800001 | ||||
Buy NFT | 11393302 | 1548 days ago | IN | 0 ETH | 0.00971976 | ||||
Buy NFT | 11393286 | 1548 days ago | IN | 0 ETH | 0.01037017 | ||||
Buy NFT | 11393278 | 1548 days ago | IN | 0 ETH | 0.01004497 | ||||
Buy NFT | 11393274 | 1548 days ago | IN | 0 ETH | 0.00971976 | ||||
Buy NFT | 11393269 | 1548 days ago | IN | 0 ETH | 0.01037017 | ||||
Buy NFT | 11393171 | 1548 days ago | IN | 0 ETH | 0.01020757 | ||||
Buy NFT | 11393153 | 1548 days ago | IN | 0 ETH | 0.0136101 | ||||
Buy NFT | 11393098 | 1548 days ago | IN | 0 ETH | 0.00093261 | ||||
Buy NFT | 11393098 | 1548 days ago | IN | 0 ETH | 0.00764595 | ||||
Buy NFT | 11391806 | 1548 days ago | IN | 0 ETH | 0.01053278 | ||||
Buy NFT | 11391796 | 1548 days ago | IN | 0 ETH | 0.01102059 | ||||
Buy NFT | 11391789 | 1548 days ago | IN | 0 ETH | 0.01232091 | ||||
Buy NFT | 11391719 | 1548 days ago | IN | 0 ETH | 0.0137512 | ||||
Buy NFT | 11391701 | 1548 days ago | IN | 0 ETH | 0.00995836 | ||||
Buy NFT | 11390633 | 1549 days ago | IN | 0 ETH | 0.01478142 | ||||
Buy NFT | 11390620 | 1549 days ago | IN | 0 ETH | 0.01495177 | ||||
Buy NFT | 11390604 | 1549 days ago | IN | 0 ETH | 0.01459735 | ||||
Buy NFT | 11390585 | 1549 days ago | IN | 0 ETH | 0.01444073 | ||||
Buy NFT | 11390575 | 1549 days ago | IN | 0 ETH | 0.01329703 | ||||
Buy NFT | 11390523 | 1549 days ago | IN | 0 ETH | 0.01297332 | ||||
Buy NFT | 11390502 | 1549 days ago | IN | 0 ETH | 0.0121068 | ||||
Buy NFT | 11390476 | 1549 days ago | IN | 0 ETH | 0.0120444 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
NFTMarketplace
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-25 */ pragma solidity 0.6.2; /** * @dev The contract has an owner address, and provides basic authorization control whitch * simplifies the implementation of user permissions. This contract is based on the source code at: * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol */ contract Ownable { /** * @dev Error constants. */ string public constant NOT_CURRENT_OWNER = "018001"; string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = "018002"; /** * @dev Current owner address. */ address public owner; /** * @dev An event which is triggered when the owner is changed. * @param previousOwner The address of the previous owner. * @param newOwner The address of the new owner. */ event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The constructor sets the original `owner` of the contract to the sender account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner, NOT_CURRENT_OWNER); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership( address _newOwner ) public onlyOwner { require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } /** * @dev Math operations with safety checks that throw on error. This contract is based on the * source code at: * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/math/SafeMath.sol. */ library SafeMath { /** * List of revert message codes. Implementing dApp should handle showing the correct message. * Based on 0xcert framework error codes. */ string constant OVERFLOW = "008001"; string constant SUBTRAHEND_GREATER_THEN_MINUEND = "008002"; string constant DIVISION_BY_ZERO = "008003"; /** * @dev Multiplies two numbers, reverts on overflow. * @param _factor1 Factor number. * @param _factor2 Factor number. * @return product The product of the two factors. */ function mul( uint256 _factor1, uint256 _factor2 ) internal pure returns (uint256 product) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (_factor1 == 0) { return 0; } product = _factor1 * _factor2; require(product / _factor1 == _factor2, OVERFLOW); } /** * @dev Integer division of two numbers, truncating the quotient, reverts on division by zero. * @param _dividend Dividend number. * @param _divisor Divisor number. * @return quotient The quotient. */ function div( uint256 _dividend, uint256 _divisor ) internal pure returns (uint256 quotient) { // Solidity automatically asserts when dividing by 0, using all gas. require(_divisor > 0, DIVISION_BY_ZERO); quotient = _dividend / _divisor; // assert(_dividend == _divisor * quotient + _dividend % _divisor); // There is no case in which this doesn't hold. } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). * @param _minuend Minuend number. * @param _subtrahend Subtrahend number. * @return difference Difference. */ function sub( uint256 _minuend, uint256 _subtrahend ) internal pure returns (uint256 difference) { require(_subtrahend <= _minuend, SUBTRAHEND_GREATER_THEN_MINUEND); difference = _minuend - _subtrahend; } /** * @dev Adds two numbers, reverts on overflow. * @param _addend1 Number. * @param _addend2 Number. * @return sum Sum. */ function add( uint256 _addend1, uint256 _addend2 ) internal pure returns (uint256 sum) { sum = _addend1 + _addend2; require(sum >= _addend1, OVERFLOW); } /** * @dev Divides two numbers and returns the remainder (unsigned integer modulo), reverts when * dividing by zero. * @param _dividend Number. * @param _divisor Number. * @return remainder Remainder. */ function mod( uint256 _dividend, uint256 _divisor ) internal pure returns (uint256 remainder) { require(_divisor != 0, DIVISION_BY_ZERO); remainder = _dividend % _divisor; } } /** * @dev signature of external (deployed) contract (ERC20 token) * only methods we will use, needed for us to communicate with CYTR token (which is ERC20) */ contract ERC20Token { function totalSupply() external view returns (uint256){} function balanceOf(address account) external view returns (uint256){} function allowance(address owner, address spender) external view returns (uint256){} function transfer(address recipient, uint256 amount) external returns (bool){} function approve(address spender, uint256 amount) external returns (bool){} function transferFrom(address sender, address recipient, uint256 amount) external returns (bool){} function decimals() external view returns (uint8){} } /** * @dev signature of external (deployed) contract for NFT publishing (ERC721) * only methods we will use, needed for us to communicate with Cyclops token (which is ERC721) */ contract CyclopsTokens { function mint(address _to, uint256 _tokenId, string calldata _uri) external {} function ownerOf(uint256 _tokenId) external view returns (address) {} function burn(uint256 _tokenId) external {} function tokenURI(uint256 _tokenId) external view returns(string memory) {} } contract NFTMarketplace is Ownable { using SafeMath for uint256; modifier onlyPriceManager() { require( msg.sender == price_manager, "only price manager can call this function" ); _; } modifier onlyOwnerOrPriceManager() { require( msg.sender == price_manager || msg.sender == owner, "only price manager or owner can call this function" ); _; } /** * @dev not bullet-proof check, but additional measure, actually we require specific (contract) address, * which is key (see onlyBankContract) */ function isContract(address _addr) internal view returns (bool){ uint32 size; assembly { size := extcodesize(_addr) } return (size > 0); } modifier notContract(){ require( (!isContract(msg.sender)), "external contracts are not allowed" ); _; } //external NFT publishing contract CyclopsTokens nftContract; ERC20Token token; //CYTR //hard code address of external contract (NFT), as it can't be redeployed in production //what could be redeployed - NFTBank contract - and we can link new NFT bank //with special method in CyclopsTokens address nftContractAddress = 0xd6d778d86Ddf225e3c02C45D6C6e8Eb3497B452A; //NFT contract (Cyclops) address paymentTokenAddress = 0xBD05CeE8741100010D8E93048a80Ed77645ac7bf; //payment token (ERC20, CYTR) address price_manager = 0x0000000000000000000000000000000000000000; bool internal_prices = true; uint256 price_curve = 5; //5% uint32 constant BAD_NFT_PROFILE_ID = 9999999; uint256 constant BAD_PRICE = 0; string constant BAD_URL = ''; uint32 constant UNLIMITED = 9999999; /** * @dev 'database' to store profiles of NFTs */ struct NFTProfile{ uint32 id; uint256 price; //in CYTR, i.e. 1,678 CYTR last 18 digits are decimals uint256 sell_price; //in CYTR i.e. 1,678 CYTR last 18 digits are decimals string url; uint32 limit; } NFTProfile[] public nftProfiles; uint256 next_token_id = 10; /** * @dev Events */ //buy from us event Minted(uint32 profileID, uint256 tokenId, address wallet, uint256 cytrAmount, uint256 priceAtMoment); //intermediate event for support of broken buy (CYTR transferred but NFT was not minted) // - for manual resolution from admin panel event GotCYTRForNFT(uint32 profileID, address wallet, uint256 cytrAmount, uint256 priceAtMoment); //intermediate event for support of broken sell (CYTR transferred back NFT was not burned) // - for manual resolution from admin panel event SendCYTRForNFT(uint32 profileID, address wallet, uint256 cytrAmount, uint256 buybackPriceAtMoment); //buy back from user event Burned(uint32 profileID, uint256 tokenId, address wallet, uint256 cytrAmount, uint256 buybackPriceAtMoment); //admin events - CYTR tokens/ether deposit/withdrawal event TokensDeposited(uint256 amount, address wallet); event FinneyDeposited(uint256 amount, address wallet); event Withdrawn(uint256 amount, address wallet); event TokensWithdrawn(uint256 amount, address wallet); event AdminMinted(uint32 profileID, uint256 tokenId, address wallet, uint256 curPrice); event AdminBurned(uint256 _tokenId,uint32 tokenProfileId, uint256 curSellPrice); /** * @dev Contract constructor. */ constructor() public { price_manager = owner; nftContract = CyclopsTokens(nftContractAddress); //NFT minting interface token = ERC20Token(paymentTokenAddress); //CYTR interface } function setPriceManagerRight(address newPriceManager) external onlyOwner{ price_manager = newPriceManager; } function getPriceManager() public view returns(address){ return price_manager; } function setInternalPriceCurve() external onlyOwnerOrPriceManager{ internal_prices = true; } function setExternalPriceCurve() external onlyOwnerOrPriceManager{ internal_prices = false; } function isPriceCurveInternal() public view returns(bool){ return internal_prices; } function setPriceCurve(uint256 new_curve) external onlyOwnerOrPriceManager{ price_curve = new_curve; } function getPriceCurve() public view returns(uint256){ return price_curve; } /** * @dev setter/getter for ERC20 linked to exchange (current) smartcontract */ function setPaymentToken(address newERC20Contract) external onlyOwner returns(bool){ paymentTokenAddress = newERC20Contract; token = ERC20Token(paymentTokenAddress); } function getPaymentToken() external view returns(address){ return paymentTokenAddress; } /** * @dev setter/getter for NFT publisher linked to 'marketplace' smartcontract */ function setNFTContract(address newNFTContract) external onlyOwner returns(bool){ nftContractAddress = newNFTContract; nftContract = CyclopsTokens(nftContractAddress); } function getNFTContract() external view returns(address){ return nftContractAddress; } /** * @dev getter for next_token_id */ function getNextTokenId() external view returns (uint256){ return next_token_id; } /** * @dev setter for next_token_id */ function setNextTokenId(uint32 setId) external onlyOwnerOrPriceManager (){ next_token_id = setId; } /** * @dev adds 'record' to 'database' * @param id, unique id of profiles * @param price, price of NFT assets which will be generated based on profile * @param sell_price, when we will buy out from owner (burn) * @param url, url of NFT assets which will be generated based on profile */ function addNFTProfile(uint32 id, uint256 price, uint256 sell_price, string calldata url, uint32 limit) external onlyOwnerOrPriceManager { NFTProfile memory temp = NFTProfile(id,price,sell_price,url, limit); nftProfiles.push(temp); } /** * @dev removes 'record' to 'database' * @param id (profile id) * */ function removeNFTProfileAtId(uint32 id) external onlyOwnerOrPriceManager { for (uint32 i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == id){ removeNFTProfileAtIndex(i); return; } } } /** * @dev removes 'record' to 'database' * @param index, record number (from 0) * */ function removeNFTProfileAtIndex(uint32 index) internal { if (index >= nftProfiles.length) return; if (index == nftProfiles.length -1){ nftProfiles.pop(); } else { for (uint i = index; i < nftProfiles.length-1; i++){ nftProfiles[i] = nftProfiles[i+1]; } nftProfiles.pop(); } } /** * @dev replaces 'record' in the 'database' * @param id, unique id of profile * @param price, price of NFT assets which will be generated based on profile * @param sell_price, sell price (back to owner) of NFT assets when owner sell to us (and we burn) * @param url, url of NFT assets which will be generated based on profile */ function replaceNFTProfileAtId(uint32 id, uint256 price, uint256 sell_price, string calldata url, uint32 limit) external onlyOwnerOrPriceManager { for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == id){ nftProfiles[i].price = price; nftProfiles[i].sell_price = sell_price; nftProfiles[i].url = url; nftProfiles[i].limit = limit; return; } } } /** * @dev replaces 'record' in the 'database' * @param atIndex, at which row of array to make replacement * @param id, unique id of profiles * @param price, price of NFT assets which will be generated based on profile * @param sell_price, sell price (back to owner) of NFT assets when owner sell to us (and we burn) * @param url, url of NFT assets which will be generated based on profile */ function replaceNFTProfileAtIndex(uint32 atIndex, uint32 id, uint256 price, uint256 sell_price, string calldata url, uint32 limit) external onlyOwnerOrPriceManager { nftProfiles[atIndex].id = id; nftProfiles[atIndex].price = price; nftProfiles[atIndex].sell_price = sell_price; nftProfiles[atIndex].url = url; nftProfiles[atIndex].limit = limit; } /** * @dev return array of strings is not supported by solidity, we return ids & prices */ function viewNFTProfilesPrices() external view returns( uint32[] memory, uint256[] memory, uint256[] memory){ uint32[] memory ids = new uint32[](nftProfiles.length); uint256[] memory prices = new uint256[](nftProfiles.length); uint256[] memory sell_prices = new uint256[](nftProfiles.length); for (uint i = 0; i < nftProfiles.length; i++){ ids[i] = nftProfiles[i].id; prices[i] = nftProfiles[i].price; sell_prices[i] = nftProfiles[i].sell_price; } return (ids, prices, sell_prices); } /** * @dev return price, sell_price & url for profile by id */ function viewNFTProfileDetails(uint32 id) external view returns(uint256, uint256, string memory, uint32){ for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == id){ return (nftProfiles[i].price, nftProfiles[i].sell_price, nftProfiles[i].url, nftProfiles[i].limit); } } return (BAD_PRICE, BAD_PRICE, BAD_URL, UNLIMITED); } /** * @dev get price by id from 'database' * @param id, unique id of profiles */ function getPriceById(uint32 id) public view returns (uint256){ for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == id){ return nftProfiles[i].price; } } return BAD_PRICE; } /** * @dev get sell price by id from 'database' * @param id, unique id of profiles */ function getSellPriceById(uint32 id) public view returns (uint256){ for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == id){ return nftProfiles[i].sell_price; } } return BAD_PRICE; } /** * @dev set new price for asset (profile of NFT), price for which customer can buy * @param id, unique id of profiles */ function setPriceById(uint32 id, uint256 new_price) external onlyOwnerOrPriceManager{ for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == id){ nftProfiles[i].price = new_price; return; } } } /** * @dev set new sell (buy back) price for asset (profile of NFT), * price for which customer can sell to us * @param id, unique id of profiles */ function setSellPriceById(uint32 id, uint256 new_price) external onlyOwnerOrPriceManager{ for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == id){ nftProfiles[i].sell_price = new_price; return; } } } // for optimization, funciton to update both prices function updatePricesById(uint32 id, uint256 new_price, uint256 new_sell_price) external onlyOwnerOrPriceManager{ for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == id){ nftProfiles[i].price = new_price; nftProfiles[i].sell_price = new_sell_price; return; } } } /** * @dev get url by id from 'database' * @param id, unique id of profiles */ function getUrlById(uint32 id) public view returns (string memory){ for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == id){ return nftProfiles[i].url; } } return BAD_URL; } function getLimitById(uint32 id) public view returns (uint32){ for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == id){ return nftProfiles[i].limit; } } return UNLIMITED; } /** * @dev accepts payment only in CYTR(!) for mint NFT & calls external contract * it is public function, i.e called by buyer via dApp * buyer selects profile (profileID), provides own wallet address (_to) * and dApp provides available _tokenId (for flexibility its calculation is not automatic on * smart contract level, but it is possible to implement) - > nftContract.totalSupply()+1 * why not recommended: outsite of smart contract with multiple simultaneous customers we can * instanteneusly on level of backend determinte next free id. * on CyclopsTokens smartcontract level it can be only calculated correctly after mint transaction is confirmed * here utility function is implemented which is used by backend ,getNextTokenId() * it is also possible to use setNextTokenId function (by owner) to reset token id if needed * normal use is dApp requests next token id (tid = getNextTokenId()) and after that * calls publicMint(profile, to, tid) * it allows different dApps use different token ids areas * like dapp1: tid = getNextTokenId() + 10000 * dapp2: tid = getNextTokenId() + 20000 */ function buyNFT( //'buy' == mint NFT token function, provides NFT token in exchange of CYTR uint32 profileID, //id of NFT profile uint256 cytrAmount, //amount of CYTR we check it is equal to price, amount in real form i.e. 18 decimals address _to, //where to deliver uint256 _tokenId //with which id NFT will be generated ) external notContract returns (uint256) { require (getLimitById(profileID) > 0,"limit is over"); uint256 curPrice = getPriceById(profileID); require(curPrice != BAD_PRICE, "price for NFT profile not found"); require(cytrAmount > 0, "You need to provide some CYTR"); //it is already in 'real' form, i.e. with decimals require(cytrAmount == curPrice); //correct work (i.e. dApp calculated price correctly) uint256 token_bal = token.balanceOf(msg.sender); //how much CYTR buyer has require(token_bal >= cytrAmount, "Check the CYTR balance on your wallet"); //is it enough uint256 allowance = token.allowance(msg.sender, address(this)); require(allowance >= cytrAmount, "Check the CYTR allowance"); //is allowance provided require(isFreeTokenId(_tokenId), "token id is is occupied"); //adjust on calling party //ensure we revert in case of failure try token.transferFrom(msg.sender, address(this), cytrAmount) { // get CYTR from buyer emit GotCYTRForNFT(profileID, msg.sender, cytrAmount, curPrice); } catch { require(false,"CYTR transfer failed"); return 0; } //external contract mint try nftContract.mint(_to,_tokenId, getUrlById(profileID)){ next_token_id++; //we should have event pairs GotCYTRForNFT - Minted if all good emit Minted(profileID, _tokenId, msg.sender, cytrAmount, curPrice); } catch { //return payment by using require..it should revert transaction require(false,"mint failed"); } for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == profileID){ if (nftProfiles[i].limit != UNLIMITED) nftProfiles[i].limit--; } } if (internal_prices){ //if we manage price curve internally for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == profileID){ uint256 change = nftProfiles[i].price.div(100).mul(price_curve); nftProfiles[i].price = nftProfiles[i].price.add(change); change = nftProfiles[i].sell_price.div(100).mul(price_curve); nftProfiles[i].sell_price = nftProfiles[i].sell_price.add(change); } } } //return _tokenId; //success, return generated tokenId, works only if called by contract, i.e. not our case } /** * @dev method allows collectible owner to sell it back for sell price * collectible is burned, amount of sell price returned to owner of collectible * tokenId -> tokenProfileId -> sell price */ function sellNFTBack(uint256 _tokenId) external notContract returns(uint256){ //'sell' == burn, burns and returns CYTR to user require(nftContract.ownerOf(_tokenId) == msg.sender, "it is not your NFT"); uint32 tokenProfileId = getProfileIdByTokenId(_tokenId); require(tokenProfileId != BAD_NFT_PROFILE_ID, "NFT profile ID not found"); uint256 sellPrice = getSellPriceById(tokenProfileId); require(sellPrice != BAD_PRICE, "NFT price not found"); require(token.balanceOf(msg.sender) > sellPrice, "unsufficient CYTR on contract"); try nftContract.burn(_tokenId) { emit Burned(tokenProfileId, _tokenId, msg.sender, sellPrice, sellPrice); } catch { //ensure error will be send (false, i.e. require is never fulfilled, error send) require (false, "NFT burn failed"); } //ensure we revert in case of failure try token.transfer(msg.sender, sellPrice) { // send CYTR to seller //just continue if all good.. emit SendCYTRForNFT(tokenProfileId, msg.sender, sellPrice, sellPrice); } catch { require(false,"CYTR transfer failed"); return 0; } for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == tokenProfileId){ if (nftProfiles[i].limit != UNLIMITED) nftProfiles[i].limit++; } } if (internal_prices){ //if we manage price curve internally for (uint i = 0; i < nftProfiles.length; i++){ if (nftProfiles[i].id == tokenProfileId){ uint256 change = nftProfiles[i].price.div(100).mul(price_curve); nftProfiles[i].price = nftProfiles[i].price.sub(change); change = nftProfiles[i].sell_price.div(100).mul(price_curve); nftProfiles[i].sell_price = nftProfiles[i].sell_price.sub(change); } } } } function adminMint( //mint for free as admin uint32 profileID, //id of NFT profile address _to, //where to deliver uint256 _tokenId //with which id NFT will be generated ) external onlyOwnerOrPriceManager returns (uint256) { uint256 curPrice = getPriceById(profileID); require(curPrice != BAD_PRICE, "price for NFT profile not found"); require(isFreeTokenId(_tokenId), "token id is is occupied"); //external contract mint try nftContract.mint(_to,_tokenId, getUrlById(profileID)){ next_token_id++; //we should have event pairs GotCYTRForNFT - Minted if all good emit AdminMinted(profileID, _tokenId, _to, curPrice); } catch { //return payment by using require..it should revert transaction require(false,"mint failed"); } return _tokenId; //success, return generated tokenId (works if called by another contract) } function adminBurn(uint256 _tokenId) external onlyOwnerOrPriceManager returns(uint256){ //burn as admin, without CYTR move uint32 tokenProfileId = getProfileIdByTokenId(_tokenId); //require(tokenProfileId != BAD_NFT_PROFILE_ID, "NFT profile ID not found"); //in admin mode we do not require it uint256 sellPrice = getSellPriceById(tokenProfileId); //require(sellPrice != BAD_PRICE, "NFT price not found"); //in admin mode we do not require it try nftContract.burn(_tokenId) { emit AdminBurned(_tokenId, tokenProfileId, sellPrice); } catch { //ensure error will be send (false, i.e. require is never fulfilled, error send) require (false, "NFT burn failed"); } } function getProfileIdByTokenId(uint256 tokenId) public view returns(uint32){ string memory url = BAD_URL; try nftContract.tokenURI(tokenId) { url = nftContract.tokenURI(tokenId); return getProfileIdbyUrl(url); } catch { return BAD_NFT_PROFILE_ID; } } function getProfileIdbyUrl(string memory url) public view returns (uint32){ for (uint i = 0; i < nftProfiles.length; i++){ if (keccak256(bytes(nftProfiles[i].url)) == keccak256(bytes(url))){ return nftProfiles[i].id; } } return BAD_NFT_PROFILE_ID; } function isFreeTokenId(uint256 tokenId) public view returns (bool){ try nftContract.tokenURI(tokenId) { //if we can run this successfully it means token id is not free -> false return false; } catch { return true; //if we errored getting url by tokenId, it is free -> true } } function getTokenPriceByTokenId(uint256 tokenId) public view returns(uint256){ string memory url = BAD_URL; try nftContract.tokenURI(tokenId) { url = nftContract.tokenURI(tokenId); uint32 profileId = getProfileIdbyUrl(url); if (profileId == BAD_NFT_PROFILE_ID){ return BAD_NFT_PROFILE_ID; } else { return getSellPriceById(profileId); } } catch { return BAD_NFT_PROFILE_ID; } } /** * @dev - six functions below are for owner to check balance and * deposit/withdraw eth/tokens to exchange contract */ /** * @dev returns contract balance, in wei */ function getContractBalance() external view returns (uint256) { return address(this).balance; } /** * @dev returns contract tokens balance */ function getContractTokensBalance() external view returns (uint256) { return token.balanceOf(address(this)); } function withdraw(address payable sendTo, uint256 amount) external onlyOwner { require(address(this).balance >= amount, "unsufficient funds"); bool success = false; // ** sendTo.transfer(amount);** (success, ) = sendTo.call.value(amount)(""); require(success, "Transfer failed."); // ** end ** emit Withdrawn(amount, sendTo); //in wei } //deposit ether (amount in finney for control is provided as input paramenter) function deposit(uint256 amount) payable external onlyOwner { require(amount*(1 finney) == msg.value,"please provide value in finney"); emit FinneyDeposited(amount, owner); //in finney } // tokens with decimals, already converted on frontend function depositTokens(uint256 amount) external onlyOwner { require(amount > 0, "You need to deposit at least some tokens"); uint256 allowance = token.allowance(msg.sender, address(this)); require(allowance >= amount, "Check the token allowance"); token.transferFrom(msg.sender, address(this), amount); emit TokensDeposited(amount, owner); } // tokens with decimals, already converted on frontend function withdrawTokens(address to_wallet, uint256 realAmountTokens) external onlyOwner { require(realAmountTokens > 0, "You need to withdraw at least some tokens"); uint256 contractTokenBalance = token.balanceOf(address(this)); require(contractTokenBalance > realAmountTokens, "unsufficient funds"); //ensure we revert in case of failure try token.transfer(to_wallet, realAmountTokens) { emit TokensWithdrawn(realAmountTokens, to_wallet); //in real representation } catch { require(false,"tokens transfer failed"); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"tokenProfileId","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"curSellPrice","type":"uint256"}],"name":"AdminBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"profileID","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"curPrice","type":"uint256"}],"name":"AdminMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"profileID","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"cytrAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackPriceAtMoment","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"FinneyDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"profileID","type":"uint32"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"cytrAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceAtMoment","type":"uint256"}],"name":"GotCYTRForNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"profileID","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"cytrAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"priceAtMoment","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"profileID","type":"uint32"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"cytrAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackPriceAtMoment","type":"uint256"}],"name":"SendCYTRForNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"TokensDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"TokensWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"CANNOT_TRANSFER_TO_ZERO_ADDRESS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CURRENT_OWNER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"sell_price","type":"uint256"},{"internalType":"string","name":"url","type":"string"},{"internalType":"uint32","name":"limit","type":"uint32"}],"name":"addNFTProfile","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"adminBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"profileID","type":"uint32"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"adminMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"profileID","type":"uint32"},{"internalType":"uint256","name":"cytrAmount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"buyNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractTokensBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"}],"name":"getLimitById","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNFTContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPaymentToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"}],"name":"getPriceById","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceCurve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getProfileIdByTokenId","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"url","type":"string"}],"name":"getProfileIdbyUrl","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"}],"name":"getSellPriceById","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenPriceByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"}],"name":"getUrlById","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"isFreeTokenId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPriceCurveInternal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftProfiles","outputs":[{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"sell_price","type":"uint256"},{"internalType":"string","name":"url","type":"string"},{"internalType":"uint32","name":"limit","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"}],"name":"removeNFTProfileAtId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"sell_price","type":"uint256"},{"internalType":"string","name":"url","type":"string"},{"internalType":"uint32","name":"limit","type":"uint32"}],"name":"replaceNFTProfileAtId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"atIndex","type":"uint32"},{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"sell_price","type":"uint256"},{"internalType":"string","name":"url","type":"string"},{"internalType":"uint32","name":"limit","type":"uint32"}],"name":"replaceNFTProfileAtIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"sellNFTBack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setExternalPriceCurve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setInternalPriceCurve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newNFTContract","type":"address"}],"name":"setNFTContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"setId","type":"uint32"}],"name":"setNextTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newERC20Contract","type":"address"}],"name":"setPaymentToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint256","name":"new_price","type":"uint256"}],"name":"setPriceById","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_curve","type":"uint256"}],"name":"setPriceCurve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceManager","type":"address"}],"name":"setPriceManagerRight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint256","name":"new_price","type":"uint256"}],"name":"setSellPriceById","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"},{"internalType":"uint256","name":"new_price","type":"uint256"},{"internalType":"uint256","name":"new_sell_price","type":"uint256"}],"name":"updatePricesById","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"id","type":"uint32"}],"name":"viewNFTProfileDetails","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"},{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewNFTProfilesPrices","outputs":[{"internalType":"uint32[]","name":"","type":"uint32[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"sendTo","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to_wallet","type":"address"},{"internalType":"uint256","name":"realAmountTokens","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600380546001600160a01b031990811673d6d778d86ddf225e3c02c45d6c6e8eb3497b452a179091556004805490911673bd05cee8741100010d8e93048a80ed77645ac7bf179055600580546001600160a81b031916600160a01b178155600655600a60085534801561007657600080fd5b50600080546001600160a01b03199081163317918290556005805482166001600160a01b03938416179055600354600180548316918416919091179055600454600280549092169216919091179055614b4f806100d46000396000f3fe6080604052600436106102725760003560e01c8063940a14551161014f578063c9ab22a7116100c1578063dd49756e1161007a578063dd49756e14610d63578063dec0fc5c14610d8d578063f2fde38b14610db7578063f3fe3bc314610dea578063f3fef3a314610dff578063f8a623d314610e3857610272565b8063c9ab22a714610c07578063caa0f92a14610c43578063cbfcaed514610c58578063cf5b281614610c88578063d3c5f13714610c9d578063d41c3a6514610d4e57610272565b8063a77cefc411610113578063a77cefc414610b09578063a7ccabdf14610b39578063a8f621ea14610b6c578063b6749d9414610b96578063b6b55f2514610bc0578063badb97ff14610bdd57610272565b8063940a1455146109c357806394d212e614610a0c5780639609f6c714610a215780639cf1ba2e14610a36578063a5419ba214610a6657610272565b80635230bcdf116101e857806377476c7b116101ac57806377476c7b146107d9578063860d248a1461080f5780638cec7946146108995780638da5cb5b1461096f5780638da7df22146109845780638ea7f0331461099957610272565b80635230bcdf146105c05780635d7dc9da146106b35780635d82c4621461074d5780636a326ab11461077d5780636f9fb98a146107c457610272565b806319e1f4861161023a57806319e1f4861461048a5780631ba9bdac146104b457806329598630146104c95780632b1f4ad6146104ff5780634488c99c1461053057806345f403621461057b57610272565b806302d1003b1461027757806306b091f9146102b95780630ea638a3146102f4578063156b1d37146103bd57806318fdec7e14610457575b600080fd5b34801561028357600080fd5b506102a76004803603602081101561029a57600080fd5b503563ffffffff16610e4d565b60408051918252519081900360200190f35b3480156102c557600080fd5b506102f2600480360360408110156102dc57600080fd5b506001600160a01b038135169060200135610ec6565b005b34801561030057600080fd5b506103246004803603602081101561031757600080fd5b503563ffffffff1661118b565b60405180858152602001848152602001806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561037f578181015183820152602001610367565b50505050905090810190601f1680156103ac5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156103c957600080fd5b506102f2600480360360a08110156103e057600080fd5b63ffffffff8235169160208101359160408201359190810190608081016060820135600160201b81111561041357600080fd5b82018360208201111561042557600080fd5b803590602001918460018302840111600160201b8311171561044657600080fd5b91935091503563ffffffff1661131b565b34801561046357600080fd5b506102f26004803603602081101561047a57600080fd5b50356001600160a01b0316611480565b34801561049657600080fd5b506102a7600480360360208110156104ad57600080fd5b503561151a565b3480156104c057600080fd5b506102f2611bf5565b3480156104d557600080fd5b506102f2600480360360408110156104ec57600080fd5b5063ffffffff8135169060200135611c62565b34801561050b57600080fd5b50610514611d33565b604080516001600160a01b039092168252519081900360200190f35b34801561053c57600080fd5b506102a76004803603608081101561055357600080fd5b5063ffffffff813516906020810135906001600160a01b036040820135169060600135611d43565b34801561058757600080fd5b506102a76004803603606081101561059e57600080fd5b5063ffffffff813516906001600160a01b03602082013516906040013561250e565b3480156105cc57600080fd5b506105d56127ad565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561061d578181015183820152602001610605565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561065c578181015183820152602001610644565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561069b578181015183820152602001610683565b50505050905001965050505050505060405180910390f35b3480156106bf57600080fd5b506102f2600480360360a08110156106d657600080fd5b63ffffffff8235169160208101359160408201359190810190608081016060820135600160201b81111561070957600080fd5b82018360208201111561071b57600080fd5b803590602001918460018302840111600160201b8311171561073c57600080fd5b91935091503563ffffffff1661292b565b34801561075957600080fd5b506102a76004803603602081101561077057600080fd5b503563ffffffff16612afc565b34801561078957600080fd5b506107b0600480360360208110156107a057600080fd5b50356001600160a01b0316612b6a565b604080519115158252519081900360200190f35b3480156107d057600080fd5b506102a7612c14565b3480156107e557600080fd5b506102f2600480360360408110156107fc57600080fd5b5063ffffffff8135169060200135612c18565b34801561081b57600080fd5b50610824612ce5565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561085e578181015183820152602001610846565b50505050905090810190601f16801561088b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108a557600080fd5b506108c3600480360360208110156108bc57600080fd5b5035612d07565b604051808663ffffffff1663ffffffff168152602001858152602001848152602001806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015610930578181015183820152602001610918565b50505050905090810190601f16801561095d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561097b57600080fd5b50610514612dde565b34801561099057600080fd5b506107b0612ded565b3480156109a557600080fd5b506107b0600480360360208110156109bc57600080fd5b5035612dfd565b3480156109cf57600080fd5b506109f3600480360360208110156109e657600080fd5b503563ffffffff16612f42565b6040805163ffffffff9092168252519081900360200190f35b348015610a1857600080fd5b506102a7612fc4565b348015610a2d57600080fd5b506102a7613040565b348015610a4257600080fd5b506102f260048036036020811015610a5957600080fd5b503563ffffffff16613046565b348015610a7257600080fd5b506102f2600480360360c0811015610a8957600080fd5b63ffffffff823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b811115610ac557600080fd5b820183602082011115610ad757600080fd5b803590602001918460018302840111600160201b83111715610af857600080fd5b91935091503563ffffffff166130af565b348015610b1557600080fd5b5061082460048036036020811015610b2c57600080fd5b503563ffffffff16613214565b348015610b4557600080fd5b506107b060048036036020811015610b5c57600080fd5b50356001600160a01b0316613322565b348015610b7857600080fd5b506102a760048036036020811015610b8f57600080fd5b50356133cc565b348015610ba257600080fd5b506109f360048036036020811015610bb957600080fd5b5035613692565b6102f260048036036020811015610bd657600080fd5b503561392b565b348015610be957600080fd5b506102a760048036036020811015610c0057600080fd5b5035613a49565b348015610c1357600080fd5b506102f260048036036060811015610c2a57600080fd5b5063ffffffff8135169060208101359060400135613bb2565b348015610c4f57600080fd5b506102a7613ca8565b348015610c6457600080fd5b506102f260048036036020811015610c7b57600080fd5b503563ffffffff16613cae565b348015610c9457600080fd5b506102f2613d70565b348015610ca957600080fd5b506109f360048036036020811015610cc057600080fd5b810190602081018135600160201b811115610cda57600080fd5b820183602082011115610cec57600080fd5b803590602001918460018302840111600160201b83111715610d0d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613de3945050505050565b348015610d5a57600080fd5b50610514613eba565b348015610d6f57600080fd5b506102f260048036036020811015610d8657600080fd5b5035613ec9565b348015610d9957600080fd5b506102f260048036036020811015610db057600080fd5b5035614124565b348015610dc357600080fd5b506102f260048036036020811015610dda57600080fd5b50356001600160a01b0316614187565b348015610df657600080fd5b506108246142cd565b348015610e0b57600080fd5b506102f260048036036040811015610e2257600080fd5b506001600160a01b0381351690602001356142ef565b348015610e4457600080fd5b50610514614494565b6000805b600754811015610ebb578263ffffffff1660078281548110610e6f57fe5b600091825260209091206005909102015463ffffffff161415610eb35760078181548110610e9957fe5b906000526020600020906005020160020154915050610ec1565b600101610e51565b50600090505b919050565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610f7a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f3f578181015183820152602001610f27565b50505050905090810190601f168015610f6c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008111610fba5760405162461bcd60e51b8152600401808060200182810382526029815260200180614af16029913960400191505060405180910390fd5b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561100557600080fd5b505afa158015611019573d6000803e3d6000fd5b505050506040513d602081101561102f57600080fd5b5051905081811161107c576040805162461bcd60e51b8152602060048201526012602482015271756e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b6002546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156110d257600080fd5b505af19250505080156110f757506040513d60208110156110f257600080fd5b505160015b611141576040805162461bcd60e51b81526020600482015260166024820152751d1bdad95b9cc81d1c985b9cd9995c8819985a5b195960521b604482015290519081900360640190fd5b50604080518381526001600160a01b038516602082015281517f0ddddc48b57dd67f8fa2ff05c78034b578c31ef5caa05b03d2ca16feadbbb98f929181900390910190a15b505050565b600080606081805b6007548110156112f6578563ffffffff16600782815481106111b157fe5b600091825260209091206005909102015463ffffffff1614156112ee57600781815481106111db57fe5b906000526020600020906005020160010154600782815481106111fa57fe5b9060005260206000209060050201600201546007838154811061121957fe5b90600052602060002090600502016003016007848154811061123757fe5b600091825260209182902060046005909202010154825460408051601f6002600019600186161561010002019094169390930492830185900485028101850190915281815263ffffffff909216928491908301828280156112d95780601f106112ae576101008083540402835291602001916112d9565b820191906000526020600020905b8154815290600101906020018083116112bc57829003601f168201915b50505050509150945094509450945050611314565b600101611193565b505060408051602081019091526000808252935083925090506298967f5b9193509193565b6005546001600160a01b031633148061133e57506000546001600160a01b031633145b6113795760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b60005b600754811015611476578663ffffffff166007828154811061139a57fe5b600091825260209091206005909102015463ffffffff16141561146e5785600782815481106113c557fe5b90600052602060002090600502016001018190555084600782815481106113e857fe5b90600052602060002090600502016002018190555083836007838154811061140c57fe5b9060005260206000209060050201600301919061142a929190614855565b50816007828154811061143957fe5b906000526020600020906005020160040160006101000a81548163ffffffff021916908363ffffffff16021790555050611478565b60010161137c565b505b505050505050565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b031633146114f75760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611525336144a3565b156115615760405162461bcd60e51b8152600401808060200182810382526022815260200180614aa76022913960400191505060405180910390fd5b600154604080516331a9108f60e11b815260048101859052905133926001600160a01b031691636352211e916024808301926020929190829003018186803b1580156115ac57600080fd5b505afa1580156115c0573d6000803e3d6000fd5b505050506040513d60208110156115d657600080fd5b50516001600160a01b031614611628576040805162461bcd60e51b81526020600482015260126024820152711a5d081a5cc81b9bdd081e5bdd5c8813919560721b604482015290519081900360640190fd5b600061163383613692565b905063ffffffff81166298967f1415611693576040805162461bcd60e51b815260206004820152601860248201527f4e46542070726f66696c65204944206e6f7420666f756e640000000000000000604482015290519081900360640190fd5b600061169e82610e4d565b9050806116e8576040805162461bcd60e51b8152602060048201526013602482015272139195081c1c9a58d9481b9bdd08199bdd5b99606a1b604482015290519081900360640190fd5b600254604080516370a0823160e01b8152336004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561173257600080fd5b505afa158015611746573d6000803e3d6000fd5b505050506040513d602081101561175c57600080fd5b5051116117b0576040805162461bcd60e51b815260206004820152601d60248201527f756e73756666696369656e742043595452206f6e20636f6e7472616374000000604482015290519081900360640190fd5b60015460408051630852cd8d60e31b81526004810187905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b1580156117fd57600080fd5b505af192505050801561180e575060015b611851576040805162461bcd60e51b815260206004820152600f60248201526e13919508189d5c9b8819985a5b1959608a1b604482015290519081900360640190fd5b6040805163ffffffff84168152602081018690523381830152606081018390526080810183905290517fd47f6b8f75f609a4e4c8a2ac7d7b832f838a4d7cd0bd16e09cbdb1c75589f1839181900360a00190a16002546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156118f857600080fd5b505af192505050801561191d57506040513d602081101561191857600080fd5b505160015b611965576040805162461bcd60e51b815260206004820152601460248201527310d65514881d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b506040805163ffffffff841681523360208201528082018390526060810183905290517fa7ee43596e81c2ca49d6a37948abf0c3c23d30645ae08996783fb304b0de07469181900360800190a160005b600754811015611a69578263ffffffff16600782815481106119d357fe5b600091825260209091206005909102015463ffffffff161415611a61576298967f63ffffffff1660078281548110611a0757fe5b600091825260209091206004600590920201015463ffffffff1614611a615760078181548110611a3357fe5b60009182526020909120600460059092020101805463ffffffff8082166001011663ffffffff199091161790555b6001016119b5565b50600554600160a01b900460ff1615611bee5760005b600754811015611bec578263ffffffff1660078281548110611a9d57fe5b600091825260209091206005909102015463ffffffff161415611be4576000611b00600654611af4606460078681548110611ad457fe5b9060005260206000209060050201600101546144af90919063ffffffff16565b9063ffffffff61453116565b9050611b338160078481548110611b1357fe5b9060005260206000209060050201600101546145c390919063ffffffff16565b60078381548110611b4057fe5b906000526020600020906005020160010181905550611b8d600654611af4606460078681548110611b6d57fe5b9060005260206000209060050201600201546144af90919063ffffffff16565b9050611bc08160078481548110611ba057fe5b9060005260206000209060050201600201546145c390919063ffffffff16565b60078381548110611bcd57fe5b906000526020600020906005020160020181905550505b600101611a7f565b505b5050919050565b6005546001600160a01b0316331480611c1857506000546001600160a01b031633145b611c535760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b6005805460ff60a01b19169055565b6005546001600160a01b0316331480611c8557506000546001600160a01b031633145b611cc05760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b60005b600754811015611186578263ffffffff1660078281548110611ce157fe5b600091825260209091206005909102015463ffffffff161415611d27578160078281548110611d0c57fe5b90600052602060002090600502016002018190555050611d2f565b600101611cc3565b5050565b6003546001600160a01b03165b90565b6000611d4e336144a3565b15611d8a5760405162461bcd60e51b8152600401808060200182810382526022815260200180614aa76022913960400191505060405180910390fd5b6000611d9586612f42565b63ffffffff1611611ddd576040805162461bcd60e51b815260206004820152600d60248201526c3634b6b4ba1034b99037bb32b960991b604482015290519081900360640190fd5b6000611de886612afc565b905080611e3c576040805162461bcd60e51b815260206004820152601f60248201527f707269636520666f72204e46542070726f66696c65206e6f7420666f756e6400604482015290519081900360640190fd5b60008511611e91576040805162461bcd60e51b815260206004820152601d60248201527f596f75206e65656420746f2070726f7669646520736f6d652043595452000000604482015290519081900360640190fd5b808514611e9d57600080fd5b600254604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611ee857600080fd5b505afa158015611efc573d6000803e3d6000fd5b505050506040513d6020811015611f1257600080fd5b5051905085811015611f555760405162461bcd60e51b8152600401808060200182810382526025815260200180614a826025913960400191505060405180910390fd5b60025460408051636eb1769f60e11b815233600482015230602482015290516000926001600160a01b03169163dd62ed3e916044808301926020929190829003018186803b158015611fa657600080fd5b505afa158015611fba573d6000803e3d6000fd5b505050506040513d6020811015611fd057600080fd5b5051905086811015612029576040805162461bcd60e51b815260206004820152601860248201527f436865636b20746865204359545220616c6c6f77616e63650000000000000000604482015290519081900360640190fd5b61203285612dfd565b61207d576040805162461bcd60e51b81526020600482015260176024820152761d1bdad95b881a59081a5cc81a5cc81bd8d8dd5c1a5959604a1b604482015290519081900360640190fd5b600254604080516323b872dd60e01b8152336004820152306024820152604481018a905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156120d757600080fd5b505af19250505080156120fc57506040513d60208110156120f757600080fd5b505160015b612144576040805162461bcd60e51b815260206004820152601460248201527310d65514881d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b506040805163ffffffff8a1681523360208201528082018990526060810185905290517f5eb741512cc8246129aa667a37f08969a61a32e86fe056469e4f2aa361959ef19181900360800190a16001546001600160a01b031663d3fc986487876121ad8c613214565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122175781810151838201526020016121ff565b50505050905090810190601f1680156122445780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561226557600080fd5b505af1925050508015612276575060015b6122b5576040805162461bcd60e51b815260206004820152600b60248201526a1b5a5b9d0819985a5b195960aa1b604482015290519081900360640190fd5b6008805460010190556040805163ffffffff8a168152602081018790523381830152606081018990526080810185905290517feb4a64188fd5e16f806e9767e459d5307b5cbe10288b34c01d2a7cddb1afe5689181900360a00190a160005b6007548110156123ca578863ffffffff166007828154811061233257fe5b600091825260209091206005909102015463ffffffff1614156123c2576298967f63ffffffff166007828154811061236657fe5b600091825260209091206004600590920201015463ffffffff16146123c2576007818154811061239257fe5b60009182526020909120600590910201600401805463ffffffff19811663ffffffff918216600019019091161790555b600101612314565b50600554600160a01b900460ff16156125035760005b600754811015612501578863ffffffff16600782815481106123fe57fe5b600091825260209091206005909102015463ffffffff1614156124f9576000612435600654611af4606460078681548110611ad457fe5b9050612468816007848154811061244857fe5b90600052602060002090600502016001015461463b90919063ffffffff16565b6007838154811061247557fe5b9060005260206000209060050201600101819055506124a2600654611af4606460078681548110611b6d57fe5b90506124d581600784815481106124b557fe5b90600052602060002090600502016002015461463b90919063ffffffff16565b600783815481106124e257fe5b906000526020600020906005020160020181905550505b6001016123e0565b505b505050949350505050565b6005546000906001600160a01b031633148061253457506000546001600160a01b031633145b61256f5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b600061257a85612afc565b9050806125ce576040805162461bcd60e51b815260206004820152601f60248201527f707269636520666f72204e46542070726f66696c65206e6f7420666f756e6400604482015290519081900360640190fd5b6125d783612dfd565b612622576040805162461bcd60e51b81526020600482015260176024820152761d1bdad95b881a59081a5cc81a5cc81bd8d8dd5c1a5959604a1b604482015290519081900360640190fd5b6001546001600160a01b031663d3fc9864858561263e89613214565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156126a8578181015183820152602001612690565b50505050905090810190601f1680156126d55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156126f657600080fd5b505af1925050508015612707575060015b612746576040805162461bcd60e51b815260206004820152600b60248201526a1b5a5b9d0819985a5b195960aa1b604482015290519081900360640190fd5b6008805460010190556040805163ffffffff87168152602081018590526001600160a01b038616818301526060810183905290517f07758c1736fe471cbbfb2decfd56015182a376e8753b390846fa0c3a23036b349181900360800190a150909392505050565b6060806060806007805490506040519080825280602002602001820160405280156127e2578160200160208202803883390190505b5090506060600780549050604051908082528060200260200182016040528015612816578160200160208202803883390190505b509050606060078054905060405190808252806020026020018201604052801561284a578160200160208202803883390190505b50905060005b60075481101561291e576007818154811061286757fe5b6000918252602090912060059091020154845163ffffffff9091169085908390811061288f57fe5b602002602001019063ffffffff16908163ffffffff1681525050600781815481106128b657fe5b9060005260206000209060050201600101548382815181106128d457fe5b602002602001018181525050600781815481106128ed57fe5b90600052602060002090600502016002015482828151811061290b57fe5b6020908102919091010152600101612850565b5091945092509050909192565b6005546001600160a01b031633148061294e57506000546001600160a01b031633145b6129895760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b6129916148d3565b6040518060a001604052808863ffffffff16815260200187815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505063ffffffff85811660209384015260078054600181018255925283517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6886005909302928301805463ffffffff191691909216178155838301517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68983015560408401517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a8301556060840151805194955085949193612acf937fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b019291019061490e565b50608091909101516004909101805463ffffffff191663ffffffff90921691909117905550505050505050565b6000805b600754811015610ebb578263ffffffff1660078281548110612b1e57fe5b600091825260209091206005909102015463ffffffff161415612b625760078181548110612b4857fe5b906000526020600020906005020160010154915050610ec1565b600101612b00565b6000805460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314612be25760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50600480546001600160a01b03199081166001600160a01b039485161791829055600280549290941691161790915590565b4790565b6005546001600160a01b0316331480612c3b57506000546001600160a01b031633145b612c765760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b60005b600754811015611186578263ffffffff1660078281548110612c9757fe5b600091825260209091206005909102015463ffffffff161415612cdd578160078281548110612cc257fe5b90600052602060002090600502016001018190555050611d2f565b600101612c79565b6040518060400160405280600681526020016518189c18181960d11b81525081565b60078181548110612d1457fe5b60009182526020918290206005919091020180546001808301546002808501546003860180546040805161010097831615979097026000190190911693909304601f810189900489028601890190935282855263ffffffff9095169750919591949391830182828015612dc85780601f10612d9d57610100808354040283529160200191612dc8565b820191906000526020600020905b815481529060010190602001808311612dab57829003601f168201915b5050506004909301549192505063ffffffff1685565b6000546001600160a01b031681565b600554600160a01b900460ff1690565b6001546040805163c87b56dd60e01b81526004810184905290516000926001600160a01b03169163c87b56dd9160248083019286929190829003018186803b158015612e4857600080fd5b505afa925050508015612f2c57506040513d6000823e601f3d908101601f191682016040526020811015612e7b57600080fd5b8101908080516040519392919084600160201b821115612e9a57600080fd5b908301906020820185811115612eaf57600080fd5b8251600160201b811182820188101715612ec857600080fd5b82525081516020918201929091019080838360005b83811015612ef5578181015183820152602001612edd565b50505050905090810190601f168015612f225780820380516001836020036101000a031916815260200191505b5060405250505060015b612f3857506001610ec1565b5060009050610ec1565b6000805b600754811015612fb9578263ffffffff1660078281548110612f6457fe5b600091825260209091206005909102015463ffffffff161415612fb15760078181548110612f8e57fe5b600091825260209091206004600590920201015463ffffffff169150610ec19050565b600101612f46565b506298967f92915050565b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561300f57600080fd5b505afa158015613023573d6000803e3d6000fd5b505050506040513d602081101561303957600080fd5b5051905090565b60065490565b6005546001600160a01b031633148061306957506000546001600160a01b031633145b6130a45760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b63ffffffff16600855565b6005546001600160a01b03163314806130d257506000546001600160a01b031633145b61310d5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b8560078863ffffffff168154811061312157fe5b60009182526020909120600590910201805463ffffffff191663ffffffff9283161790556007805487928a1690811061315657fe5b9060005260206000209060050201600101819055508360078863ffffffff168154811061317f57fe5b906000526020600020906005020160020181905550828260078963ffffffff16815481106131a957fe5b906000526020600020906005020160030191906131c7929190614855565b508060078863ffffffff16815481106131dc57fe5b906000526020600020906005020160040160006101000a81548163ffffffff021916908363ffffffff16021790555050505050505050565b606060005b60075481101561330c578263ffffffff166007828154811061323757fe5b600091825260209091206005909102015463ffffffff161415613304576007818154811061326157fe5b6000918252602091829020600360059092020101805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156132f75780601f106132cc576101008083540402835291602001916132f7565b820191906000526020600020905b8154815290600101906020018083116132da57829003601f168201915b5050505050915050610ec1565b600101613219565b5050604080516020810190915260008152919050565b6000805460408051808201909152600681526530313830303160d01b6020820152906001600160a01b0316331461339a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50600380546001600160a01b03199081166001600160a01b039485161791829055600180549290941691161790915590565b604080516020810182526000808252600154835163c87b56dd60e01b815260048101869052935191936001600160a01b039091169163c87b56dd916024808201928792909190829003018186803b15801561342657600080fd5b505afa92505050801561350a57506040513d6000823e601f3d908101601f19168201604052602081101561345957600080fd5b8101908080516040519392919084600160201b82111561347857600080fd5b90830190602082018581111561348d57600080fd5b8251600160201b8111828201881017156134a657600080fd5b82525081516020918201929091019080838360005b838110156134d35781810151838201526020016134bb565b50505050905090810190601f1680156135005780820380516001836020036101000a031916815260200191505b5060405250505060015b61351a57506298967f9050610ec1565b506001546040805163c87b56dd60e01b81526004810186905290516001600160a01b039092169163c87b56dd91602480820192600092909190829003018186803b15801561356757600080fd5b505afa15801561357b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156135a457600080fd5b8101908080516040519392919084600160201b8211156135c357600080fd5b9083019060208201858111156135d857600080fd5b8251600160201b8111828201881017156135f157600080fd5b82525081516020918201929091019080838360005b8381101561361e578181015183820152602001613606565b50505050905090810190601f16801561364b5780820380516001836020036101000a031916815260200191505b506040525050509050600061365f82613de3565b905063ffffffff81166298967f141561368057506298967f9150610ec19050565b61368981610e4d565b92505050610ec1565b604080516020810182526000808252600154835163c87b56dd60e01b815260048101869052935191936001600160a01b039091169163c87b56dd916024808201928792909190829003018186803b1580156136ec57600080fd5b505afa9250505080156137d057506040513d6000823e601f3d908101601f19168201604052602081101561371f57600080fd5b8101908080516040519392919084600160201b82111561373e57600080fd5b90830190602082018581111561375357600080fd5b8251600160201b81118282018810171561376c57600080fd5b82525081516020918201929091019080838360005b83811015613799578181015183820152602001613781565b50505050905090810190601f1680156137c65780820380516001836020036101000a031916815260200191505b5060405250505060015b6137e0576298967f915050610ec1565b506001546040805163c87b56dd60e01b81526004810186905290516001600160a01b039092169163c87b56dd91602480820192600092909190829003018186803b15801561382d57600080fd5b505afa158015613841573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561386a57600080fd5b8101908080516040519392919084600160201b82111561388957600080fd5b90830190602082018581111561389e57600080fd5b8251600160201b8111828201881017156138b757600080fd5b82525081516020918201929091019080838360005b838110156138e45781810151838201526020016138cc565b50505050905090810190601f1680156139115780820380516001836020036101000a031916815260200191505b50604052505050905061392381613de3565b915050610ec1565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b031633146139a25760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50348166038d7ea4c680000214613a00576040805162461bcd60e51b815260206004820152601e60248201527f706c656173652070726f766964652076616c756520696e2066696e6e65790000604482015290519081900360640190fd5b600054604080518381526001600160a01b03909216602083015280517feddca56e728ea017cd6a76222db5c5a1a3c95bc755678277f2ed597e027021a59281900390910190a150565b6005546000906001600160a01b0316331480613a6f57506000546001600160a01b031633145b613aaa5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b6000613ab583613692565b90506000613ac282610e4d565b60015460408051630852cd8d60e31b81526004810188905290519293506001600160a01b03909116916342966c689160248082019260009290919082900301818387803b158015613b1257600080fd5b505af1925050508015613b23575060015b613b66576040805162461bcd60e51b815260206004820152600f60248201526e13919508189d5c9b8819985a5b1959608a1b604482015290519081900360640190fd5b6040805185815263ffffffff8416602082015280820183905290517f8d8aa2b5868830a27eb7e88c61b8f505ea4e8b85b14f0d6600bfac724a9301459181900360600190a15050919050565b6005546001600160a01b0316331480613bd557506000546001600160a01b031633145b613c105760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b60005b600754811015613ca2578363ffffffff1660078281548110613c3157fe5b600091825260209091206005909102015463ffffffff161415613c9a578260078281548110613c5c57fe5b9060005260206000209060050201600101819055508160078281548110613c7f57fe5b90600052602060002090600502016002018190555050611186565b600101613c13565b50505050565b60085490565b6005546001600160a01b0316331480613cd157506000546001600160a01b031633145b613d0c5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b60005b60075463ffffffff82161015611d2f578163ffffffff1660078263ffffffff1681548110613d3957fe5b600091825260209091206005909102015463ffffffff161415613d6557613d5f816146ab565b50613d6d565b600101613d0f565b50565b6005546001600160a01b0316331480613d9357506000546001600160a01b031633145b613dce5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b6005805460ff60a01b1916600160a01b179055565b6000805b600754811015612fb957828051906020012060078281548110613e0657fe5b90600052602060002090600502016003016040518082805460018160011615610100020316600290048015613e725780601f10613e50576101008083540402835291820191613e72565b820191906000526020600020905b815481529060010190602001808311613e5e575b505091505060405180910390201415613eb25760078181548110613e9257fe5b600091825260209091206005909102015463ffffffff169150610ec19050565b600101613de7565b6004546001600160a01b031690565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314613f405760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b5060008111613f805760405162461bcd60e51b8152600401808060200182810382526028815260200180614ac96028913960400191505060405180910390fd5b60025460408051636eb1769f60e11b815233600482015230602482015290516000926001600160a01b03169163dd62ed3e916044808301926020929190829003018186803b158015613fd157600080fd5b505afa158015613fe5573d6000803e3d6000fd5b505050506040513d6020811015613ffb57600080fd5b5051905081811015614054576040805162461bcd60e51b815260206004820152601960248201527f436865636b2074686520746f6b656e20616c6c6f77616e636500000000000000604482015290519081900360640190fd5b600254604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156140ae57600080fd5b505af11580156140c2573d6000803e3d6000fd5b505050506040513d60208110156140d857600080fd5b5050600054604080518481526001600160a01b03909216602083015280517fbb18388c519fe4b4b577b17f416832c870492be5510cdb062b086c0a0025d7889281900390910190a15050565b6005546001600160a01b031633148061414757506000546001600160a01b031633145b6141825760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b600655565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b031633146141fe5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b5060408051808201909152600681526518189c18181960d11b60208201526001600160a01b0382166142715760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280600681526020016530313830303160d01b81525081565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b031633146143665760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50804710156143b1576040805162461bcd60e51b8152602060048201526012602482015271756e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146143fc576040519150601f19603f3d011682016040523d82523d6000602084013e614401565b606091505b5050809150508061444c576040805162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015290519081900360640190fd5b604080518381526001600160a01b038516602082015281517f8c7cdad0d12a8db3e23561b42da6f10c8137914c97beff202213a410e1f520a3929181900390910190a1505050565b6005546001600160a01b031690565b3b63ffffffff16151590565b60008082116040518060400160405280600681526020016530303830303360d01b8152509061451f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b5081838161452957fe5b049392505050565b600082614540575060006145bd565b508181028183828161454e57fe5b04146040518060400160405280600681526020016530303830303160d01b815250906145bb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b505b92915050565b6000828211156040518060400160405280600681526020016518181c18181960d11b815250906146345760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b5050900390565b60408051808201909152600681526530303830303160d01b602082015282820190838210156145bb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b60075463ffffffff8216106146bf57613d6d565b6007546000190163ffffffff821614156147305760078054806146de57fe5b600082815260208120600560001990930192830201805463ffffffff1916815560018101829055600281018290559061471a600383018261497c565b50600401805463ffffffff191690559055613d6d565b63ffffffff81165b600754600019018110156147f9576007816001018154811061475657fe5b90600052602060002090600502016007828154811061477157fe5b600091825260209091208254600590920201805463ffffffff191663ffffffff9092169190911781556001808301548183015560028084015481840155600380850180546147d194928601939192811615610100026000190116046149c0565b506004918201549101805463ffffffff191663ffffffff909216919091179055600101614738565b50600780548061480557fe5b600082815260208120600560001990930192830201805463ffffffff19168155600181018290556002810182905590614841600383018261497c565b50600401805463ffffffff19169055905550565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106148965782800160ff198235161785556148c3565b828001600101855582156148c3579182015b828111156148c35782358255916020019190600101906148a8565b506148cf929150614a35565b5090565b6040518060a00160405280600063ffffffff168152602001600081526020016000815260200160608152602001600063ffffffff1681525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061494f57805160ff19168380011785556148c3565b828001600101855582156148c3579182015b828111156148c3578251825591602001919060010190614961565b50805460018160011615610100020316600290046000825580601f106149a25750613d6d565b601f016020900490600052602060002090810190613d6d9190614a35565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106149f957805485556148c3565b828001600101855582156148c357600052602060002091601f016020900482015b828111156148c3578254825591600101919060010190614a1a565b611d4091905b808211156148cf5760008155600101614a3b56fe6f6e6c79207072696365206d616e61676572206f72206f776e65722063616e2063616c6c20746869732066756e6374696f6e436865636b2074686520435954522062616c616e6365206f6e20796f75722077616c6c657465787465726e616c20636f6e74726163747320617265206e6f7420616c6c6f776564596f75206e65656420746f206465706f736974206174206c6561737420736f6d6520746f6b656e73596f75206e65656420746f207769746864726177206174206c6561737420736f6d6520746f6b656e73a26469706673582212205d2b32be9b840bdb01ee17c72260a6ff6dd2c8ef6097cb5573e4b9ea6e18bdee64736f6c63430006020033
Deployed Bytecode
0x6080604052600436106102725760003560e01c8063940a14551161014f578063c9ab22a7116100c1578063dd49756e1161007a578063dd49756e14610d63578063dec0fc5c14610d8d578063f2fde38b14610db7578063f3fe3bc314610dea578063f3fef3a314610dff578063f8a623d314610e3857610272565b8063c9ab22a714610c07578063caa0f92a14610c43578063cbfcaed514610c58578063cf5b281614610c88578063d3c5f13714610c9d578063d41c3a6514610d4e57610272565b8063a77cefc411610113578063a77cefc414610b09578063a7ccabdf14610b39578063a8f621ea14610b6c578063b6749d9414610b96578063b6b55f2514610bc0578063badb97ff14610bdd57610272565b8063940a1455146109c357806394d212e614610a0c5780639609f6c714610a215780639cf1ba2e14610a36578063a5419ba214610a6657610272565b80635230bcdf116101e857806377476c7b116101ac57806377476c7b146107d9578063860d248a1461080f5780638cec7946146108995780638da5cb5b1461096f5780638da7df22146109845780638ea7f0331461099957610272565b80635230bcdf146105c05780635d7dc9da146106b35780635d82c4621461074d5780636a326ab11461077d5780636f9fb98a146107c457610272565b806319e1f4861161023a57806319e1f4861461048a5780631ba9bdac146104b457806329598630146104c95780632b1f4ad6146104ff5780634488c99c1461053057806345f403621461057b57610272565b806302d1003b1461027757806306b091f9146102b95780630ea638a3146102f4578063156b1d37146103bd57806318fdec7e14610457575b600080fd5b34801561028357600080fd5b506102a76004803603602081101561029a57600080fd5b503563ffffffff16610e4d565b60408051918252519081900360200190f35b3480156102c557600080fd5b506102f2600480360360408110156102dc57600080fd5b506001600160a01b038135169060200135610ec6565b005b34801561030057600080fd5b506103246004803603602081101561031757600080fd5b503563ffffffff1661118b565b60405180858152602001848152602001806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b8381101561037f578181015183820152602001610367565b50505050905090810190601f1680156103ac5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b3480156103c957600080fd5b506102f2600480360360a08110156103e057600080fd5b63ffffffff8235169160208101359160408201359190810190608081016060820135600160201b81111561041357600080fd5b82018360208201111561042557600080fd5b803590602001918460018302840111600160201b8311171561044657600080fd5b91935091503563ffffffff1661131b565b34801561046357600080fd5b506102f26004803603602081101561047a57600080fd5b50356001600160a01b0316611480565b34801561049657600080fd5b506102a7600480360360208110156104ad57600080fd5b503561151a565b3480156104c057600080fd5b506102f2611bf5565b3480156104d557600080fd5b506102f2600480360360408110156104ec57600080fd5b5063ffffffff8135169060200135611c62565b34801561050b57600080fd5b50610514611d33565b604080516001600160a01b039092168252519081900360200190f35b34801561053c57600080fd5b506102a76004803603608081101561055357600080fd5b5063ffffffff813516906020810135906001600160a01b036040820135169060600135611d43565b34801561058757600080fd5b506102a76004803603606081101561059e57600080fd5b5063ffffffff813516906001600160a01b03602082013516906040013561250e565b3480156105cc57600080fd5b506105d56127ad565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561061d578181015183820152602001610605565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561065c578181015183820152602001610644565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561069b578181015183820152602001610683565b50505050905001965050505050505060405180910390f35b3480156106bf57600080fd5b506102f2600480360360a08110156106d657600080fd5b63ffffffff8235169160208101359160408201359190810190608081016060820135600160201b81111561070957600080fd5b82018360208201111561071b57600080fd5b803590602001918460018302840111600160201b8311171561073c57600080fd5b91935091503563ffffffff1661292b565b34801561075957600080fd5b506102a76004803603602081101561077057600080fd5b503563ffffffff16612afc565b34801561078957600080fd5b506107b0600480360360208110156107a057600080fd5b50356001600160a01b0316612b6a565b604080519115158252519081900360200190f35b3480156107d057600080fd5b506102a7612c14565b3480156107e557600080fd5b506102f2600480360360408110156107fc57600080fd5b5063ffffffff8135169060200135612c18565b34801561081b57600080fd5b50610824612ce5565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561085e578181015183820152602001610846565b50505050905090810190601f16801561088b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108a557600080fd5b506108c3600480360360208110156108bc57600080fd5b5035612d07565b604051808663ffffffff1663ffffffff168152602001858152602001848152602001806020018363ffffffff1663ffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015610930578181015183820152602001610918565b50505050905090810190601f16801561095d5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b34801561097b57600080fd5b50610514612dde565b34801561099057600080fd5b506107b0612ded565b3480156109a557600080fd5b506107b0600480360360208110156109bc57600080fd5b5035612dfd565b3480156109cf57600080fd5b506109f3600480360360208110156109e657600080fd5b503563ffffffff16612f42565b6040805163ffffffff9092168252519081900360200190f35b348015610a1857600080fd5b506102a7612fc4565b348015610a2d57600080fd5b506102a7613040565b348015610a4257600080fd5b506102f260048036036020811015610a5957600080fd5b503563ffffffff16613046565b348015610a7257600080fd5b506102f2600480360360c0811015610a8957600080fd5b63ffffffff823581169260208101359091169160408201359160608101359181019060a081016080820135600160201b811115610ac557600080fd5b820183602082011115610ad757600080fd5b803590602001918460018302840111600160201b83111715610af857600080fd5b91935091503563ffffffff166130af565b348015610b1557600080fd5b5061082460048036036020811015610b2c57600080fd5b503563ffffffff16613214565b348015610b4557600080fd5b506107b060048036036020811015610b5c57600080fd5b50356001600160a01b0316613322565b348015610b7857600080fd5b506102a760048036036020811015610b8f57600080fd5b50356133cc565b348015610ba257600080fd5b506109f360048036036020811015610bb957600080fd5b5035613692565b6102f260048036036020811015610bd657600080fd5b503561392b565b348015610be957600080fd5b506102a760048036036020811015610c0057600080fd5b5035613a49565b348015610c1357600080fd5b506102f260048036036060811015610c2a57600080fd5b5063ffffffff8135169060208101359060400135613bb2565b348015610c4f57600080fd5b506102a7613ca8565b348015610c6457600080fd5b506102f260048036036020811015610c7b57600080fd5b503563ffffffff16613cae565b348015610c9457600080fd5b506102f2613d70565b348015610ca957600080fd5b506109f360048036036020811015610cc057600080fd5b810190602081018135600160201b811115610cda57600080fd5b820183602082011115610cec57600080fd5b803590602001918460018302840111600160201b83111715610d0d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613de3945050505050565b348015610d5a57600080fd5b50610514613eba565b348015610d6f57600080fd5b506102f260048036036020811015610d8657600080fd5b5035613ec9565b348015610d9957600080fd5b506102f260048036036020811015610db057600080fd5b5035614124565b348015610dc357600080fd5b506102f260048036036020811015610dda57600080fd5b50356001600160a01b0316614187565b348015610df657600080fd5b506108246142cd565b348015610e0b57600080fd5b506102f260048036036040811015610e2257600080fd5b506001600160a01b0381351690602001356142ef565b348015610e4457600080fd5b50610514614494565b6000805b600754811015610ebb578263ffffffff1660078281548110610e6f57fe5b600091825260209091206005909102015463ffffffff161415610eb35760078181548110610e9957fe5b906000526020600020906005020160020154915050610ec1565b600101610e51565b50600090505b919050565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610f7a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f3f578181015183820152602001610f27565b50505050905090810190601f168015610f6c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008111610fba5760405162461bcd60e51b8152600401808060200182810382526029815260200180614af16029913960400191505060405180910390fd5b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561100557600080fd5b505afa158015611019573d6000803e3d6000fd5b505050506040513d602081101561102f57600080fd5b5051905081811161107c576040805162461bcd60e51b8152602060048201526012602482015271756e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b6002546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156110d257600080fd5b505af19250505080156110f757506040513d60208110156110f257600080fd5b505160015b611141576040805162461bcd60e51b81526020600482015260166024820152751d1bdad95b9cc81d1c985b9cd9995c8819985a5b195960521b604482015290519081900360640190fd5b50604080518381526001600160a01b038516602082015281517f0ddddc48b57dd67f8fa2ff05c78034b578c31ef5caa05b03d2ca16feadbbb98f929181900390910190a15b505050565b600080606081805b6007548110156112f6578563ffffffff16600782815481106111b157fe5b600091825260209091206005909102015463ffffffff1614156112ee57600781815481106111db57fe5b906000526020600020906005020160010154600782815481106111fa57fe5b9060005260206000209060050201600201546007838154811061121957fe5b90600052602060002090600502016003016007848154811061123757fe5b600091825260209182902060046005909202010154825460408051601f6002600019600186161561010002019094169390930492830185900485028101850190915281815263ffffffff909216928491908301828280156112d95780601f106112ae576101008083540402835291602001916112d9565b820191906000526020600020905b8154815290600101906020018083116112bc57829003601f168201915b50505050509150945094509450945050611314565b600101611193565b505060408051602081019091526000808252935083925090506298967f5b9193509193565b6005546001600160a01b031633148061133e57506000546001600160a01b031633145b6113795760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b60005b600754811015611476578663ffffffff166007828154811061139a57fe5b600091825260209091206005909102015463ffffffff16141561146e5785600782815481106113c557fe5b90600052602060002090600502016001018190555084600782815481106113e857fe5b90600052602060002090600502016002018190555083836007838154811061140c57fe5b9060005260206000209060050201600301919061142a929190614855565b50816007828154811061143957fe5b906000526020600020906005020160040160006101000a81548163ffffffff021916908363ffffffff16021790555050611478565b60010161137c565b505b505050505050565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b031633146114f75760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611525336144a3565b156115615760405162461bcd60e51b8152600401808060200182810382526022815260200180614aa76022913960400191505060405180910390fd5b600154604080516331a9108f60e11b815260048101859052905133926001600160a01b031691636352211e916024808301926020929190829003018186803b1580156115ac57600080fd5b505afa1580156115c0573d6000803e3d6000fd5b505050506040513d60208110156115d657600080fd5b50516001600160a01b031614611628576040805162461bcd60e51b81526020600482015260126024820152711a5d081a5cc81b9bdd081e5bdd5c8813919560721b604482015290519081900360640190fd5b600061163383613692565b905063ffffffff81166298967f1415611693576040805162461bcd60e51b815260206004820152601860248201527f4e46542070726f66696c65204944206e6f7420666f756e640000000000000000604482015290519081900360640190fd5b600061169e82610e4d565b9050806116e8576040805162461bcd60e51b8152602060048201526013602482015272139195081c1c9a58d9481b9bdd08199bdd5b99606a1b604482015290519081900360640190fd5b600254604080516370a0823160e01b8152336004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561173257600080fd5b505afa158015611746573d6000803e3d6000fd5b505050506040513d602081101561175c57600080fd5b5051116117b0576040805162461bcd60e51b815260206004820152601d60248201527f756e73756666696369656e742043595452206f6e20636f6e7472616374000000604482015290519081900360640190fd5b60015460408051630852cd8d60e31b81526004810187905290516001600160a01b03909216916342966c689160248082019260009290919082900301818387803b1580156117fd57600080fd5b505af192505050801561180e575060015b611851576040805162461bcd60e51b815260206004820152600f60248201526e13919508189d5c9b8819985a5b1959608a1b604482015290519081900360640190fd5b6040805163ffffffff84168152602081018690523381830152606081018390526080810183905290517fd47f6b8f75f609a4e4c8a2ac7d7b832f838a4d7cd0bd16e09cbdb1c75589f1839181900360a00190a16002546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156118f857600080fd5b505af192505050801561191d57506040513d602081101561191857600080fd5b505160015b611965576040805162461bcd60e51b815260206004820152601460248201527310d65514881d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b506040805163ffffffff841681523360208201528082018390526060810183905290517fa7ee43596e81c2ca49d6a37948abf0c3c23d30645ae08996783fb304b0de07469181900360800190a160005b600754811015611a69578263ffffffff16600782815481106119d357fe5b600091825260209091206005909102015463ffffffff161415611a61576298967f63ffffffff1660078281548110611a0757fe5b600091825260209091206004600590920201015463ffffffff1614611a615760078181548110611a3357fe5b60009182526020909120600460059092020101805463ffffffff8082166001011663ffffffff199091161790555b6001016119b5565b50600554600160a01b900460ff1615611bee5760005b600754811015611bec578263ffffffff1660078281548110611a9d57fe5b600091825260209091206005909102015463ffffffff161415611be4576000611b00600654611af4606460078681548110611ad457fe5b9060005260206000209060050201600101546144af90919063ffffffff16565b9063ffffffff61453116565b9050611b338160078481548110611b1357fe5b9060005260206000209060050201600101546145c390919063ffffffff16565b60078381548110611b4057fe5b906000526020600020906005020160010181905550611b8d600654611af4606460078681548110611b6d57fe5b9060005260206000209060050201600201546144af90919063ffffffff16565b9050611bc08160078481548110611ba057fe5b9060005260206000209060050201600201546145c390919063ffffffff16565b60078381548110611bcd57fe5b906000526020600020906005020160020181905550505b600101611a7f565b505b5050919050565b6005546001600160a01b0316331480611c1857506000546001600160a01b031633145b611c535760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b6005805460ff60a01b19169055565b6005546001600160a01b0316331480611c8557506000546001600160a01b031633145b611cc05760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b60005b600754811015611186578263ffffffff1660078281548110611ce157fe5b600091825260209091206005909102015463ffffffff161415611d27578160078281548110611d0c57fe5b90600052602060002090600502016002018190555050611d2f565b600101611cc3565b5050565b6003546001600160a01b03165b90565b6000611d4e336144a3565b15611d8a5760405162461bcd60e51b8152600401808060200182810382526022815260200180614aa76022913960400191505060405180910390fd5b6000611d9586612f42565b63ffffffff1611611ddd576040805162461bcd60e51b815260206004820152600d60248201526c3634b6b4ba1034b99037bb32b960991b604482015290519081900360640190fd5b6000611de886612afc565b905080611e3c576040805162461bcd60e51b815260206004820152601f60248201527f707269636520666f72204e46542070726f66696c65206e6f7420666f756e6400604482015290519081900360640190fd5b60008511611e91576040805162461bcd60e51b815260206004820152601d60248201527f596f75206e65656420746f2070726f7669646520736f6d652043595452000000604482015290519081900360640190fd5b808514611e9d57600080fd5b600254604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611ee857600080fd5b505afa158015611efc573d6000803e3d6000fd5b505050506040513d6020811015611f1257600080fd5b5051905085811015611f555760405162461bcd60e51b8152600401808060200182810382526025815260200180614a826025913960400191505060405180910390fd5b60025460408051636eb1769f60e11b815233600482015230602482015290516000926001600160a01b03169163dd62ed3e916044808301926020929190829003018186803b158015611fa657600080fd5b505afa158015611fba573d6000803e3d6000fd5b505050506040513d6020811015611fd057600080fd5b5051905086811015612029576040805162461bcd60e51b815260206004820152601860248201527f436865636b20746865204359545220616c6c6f77616e63650000000000000000604482015290519081900360640190fd5b61203285612dfd565b61207d576040805162461bcd60e51b81526020600482015260176024820152761d1bdad95b881a59081a5cc81a5cc81bd8d8dd5c1a5959604a1b604482015290519081900360640190fd5b600254604080516323b872dd60e01b8152336004820152306024820152604481018a905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156120d757600080fd5b505af19250505080156120fc57506040513d60208110156120f757600080fd5b505160015b612144576040805162461bcd60e51b815260206004820152601460248201527310d65514881d1c985b9cd9995c8819985a5b195960621b604482015290519081900360640190fd5b506040805163ffffffff8a1681523360208201528082018990526060810185905290517f5eb741512cc8246129aa667a37f08969a61a32e86fe056469e4f2aa361959ef19181900360800190a16001546001600160a01b031663d3fc986487876121ad8c613214565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156122175781810151838201526020016121ff565b50505050905090810190601f1680156122445780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561226557600080fd5b505af1925050508015612276575060015b6122b5576040805162461bcd60e51b815260206004820152600b60248201526a1b5a5b9d0819985a5b195960aa1b604482015290519081900360640190fd5b6008805460010190556040805163ffffffff8a168152602081018790523381830152606081018990526080810185905290517feb4a64188fd5e16f806e9767e459d5307b5cbe10288b34c01d2a7cddb1afe5689181900360a00190a160005b6007548110156123ca578863ffffffff166007828154811061233257fe5b600091825260209091206005909102015463ffffffff1614156123c2576298967f63ffffffff166007828154811061236657fe5b600091825260209091206004600590920201015463ffffffff16146123c2576007818154811061239257fe5b60009182526020909120600590910201600401805463ffffffff19811663ffffffff918216600019019091161790555b600101612314565b50600554600160a01b900460ff16156125035760005b600754811015612501578863ffffffff16600782815481106123fe57fe5b600091825260209091206005909102015463ffffffff1614156124f9576000612435600654611af4606460078681548110611ad457fe5b9050612468816007848154811061244857fe5b90600052602060002090600502016001015461463b90919063ffffffff16565b6007838154811061247557fe5b9060005260206000209060050201600101819055506124a2600654611af4606460078681548110611b6d57fe5b90506124d581600784815481106124b557fe5b90600052602060002090600502016002015461463b90919063ffffffff16565b600783815481106124e257fe5b906000526020600020906005020160020181905550505b6001016123e0565b505b505050949350505050565b6005546000906001600160a01b031633148061253457506000546001600160a01b031633145b61256f5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b600061257a85612afc565b9050806125ce576040805162461bcd60e51b815260206004820152601f60248201527f707269636520666f72204e46542070726f66696c65206e6f7420666f756e6400604482015290519081900360640190fd5b6125d783612dfd565b612622576040805162461bcd60e51b81526020600482015260176024820152761d1bdad95b881a59081a5cc81a5cc81bd8d8dd5c1a5959604a1b604482015290519081900360640190fd5b6001546001600160a01b031663d3fc9864858561263e89613214565b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156126a8578181015183820152602001612690565b50505050905090810190601f1680156126d55780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156126f657600080fd5b505af1925050508015612707575060015b612746576040805162461bcd60e51b815260206004820152600b60248201526a1b5a5b9d0819985a5b195960aa1b604482015290519081900360640190fd5b6008805460010190556040805163ffffffff87168152602081018590526001600160a01b038616818301526060810183905290517f07758c1736fe471cbbfb2decfd56015182a376e8753b390846fa0c3a23036b349181900360800190a150909392505050565b6060806060806007805490506040519080825280602002602001820160405280156127e2578160200160208202803883390190505b5090506060600780549050604051908082528060200260200182016040528015612816578160200160208202803883390190505b509050606060078054905060405190808252806020026020018201604052801561284a578160200160208202803883390190505b50905060005b60075481101561291e576007818154811061286757fe5b6000918252602090912060059091020154845163ffffffff9091169085908390811061288f57fe5b602002602001019063ffffffff16908163ffffffff1681525050600781815481106128b657fe5b9060005260206000209060050201600101548382815181106128d457fe5b602002602001018181525050600781815481106128ed57fe5b90600052602060002090600502016002015482828151811061290b57fe5b6020908102919091010152600101612850565b5091945092509050909192565b6005546001600160a01b031633148061294e57506000546001600160a01b031633145b6129895760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b6129916148d3565b6040518060a001604052808863ffffffff16815260200187815260200186815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250505063ffffffff85811660209384015260078054600181018255925283517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6886005909302928301805463ffffffff191691909216178155838301517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68983015560408401517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a8301556060840151805194955085949193612acf937fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b019291019061490e565b50608091909101516004909101805463ffffffff191663ffffffff90921691909117905550505050505050565b6000805b600754811015610ebb578263ffffffff1660078281548110612b1e57fe5b600091825260209091206005909102015463ffffffff161415612b625760078181548110612b4857fe5b906000526020600020906005020160010154915050610ec1565b600101612b00565b6000805460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314612be25760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50600480546001600160a01b03199081166001600160a01b039485161791829055600280549290941691161790915590565b4790565b6005546001600160a01b0316331480612c3b57506000546001600160a01b031633145b612c765760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b60005b600754811015611186578263ffffffff1660078281548110612c9757fe5b600091825260209091206005909102015463ffffffff161415612cdd578160078281548110612cc257fe5b90600052602060002090600502016001018190555050611d2f565b600101612c79565b6040518060400160405280600681526020016518189c18181960d11b81525081565b60078181548110612d1457fe5b60009182526020918290206005919091020180546001808301546002808501546003860180546040805161010097831615979097026000190190911693909304601f810189900489028601890190935282855263ffffffff9095169750919591949391830182828015612dc85780601f10612d9d57610100808354040283529160200191612dc8565b820191906000526020600020905b815481529060010190602001808311612dab57829003601f168201915b5050506004909301549192505063ffffffff1685565b6000546001600160a01b031681565b600554600160a01b900460ff1690565b6001546040805163c87b56dd60e01b81526004810184905290516000926001600160a01b03169163c87b56dd9160248083019286929190829003018186803b158015612e4857600080fd5b505afa925050508015612f2c57506040513d6000823e601f3d908101601f191682016040526020811015612e7b57600080fd5b8101908080516040519392919084600160201b821115612e9a57600080fd5b908301906020820185811115612eaf57600080fd5b8251600160201b811182820188101715612ec857600080fd5b82525081516020918201929091019080838360005b83811015612ef5578181015183820152602001612edd565b50505050905090810190601f168015612f225780820380516001836020036101000a031916815260200191505b5060405250505060015b612f3857506001610ec1565b5060009050610ec1565b6000805b600754811015612fb9578263ffffffff1660078281548110612f6457fe5b600091825260209091206005909102015463ffffffff161415612fb15760078181548110612f8e57fe5b600091825260209091206004600590920201015463ffffffff169150610ec19050565b600101612f46565b506298967f92915050565b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561300f57600080fd5b505afa158015613023573d6000803e3d6000fd5b505050506040513d602081101561303957600080fd5b5051905090565b60065490565b6005546001600160a01b031633148061306957506000546001600160a01b031633145b6130a45760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b63ffffffff16600855565b6005546001600160a01b03163314806130d257506000546001600160a01b031633145b61310d5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b8560078863ffffffff168154811061312157fe5b60009182526020909120600590910201805463ffffffff191663ffffffff9283161790556007805487928a1690811061315657fe5b9060005260206000209060050201600101819055508360078863ffffffff168154811061317f57fe5b906000526020600020906005020160020181905550828260078963ffffffff16815481106131a957fe5b906000526020600020906005020160030191906131c7929190614855565b508060078863ffffffff16815481106131dc57fe5b906000526020600020906005020160040160006101000a81548163ffffffff021916908363ffffffff16021790555050505050505050565b606060005b60075481101561330c578263ffffffff166007828154811061323757fe5b600091825260209091206005909102015463ffffffff161415613304576007818154811061326157fe5b6000918252602091829020600360059092020101805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156132f75780601f106132cc576101008083540402835291602001916132f7565b820191906000526020600020905b8154815290600101906020018083116132da57829003601f168201915b5050505050915050610ec1565b600101613219565b5050604080516020810190915260008152919050565b6000805460408051808201909152600681526530313830303160d01b6020820152906001600160a01b0316331461339a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50600380546001600160a01b03199081166001600160a01b039485161791829055600180549290941691161790915590565b604080516020810182526000808252600154835163c87b56dd60e01b815260048101869052935191936001600160a01b039091169163c87b56dd916024808201928792909190829003018186803b15801561342657600080fd5b505afa92505050801561350a57506040513d6000823e601f3d908101601f19168201604052602081101561345957600080fd5b8101908080516040519392919084600160201b82111561347857600080fd5b90830190602082018581111561348d57600080fd5b8251600160201b8111828201881017156134a657600080fd5b82525081516020918201929091019080838360005b838110156134d35781810151838201526020016134bb565b50505050905090810190601f1680156135005780820380516001836020036101000a031916815260200191505b5060405250505060015b61351a57506298967f9050610ec1565b506001546040805163c87b56dd60e01b81526004810186905290516001600160a01b039092169163c87b56dd91602480820192600092909190829003018186803b15801561356757600080fd5b505afa15801561357b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156135a457600080fd5b8101908080516040519392919084600160201b8211156135c357600080fd5b9083019060208201858111156135d857600080fd5b8251600160201b8111828201881017156135f157600080fd5b82525081516020918201929091019080838360005b8381101561361e578181015183820152602001613606565b50505050905090810190601f16801561364b5780820380516001836020036101000a031916815260200191505b506040525050509050600061365f82613de3565b905063ffffffff81166298967f141561368057506298967f9150610ec19050565b61368981610e4d565b92505050610ec1565b604080516020810182526000808252600154835163c87b56dd60e01b815260048101869052935191936001600160a01b039091169163c87b56dd916024808201928792909190829003018186803b1580156136ec57600080fd5b505afa9250505080156137d057506040513d6000823e601f3d908101601f19168201604052602081101561371f57600080fd5b8101908080516040519392919084600160201b82111561373e57600080fd5b90830190602082018581111561375357600080fd5b8251600160201b81118282018810171561376c57600080fd5b82525081516020918201929091019080838360005b83811015613799578181015183820152602001613781565b50505050905090810190601f1680156137c65780820380516001836020036101000a031916815260200191505b5060405250505060015b6137e0576298967f915050610ec1565b506001546040805163c87b56dd60e01b81526004810186905290516001600160a01b039092169163c87b56dd91602480820192600092909190829003018186803b15801561382d57600080fd5b505afa158015613841573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561386a57600080fd5b8101908080516040519392919084600160201b82111561388957600080fd5b90830190602082018581111561389e57600080fd5b8251600160201b8111828201881017156138b757600080fd5b82525081516020918201929091019080838360005b838110156138e45781810151838201526020016138cc565b50505050905090810190601f1680156139115780820380516001836020036101000a031916815260200191505b50604052505050905061392381613de3565b915050610ec1565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b031633146139a25760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50348166038d7ea4c680000214613a00576040805162461bcd60e51b815260206004820152601e60248201527f706c656173652070726f766964652076616c756520696e2066696e6e65790000604482015290519081900360640190fd5b600054604080518381526001600160a01b03909216602083015280517feddca56e728ea017cd6a76222db5c5a1a3c95bc755678277f2ed597e027021a59281900390910190a150565b6005546000906001600160a01b0316331480613a6f57506000546001600160a01b031633145b613aaa5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b6000613ab583613692565b90506000613ac282610e4d565b60015460408051630852cd8d60e31b81526004810188905290519293506001600160a01b03909116916342966c689160248082019260009290919082900301818387803b158015613b1257600080fd5b505af1925050508015613b23575060015b613b66576040805162461bcd60e51b815260206004820152600f60248201526e13919508189d5c9b8819985a5b1959608a1b604482015290519081900360640190fd5b6040805185815263ffffffff8416602082015280820183905290517f8d8aa2b5868830a27eb7e88c61b8f505ea4e8b85b14f0d6600bfac724a9301459181900360600190a15050919050565b6005546001600160a01b0316331480613bd557506000546001600160a01b031633145b613c105760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b60005b600754811015613ca2578363ffffffff1660078281548110613c3157fe5b600091825260209091206005909102015463ffffffff161415613c9a578260078281548110613c5c57fe5b9060005260206000209060050201600101819055508160078281548110613c7f57fe5b90600052602060002090600502016002018190555050611186565b600101613c13565b50505050565b60085490565b6005546001600160a01b0316331480613cd157506000546001600160a01b031633145b613d0c5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b60005b60075463ffffffff82161015611d2f578163ffffffff1660078263ffffffff1681548110613d3957fe5b600091825260209091206005909102015463ffffffff161415613d6557613d5f816146ab565b50613d6d565b600101613d0f565b50565b6005546001600160a01b0316331480613d9357506000546001600160a01b031633145b613dce5760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b6005805460ff60a01b1916600160a01b179055565b6000805b600754811015612fb957828051906020012060078281548110613e0657fe5b90600052602060002090600502016003016040518082805460018160011615610100020316600290048015613e725780601f10613e50576101008083540402835291820191613e72565b820191906000526020600020905b815481529060010190602001808311613e5e575b505091505060405180910390201415613eb25760078181548110613e9257fe5b600091825260209091206005909102015463ffffffff169150610ec19050565b600101613de7565b6004546001600160a01b031690565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314613f405760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b5060008111613f805760405162461bcd60e51b8152600401808060200182810382526028815260200180614ac96028913960400191505060405180910390fd5b60025460408051636eb1769f60e11b815233600482015230602482015290516000926001600160a01b03169163dd62ed3e916044808301926020929190829003018186803b158015613fd157600080fd5b505afa158015613fe5573d6000803e3d6000fd5b505050506040513d6020811015613ffb57600080fd5b5051905081811015614054576040805162461bcd60e51b815260206004820152601960248201527f436865636b2074686520746f6b656e20616c6c6f77616e636500000000000000604482015290519081900360640190fd5b600254604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156140ae57600080fd5b505af11580156140c2573d6000803e3d6000fd5b505050506040513d60208110156140d857600080fd5b5050600054604080518481526001600160a01b03909216602083015280517fbb18388c519fe4b4b577b17f416832c870492be5510cdb062b086c0a0025d7889281900390910190a15050565b6005546001600160a01b031633148061414757506000546001600160a01b031633145b6141825760405162461bcd60e51b8152600401808060200182810382526032815260200180614a506032913960400191505060405180910390fd5b600655565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b031633146141fe5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b5060408051808201909152600681526518189c18181960d11b60208201526001600160a01b0382166142715760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280600681526020016530313830303160d01b81525081565b60005460408051808201909152600681526530313830303160d01b6020820152906001600160a01b031633146143665760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b50804710156143b1576040805162461bcd60e51b8152602060048201526012602482015271756e73756666696369656e742066756e647360701b604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146143fc576040519150601f19603f3d011682016040523d82523d6000602084013e614401565b606091505b5050809150508061444c576040805162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b604482015290519081900360640190fd5b604080518381526001600160a01b038516602082015281517f8c7cdad0d12a8db3e23561b42da6f10c8137914c97beff202213a410e1f520a3929181900390910190a1505050565b6005546001600160a01b031690565b3b63ffffffff16151590565b60008082116040518060400160405280600681526020016530303830303360d01b8152509061451f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b5081838161452957fe5b049392505050565b600082614540575060006145bd565b508181028183828161454e57fe5b04146040518060400160405280600681526020016530303830303160d01b815250906145bb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b505b92915050565b6000828211156040518060400160405280600681526020016518181c18181960d11b815250906146345760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b5050900390565b60408051808201909152600681526530303830303160d01b602082015282820190838210156145bb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610f3f578181015183820152602001610f27565b60075463ffffffff8216106146bf57613d6d565b6007546000190163ffffffff821614156147305760078054806146de57fe5b600082815260208120600560001990930192830201805463ffffffff1916815560018101829055600281018290559061471a600383018261497c565b50600401805463ffffffff191690559055613d6d565b63ffffffff81165b600754600019018110156147f9576007816001018154811061475657fe5b90600052602060002090600502016007828154811061477157fe5b600091825260209091208254600590920201805463ffffffff191663ffffffff9092169190911781556001808301548183015560028084015481840155600380850180546147d194928601939192811615610100026000190116046149c0565b506004918201549101805463ffffffff191663ffffffff909216919091179055600101614738565b50600780548061480557fe5b600082815260208120600560001990930192830201805463ffffffff19168155600181018290556002810182905590614841600383018261497c565b50600401805463ffffffff19169055905550565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106148965782800160ff198235161785556148c3565b828001600101855582156148c3579182015b828111156148c35782358255916020019190600101906148a8565b506148cf929150614a35565b5090565b6040518060a00160405280600063ffffffff168152602001600081526020016000815260200160608152602001600063ffffffff1681525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061494f57805160ff19168380011785556148c3565b828001600101855582156148c3579182015b828111156148c3578251825591602001919060010190614961565b50805460018160011615610100020316600290046000825580601f106149a25750613d6d565b601f016020900490600052602060002090810190613d6d9190614a35565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106149f957805485556148c3565b828001600101855582156148c357600052602060002091601f016020900482015b828111156148c3578254825591600101919060010190614a1a565b611d4091905b808211156148cf5760008155600101614a3b56fe6f6e6c79207072696365206d616e61676572206f72206f776e65722063616e2063616c6c20746869732066756e6374696f6e436865636b2074686520435954522062616c616e6365206f6e20796f75722077616c6c657465787465726e616c20636f6e74726163747320617265206e6f7420616c6c6f776564596f75206e65656420746f206465706f736974206174206c6561737420736f6d6520746f6b656e73596f75206e65656420746f207769746864726177206174206c6561737420736f6d6520746f6b656e73a26469706673582212205d2b32be9b840bdb01ee17c72260a6ff6dd2c8ef6097cb5573e4b9ea6e18bdee64736f6c63430006020033
Deployed Bytecode Sourcemap
6133:24948:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16735:264;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16735:264:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16735:264:0;;;;:::i;:::-;;;;;;;;;;;;;;;;30396:660;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30396:660:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;30396:660:0;;;;;;;;:::i;:::-;;15854:402;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15854:402:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15854:402:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15854:402:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13801:475;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13801:475:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;13801:475:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;13801:475:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13801:475:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;13801:475:0;;-1:-1:-1;13801:475:0;-1:-1:-1;13801:475:0;;;;:::i;9980:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9980:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9980:125:0;-1:-1:-1;;;;;9980:125:0;;:::i;23205:2056::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23205:2056:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23205:2056:0;;:::i;10347:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10347:109:0;;;:::i;17604:288::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17604:288:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17604:288:0;;;;;;;;;:::i;11579:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11579:100:0;;;:::i;:::-;;;;-1:-1:-1;;;;;11579:100:0;;;;;;;;;;;;;;20133:2850;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20133:2850:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;20133:2850:0;;;;;;;;;;-1:-1:-1;;;;;20133:2850:0;;;;;;;;;;:::i;25273:991::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25273:991:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25273:991:0;;;;;-1:-1:-1;;;;;25273:991:0;;;;;;;;;;:::i;15205:562::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15205:562:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15205:562:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15205:562:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;15205:562:0;;;;;;;;;;;;;;;;;;;;;12322:250;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12322:250:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;12322:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;12322:250:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;12322:250:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;12322:250:0;;-1:-1:-1;12322:250:0;-1:-1:-1;12322:250:0;;;;:::i;16360:255::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16360:255:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16360:255:0;;;;:::i;10924:196::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10924:196:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10924:196:0;-1:-1:-1;;;;;10924:196:0;;:::i;:::-;;;;;;;;;;;;;;;;;;28807:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28807:109:0;;;:::i;17147:279::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17147:279:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17147:279:0;;;;;;;;;:::i;458:65::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;458:65:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;458:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8314:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8314:31:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8314:31:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8314:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;578:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;578:20:0;;;:::i;10470:98::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10470:98:0;;;:::i;27743:334::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27743:334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27743:334:0;;:::i;18694:253::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18694:253:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18694:253:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28985:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28985:124:0;;;:::i;10720:90::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10720:90:0;;;:::i;11891:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11891:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11891:109:0;;;;:::i;14712:381::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14712:381:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14712:381:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14712:381:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14712:381:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14712:381:0;;-1:-1:-1;14712:381:0;-1:-1:-1;14712:381:0;;;;:::i;18431:255::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18431:255:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18431:255:0;;;;:::i;11363:198::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11363:198:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11363:198:0;-1:-1:-1;;;;;11363:198:0;;:::i;28089:494::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28089:494:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28089:494:0;;:::i;27094:315::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27094:315:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27094:315:0;;:::i;29633:210::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29633:210:0;;:::i;26278:804::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26278:804:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26278:804:0;;:::i;17955:366::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17955:366:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17955:366:0;;;;;;;;;;;;;;:::i;11739:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11739:93:0;;;:::i;12679:269::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12679:269:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12679:269:0;;;;:::i;10227:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10227:108:0;;;:::i;27417:311::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27417:311:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27417:311:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;27417:311:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;27417:311:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;27417:311:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;27417:311:0;;-1:-1:-1;27417:311:0;;-1:-1:-1;;;;;27417:311:0:i;11138:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11138:102:0;;;:::i;29921:397::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29921:397:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29921:397:0;;:::i;10582:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10582:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10582:118:0;;:::i;1415:238::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1415:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1415:238:0;-1:-1:-1;;;;;1415:238:0;;:::i;402:51::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;402:51:0;;;:::i;29127:404::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29127:404:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;29127:404:0;;;;;;;;:::i;10125:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10125:94:0;;;:::i;16735:264::-;16794:7;;16811:158;16832:11;:18;16828:22;;16811:158;;;16894:2;16873:23;;:11;16885:1;16873:14;;;;;;;;;;;;;;;;;;;;;:17;;;:23;16869:91;;;16921:11;16933:1;16921:14;;;;;;;;;;;;;;;;;;:25;;;16914:32;;;;;16869:91;16852:3;;16811:158;;;;7922:1;16977:16;;16735:264;;;;:::o;30396:660::-;1208:5;;1215:17;;;;;;;;;;;;-1:-1:-1;;;1215:17:0;;;;;-1:-1:-1;;;;;1208:5:0;1194:10;:19;1186:47;;;;-1:-1:-1;;;1186:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1186:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30536:1:::1;30517:16;:20;30509:74;;;;-1:-1:-1::0;;;30509:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30633:5;::::0;:30:::1;::::0;;-1:-1:-1;;;30633:30:0;;30657:4:::1;30633:30;::::0;::::1;::::0;;;30602:28:::1;::::0;-1:-1:-1;;;;;30633:5:0::1;::::0;:15:::1;::::0;:30;;;;;::::1;::::0;;;;;;;;:5;:30;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;30633:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30633:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;30633:30:0;;-1:-1:-1;30688:39:0;;::::1;30680:70;;;::::0;;-1:-1:-1;;;30680:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30680:70:0;;;;;;;;;;;;;::::1;;30819:5;::::0;:43:::1;::::0;;-1:-1:-1;;;30819:43:0;;-1:-1:-1;;;;;30819:43:0;;::::1;;::::0;::::1;::::0;;;;;;;;;:5;;;::::1;::::0;:14:::1;::::0;:43;;;;;::::1;::::0;;;;;;;;:5:::1;::::0;:43;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;30819:43:0;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;30819:43:0;::::1;;30815:228;;30986:39;::::0;;-1:-1:-1;;;30986:39:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30986:39:0;;;;;;;;;;;;;::::1;30815:228;-1:-1:-1::0;30883:44:0::1;::::0;;;;;-1:-1:-1;;;;;30883:44:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;30815:228;1240:1;30396:660:::0;;:::o;15854:402::-;15918:7;;15936:13;15918:7;;15966:228;15987:11;:18;15983:22;;15966:228;;;16049:2;16028:23;;:11;16040:1;16028:14;;;;;;;;;;;;;;;;;;;;;:17;;;:23;16024:162;;;16077:11;16089:1;16077:14;;;;;;;;;;;;;;;;;;:20;;;16099:11;16111:1;16099:14;;;;;;;;;;;;;;;;;;:25;;;16126:11;16138:1;16126:14;;;;;;;;;;;;;;;;;;:18;;16146:11;16158:1;16146:14;;;;;;;;;;;;;;;;;:20;:14;;;;;:20;;16069:98;;;;;;;-1:-1:-1;;16146:20:0;16069:98;;;16146:20;16069:98;;;;;;;;;;;;;;;;;;;;;;;;;;;16146:20;;;;;16069:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16024:162;16007:3;;15966:228;;;-1:-1:-1;;16231:7:0;;;;;;;;;7922:1;16231:7;;;7922:1;-1:-1:-1;7922:1:0;;-1:-1:-1;16231:7:0;-1:-1:-1;7989:7:0;15854:402;;;;;;:::o;13801:475::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13959:6:::1;13954:317;13975:11;:18:::0;13971:22;::::1;13954:317;;;14037:2;14016:23;;:11;14028:1;14016:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;::::1;;:23;14012:251;;;14080:5;14057:11;14069:1;14057:14;;;;;;;;;;;;;;;;;;:20;;:28;;;;14130:10;14102:11;14114:1;14102:14;;;;;;;;;;;;;;;;;;:25;;:38;;;;14178:3;;14157:11;14169:1;14157:14;;;;;;;;;;;;;;;;;;:18;;:24;;;;;;;:::i;:::-;;14221:5;14198:11;14210:1;14198:14;;;;;;;;;;;;;;;;;;:20;;;:28;;;;;;;;;;;;;;;;;;14243:7;;;14012:251;13995:3;;13954:317;;;;6615:1;13801:475:::0;;;;;;:::o;9980:125::-;1208:5;;1215:17;;;;;;;;;;;;-1:-1:-1;;;1215:17:0;;;;;-1:-1:-1;;;;;1208:5:0;1194:10;:19;1186:47;;;;-1:-1:-1;;;1186:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1186:47:0;-1:-1:-1;10066:13:0::1;:31:::0;;-1:-1:-1;;;;;;10066:31:0::1;-1:-1:-1::0;;;;;10066:31:0;;;::::1;::::0;;;::::1;::::0;;9980:125::o;23205:2056::-;23273:7;7051:22;7062:10;7051;:22::i;:::-;7050:23;7029:107;;;;-1:-1:-1;;;7029:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23349:11:::1;::::0;:29:::1;::::0;;-1:-1:-1;;;23349:29:0;;::::1;::::0;::::1;::::0;;;;;23382:10:::1;::::0;-1:-1:-1;;;;;23349:11:0::1;::::0;:19:::1;::::0;:29;;;;;::::1;::::0;;;;;;;;:11;:29;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;23349:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23349:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;23349:29:0;-1:-1:-1;;;;;23349:43:0::1;;23341:74;;;::::0;;-1:-1:-1;;;23341:74:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23341:74:0;;;;;;;;;;;;;::::1;;23426:21;23450:31;23472:8;23450:21;:31::i;:::-;23426:55:::0;-1:-1:-1;23500:36:0::1;::::0;::::1;7881:7;23500:36;;23492:73;;;::::0;;-1:-1:-1;;;23492:73:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23576:17;23596:32;23613:14;23596:16;:32::i;:::-;23576:52:::0;-1:-1:-1;23648:22:0;23640:54:::1;;;::::0;;-1:-1:-1;;;23640:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23640:54:0;;;;;;;;;;;;;::::1;;23723:5;::::0;:27:::1;::::0;;-1:-1:-1;;;23723:27:0;;23739:10:::1;23723:27;::::0;::::1;::::0;;;23753:9;;-1:-1:-1;;;;;23723:5:0::1;::::0;:15:::1;::::0;:27;;;;;::::1;::::0;;;;;;;;:5;:27;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;23723:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23723:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;23723:27:0;:39:::1;23715:81;;;::::0;;-1:-1:-1;;;23715:81:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;23821:11;::::0;:26:::1;::::0;;-1:-1:-1;;;23821:26:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;23821:11:0;;::::1;::::0;:16:::1;::::0;:26;;;;;:11:::1;::::0;:26;;;;;;;;:11;;:26;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;23821:26:0;;;;;;;;;;;;;;23817:288;;24059:34;::::0;;-1:-1:-1;;;24059:34:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24059:34:0;;;;;;;;;;;;;::::1;23817:288;23868:66;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;23901:10:::1;23868:66:::0;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;24174:5;::::0;:38:::1;::::0;;-1:-1:-1;;;24174:38:0;;24189:10:::1;24174:38;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;24174:5:0;;::::1;::::0;:14:::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:5:::1;::::0;:38;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;24174:38:0;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;24174:38:0;::::1;;24170:300;;24397:37;::::0;;-1:-1:-1;;;24397:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24397:37:0;;;;;;;;;;;;;::::1;24170:300;-1:-1:-1::0;24299:64:0::1;::::0;;::::1;::::0;::::1;::::0;;24330:10:::1;24299:64;::::0;::::1;::::0;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;24495:6;24490:201;24511:11;:18:::0;24507:22;::::1;24490:201;;;24573:14;24552:35;;:11;24564:1;24552:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;::::1;;:35;24548:132;;;7989:7;24609:33;;:11;24621:1;24609:14;;;;;;;;;::::0;;;::::1;::::0;;;:20:::1;:14;::::0;;::::1;;:20;::::0;::::1;;:33;24605:61;;24644:11;24656:1;24644:14;;;;;;;;;::::0;;;::::1;::::0;;;:20:::1;:14;::::0;;::::1;;:20;:22:::0;;::::1;::::0;;::::1;::::0;::::1;;-1:-1:-1::0;;24644:22:0;;::::1;;::::0;;24605:61:::1;24531:3;;24490:201;;;-1:-1:-1::0;24714:15:0::1;::::0;-1:-1:-1;;;24714:15:0;::::1;;;24710:546;;;24788:6;24783:462;24804:11;:18:::0;24800:22;::::1;24783:462;;;24870:14;24849:35;;:11;24861:1;24849:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;::::1;;:35;24845:385;;;24906:14;24923:46;24957:11;;24923:29;24948:3;24923:11;24935:1;24923:14;;;;;;;;;;;;;;;;;;:20;;;:24;;:29;;;;:::i;:::-;:33:::0;:46:::1;:33;:46;:::i;:::-;24906:63;;25013:32;25038:6;25013:11;25025:1;25013:14;;;;;;;;;;;;;;;;;;:20;;;:24;;:32;;;;:::i;:::-;24990:11;25002:1;24990:14;;;;;;;;;;;;;;;;;;:20;;:55;;;;25075:51;25114:11;;25075:34;25105:3;25075:11;25087:1;25075:14;;;;;;;;;;;;;;;;;;:25;;;:29;;:34;;;;:::i;:51::-;25066:60;;25175:37;25205:6;25175:11;25187:1;25175:14;;;;;;;;;;;;;;;;;;:25;;;:29;;:37;;;;:::i;:::-;25147:11;25159:1;25147:14;;;;;;;;;;;;;;;;;;:25;;:65;;;;24845:385;;24824:3;;24783:462;;;;24710:546;7149:1;;23205:2056:::0;;;:::o;10347:109::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10425:15:::1;:23:::0;;-1:-1:-1;;;;10425:23:0::1;::::0;;10347:109::o;17604:288::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17706:6:::1;17701:186;17722:11;:18:::0;17718:22;::::1;17701:186;;;17784:2;17763:23;;:11;17775:1;17763:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;::::1;;:23;17759:119;;;17832:9;17804:11;17816:1;17804:14;;;;;;;;;;;;;;;;;;:25;;:37;;;;17858:7;;;17759:119;17742:3;;17701:186;;6615:1;17604:288:::0;;:::o;11579:100::-;11653:18;;-1:-1:-1;;;;;11653:18:0;11579:100;;:::o;20133:2850::-;20570:7;7051:22;7062:10;7051;:22::i;:::-;7050:23;7029:107;;;;-1:-1:-1;;;7029:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20624:1:::1;20598:23;20611:9;20598:12;:23::i;:::-;:27;;;20589:53;;;::::0;;-1:-1:-1;;;20589:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;20589:53:0;;;;;;;;;;;;;::::1;;20655:16;20674:23;20687:9;20674:12;:23::i;:::-;20655:42:::0;-1:-1:-1;20712:21:0;20704:65:::1;;;::::0;;-1:-1:-1;;;20704:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20797:1;20784:10;:14;20776:56;;;::::0;;-1:-1:-1;;;20776:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20918:8;20904:10;:22;20896:31;;;::::0;::::1;;21014:5;::::0;:27:::1;::::0;;-1:-1:-1;;;21014:27:0;;21030:10:::1;21014:27;::::0;::::1;::::0;;;20994:17:::1;::::0;-1:-1:-1;;;;;21014:5:0::1;::::0;:15:::1;::::0;:27;;;;;::::1;::::0;;;;;;;;:5;:27;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;21014:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21014:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;21014:27:0;;-1:-1:-1;21088:23:0;;::::1;;21080:73;;;;-1:-1:-1::0;;;21080:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21201:5;::::0;:42:::1;::::0;;-1:-1:-1;;;21201:42:0;;21217:10:::1;21201:42;::::0;::::1;::::0;21237:4:::1;21201:42:::0;;;;;;21181:17:::1;::::0;-1:-1:-1;;;;;21201:5:0::1;::::0;:15:::1;::::0;:42;;;;;::::1;::::0;;;;;;;;:5;:42;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;21201:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21201:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;21201:42:0;;-1:-1:-1;21264:23:0;;::::1;;21256:60;;;::::0;;-1:-1:-1;;;21256:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;21361:23;21375:8;21361:13;:23::i;:::-;21353:59;;;::::0;;-1:-1:-1;;;21353:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;21353:59:0;;;;;;;;;;;;;::::1;;21494:5;::::0;:57:::1;::::0;;-1:-1:-1;;;21494:57:0;;21513:10:::1;21494:57;::::0;::::1;::::0;21533:4:::1;21494:57:::0;;;;;;;;;;;;-1:-1:-1;;;;;21494:5:0;;::::1;::::0;:18:::1;::::0;:57;;;;;::::1;::::0;;;;;;;;;:5:::1;::::0;:57;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;21494:57:0;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;21494:57:0;::::1;;21490:250;;21675:37;::::0;;-1:-1:-1;;;21675:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;21675:37:0;;;;;;;;;;;;;::::1;21490:250;-1:-1:-1::0;21591:58:0::1;::::0;;::::1;::::0;::::1;::::0;;21616:10:::1;21591:58;::::0;::::1;::::0;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;21789:11;::::0;-1:-1:-1;;;;;21789:11:0::1;:16;21806:3:::0;21810:8;21820:21:::1;21831:9:::0;21820:10:::1;:21::i;:::-;21789:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;21789:53:0::1;-1:-1:-1::0;;;;;21789:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;21789:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;21789:53:0;;;;;;;;;;;;;;21785:370;;22119:28;::::0;;-1:-1:-1;;;22119:28:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22119:28:0;;;;;;;;;;;;;::::1;21785:370;21853:13;:15:::0;;::::1;;::::0;;21957:61:::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;21985:10:::1;21957:61:::0;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;22172:6;22167:180;22188:11;:18:::0;22184:22;::::1;22167:180;;;22246:9;22225:30;;:11;22237:1;22225:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;::::1;;:30;22221:119;;;7989:7;22273:33;;:11;22285:1;22273:14;;;;;;;;;::::0;;;::::1;::::0;;;:20:::1;:14;::::0;;::::1;;:20;::::0;::::1;;:33;22269:61;;22308:11;22320:1;22308:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:20;;:22:::0;;-1:-1:-1;;22308:22:0;::::1;;::::0;;::::1;-1:-1:-1::0;;22308:22:0;;;::::1;;::::0;;22269:61:::1;22208:3;;22167:180;;;-1:-1:-1::0;22363:15:0::1;::::0;-1:-1:-1;;;22363:15:0;::::1;;;22359:503;;;22433:6;22428:427;22449:11;:18:::0;22445:22;::::1;22428:427;;;22511:9;22490:30;;:11;22502:1;22490:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;::::1;;:30;22486:360;;;22538:14;22555:46;22589:11;;22555:29;22580:3;22555:11;22567:1;22555:14;;;;;;;:46;22538:63;;22641:32;22666:6;22641:11;22653:1;22641:14;;;;;;;;;;;;;;;;;;:20;;;:24;;:32;;;;:::i;:::-;22618:11;22630:1;22618:14;;;;;;;;;;;;;;;;;;:20;;:55;;;;22699:51;22738:11;;22699:34;22729:3;22699:11;22711:1;22699:14;;;;;;;:51;22690:60;;22795:37;22825:6;22795:11;22807:1;22795:14;;;;;;;;;;;;;;;;;;:25;;;:29;;:37;;;;:::i;:::-;22767:11;22779:1;22767:14;;;;;;;;;;;;;;;;;;:25;;:65;;;;22486:360;;22469:3;;22428:427;;;;22359:503;7149:1;;;20133:2850:::0;;;;;;:::o;25273:991::-;6488:13;;25553:7;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25572:16:::1;25591:23;25604:9;25591:12;:23::i;:::-;25572:42:::0;-1:-1:-1;25629:21:0;25621:65:::1;;;::::0;;-1:-1:-1;;;25621:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25701:23;25715:8;25701:13;:23::i;:::-;25693:59;;;::::0;;-1:-1:-1;;;25693:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25693:59:0;;;;;;;;;;;;;::::1;;25805:11;::::0;-1:-1:-1;;;;;25805:11:0::1;:16;25822:3:::0;25826:8;25836:21:::1;25847:9:::0;25836:10:::1;:21::i;:::-;25805:53;;;;;;;;;;;;;-1:-1:-1::0;;;;;25805:53:0::1;-1:-1:-1::0;;;;;25805:53:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;25805:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;25805:53:0;;;;;;;;;;;;;;25801:356;;26121:28;::::0;;-1:-1:-1;;;26121:28:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;26121:28:0;;;;;;;;;;;;;::::1;25801:356;25869:13;:15:::0;;::::1;;::::0;;25973:47:::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;25973:47:0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;26176:8:0;;25273:991;-1:-1:-1;;;25273:991:0:o;15205:562::-;15261:15;15278:16;15296;15322:19;15357:11;:18;;;;15344:32;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;15344:32:0;;15322:54;;15385:23;15425:11;:18;;;;15411:33;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;15411:33:0;;15385:59;;15453:28;15498:11;:18;;;;15484:33;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;15484:33:0;-1:-1:-1;15453:64:0;-1:-1:-1;15531:6:0;15526:194;15547:11;:18;15543:22;;15526:194;;;15593:11;15605:1;15593:14;;;;;;;;;;;;;;;;;;;;;:17;15584:6;;15593:17;;;;;15584:3;;15588:1;;15584:6;;;;;;;;;;;:26;;;;;;;;;;;15635:11;15647:1;15635:14;;;;;;;;;;;;;;;;;;:20;;;15623:6;15630:1;15623:9;;;;;;;;;;;;;:32;;;;;15685:11;15697:1;15685:14;;;;;;;;;;;;;;;;;;:25;;;15668:11;15680:1;15668:14;;;;;;;;;;;;;;;;;:42;15567:3;;15526:194;;;-1:-1:-1;15736:3:0;;-1:-1:-1;15741:6:0;-1:-1:-1;15749:11:0;-1:-1:-1;15205:562:0;;;:::o;12322:250::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12468:22:::1;;:::i;:::-;12493:42;;;;;;;;12504:2;12493:42;;;;;;12507:5;12493:42;;;;12513:10;12493:42;;;;12524:3;;12493:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;-1:-1;12493:42:0;;;-1:-1:-1;;;12493:42:0::1;::::0;;::::1;;::::0;;::::1;::::0;12544:11:::1;27:10:-1::0;;39:1:::1;23:18:::0;::::1;45:23:::0;;12544:22:0;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;12544:22:0::1;::::0;;;::::1;;::::0;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;12544:22:0;;;;::::1;::::0;;;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12544:22:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;12544:22:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;;12322:250:0:o;16360:255::-;16415:7;;16432:153;16453:11;:18;16449:22;;16432:153;;;16515:2;16494:23;;:11;16506:1;16494:14;;;;;;;;;;;;;;;;;;;;;:17;;;:23;16490:86;;;16542:11;16554:1;16542:14;;;;;;;;;;;;;;;;;;:20;;;16535:27;;;;;16490:86;16473:3;;16432:153;;10924:196;11002:4;1208:5;;1215:17;;;;;;;;;;;;-1:-1:-1;;;1215:17:0;;;;;-1:-1:-1;;;;;1208:5:0;1194:10;:19;1186:47;;;;-1:-1:-1;;;1186:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1186:47:0;-1:-1:-1;11024:19:0::1;:38:::0;;-1:-1:-1;;;;;;11024:38:0;;::::1;-1:-1:-1::0;;;;;11024:38:0;;::::1;;::::0;;;;11073:5:::1;:39:::0;;11092:19;;;::::1;11073:39:::0;::::1;;::::0;;;;10924:196::o;28807:109::-;28887:21;28807:109;:::o;17147:279::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17245:6:::1;17240:181;17261:11;:18:::0;17257:22;::::1;17240:181;;;17323:2;17302:23;;:11;17314:1;17302:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;::::1;;:23;17298:114;;;17366:9;17343:11;17355:1;17343:14;;;;;;;;;;;;;;;;;;:20;;:32;;;;17392:7;;;17298:114;17281:3;;17240:181;;458:65:::0;;;;;;;;;;;;;;-1:-1:-1;;;458:65:0;;;;:::o;8314:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8314:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8314:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8314:31:0;;;;;;;-1:-1:-1;;8314:31:0;;;:::o;578:20::-;;;-1:-1:-1;;;;;578:20:0;;:::o;10470:98::-;10545:15;;-1:-1:-1;;;10545:15:0;;;;;10470:98::o;27743:334::-;27822:11;;:29;;;-1:-1:-1;;;27822:29:0;;;;;;;;;;27804:4;;-1:-1:-1;;;;;27822:11:0;;:20;;:29;;;;;27804:4;;27822:29;;;;;;;:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;27822:29:0;;;;;;;;;;;;;;39:16:-1;36:1;17:17;2:54;101:4;27822:29:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;27822:29:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;27822:29:0;;420:4:-1;411:14;;;;27822:29:0;;;;;411:14:-1;27822:29:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27822:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27818:254;;-1:-1:-1;27999:4:0;27992:11;;27818:254;;27957:5;27950:12;;;;18694:253;18749:6;;18765:152;18786:11;:18;18782:22;;18765:152;;;18848:2;18827:23;;:11;18839:1;18827:14;;;;;;;;;;;;;;;;;;;;;:17;;;:23;18823:85;;;18874:11;18886:1;18874:14;;;;;;;;;;;;;;;;:20;:14;;;;;:20;;;;;-1:-1:-1;18867:27:0;;-1:-1:-1;18867:27:0;18823:85;18806:3;;18765:152;;;-1:-1:-1;7989:7:0;;18694:253;-1:-1:-1;;18694:253:0:o;28985:124::-;29071:5;;:30;;;-1:-1:-1;;;29071:30:0;;29095:4;29071:30;;;;;;29044:7;;-1:-1:-1;;;;;29071:5:0;;:15;;:30;;;;;;;;;;;;;;:5;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;29071:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29071:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29071:30:0;;-1:-1:-1;28985:124:0;:::o;10720:90::-;10791:11;;10720:90;:::o;11891:109::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11973:21:::1;;:13;:21:::0;11891:109::o;14712:381::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14911:2:::1;14885:11;14897:7;14885:20;;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:28:::0;;-1:-1:-1;;14885:28:0::1;;::::0;;::::1;;::::0;;14921:11:::1;:20:::0;;14950:5;;14921:20;::::1;::::0;;::::1;;;;;;;;;;;;;;;:26;;:34;;;;14997:10;14963:11;14975:7;14963:20;;;;;;;;;;;;;;;;;;;;:31;;:44;;;;15042:3;;15015:11;15027:7;15015:20;;;;;;;;;;;;;;;;;;;;:24;;:30;;;;;;;:::i;:::-;;15082:5;15053:11;15065:7;15053:20;;;;;;;;;;;;;;;;;;;;:26;;;:34;;;;;;;;;;;;;;;;;;14712:381:::0;;;;;;;:::o;18431:255::-;18484:13;18512:6;18507:151;18528:11;:18;18524:22;;18507:151;;;18590:2;18569:23;;:11;18581:1;18569:14;;;;;;;;;;;;;;;;;;;;;:17;;;:23;18565:84;;;18617:11;18629:1;18617:14;;;;;;;;;;;;;;;;;:18;:14;;;;;:18;18610:25;;;;;;;-1:-1:-1;;18610:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18617:18;18610:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18565:84;18548:3;;18507:151;;;-1:-1:-1;;18673:7:0;;;;;;;;;-1:-1:-1;18673:7:0;;18431:255;;;:::o;11363:198::-;11438:4;1208:5;;1215:17;;;;;;;;;;;;-1:-1:-1;;;1215:17:0;;;;;-1:-1:-1;;;;;1208:5:0;1194:10;:19;1186:47;;;;-1:-1:-1;;;1186:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1186:47:0;-1:-1:-1;11460:18:0::1;:35:::0;;-1:-1:-1;;;;;;11460:35:0;;::::1;-1:-1:-1::0;;;;;11460:35:0;;::::1;;::::0;;;;-1:-1:-1;11506:47:0;;11534:18;;;::::1;11506:47:::0;::::1;;::::0;;;;11363:198::o;28089:494::-;28195:7;;;;;;;;28158;28195;;;28215:11;;:29;;-1:-1:-1;;;28215:29:0;;;;;;;;;;28158:7;;-1:-1:-1;;;;;28215:11:0;;;;:20;;:29;;;;;28158:7;;28215:29;;;;;;;;:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;28215:29:0;;;;;;;;;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28215:29:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;28215:29:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;28215:29:0;;420:4:-1;411:14;;;;28215:29:0;;;;;411:14:-1;28215:29:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28215:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28211:360;;-1:-1:-1;7881:7:0;;-1:-1:-1;28536:25:0;;28211:360;-1:-1:-1;28262:11:0;;:29;;;-1:-1:-1;;;28262:29:0;;;;;;;;;;-1:-1:-1;;;;;28262:11:0;;;;:20;;:29;;;;;:11;;:29;;;;;;;;:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;28262:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28262:29:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;28262:29:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;28262:29:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;28262:29:0;;420:4:-1;411:14;;;;28262:29:0;;;;;411:14:-1;28262:29:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;28262:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28256:35;;28302:16;28321:22;28339:3;28321:17;:22::i;:::-;28302:41;-1:-1:-1;28358:31:0;;;7881:7;28358:31;28354:155;;;-1:-1:-1;7881:7:0;;-1:-1:-1;28405:25:0;;-1:-1:-1;28405:25:0;28354:155;28470:27;28487:9;28470:16;:27::i;:::-;28463:34;;;;;;27094:315;27198:7;;;;;;;;27162:6;27198:7;;;27218:11;;:29;;-1:-1:-1;;;27218:29:0;;;;;;;;;;27162:6;;-1:-1:-1;;;;;27218:11:0;;;;:20;;:29;;;;;27162:6;;27218:29;;;;;;;;:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;27218:29:0;;;;;;;;;;;;;;39:16:-1;36:1;17:17;2:54;101:4;27218:29:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;27218:29:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;27218:29:0;;420:4:-1;411:14;;;;27218:29:0;;;;;411:14:-1;27218:29:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27218:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27214:183;;7881:7;27362:25;;;;;27214:183;-1:-1:-1;27265:11:0;;:29;;;-1:-1:-1;;;27265:29:0;;;;;;;;;;-1:-1:-1;;;;;27265:11:0;;;;:20;;:29;;;;;:11;;:29;;;;;;;;:11;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;27265:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27265:29:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;27265:29:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;27265:29:0;;;;;;;;;;;;;-1:-1:-1;;;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;27265:29:0;;420:4:-1;411:14;;;;27265:29:0;;;;;411:14:-1;27265:29:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27265:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27259:35;;27312:22;27330:3;27312:17;:22::i;:::-;27305:29;;;;;29633:210;1208:5;;1215:17;;;;;;;;;;;;-1:-1:-1;;;1215:17:0;;;;;-1:-1:-1;;;;;1208:5:0;1194:10;:19;1186:47;;;;-1:-1:-1;;;1186:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1186:47:0;;29734:9:::1;29713:6;29721:8;29713:17;:30;29705:72;;;::::0;;-1:-1:-1;;;29705:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29817:5;::::0;29793:30:::1;::::0;;;;;-1:-1:-1;;;;;29817:5:0;;::::1;29793:30;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;29633:210:::0;:::o;26278:804::-;6488:13;;26357:7;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26414:21:::1;26438:31;26460:8;26438:21;:31::i;:::-;26414:55;;26612:17;26632:32;26649:14;26632:16;:32::i;:::-;26803:11;::::0;:26:::1;::::0;;-1:-1:-1;;;26803:26:0;;::::1;::::0;::::1;::::0;;;;;26612:52;;-1:-1:-1;;;;;;26803:11:0;;::::1;::::0;:16:::1;::::0;:26;;;;;:11:::1;::::0;:26;;;;;;;;:11;;:26;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;26803:26:0;;;;;;;;;;;;;;26799:270;;27023:34;::::0;;-1:-1:-1;;;27023:34:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27023:34:0;;;;;;;;;;;;;::::1;26799:270;26850:48;::::0;;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;::::0;;;;;;;::::1;6615:1;;26278:804:::0;;;:::o;17955:366::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18081:6:::1;18076:240;18097:11;:18:::0;18093:22;::::1;18076:240;;;18159:2;18138:23;;:11;18150:1;18138:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;::::1;;:23;18134:173;;;18202:9;18179:11;18191:1;18179:14;;;;;;;;;;;;;;;;;;:20;;:32;;;;18256:14;18228:11;18240:1;18228:14;;;;;;;;;;;;;;;;;;:25;;:42;;;;18287:7;;;18134:173;18117:3;;18076:240;;;;17955:366:::0;;;:::o;11739:93::-;11813:13;;11739:93;:::o;12679:269::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12766:8:::1;12761:182;12784:11;:18:::0;12780:22:::1;::::0;::::1;;12761:182;;;12846:2;12825:23;;:11;12837:1;12825:14;;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:17:::0;::::1;;:23;12821:114;;;12866:26;12890:1;12866:23;:26::i;:::-;12915:7;;;12821:114;12804:3;;12761:182;;6615:1;12679:269:::0;:::o;10227:108::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10305:15:::1;:22:::0;;-1:-1:-1;;;;10305:22:0::1;-1:-1:-1::0;;;10305:22:0::1;::::0;;10227:108::o;27417:311::-;27485:6;;27501:188;27522:11;:18;27518:22;;27501:188;;;27619:3;27603:21;;;;;;27579:11;27591:1;27579:14;;;;;;;;;;;;;;;;;;:18;;27563:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:61;27559:121;;;27649:11;27661:1;27649:14;;;;;;;;;;;;;;;;;;;;;:17;;;;-1:-1:-1;27642:24:0;;-1:-1:-1;27642:24:0;27559:121;27542:3;;27501:188;;11138:102;11213:19;;-1:-1:-1;;;;;11213:19:0;11138:102;:::o;29921:397::-;1208:5;;1215:17;;;;;;;;;;;;-1:-1:-1;;;1215:17:0;;;;;-1:-1:-1;;;;;1208:5:0;1194:10;:19;1186:47;;;;-1:-1:-1;;;1186:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1186:47:0;;30007:1:::1;29998:6;:10;29990:63;;;;-1:-1:-1::0;;;29990:63:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30084:5;::::0;:42:::1;::::0;;-1:-1:-1;;;30084:42:0;;30100:10:::1;30084:42;::::0;::::1;::::0;30120:4:::1;30084:42:::0;;;;;;30064:17:::1;::::0;-1:-1:-1;;;;;30084:5:0::1;::::0;:15:::1;::::0;:42;;;;;::::1;::::0;;;;;;;;:5;:42;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;30084:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30084:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;30084:42:0;;-1:-1:-1;30145:19:0;;::::1;;30137:57;;;::::0;;-1:-1:-1;;;30137:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30205:5;::::0;:53:::1;::::0;;-1:-1:-1;;;30205:53:0;;30224:10:::1;30205:53;::::0;::::1;::::0;30244:4:::1;30205:53:::0;;;;;;;;;;;;-1:-1:-1;;;;;30205:5:0;;::::1;::::0;:18:::1;::::0;:53;;;;;::::1;::::0;;;;;;;;;:5:::1;::::0;:53;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;30205:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30205:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;;30304:5:0::1;::::0;30280:30:::1;::::0;;;;;-1:-1:-1;;;;;30304:5:0;;::::1;30205:53;30280:30:::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;1240:1;29921:397:::0;:::o;10582:118::-;6488:13;;-1:-1:-1;;;;;6488:13:0;6474:10;:27;;:50;;-1:-1:-1;6519:5:0;;-1:-1:-1;;;;;6519:5:0;6505:10;:19;6474:50;6454:148;;;;-1:-1:-1;;;6454:148:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10669:11:::1;:23:::0;10582:118::o;1415:238::-;1208:5;;1215:17;;;;;;;;;;;;-1:-1:-1;;;1215:17:0;;;;;-1:-1:-1;;;;;1208:5:0;1194:10;:19;1186:47;;;;-1:-1:-1;;;1186:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1186:47:0;-1:-1:-1;1541:31:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;1541:31:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;1516:23:0;::::1;1508:65;;;::::0;-1:-1:-1;;;1508:65:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;27:10:-1;;8:100:::1;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;1508:65:0;-1:-1:-1::0;1606:5:0::1;::::0;;1585:38:::1;::::0;-1:-1:-1;;;;;1585:38:0;;::::1;::::0;1606:5;::::1;::::0;1585:38:::1;::::0;::::1;1630:5;:17:::0;;-1:-1:-1;;;;;;1630:17:0::1;-1:-1:-1::0;;;;;1630:17:0;;;::::1;::::0;;;::::1;::::0;;1415:238::o;402:51::-;;;;;;;;;;;;;;-1:-1:-1;;;402:51:0;;;;:::o;29127:404::-;1208:5;;1215:17;;;;;;;;;;;;-1:-1:-1;;;1215:17:0;;;;;-1:-1:-1;;;;;1208:5:0;1194:10;:19;1186:47;;;;-1:-1:-1;;;1186:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1186:47:0;;29248:6:::1;29223:21;:31;;29215:62;;;::::0;;-1:-1:-1;;;29215:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29215:62:0;;;;;;;;;;;;;::::1;;29375:29;::::0;29288:12:::1;::::0;-1:-1:-1;;;;;29375:11:0;::::1;::::0;29393:6;;29288:12;29375:29;29288:12;29375:29;29393:6;29375:11;:29:::1;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;29361:43:0;;;;;29423:7;29415:36;;;::::0;;-1:-1:-1;;;29415:36:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29415:36:0;;;;;;;;;;;;;::::1;;29489:25;::::0;;;;;-1:-1:-1;;;;;29489:25:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;1240:1;29127:404:::0;;:::o;10125:94::-;10198:13;;-1:-1:-1;;;;;10198:13:0;10125:94;:::o;6802:188::-;6924:18;6973:8;;;;;6802:188::o;3138:409::-;3241:16;3362:1;3351:8;:12;3365:16;;;;;;;;;;;;;-1:-1:-1;;;3365:16:0;;;3343:39;;;;;-1:-1:-1;;;3343:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3343:39:0;;3412:8;3400:9;:20;;;;;;;3138:409;-1:-1:-1;;;3138:409:0:o;2420:485::-;2522:15;2761:13;2757:49;;-1:-1:-1;2797:1:0;2790:8;;2757:49;-1:-1:-1;2824:19:0;;;2835:8;2824;:19;:8;2858:18;;;;;:30;2890:8;;;;;;;;;;;;;-1:-1:-1;;;2890:8:0;;;2850:49;;;;;-1:-1:-1;;;2850:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;2850:49:0;;2420:485;;;;;:::o;3786:248::-;3891:18;3944:8;3929:11;:23;;3954:31;;;;;;;;;;;;;-1:-1:-1;;;3954:31:0;;;3921:65;;;;;-1:-1:-1;;;3921:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3921:65:0;-1:-1:-1;;4006:22:0;;;3786:248::o;4187:197::-;4369:8;;;;;;;;;;;;-1:-1:-1;;;4369:8:0;;;;4318:19;;;;4352:15;;;;4344:34;;;;-1:-1:-1;;;4344:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;13069:357:0;13146:11;:18;13137:27;;;;13133:40;;13166:7;;13133:40;13193:11;:18;-1:-1:-1;;13193:21:0;13184:30;;;;13180:241;;;13227:11;:17;;;;;;;;;;;;;;;-1:-1:-1;;13227:17:0;;;;;;;;;-1:-1:-1;;13227:17:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13227:17:0;;;;-1:-1:-1;;13227:17:0;;;;;13180:241;;;13276:14;;;13271:113;13296:11;:18;-1:-1:-1;;13296:20:0;13292:24;;13271:113;;;13355:11;13367:1;13369;13367:3;13355:16;;;;;;;;;;;;;;;;;;13338:11;13350:1;13338:14;;;;;;;;;;;;;;;;:33;;:14;;;;;:33;;-1:-1:-1;;13338:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13338:33:0;;;;:::i;:::-;-1:-1:-1;13338:33:0;;;;;;;;;-1:-1:-1;;13338:33:0;;;;;;;;;;;;13318:3;13271:113;;;;13395:11;:17;;;;;;;;;;;;;;;-1:-1:-1;;13395:17:0;;;;;;;;;-1:-1:-1;;13395:17:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13395:17:0;;;;-1:-1:-1;;13395:17:0;;;;;13069:357;:::o;6133:24948::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6133:24948:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6133:24948:0;;;-1:-1:-1;6133:24948:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://5d2b32be9b840bdb01ee17c72260a6ff6dd2c8ef6097cb5573e4b9ea6e18bdee
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.