More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 950 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 38406856 | 686 days ago | IN | 0 POL | 0.00173278 | ||||
Join Game | 38406815 | 686 days ago | IN | 1.5 POL | 0.01970001 | ||||
Claim | 38406814 | 686 days ago | IN | 0 POL | 0.00170414 | ||||
Claim | 38406796 | 686 days ago | IN | 0 POL | 0.00170962 | ||||
Claim | 36709649 | 729 days ago | IN | 0 POL | 0.00111969 | ||||
Dev Claim | 36704019 | 729 days ago | IN | 0 POL | 0.00347021 | ||||
Join Game | 35894743 | 749 days ago | IN | 1.5 POL | 0.00314186 | ||||
Claim | 35639128 | 755 days ago | IN | 0 POL | 0.01598119 | ||||
Join Game | 35141965 | 767 days ago | IN | 1.5 POL | 0.01127044 | ||||
Join Game | 35117262 | 768 days ago | IN | 1.5 POL | 0.00586203 | ||||
Join Game | 35113657 | 768 days ago | IN | 1.5 POL | 0.02032437 | ||||
Claim | 35031101 | 770 days ago | IN | 0 POL | 0.00504021 | ||||
Claim | 35031101 | 770 days ago | IN | 0 POL | 0.00487755 | ||||
Join Game | 34915499 | 773 days ago | IN | 1.5 POL | 0.00621415 | ||||
Claim | 34858244 | 774 days ago | IN | 0 POL | 0.00361909 | ||||
Join Game | 34579419 | 781 days ago | IN | 1.5 POL | 0.0213832 | ||||
Join Game | 34569747 | 781 days ago | IN | 1.5 POL | 0.03232068 | ||||
Join Game | 34555400 | 781 days ago | IN | 1.5 POL | 0.02951513 | ||||
Claim | 34555201 | 781 days ago | IN | 0 POL | 0.00370659 | ||||
Join Game | 34540593 | 782 days ago | IN | 1.5 POL | 0.01665365 | ||||
Claim | 34540405 | 782 days ago | IN | 0 POL | 0.00792687 | ||||
Claim | 34540404 | 782 days ago | IN | 0 POL | 0.00571373 | ||||
Join Game | 34514114 | 782 days ago | IN | 1.5 POL | 0.01045715 | ||||
Join Game | 34510149 | 783 days ago | IN | 1.5 POL | 0.01532478 | ||||
Claim | 34509944 | 783 days ago | IN | 0 POL | 0.00615314 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
38406856 | 686 days ago | 0.68 POL | ||||
38406814 | 686 days ago | 4.08782608 POL | ||||
38406796 | 686 days ago | 2.72782608 POL | ||||
36709649 | 729 days ago | 17.68 POL | ||||
36704019 | 729 days ago | 20.52 POL | ||||
36704019 | 729 days ago | 41.04 POL | ||||
36704019 | 729 days ago | 41.04 POL | ||||
35639128 | 755 days ago | 1.36 POL | ||||
35031101 | 770 days ago | 3.06 POL | ||||
34858244 | 774 days ago | 18.36782608 POL | ||||
34555201 | 781 days ago | 2.72782608 POL | ||||
34540405 | 782 days ago | 0.68 POL | ||||
34540404 | 782 days ago | 1.36 POL | ||||
34509944 | 783 days ago | 1.36 POL | ||||
34495458 | 783 days ago | 2.04782608 POL | ||||
34447131 | 784 days ago | 3.06 POL | ||||
34429717 | 785 days ago | 0.68 POL | ||||
34429699 | 785 days ago | 3.06 POL | ||||
34429529 | 785 days ago | 0.68 POL | ||||
34429433 | 785 days ago | 3.06 POL | ||||
34429425 | 785 days ago | 3.06 POL | ||||
34429377 | 785 days ago | 1.36 POL | ||||
34429312 | 785 days ago | 0.68 POL | ||||
34410994 | 785 days ago | 2.72782608 POL | ||||
34410981 | 785 days ago | 2.04782608 POL |
Loading...
Loading
Contract Name:
MarcoBudsGame
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.15; import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol"; import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; /* __ ___ __ __ / |/ /____ _ _____ _____ ____ / /_ __ __ ____/ /_____ / /|_/ // __ `// ___// ___// __ \ / __ \ / / / // __ // ___/ / / / // /_/ // / / /__ / /_/ // /_/ // /_/ // /_/ /(__ ) /_/ /_/ \__,_//_/ \___/ \____//_.___/ \__,_/ \__,_//____/ ______ / ____/____ _ ____ ___ ___ / / __ / __ `// __ `__ \ / _ \ / /_/ // /_/ // / / / / // __/ \____/ \__,_//_/ /_/ /_/ \___/ Discord: https://discord.io/Marcobuds Twitter: https://twitter.com/MarcobudsNft Website: https://marcobuds.io */ interface ERC721Interface{ function ownerOf(uint256) external view returns (address); } contract MarcoBudsGame is VRFConsumerBaseV2,Pausable,Ownable { // [Chainlink VRF config block] VRFCoordinatorV2Interface COORDINATOR; // subscription ID. uint64 s_subscriptionId; // see https://docs.chain.link/docs/vrf-contracts/#configurations // address vrfCoordinator = 0x7a1BaC17Ccc5b313516C5E16fb24f7659aA5ebed; // The gas lane to use, which specifies the maximum gas price to bump to. // For a list of available gas lanes on each network, // see https://docs.chain.link/docs/vrf-contracts/#configurations // test net (Polygon) // bytes32 keyHash = 0x4b09e658ed251bcafeebbc69400383d49f344ace09b9576fe248bb02c003fe9f; // main net (Polygon) bytes32 keyHash = 0xcc294a196eeeb44da2888d17c0625cc88d70d9760a69d58d853ba6581a9ab0cd; // Depends on the number of requested values that you want sent to the // fulfillRandomWords() function. Storing each word costs about 20,000 gas, // so 2500,000 is a safe default for this contract. If you are using tnis // in another contract, make sure to Test and adjust // this limit based on the network that you select, the size of the request, // and the processing of the callback request in the fulfillRandomWords() // function. uint32 callbackGasLimit = 2500000; // The default is 3, but you can set this higher. uint16 requestConfirmations = 3; // For this example, retrieve 2 random values in one request. // Cannot exceed VRFCoordinatorV2.MAX_NUM_WORDS. uint32 constant numWords = 1; // [End of Chainlink VRF config block] // Win percentages and Race track values enum SORT_TYPE{ TOTAL_WIN,TOTAL_GAMES } uint256[] private WIN_PERCENTAGES = [0,22,45,70,100]; string[] private TRACK_VALUES = ["-2", "0", "2", "4", "3", "-1", "-3", "1", "-4", "2"," -1" , "3" , "-4", "1", "-3", "-2", "4", "0", "1" , "-1" , "-3" , "3" , "4" , "-4" , "2" , "-2" ,"0", "1", "3", "0", "2", "-2", "-3", "-4", "-1", "4", "-1", "4" , "1" , "3", "-4" , "2" , "-2", "-3" , "0", "-3" , "2", "3", "1", "-1", "4", "-2", "-4", "0", "2", "0", "1", "-4", "3", "-3", "-1", "4", "-2", "0" , "3", "-3", "2" , "-1" , "4" , "-2" , "-4" , "1", "-2", "3", "0", "1", "-4", "-1", "-3", "2", "4" ]; uint256 constant public MAX_NFT_SUPPLY = 2200; uint256 constant public PLAYERS_COUNT = 4; // MarcoBuds Game Data Structure struct Game { uint256 id; uint256[PLAYERS_COUNT] players; uint256[PLAYERS_COUNT] effects; string[PLAYERS_COUNT] tracks; uint256 timestamp; uint256 winnerTokenId; uint256 map; uint256 text; uint256 rndResult; } struct MarcoBudsToken { uint256 tokenId; uint256 totalGamesPlayed; uint8 communityShareQualified; uint256 totalWonGames; uint256 totalLostGames; uint256 balance; } // Dev addresses address dev1; address dev2; address advisor; // Total Games Value uint256 public totalGamesValues = 0 ether; // Balances & Shares uint256 public devBalance = 0 ether; uint256 public communityBalance = 0 ether; // Minimum balance to distrubte for community only uint256 public constant MINIMUM_COMMUNITY_BALANCE = 1 ether; // NFT MarcoBuds Contract . Used to check ownership of a token ERC721Interface internal MARCOBUDS_CONTRACT; // Minimum Game Value set to 1. This means minimum entry fee is 0.25 uint256 public constant MINIMUM_GAME_VALUE = 1 ether; // Initial values of total game value and their disturbtions. Initial values don't matter here as it has to be passed in the constructor anyway. uint256 public GAME_VALUE = 6 ether; // disturbtions based on total game value uint256 public ENTRY_FEE = 1.5 ether; uint256 public WIN_SHARE = 3.06 ether; uint256 public LOSS_SHARE = 0.68 ether; uint256 public DEV_SHARE = 0.6 ether; uint256 public COMMUNITY_SHARE = 0.3 ether; // Minimum games played to be qualified for community shares. On the fifth game the nft holder will be qualified uint256 constant public COMMUNITY_MINIMUM_GAMES = 4; // Tokens count that are qulaified for getting community shares uint256 public qualifiedTokensCount = 0; // Players waiting to start the game mapping(uint256 => uint256) public pendingPlayers; uint256 public pendingPlayersCount; // Games & Tokens data mapping(uint256 => MarcoBudsToken) public marcobudsTokens; mapping(uint256 => Game) public games; uint256 public gamesCounter; // Random range minimum and maximum uint256 constant private min = 1; uint256 constant private max = 100; // VRF Request Id => Games Ids mapping(uint256 => uint256) public requestIdToGameId; // Limit of top marcobuds uint256 constant public TOP_LIMIT = 30; // index to tokenId mapping(uint256 => uint256) public topTokensBytotalWonGames; mapping(uint256 => uint256) public topTokensByTotalGamesPlayed; // Game Events event GameJoined(uint256 _MarcoBudsTokenId); event GameStarted(Game _game); event GameEnded(uint256 _GameId,uint256 _MarcoBudsTokenId); // Config Events event VRFConfigUpdated(uint64 subscriptionId,uint32 _callbackGasLimit,uint16 _requestConfirmations,bytes32 _keyHash); event EntryFeeUpdated(uint256 totalGameValue); event TeamAddressesUpdated(address dev1,address dev2,address advisor); constructor(address MarcoBudsContractAddress,uint64 subscriptionId,address _vrfCoordinator,bytes32 _keyHash,uint256 totalGameValue) VRFConsumerBaseV2(_vrfCoordinator) { require(MarcoBudsContractAddress != address(0), "MarcoBudsContractAddress can not be zero"); require(_vrfCoordinator != address(0), "_vrfCoordinator can not be zero"); MARCOBUDS_CONTRACT = ERC721Interface(MarcoBudsContractAddress); COORDINATOR = VRFCoordinatorV2Interface(_vrfCoordinator); s_subscriptionId = subscriptionId; keyHash = _keyHash; setEntryFee(totalGameValue); } // change VRF config if needed. for example, if subscription Id changed ...etc. function setVRFConfig(uint64 subscriptionId,uint32 _callbackGasLimit,uint16 _requestConfirmations,bytes32 _keyHash) external onlyOwner { s_subscriptionId = subscriptionId; callbackGasLimit = _callbackGasLimit; requestConfirmations = _requestConfirmations; keyHash = _keyHash; emit VRFConfigUpdated(subscriptionId,_callbackGasLimit,_requestConfirmations,_keyHash); } // Pausing functionality only for joining a new game. claiming will always work no matter function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } // Requets a random number from ChainLink function getRandomNumber() internal returns (uint256 requestId) { return COORDINATOR.requestRandomWords( keyHash, s_subscriptionId, requestConfirmations, callbackGasLimit, numWords ); } // Receive the requested random number from ChainLink function fulfillRandomWords( uint256 requestId, uint256[] memory randomWords ) internal override { uint256 randomResult = (randomWords[0] % max) + min; pickWinner(requestId,randomResult); } // get a track for a Marcobuds token (player) function getTrack(uint256 baseNum,uint256 MBTokenId) internal view returns (string memory){ require(TRACK_VALUES.length > 72,"TRACK_VALUES length must be greater than 72"); uint256 startIndex = (baseNum + MBTokenId) % (TRACK_VALUES.length - 72); uint256 endIndex = startIndex+9; string memory track = TRACK_VALUES[startIndex]; for(uint256 i=startIndex+1; i < endIndex ; i ++) { track = string(abi.encodePacked(track,",", TRACK_VALUES[i])); } return track; } // get game map function getMap(uint256 baseNum) internal pure returns (uint256){ return ((baseNum * 7) % 4)+1; } // get game text function getText(uint256 baseNum) internal pure returns (uint256){ return (baseNum % 10)+1; } // get game effect function getEffect(uint256 baseNum,uint256 MBTokenId) internal pure returns (uint256){ return ((baseNum + MBTokenId) % 6)+1; } // Select the winner based on the random result considering total games played for each player function pickWinner(uint256 requestId,uint256 randomResult) internal{ uint256 gameId = requestIdToGameId[requestId]; sortPlayersByTotalGamesPlayed(gameId); Game storage game = games[gameId]; game.winnerTokenId = getWinnerTokenId(gameId,randomResult); game.rndResult = randomResult; game.timestamp = block.timestamp; // randomResult is between 1 and 100 game.map = getMap(randomResult+gamesCounter); game.text = getText(randomResult+gamesCounter+3); setPlayersEffects(gameId,randomResult); setPlayersTracks(gameId,randomResult); // Winner and Losers shares calculateShares(gameId); // Keep track of top winners bool alreadyAdded = false; uint256 smallestTokenIdIndex = 1; //topTokensBytotalWonGames[1]; if(topTokensBytotalWonGames[smallestTokenIdIndex] == game.winnerTokenId){ alreadyAdded = true; } if(!alreadyAdded){ for (uint256 k=2; k<=TOP_LIMIT; k++) { if(topTokensBytotalWonGames[k] == game.winnerTokenId){ alreadyAdded = true; break; } if(marcobudsTokens[topTokensBytotalWonGames[k]].totalWonGames < marcobudsTokens[topTokensBytotalWonGames[smallestTokenIdIndex]].totalWonGames){ smallestTokenIdIndex = k; } } } // update only if it wasn't added before if(!alreadyAdded && marcobudsTokens[topTokensBytotalWonGames[smallestTokenIdIndex]].totalWonGames < marcobudsTokens[game.winnerTokenId].totalWonGames){ topTokensBytotalWonGames[smallestTokenIdIndex] = game.winnerTokenId; } emit GameEnded(gameId,games[gameId].winnerTokenId); } // set effects for each player except the winner function setPlayersEffects(uint256 gameId,uint256 randomResult) internal{ Game storage game = games[gameId]; uint256 l = game.players.length; for(uint256 i = 0; i < l; i++) { if(games[gameId].winnerTokenId == game.players[i]) { game.effects[i] = 0; } else { game.effects[i] = getEffect(randomResult,game.players[i]); } } } // set the tracks for all players function setPlayersTracks(uint256 gameId,uint256 randomResult) internal{ Game storage game = games[gameId]; uint256 l = game.players.length; for(uint256 i = 0; i < l; i++) { game.tracks[i] = getTrack(randomResult,game.players[i]); } } // sort players by total games played . index 0 -> lowest . index 3 -> highest function sortPlayersByTotalGamesPlayed(uint256 gameId) internal{ Game storage game = games[gameId]; uint256 l = game.players.length; for(uint256 i = 0; i < l; i++) { for(uint256 j = i+1; j < l ;j++) { if(marcobudsTokens[game.players[i]].totalGamesPlayed > marcobudsTokens[game.players[j]].totalGamesPlayed) { uint256 temp = game.players[i]; game.players[i] = game.players[j]; game.players[j] = temp; } } } } // get the winner token id based on WIN_PERCENTAGES and the random result function getWinnerTokenId(uint256 gameId,uint256 randomResult) internal view returns (uint256 winnerTokenId){ require(randomResult >= 1 && randomResult <= 100, "Random result is out of range"); uint256 l = WIN_PERCENTAGES.length; for(uint256 i = 1; i < l; i++) { if(randomResult > WIN_PERCENTAGES[i-1] && randomResult <= WIN_PERCENTAGES[i]){ return games[gameId].players[i-1]; } } } // get games as array within the range from-to function getGames(uint256 gameIdFrom,uint256 gameIdTo)external view returns (Game[] memory){ uint256 length = gameIdTo - gameIdFrom; Game[] memory gamesArr = new Game[](length+1); uint256 j=0; for (uint i = gameIdFrom ; i <= gameIdTo; i++) { gamesArr[j] = games[i]; j++; } return gamesArr; } // get top Marcobuds by wins or total played games function getTopMarcoBuds(SORT_TYPE sortType)external view returns (MarcoBudsToken[] memory){ MarcoBudsToken[] memory marcosArr = new MarcoBudsToken[](TOP_LIMIT); if(sortType == SORT_TYPE.TOTAL_WIN){ for (uint256 i=1; i<=TOP_LIMIT; i++) { marcosArr[i-1] = marcobudsTokens[topTokensBytotalWonGames[i]]; } } if(sortType == SORT_TYPE.TOTAL_GAMES){ for (uint256 i=1; i<=TOP_LIMIT; i++) { marcosArr[i-1] = marcobudsTokens[topTokensByTotalGamesPlayed[i]]; } } return marcosArr; } // get players by game function getGamePlayers(uint256 gameId)external view returns (uint256[PLAYERS_COUNT] memory){ return games[gameId].players; } // get effects by gamee function getGameEffects(uint256 gameId)external view returns (uint256[PLAYERS_COUNT] memory){ return games[gameId].effects; } // calculate the players (including the winner), community and dev shares function calculateShares(uint256 gameId) internal{ Game storage game = games[gameId]; // Winner specific // Add the wining share to the winner token uint256 winnerTokenId = game.winnerTokenId; marcobudsTokens[winnerTokenId].totalWonGames++; marcobudsTokens[winnerTokenId].totalGamesPlayed++; marcobudsTokens[winnerTokenId].balance += WIN_SHARE; // Distribute the losing share to the losers tokens uint256 l = game.players.length; for (uint256 i=0; i<l; i++) { uint256 tokenId = game.players[i]; if(tokenId != winnerTokenId){ marcobudsTokens[tokenId].totalGamesPlayed++; marcobudsTokens[tokenId].totalLostGames++; marcobudsTokens[tokenId].balance += LOSS_SHARE; } } // Dev share devBalance += DEV_SHARE; // Community share communityBalance += COMMUNITY_SHARE; } // Distribute Community shares // Anyone can call this to distribute the shares to their respective balances function distributeCommunityShare() external { require(communityBalance >= MINIMUM_COMMUNITY_BALANCE ,"Community balance must be 1 or greater"); require(qualifiedTokensCount > 0 ,"There is no qualified tokens yet"); require(communityBalance >= qualifiedTokensCount ,"Share per token is zero"); // Distribute the community share to the qualified tokens // devide before multiply issue is skipped as it is checked above communityBalance >= qualifiedTokensCount // ref: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply uint256 sharePerToken = communityBalance/qualifiedTokensCount; communityBalance = 0; for (uint256 j=1; j<=MAX_NFT_SUPPLY; j++) { marcobudsTokens[j].balance += (sharePerToken * marcobudsTokens[j].communityShareQualified); } } // Claim the balance of a Marcobuds token function claim(uint256 _tokenId) external { require (_tokenId > 0 && _tokenId <= MAX_NFT_SUPPLY, "MarcoBuds token Id must be between 1 and 2200"); require (ownerOfMarcoBuds(_tokenId) , "Please make sure you own this MarcoBuds token"); uint256 mbBalance = marcobudsTokens[_tokenId].balance; require (mbBalance > 0 , "Balance is zero"); require (address(this).balance >= mbBalance, "Insufficient contract balance"); marcobudsTokens[_tokenId].balance = 0; payable(msg.sender).transfer(mbBalance); } // Claim the balance of the dev function devClaim() external onlyOwner { require (dev1 != address(0), "dev1 address can not be zero"); require (dev2 != address(0), "dev2 address can not be zero"); require (advisor != address(0), "advisor address can not be zero"); require (devBalance > 0 , "Dev Balance must be greater than zero"); require (address(this).balance >= devBalance, "Insufficient contract balance"); uint256 _devBalance = devBalance; devBalance = 0; uint256 _devBal = (_devBalance*40)/100; uint256 _AdvBal = (_devBalance*20)/100; payable(dev1).transfer(_devBal); payable(dev2).transfer(_devBal); payable(advisor).transfer(_AdvBal); } // Set addresses of the team function setTeamAddresses(address _dev1,address _dev2,address _adv) external onlyOwner { require (_dev1 != address(0), "_dev1 can not be zero"); require (_dev2 != address(0), "_dev2 can not be zero"); require (_adv != address(0), "_adv can not be zero"); dev1 = _dev1; dev2 = _dev2; advisor = _adv; emit TeamAddressesUpdated(_dev1,_dev2,_adv); } // Set Entry Fee function setEntryFee(uint256 totalGameValue) public onlyOwner { require (totalGameValue >= MINIMUM_GAME_VALUE , "totalGameValue must be not lower than 1"); // devide before multiply issue is skipped below as it is checked above , and it will never results in a zero // ref: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply // set the game value GAME_VALUE = totalGameValue; // 1/4 for each player ENTRY_FEE = totalGameValue/4; // 51% for win WIN_SHARE = (totalGameValue*51)/100; // 43% for total loss uint256 TOTAL_LOSS_SHARE = (totalGameValue*34)/100; // 1/3 for each loss from the total loss LOSS_SHARE = TOTAL_LOSS_SHARE/3; // 10% dev share DEV_SHARE = (totalGameValue*10)/100; // 5% community share COMMUNITY_SHARE = (totalGameValue*5)/100; if(WIN_SHARE+(LOSS_SHARE*3)+DEV_SHARE+COMMUNITY_SHARE != totalGameValue){ revert("Something went wrong, please change the totalGameValue"); } emit EntryFeeUpdated(totalGameValue); } // Join a new game function joinGame (uint256 _tokenId) external payable whenNotPaused { require (_tokenId > 0 && _tokenId <= MAX_NFT_SUPPLY, "MarcoBuds token Id must be between 1 and 2200"); require (ownerOfMarcoBuds(_tokenId) , "Please make sure you own this MarcoBuds token"); require (marcoBudsTokenIsNotPlaying(_tokenId),"This MarcoBuds token is already in a game"); require (pendingPlayersCount < PLAYERS_COUNT, "Please wait few seconds and try joining again"); require (msg.value == ENTRY_FEE , "Entry fee should match the required fee"); pendingPlayersCount++; pendingPlayers[pendingPlayersCount] = _tokenId; marcobudsTokens[_tokenId].tokenId = _tokenId; if(qualifiedTokensCount < MAX_NFT_SUPPLY && marcobudsTokens[_tokenId].communityShareQualified == 0 && marcobudsTokens[_tokenId].totalGamesPlayed >= COMMUNITY_MINIMUM_GAMES){ marcobudsTokens[_tokenId].communityShareQualified = 1; qualifiedTokensCount++; } // Keep track of top by total games played // get top of the 4 players uint256 playerTokenId = _tokenId; bool alreadyAdded = false; uint256 smallestTokenIdIndex = 1; if(topTokensByTotalGamesPlayed[smallestTokenIdIndex] == playerTokenId){ alreadyAdded = true; } if(!alreadyAdded){ for (uint256 k=2; k<=TOP_LIMIT; k++) { if(topTokensByTotalGamesPlayed[k] == playerTokenId){ alreadyAdded = true; break; } if(marcobudsTokens[topTokensByTotalGamesPlayed[k]].totalGamesPlayed < marcobudsTokens[topTokensByTotalGamesPlayed[smallestTokenIdIndex]].totalGamesPlayed){ smallestTokenIdIndex = k; } } } // update only if it wasn't added before if(!alreadyAdded && marcobudsTokens[topTokensByTotalGamesPlayed[smallestTokenIdIndex]].totalGamesPlayed < marcobudsTokens[playerTokenId].totalGamesPlayed){ topTokensByTotalGamesPlayed[smallestTokenIdIndex] = playerTokenId; } emit GameJoined(_tokenId); if(pendingPlayersCount == PLAYERS_COUNT){ // Start the game as we have already 4 players startGame(); } } function ownerOfMarcoBuds(uint256 _tokenId) internal view returns (bool){ address tokenOwnerAddress = MARCOBUDS_CONTRACT.ownerOf(_tokenId); return (tokenOwnerAddress == msg.sender); } function marcoBudsTokenIsNotPlaying(uint256 _tokenId) internal view returns (bool){ for (uint256 i=0; i<pendingPlayersCount; i++) { if(pendingPlayers[i+1] == _tokenId) { return false; } } return true; } // Start the game and clear daata including pending players for a new game function startGame() private{ gamesCounter++; totalGamesValues += GAME_VALUE; uint256[PLAYERS_COUNT] memory _players; _players[0] = pendingPlayers[1]; _players[1] = pendingPlayers[2]; _players[2] = pendingPlayers[3]; _players[3] = pendingPlayers[4]; uint256[PLAYERS_COUNT] memory _effects = [uint256(0),0,0,0]; string[PLAYERS_COUNT] memory _tracks = ["","","",""]; games[gamesCounter] = Game(gamesCounter,_players,_effects,_tracks,0,0,0,0,0); // reset pendingPlayers[1] = 0; pendingPlayers[2] = 0; pendingPlayers[3] = 0; pendingPlayers[4] = 0; pendingPlayersCount = 0; // end emit GameStarted(games[gamesCounter]); uint256 requestId = getRandomNumber(); requestIdToGameId[requestId] = gamesCounter; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. It ensures 2 things: * @dev 1. The fulfillment came from the VRFCoordinator * @dev 2. The consumer contract implements fulfillRandomWords. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constructor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash). Create subscription, fund it * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface * @dev subscription management functions). * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations, * @dev callbackGasLimit, numWords), * @dev see (VRFCoordinatorInterface for a description of the arguments). * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomWords method. * * @dev The randomness argument to fulfillRandomWords is a set of random words * @dev generated from your requestId and the blockHash of the request. * * @dev If your contract could have concurrent requests open, you can use the * @dev requestId returned from requestRandomWords to track which response is associated * @dev with which randomness request. * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously. * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. It is for this reason that * @dev that you can signal to an oracle you'd like them to wait longer before * @dev responding to the request (however this is not enforced in the contract * @dev and so remains effective only in the case of unmodified oracle software). */ abstract contract VRFConsumerBaseV2 { error OnlyCoordinatorCanFulfill(address have, address want); address private immutable vrfCoordinator; /** * @param _vrfCoordinator address of VRFCoordinator contract */ constructor(address _vrfCoordinator) { vrfCoordinator = _vrfCoordinator; } /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomWords the VRF output expanded to the requested number of words */ function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual; // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external { if (msg.sender != vrfCoordinator) { revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator); } fulfillRandomWords(requestId, randomWords); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface VRFCoordinatorV2Interface { /** * @notice Get configuration relevant for making requests * @return minimumRequestConfirmations global min for request confirmations * @return maxGasLimit global max for request gas limit * @return s_provingKeyHashes list of registered key hashes */ function getRequestConfig() external view returns ( uint16, uint32, bytes32[] memory ); /** * @notice Request a set of random words. * @param keyHash - Corresponds to a particular oracle job which uses * that key for generating the VRF proof. Different keyHash's have different gas price * ceilings, so you can select a specific one to bound your maximum per request cost. * @param subId - The ID of the VRF subscription. Must be funded * with the minimum subscription balance required for the selected keyHash. * @param minimumRequestConfirmations - How many blocks you'd like the * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS * for why you may want to request more. The acceptable range is * [minimumRequestBlockConfirmations, 200]. * @param callbackGasLimit - How much gas you'd like to receive in your * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords * may be slightly less than this amount because of gas used calling the function * (argument decoding etc.), so you may need to request slightly more than you expect * to have inside fulfillRandomWords. The acceptable range is * [0, maxGasLimit] * @param numWords - The number of uint256 random values you'd like to receive * in your fulfillRandomWords callback. Note these numbers are expanded in a * secure way by the VRFCoordinator from a single random value supplied by the oracle. * @return requestId - A unique identifier of the request. Can be used to match * a request to a response in fulfillRandomWords. */ function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); /** * @notice Create a VRF subscription. * @return subId - A unique subscription id. * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer. * @dev Note to fund the subscription, use transferAndCall. For example * @dev LINKTOKEN.transferAndCall( * @dev address(COORDINATOR), * @dev amount, * @dev abi.encode(subId)); */ function createSubscription() external returns (uint64 subId); /** * @notice Get a VRF subscription. * @param subId - ID of the subscription * @return balance - LINK balance of the subscription in juels. * @return reqCount - number of requests for this subscription, determines fee tier. * @return owner - owner of the subscription. * @return consumers - list of consumer address which are able to use this subscription. */ function getSubscription(uint64 subId) external view returns ( uint96 balance, uint64 reqCount, address owner, address[] memory consumers ); /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @param newOwner - proposed new owner of the subscription */ function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external; /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @dev will revert if original owner of subId has * not requested that msg.sender become the new owner. */ function acceptSubscriptionOwnerTransfer(uint64 subId) external; /** * @notice Add a consumer to a VRF subscription. * @param subId - ID of the subscription * @param consumer - New consumer which can use the subscription */ function addConsumer(uint64 subId, address consumer) external; /** * @notice Remove a consumer from a VRF subscription. * @param subId - ID of the subscription * @param consumer - Consumer to remove from the subscription */ function removeConsumer(uint64 subId, address consumer) external; /** * @notice Cancel a subscription * @param subId - ID of the subscription * @param to - Where to send the remaining LINK to */ function cancelSubscription(uint64 subId, address to) external; /* * @notice Check to see if there exists a request commitment consumers * for all consumers and keyhashes for a given sub. * @param subId - ID of the subscription * @return true if there exists at least one unfulfilled request for the subscription, false * otherwise. */ function pendingRequestExists(uint64 subId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "london", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"MarcoBudsContractAddress","type":"address"},{"internalType":"uint64","name":"subscriptionId","type":"uint64"},{"internalType":"address","name":"_vrfCoordinator","type":"address"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"},{"internalType":"uint256","name":"totalGameValue","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalGameValue","type":"uint256"}],"name":"EntryFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_GameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_MarcoBudsTokenId","type":"uint256"}],"name":"GameEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_MarcoBudsTokenId","type":"uint256"}],"name":"GameJoined","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256[4]","name":"players","type":"uint256[4]"},{"internalType":"uint256[4]","name":"effects","type":"uint256[4]"},{"internalType":"string[4]","name":"tracks","type":"string[4]"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"winnerTokenId","type":"uint256"},{"internalType":"uint256","name":"map","type":"uint256"},{"internalType":"uint256","name":"text","type":"uint256"},{"internalType":"uint256","name":"rndResult","type":"uint256"}],"indexed":false,"internalType":"struct MarcoBudsGame.Game","name":"_game","type":"tuple"}],"name":"GameStarted","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"dev1","type":"address"},{"indexed":false,"internalType":"address","name":"dev2","type":"address"},{"indexed":false,"internalType":"address","name":"advisor","type":"address"}],"name":"TeamAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"subscriptionId","type":"uint64"},{"indexed":false,"internalType":"uint32","name":"_callbackGasLimit","type":"uint32"},{"indexed":false,"internalType":"uint16","name":"_requestConfirmations","type":"uint16"},{"indexed":false,"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"name":"VRFConfigUpdated","type":"event"},{"inputs":[],"name":"COMMUNITY_MINIMUM_GAMES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COMMUNITY_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENTRY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAME_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOSS_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_COMMUNITY_BALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_GAME_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PLAYERS_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOP_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WIN_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"communityBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeCommunityShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"winnerTokenId","type":"uint256"},{"internalType":"uint256","name":"map","type":"uint256"},{"internalType":"uint256","name":"text","type":"uint256"},{"internalType":"uint256","name":"rndResult","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gamesCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getGameEffects","outputs":[{"internalType":"uint256[4]","name":"","type":"uint256[4]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getGamePlayers","outputs":[{"internalType":"uint256[4]","name":"","type":"uint256[4]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameIdFrom","type":"uint256"},{"internalType":"uint256","name":"gameIdTo","type":"uint256"}],"name":"getGames","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256[4]","name":"players","type":"uint256[4]"},{"internalType":"uint256[4]","name":"effects","type":"uint256[4]"},{"internalType":"string[4]","name":"tracks","type":"string[4]"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"winnerTokenId","type":"uint256"},{"internalType":"uint256","name":"map","type":"uint256"},{"internalType":"uint256","name":"text","type":"uint256"},{"internalType":"uint256","name":"rndResult","type":"uint256"}],"internalType":"struct MarcoBudsGame.Game[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum MarcoBudsGame.SORT_TYPE","name":"sortType","type":"uint8"}],"name":"getTopMarcoBuds","outputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"totalGamesPlayed","type":"uint256"},{"internalType":"uint8","name":"communityShareQualified","type":"uint8"},{"internalType":"uint256","name":"totalWonGames","type":"uint256"},{"internalType":"uint256","name":"totalLostGames","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"internalType":"struct MarcoBudsGame.MarcoBudsToken[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"joinGame","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"marcobudsTokens","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"totalGamesPlayed","type":"uint256"},{"internalType":"uint8","name":"communityShareQualified","type":"uint8"},{"internalType":"uint256","name":"totalWonGames","type":"uint256"},{"internalType":"uint256","name":"totalLostGames","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pendingPlayers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingPlayersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qualifiedTokensCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestIdToGameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalGameValue","type":"uint256"}],"name":"setEntryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dev1","type":"address"},{"internalType":"address","name":"_dev2","type":"address"},{"internalType":"address","name":"_adv","type":"address"}],"name":"setTeamAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"subscriptionId","type":"uint64"},{"internalType":"uint32","name":"_callbackGasLimit","type":"uint32"},{"internalType":"uint16","name":"_requestConfirmations","type":"uint16"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"name":"setVRFConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"topTokensByTotalGamesPlayed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"topTokensBytotalWonGames","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGamesValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040527fcc294a196eeeb44da2888d17c0625cc88d70d9760a69d58d853ba6581a9ab0cd60001b600255622625a0600360006101000a81548163ffffffff021916908363ffffffff16021790555060038060046101000a81548161ffff021916908361ffff1602179055506040518060a00160405280600060ff168152602001601660ff168152602001602d60ff168152602001604660ff168152602001606460ff168152506004906005620000b992919062001992565b5060405180610a2001604052806040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f202d31000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f3400000000000000000000000000000000000000000000000000000000000000815250815250600590605162001381929190620019e9565b5060006009556000600a556000600b556753444835ec580000600d556714d1120d7b160000600e55672a774dc994b20000600f5567096fd865af440000601055670853a0d2313c0000601155670429d069189e00006012556000601355348015620013eb57600080fd5b5060405162007e0e38038062007e0e833981810160405281019062001411919062001bfb565b828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505060008060006101000a81548160ff02191690831515021790555062001481620014756200163360201b60201c565b6200163b60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603620014f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620014ea9062001d0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001565576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200155c9062001d7c565b60405180910390fd5b84600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508160028190555062001628816200170060201b60201c565b505050505062002419565b600033905090565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62001710620018d860201b60201c565b670de0b6b3a76400008110156200175e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017559062001e14565b60405180910390fd5b80600d8190555060048162001774919062001e94565b600e8190555060646033826200178b919062001ecc565b62001797919062001e94565b600f8190555060006064602283620017b0919062001ecc565b620017bc919062001e94565b9050600381620017cd919062001e94565b6010819055506064600a83620017e4919062001ecc565b620017f0919062001e94565b601181905550606460058362001807919062001ecc565b62001813919062001e94565b60128190555081601254601154600360105462001831919062001ecc565b600f5462001840919062001f2d565b6200184c919062001f2d565b62001858919062001f2d565b146200189b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018929062002000565b60405180910390fd5b7f24a0b2e591795f2c27be52ff14a57d0a39ac957304305bc05e8b04be49e8fe1582604051620018cc919062002033565b60405180910390a15050565b620018e86200163360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200190e6200196960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462001967576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200195e90620020a0565b60405180910390fd5b565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054828255906000526020600020908101928215620019d6579160200282015b82811115620019d5578251829060ff16905591602001919060010190620019b3565b5b509050620019e5919062001a49565b5090565b82805482825590600052602060002090810192821562001a36579160200282015b8281111562001a3557825182908162001a24919062002332565b509160200191906001019062001a0a565b5b50905062001a45919062001a68565b5090565b5b8082111562001a6457600081600090555060010162001a4a565b5090565b5b8082111562001a8c576000818162001a82919062001a90565b5060010162001a69565b5090565b50805462001a9e906200212b565b6000825580601f1062001ab2575062001ad3565b601f01602090049060005260206000209081019062001ad2919062001a49565b5b50565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001b088262001adb565b9050919050565b62001b1a8162001afb565b811462001b2657600080fd5b50565b60008151905062001b3a8162001b0f565b92915050565b600067ffffffffffffffff82169050919050565b62001b5f8162001b40565b811462001b6b57600080fd5b50565b60008151905062001b7f8162001b54565b92915050565b6000819050919050565b62001b9a8162001b85565b811462001ba657600080fd5b50565b60008151905062001bba8162001b8f565b92915050565b6000819050919050565b62001bd58162001bc0565b811462001be157600080fd5b50565b60008151905062001bf58162001bca565b92915050565b600080600080600060a0868803121562001c1a5762001c1962001ad6565b5b600062001c2a8882890162001b29565b955050602062001c3d8882890162001b6e565b945050604062001c508882890162001b29565b935050606062001c638882890162001ba9565b925050608062001c768882890162001be4565b9150509295509295909350565b600082825260208201905092915050565b7f4d6172636f42756473436f6e7472616374416464726573732063616e206e6f7460008201527f206265207a65726f000000000000000000000000000000000000000000000000602082015250565b600062001cf260288362001c83565b915062001cff8262001c94565b604082019050919050565b6000602082019050818103600083015262001d258162001ce3565b9050919050565b7f5f767266436f6f7264696e61746f722063616e206e6f74206265207a65726f00600082015250565b600062001d64601f8362001c83565b915062001d718262001d2c565b602082019050919050565b6000602082019050818103600083015262001d978162001d55565b9050919050565b7f746f74616c47616d6556616c7565206d757374206265206e6f74206c6f77657260008201527f207468616e203100000000000000000000000000000000000000000000000000602082015250565b600062001dfc60278362001c83565b915062001e098262001d9e565b604082019050919050565b6000602082019050818103600083015262001e2f8162001ded565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062001ea18262001bc0565b915062001eae8362001bc0565b92508262001ec15762001ec062001e36565b5b828204905092915050565b600062001ed98262001bc0565b915062001ee68362001bc0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001f225762001f2162001e65565b5b828202905092915050565b600062001f3a8262001bc0565b915062001f478362001bc0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001f7f5762001f7e62001e65565b5b828201905092915050565b7f536f6d657468696e672077656e742077726f6e672c20706c656173652063686160008201527f6e67652074686520746f74616c47616d6556616c756500000000000000000000602082015250565b600062001fe860368362001c83565b915062001ff58262001f8a565b604082019050919050565b600060208201905081810360008301526200201b8162001fd9565b9050919050565b6200202d8162001bc0565b82525050565b60006020820190506200204a600083018462002022565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200208860208362001c83565b9150620020958262002050565b602082019050919050565b60006020820190508181036000830152620020bb8162002079565b9050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200214457607f821691505b6020821081036200215a5762002159620020fc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620021c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262002185565b620021d0868362002185565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620022136200220d620022078462001bc0565b620021e8565b62001bc0565b9050919050565b6000819050919050565b6200222f83620021f2565b620022476200223e826200221a565b84845462002192565b825550505050565b600090565b6200225e6200224f565b6200226b81848462002224565b505050565b5b8181101562002293576200228760008262002254565b60018101905062002271565b5050565b601f821115620022e257620022ac8162002160565b620022b78462002175565b81016020851015620022c7578190505b620022df620022d68562002175565b83018262002270565b50505b505050565b600082821c905092915050565b60006200230760001984600802620022e7565b1980831691505092915050565b6000620023228383620022f4565b9150826002028217905092915050565b6200233d82620020c2565b67ffffffffffffffff811115620023595762002358620020cd565b5b6200236582546200212b565b6200237282828562002297565b600060209050601f831160018114620023aa576000841562002395578287015190505b620023a1858262002314565b86555062002411565b601f198416620023ba8662002160565b60005b82811015620023e457848901518255600182019150602085019450602081019050620023bd565b8683101562002404578489015162002400601f891682620022f4565b8355505b6001600288020188555050505b505050505050565b6080516159d26200243c60003960008181610b3d0152610b9101526159d26000f3fe6080604052600436106102515760003560e01c80637ec9ff9611610139578063b58fea3b116100b6578063eb770d0c1161007a578063eb770d0c1461089d578063efaa55a0146108c6578063f2879bf1146108e2578063f2fde38b1461090d578063f6d361cc14610936578063fcb522aa1461096157610251565b8063b58fea3b146107c8578063c1a45417146107df578063cd9a1b631461080a578063e609426114610835578063e9f1cc6b1461087257610251565b80638e4cbc83116100fd5780638e4cbc83146106f3578063ac4511851461071e578063ae979ae61461075b578063b0c6825414610772578063b5077f441461079d57610251565b80637ec9ff961461061e578063825cedd9146106495780638456cb59146106745780638b470d861461068b5780638da5cb5b146106c857610251565b806335760c14116101d25780635eb6a78f116101965780635eb6a78f146105325780636099beec1461055d578063666352d41461058857806367b2f6a0146105b35780636d0083e8146105dc578063715018a61461060757610251565b806335760c141461045f578063379607f51461048a5780633f4ba83a146104b35780634f84e128146104ca5780635c975abb1461050757610251565b806315a40f491161021957806315a40f49146103425780631aff478b1461037f5780631fa072db146103bc5780631fe543e3146103f95780632b3b88ed1461042257610251565b8063029dd6ba1461025657806307bcd85f1461028157806309e7d2de146102aa5780630b045c67146102d5578063117a5b9014610300575b600080fd5b34801561026257600080fd5b5061026b6109a3565b604051610278919061364f565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a3919061376a565b6109a9565b005b3480156102b657600080fd5b506102bf610a62565b6040516102cc919061364f565b60405180910390f35b3480156102e157600080fd5b506102ea610a68565b6040516102f7919061364f565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906137fd565b610a6e565b6040516103399695949392919061382a565b60405180910390f35b34801561034e57600080fd5b50610369600480360381019061036491906137fd565b610aaa565b6040516103769190613936565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a191906137fd565b610b0b565b6040516103b3919061364f565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906137fd565b610b23565b6040516103f0919061364f565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190613aaa565b610b3b565b005b34801561042e57600080fd5b5061044960048036038101906104449190613b2b565b610bfb565b6040516104569190613c9e565b60405180910390f35b34801561046b57600080fd5b50610474610e52565b604051610481919061364f565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac91906137fd565b610e57565b005b3480156104bf57600080fd5b506104c8610ff8565b005b3480156104d657600080fd5b506104f160048036038101906104ec91906137fd565b61100a565b6040516104fe9190613936565b60405180910390f35b34801561051357600080fd5b5061051c61106b565b6040516105299190613cdb565b60405180910390f35b34801561053e57600080fd5b50610547611081565b604051610554919061364f565b60405180910390f35b34801561056957600080fd5b50610572611087565b60405161057f919061364f565b60405180910390f35b34801561059457600080fd5b5061059d61108d565b6040516105aa919061364f565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190613d54565b611093565b005b3480156105e857600080fd5b506105f16112eb565b6040516105fe919061364f565b60405180910390f35b34801561061357600080fd5b5061061c6112f0565b005b34801561062a57600080fd5b50610633611304565b604051610640919061364f565b60405180910390f35b34801561065557600080fd5b5061065e611309565b60405161066b919061364f565b60405180910390f35b34801561068057600080fd5b50610689611315565b005b34801561069757600080fd5b506106b260048036038101906106ad91906137fd565b611327565b6040516106bf919061364f565b60405180910390f35b3480156106d457600080fd5b506106dd61133f565b6040516106ea9190613db6565b60405180910390f35b3480156106ff57600080fd5b50610708611368565b604051610715919061364f565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190613dd1565b61136e565b604051610752919061413d565b60405180910390f35b34801561076757600080fd5b506107706115ea565b005b34801561077e57600080fd5b506107876119b8565b604051610794919061364f565b60405180910390f35b3480156107a957600080fd5b506107b26119be565b6040516107bf919061364f565b60405180910390f35b3480156107d457600080fd5b506107dd6119c4565b005b3480156107eb57600080fd5b506107f4611b3e565b604051610801919061364f565b60405180910390f35b34801561081657600080fd5b5061081f611b44565b60405161082c919061364f565b60405180910390f35b34801561084157600080fd5b5061085c600480360381019061085791906137fd565b611b4a565b604051610869919061364f565b60405180910390f35b34801561087e57600080fd5b50610887611b62565b604051610894919061364f565b60405180910390f35b3480156108a957600080fd5b506108c460048036038101906108bf91906137fd565b611b68565b005b6108e060048036038101906108db91906137fd565b611d14565b005b3480156108ee57600080fd5b506108f761210c565b604051610904919061364f565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f919061415f565b612118565b005b34801561094257600080fd5b5061094b61219b565b604051610958919061364f565b60405180910390f35b34801561096d57600080fd5b50610988600480360381019061098391906137fd565b6121a1565b60405161099a9695949392919061419b565b60405180910390f35b60115481565b6109b16121ea565b83600160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600360006101000a81548163ffffffff021916908363ffffffff16021790555081600360046101000a81548161ffff021916908361ffff160217905550806002819055507f21c3280824c4b41c8107036783a63f9dc0ac271a24f7b296ce7e05811b12e32184848484604051610a549493929190614238565b60405180910390a150505050565b60095481565b60125481565b601760205280600052604060002060009150905080600001549080600d01549080600e01549080600f0154908060100154908060110154905086565b610ab2613449565b60176000838152602001908152602001600020600101600480602002604051908101604052809291908260048015610aff576020028201915b815481526020019060010190808311610aeb575b50505050509050919050565b601b6020528060005260406000206000915090505481565b60196020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bed57337f00000000000000000000000000000000000000000000000000000000000000006040517f1cf993f4000000000000000000000000000000000000000000000000000000008152600401610be492919061427d565b60405180910390fd5b610bf78282612268565b5050565b60606000601e67ffffffffffffffff811115610c1a57610c19613967565b5b604051908082528060200260200182016040528015610c5357816020015b610c4061346b565b815260200190600190039081610c385790505b50905060006001811115610c6a57610c696142a6565b5b836001811115610c7d57610c7c6142a6565b5b03610d50576000600190505b601e8111610d4e5760166000601a60008481526020019081526020016000205481526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff1660ff1660ff168152602001600382015481526020016004820154815260200160058201548152505082600183610d1f9190614304565b81518110610d3057610d2f614338565b5b60200260200101819052508080610d4690614367565b915050610c89565b505b600180811115610d6357610d626142a6565b5b836001811115610d7657610d756142a6565b5b03610e49576000600190505b601e8111610e475760166000601b60008481526020019081526020016000205481526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff1660ff1660ff168152602001600382015481526020016004820154815260200160058201548152505082600183610e189190614304565b81518110610e2957610e28614338565b5b60200260200101819052508080610e3f90614367565b915050610d82565b505b80915050919050565b600481565b600081118015610e6957506108988111155b610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90614432565b60405180910390fd5b610eb1816122af565b610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee7906144c4565b60405180910390fd5b60006016600083815260200190815260200160002060050154905060008111610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590614530565b60405180910390fd5b80471015610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f889061459c565b60405180910390fd5b600060166000848152602001908152602001600020600501819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ff3573d6000803e3d6000fd5b505050565b6110006121ea565b611008612387565b565b611012613449565b6017600083815260200190815260200160002060050160048060200260405190810160405280929190826004801561105f576020028201915b81548152602001906001019080831161104b575b50505050509050919050565b60008060009054906101000a900460ff16905090565b60185481565b60105481565b600f5481565b61109b6121ea565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190614608565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090614674565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df906146e0565b60405180910390fd5b82600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb010a24183c66b3769044101cb999cf598afb1f00e0104e4bf105780fe67ffd68383836040516112de93929190614700565b60405180910390a1505050565b600481565b6112f86121ea565b61130260006123e9565b565b601e81565b670de0b6b3a764000081565b61131d6121ea565b6113256124ae565b565b60146020528060005260406000206000915090505481565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b5481565b60606000838361137e9190614304565b9050600060018261138f9190614737565b67ffffffffffffffff8111156113a8576113a7613967565b5b6040519080825280602002602001820160405280156113e157816020015b6113ce6134a4565b8152602001906001900390816113c65790505b5090506000808690505b8581116115dd5760176000828152602001908152602001600020604051806101200160405290816000820154815260200160018201600480602002604051908101604052809291908260048015611457576020028201915b815481526020019060010190808311611443575b505050505081526020016005820160048060200260405190810160405280929190826004801561149c576020028201915b815481526020019060010190808311611488575b5050505050815260200160098201600480602002604051908101604052809291906000905b828210156115645783820180546114d7906147bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611503906147bc565b80156115505780601f1061152557610100808354040283529160200191611550565b820191906000526020600020905b81548152906001019060200180831161153357829003601f168201915b5050505050815260200190600101906114c1565b505050508152602001600d8201548152602001600e8201548152602001600f8201548152602001601082015481526020016011820154815250508383815181106115b1576115b0614338565b5b602002602001018190525081806115c790614367565b92505080806115d590614367565b9150506113eb565b5081935050505092915050565b6115f26121ea565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614839565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b906148a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90614911565b60405180910390fd5b6000600a54116117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906149a3565b60405180910390fd5b600a5447101561182f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118269061459c565b60405180910390fd5b6000600a5490506000600a819055506000606460288361184f91906149c3565b6118599190614a4c565b90506000606460148461186c91906149c3565b6118769190614a4c565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156118e0573d6000803e3d6000fd5b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611949573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156119b2573d6000803e3d6000fd5b50505050565b60135481565b61089881565b670de0b6b3a7640000600b541015611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614aef565b60405180910390fd5b600060135411611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614b5b565b60405180910390fd5b601354600b541015611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490614bc7565b60405180910390fd5b6000601354600b54611aaf9190614a4c565b90506000600b819055506000600190505b6108988111611b3a576016600082815260200190815260200160002060020160009054906101000a900460ff1660ff1682611afb91906149c3565b601660008381526020019081526020016000206005016000828254611b209190614737565b925050819055508080611b3290614367565b915050611ac0565b5050565b600d5481565b600a5481565b601a6020528060005260406000206000915090505481565b60155481565b611b706121ea565b670de0b6b3a7640000811015611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290614c59565b60405180910390fd5b80600d81905550600481611bcf9190614a4c565b600e819055506064603382611be491906149c3565b611bee9190614a4c565b600f8190555060006064602283611c0591906149c3565b611c0f9190614a4c565b9050600381611c1e9190614a4c565b6010819055506064600a83611c3391906149c3565b611c3d9190614a4c565b6011819055506064600583611c5291906149c3565b611c5c9190614a4c565b601281905550816012546011546003601054611c7891906149c3565b600f54611c859190614737565b611c8f9190614737565b611c999190614737565b14611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090614ceb565b60405180910390fd5b7f24a0b2e591795f2c27be52ff14a57d0a39ac957304305bc05e8b04be49e8fe1582604051611d08919061364f565b60405180910390a15050565b611d1c612510565b600081118015611d2e57506108988111155b611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6490614432565b60405180910390fd5b611d76816122af565b611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906144c4565b60405180910390fd5b611dbe8161255a565b611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490614d7d565b60405180910390fd5b600460155410611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3990614e0f565b60405180910390fd5b600e543414611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90614ea1565b60405180910390fd5b60156000815480929190611e9990614367565b91905055508060146000601554815260200190815260200160002081905550806016600083815260200190815260200160002060000181905550610898601354108015611f0c575060006016600083815260200190815260200160002060020160009054906101000a900460ff1660ff16145b8015611f2f57506004601660008381526020019081526020016000206001015410155b15611f7d5760016016600083815260200190815260200160002060020160006101000a81548160ff021916908360ff16021790555060136000815480929190611f7790614367565b91905055505b60008190506000806001905082601b60008381526020019081526020016000205403611fa857600191505b81612052576000600290505b601e81116120505783601b60008381526020019081526020016000205403611fdf5760019250612050565b60166000601b60008581526020019081526020016000205481526020019081526020016000206001015460166000601b600085815260200190815260200160002054815260200190815260200160002060010154101561203d578091505b808061204890614367565b915050611fb4565b505b8115801561209e5750601660008481526020019081526020016000206001015460166000601b600085815260200190815260200160002054815260200190815260200160002060010154105b156120bc5782601b6000838152602001908152602001600020819055505b7ffe9befc84fdb142bebdf33b7564a6dc1d47e60864b996a5f6c7949c210d1f544846040516120eb919061364f565b60405180910390a1600460155403612106576121056125ba565b5b50505050565b670de0b6b3a764000081565b6121206121ea565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614f33565b60405180910390fd5b612198816123e9565b50565b600e5481565b60166020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060030154908060040154908060050154905086565b6121f2612912565b73ffffffffffffffffffffffffffffffffffffffff1661221061133f565b73ffffffffffffffffffffffffffffffffffffffff1614612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225d90614f9f565b60405180910390fd5b565b6000600160648360008151811061228257612281614338565b5b60200260200101516122949190614fbf565b61229e9190614737565b90506122aa838261291a565b505050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161230d919061364f565b602060405180830381865afa15801561232a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234e9190615005565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614915050919050565b61238f612b7c565b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123d2612912565b6040516123df9190613db6565b60405180910390a1565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124b6612510565b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124f9612912565b6040516125069190613db6565b60405180910390a1565b61251861106b565b15612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f9061507e565b60405180910390fd5b565b600080600090505b6015548110156125af57826014600060018461257e9190614737565b8152602001908152602001600020540361259c5760009150506125b5565b80806125a790614367565b915050612562565b50600190505b919050565b601860008154809291906125cd90614367565b9190505550600d54600960008282546125e69190614737565b925050819055506125f5613449565b6014600060018152602001908152602001600020548160006004811061261e5761261d614338565b5b602002018181525050601460006002815260200190815260200160002054816001600481106126505761264f614338565b5b6020020181815250506014600060038152602001908152602001600020548160026004811061268257612681614338565b5b602002018181525050601460006004815260200190815260200160002054816003600481106126b4576126b3614338565b5b6020020181815250506000604051806080016040528060008152602001600081526020016000815260200160008152509050600060405180608001604052806040518060200160405280600081525081526020016040518060200160405280600081525081526020016040518060200160405280600081525081526020016040518060200160405280600081525081525090506040518061012001604052806018548152602001848152602001838152602001828152602001600081526020016000815260200160008152602001600081526020016000815250601760006018548152602001908152602001600020600082015181600001556020820151816001019060046127c4929190613502565b506040820151816005019060046127dc929190613502565b506060820151816009019060046127f4929190613542565b50608082015181600d015560a082015181600e015560c082015181600f015560e082015181601001556101008201518160110155905050600060146000600181526020019081526020016000208190555060006014600060028152602001908152602001600020819055506000601460006003815260200190815260200160002081905550600060146000600481526020019081526020016000208190555060006015819055507f52e1c72d80850618c805768e266b9f1959adfcdb06464930b838a1016e399cb36017600060185481526020019081526020016000206040516128de91906153af565b60405180910390a160006128f0612bc5565b9050601854601960008381526020019081526020016000208190555050505050565b600033905090565b60006019600084815260200190815260200160002054905061293b81612cad565b600060176000838152602001908152602001600020905061295c8284612deb565b81600e01819055508281601101819055504281600d018190555061298c601854846129879190614737565b612f0e565b81600f01819055506129b66003601854856129a79190614737565b6129b19190614737565b612f3c565b81601001819055506129c88284612f5e565b6129d28284613033565b6129db826130ba565b6000806001905082600e0154601a60008381526020019081526020016000205403612a0557600191505b81612ab3576000600290505b601e8111612ab15783600e0154601a60008381526020019081526020016000205403612a405760019250612ab1565b60166000601a60008581526020019081526020016000205481526020019081526020016000206003015460166000601a6000858152602001908152602001600020548152602001908152602001600020600301541015612a9e578091505b8080612aa990614367565b915050612a11565b505b81158015612b0357506016600084600e015481526020019081526020016000206003015460166000601a600085815260200190815260200160002054815260200190815260200160002060030154105b15612b255782600e0154601a6000838152602001908152602001600020819055505b7f4c4660db760944215f41e957066d756ad5fd0eed1b4640632322eb06f77b034d8460176000878152602001908152602001600020600e0154604051612b6c9291906153d1565b60405180910390a1505050505050565b612b8461106b565b612bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bba90615446565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600254600160149054906101000a900467ffffffffffffffff16600360049054906101000a900461ffff16600360009054906101000a900463ffffffff1660016040518663ffffffff1660e01b8152600401612c65959493929190615466565b6020604051808303816000875af1158015612c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca891906154ce565b905090565b600060176000838152602001908152602001600020905060006004905060005b81811015612de5576000600182612ce49190614737565b90505b82811015612dd15760166000856001018360048110612d0957612d08614338565b5b015481526020019081526020016000206001015460166000866001018560048110612d3757612d36614338565b5b01548152602001908152602001600020600101541115612dbe576000846001018360048110612d6957612d68614338565b5b01549050846001018260048110612d8357612d82614338565b5b0154856001018460048110612d9b57612d9a614338565b5b018190555080856001018360048110612db757612db6614338565b5b0181905550505b8080612dc990614367565b915050612ce7565b508080612ddd90614367565b915050612ccd565b50505050565b600060018210158015612dff575060648211155b612e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3590615547565b60405180910390fd5b600060048054905090506000600190505b81811015612f05576004600182612e669190614304565b81548110612e7757612e76614338565b5b906000526020600020015484118015612eae575060048181548110612e9f57612e9e614338565b5b90600052602060002001548411155b15612ef25760176000868152602001908152602001600020600101600182612ed69190614304565b60048110612ee757612ee6614338565b5b015492505050612f08565b8080612efd90614367565b915050612e4f565b50505b92915050565b600060016004600784612f2191906149c3565b612f2b9190614fbf565b612f359190614737565b9050919050565b60006001600a83612f4d9190614fbf565b612f579190614737565b9050919050565b600060176000848152602001908152602001600020905060006004905060005b8181101561302c57826001018160048110612f9c57612f9b614338565b5b015460176000878152602001908152602001600020600e015403612fdc576000836005018260048110612fd257612fd1614338565b5b0181905550613019565b612ffd84846001018360048110612ff657612ff5614338565b5b015461326e565b83600501826004811061301357613012614338565b5b01819055505b808061302490614367565b915050612f7e565b5050505050565b600060176000848152602001908152602001600020905060006004905060005b818110156130b35761307c8484600101836004811061307557613074614338565b5b015461329c565b83600901826004811061309257613091614338565b5b01908161309f91906156fe565b5080806130ab90614367565b915050613053565b5050505050565b6000601760008381526020019081526020016000209050600081600e0154905060166000828152602001908152602001600020600301600081548092919061310190614367565b919050555060166000828152602001908152602001600020600101600081548092919061312d90614367565b9190505550600f5460166000838152602001908152602001600020600501600082825461315a9190614737565b9250508190555060006004905060005b8181101561323157600084600101826004811061318a57613189614338565b5b0154905083811461321d576016600082815260200190815260200160002060010160008154809291906131bc90614367565b91905055506016600082815260200190815260200160002060040160008154809291906131e890614367565b91905055506010546016600083815260200190815260200160002060050160008282546132159190614737565b925050819055505b50808061322990614367565b91505061316a565b50601154600a60008282546132469190614737565b92505081905550601254600b60008282546132619190614737565b9250508190555050505050565b60006001600683856132809190614737565b61328a9190614fbf565b6132949190614737565b905092915050565b60606048600580549050116132e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132dd90615842565b60405180910390fd5b600060486005805490506132fa9190614304565b83856133069190614737565b6133109190614fbf565b905060006009826133219190614737565b905060006005838154811061333957613338614338565b5b90600052602060002001805461334e906147bc565b80601f016020809104026020016040519081016040528092919081815260200182805461337a906147bc565b80156133c75780601f1061339c576101008083540402835291602001916133c7565b820191906000526020600020905b8154815290600101906020018083116133aa57829003601f168201915b5050505050905060006001846133dd9190614737565b90505b8281101561343c5781600582815481106133fd576133fc614338565b5b9060005260206000200160405160200161341892919061596d565b6040516020818303038152906040529150808061343490614367565b9150506133e0565b5080935050505092915050565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060c001604052806000815260200160008152602001600060ff1681526020016000815260200160008152602001600081525090565b604051806101200160405280600081526020016134bf613449565b81526020016134cc613449565b81526020016134d961358e565b815260200160008152602001600081526020016000815260200160008152602001600081525090565b8260048101928215613531579160200282015b82811115613530578251825591602001919060010190613515565b5b50905061353e91906135b5565b5090565b826004810192821561357d579160200282015b8281111561357c57825182908161356c91906156fe565b5091602001919060010190613555565b5b50905061358a91906135d2565b5090565b60405180608001604052806004905b606081526020019060019003908161359d5790505090565b5b808211156135ce5760008160009055506001016135b6565b5090565b5b808211156135f257600081816135e991906135f6565b506001016135d3565b5090565b508054613602906147bc565b6000825580601f106136145750613633565b601f01602090049060005260206000209081019061363291906135b5565b5b50565b6000819050919050565b61364981613636565b82525050565b60006020820190506136646000830184613640565b92915050565b6000604051905090565b600080fd5b600080fd5b600067ffffffffffffffff82169050919050565b61369b8161367e565b81146136a657600080fd5b50565b6000813590506136b881613692565b92915050565b600063ffffffff82169050919050565b6136d7816136be565b81146136e257600080fd5b50565b6000813590506136f4816136ce565b92915050565b600061ffff82169050919050565b613711816136fa565b811461371c57600080fd5b50565b60008135905061372e81613708565b92915050565b6000819050919050565b61374781613734565b811461375257600080fd5b50565b6000813590506137648161373e565b92915050565b6000806000806080858703121561378457613783613674565b5b6000613792878288016136a9565b94505060206137a3878288016136e5565b93505060406137b48782880161371f565b92505060606137c587828801613755565b91505092959194509250565b6137da81613636565b81146137e557600080fd5b50565b6000813590506137f7816137d1565b92915050565b60006020828403121561381357613812613674565b5b6000613821848285016137e8565b91505092915050565b600060c08201905061383f6000830189613640565b61384c6020830188613640565b6138596040830187613640565b6138666060830186613640565b6138736080830185613640565b61388060a0830184613640565b979650505050505050565b600060049050919050565b600081905092915050565b6000819050919050565b6138b481613636565b82525050565b60006138c683836138ab565b60208301905092915050565b6000602082019050919050565b6138e88161388b565b6138f28184613896565b92506138fd826138a1565b8060005b8381101561392e57815161391587826138ba565b9650613920836138d2565b925050600181019050613901565b505050505050565b600060808201905061394b60008301846138df565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61399f82613956565b810181811067ffffffffffffffff821117156139be576139bd613967565b5b80604052505050565b60006139d161366a565b90506139dd8282613996565b919050565b600067ffffffffffffffff8211156139fd576139fc613967565b5b602082029050602081019050919050565b600080fd5b6000613a26613a21846139e2565b6139c7565b90508083825260208201905060208402830185811115613a4957613a48613a0e565b5b835b81811015613a725780613a5e88826137e8565b845260208401935050602081019050613a4b565b5050509392505050565b600082601f830112613a9157613a90613951565b5b8135613aa1848260208601613a13565b91505092915050565b60008060408385031215613ac157613ac0613674565b5b6000613acf858286016137e8565b925050602083013567ffffffffffffffff811115613af057613aef613679565b5b613afc85828601613a7c565b9150509250929050565b60028110613b1357600080fd5b50565b600081359050613b2581613b06565b92915050565b600060208284031215613b4157613b40613674565b5b6000613b4f84828501613b16565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060ff82169050919050565b613b9a81613b84565b82525050565b60c082016000820151613bb660008501826138ab565b506020820151613bc960208501826138ab565b506040820151613bdc6040850182613b91565b506060820151613bef60608501826138ab565b506080820151613c0260808501826138ab565b5060a0820151613c1560a08501826138ab565b50505050565b6000613c278383613ba0565b60c08301905092915050565b6000602082019050919050565b6000613c4b82613b58565b613c558185613b63565b9350613c6083613b74565b8060005b83811015613c91578151613c788882613c1b565b9750613c8383613c33565b925050600181019050613c64565b5085935050505092915050565b60006020820190508181036000830152613cb88184613c40565b905092915050565b60008115159050919050565b613cd581613cc0565b82525050565b6000602082019050613cf06000830184613ccc565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d2182613cf6565b9050919050565b613d3181613d16565b8114613d3c57600080fd5b50565b600081359050613d4e81613d28565b92915050565b600080600060608486031215613d6d57613d6c613674565b5b6000613d7b86828701613d3f565b9350506020613d8c86828701613d3f565b9250506040613d9d86828701613d3f565b9150509250925092565b613db081613d16565b82525050565b6000602082019050613dcb6000830184613da7565b92915050565b60008060408385031215613de857613de7613674565b5b6000613df6858286016137e8565b9250506020613e07858286016137e8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b613e518161388b565b613e5b8184613e3d565b9250613e66826138a1565b8060005b83811015613e97578151613e7e87826138ba565b9650613e89836138d2565b925050600181019050613e6a565b505050505050565b600060049050919050565b600081905092915050565b6000819050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ef9578082015181840152602081019050613ede565b83811115613f08576000848401525b50505050565b6000613f1982613ebf565b613f238185613eca565b9350613f33818560208601613edb565b613f3c81613956565b840191505092915050565b6000613f538383613f0e565b905092915050565b6000602082019050919050565b6000613f7382613e9f565b613f7d8185613eaa565b935083602082028501613f8f85613eb5565b8060005b85811015613fcb5784840389528151613fac8582613f47565b9450613fb783613f5b565b925060208a01995050600181019050613f93565b50829750879550505050505092915050565b60006101e083016000830151613ff660008601826138ab565b5060208301516140096020860182613e48565b50604083015161401c60a0860182613e48565b5060608301518482036101208601526140358282613f68565b915050608083015161404b6101408601826138ab565b5060a083015161405f6101608601826138ab565b5060c08301516140736101808601826138ab565b5060e08301516140876101a08601826138ab565b5061010083015161409c6101c08601826138ab565b508091505092915050565b60006140b38383613fdd565b905092915050565b6000602082019050919050565b60006140d382613e11565b6140dd8185613e1c565b9350836020820285016140ef85613e2d565b8060005b8581101561412b578484038952815161410c85826140a7565b9450614117836140bb565b925060208a019950506001810190506140f3565b50829750879550505050505092915050565b6000602082019050818103600083015261415781846140c8565b905092915050565b60006020828403121561417557614174613674565b5b600061418384828501613d3f565b91505092915050565b61419581613b84565b82525050565b600060c0820190506141b06000830189613640565b6141bd6020830188613640565b6141ca604083018761418c565b6141d76060830186613640565b6141e46080830185613640565b6141f160a0830184613640565b979650505050505050565b6142058161367e565b82525050565b614214816136be565b82525050565b614223816136fa565b82525050565b61423281613734565b82525050565b600060808201905061424d60008301876141fc565b61425a602083018661420b565b614267604083018561421a565b6142746060830184614229565b95945050505050565b60006040820190506142926000830185613da7565b61429f6020830184613da7565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061430f82613636565b915061431a83613636565b92508282101561432d5761432c6142d5565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061437282613636565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143a4576143a36142d5565b5b600182019050919050565b600082825260208201905092915050565b7f4d6172636f4275647320746f6b656e204964206d75737420626520626574776560008201527f656e203120616e64203232303000000000000000000000000000000000000000602082015250565b600061441c602d836143af565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f506c65617365206d616b65207375726520796f75206f776e2074686973204d6160008201527f72636f4275647320746f6b656e00000000000000000000000000000000000000602082015250565b60006144ae602d836143af565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b7f42616c616e6365206973207a65726f0000000000000000000000000000000000600082015250565b600061451a600f836143af565b9150614525826144e4565b602082019050919050565b600060208201905081810360008301526145498161450d565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e6365000000600082015250565b6000614586601d836143af565b915061459182614550565b602082019050919050565b600060208201905081810360008301526145b581614579565b9050919050565b7f5f646576312063616e206e6f74206265207a65726f0000000000000000000000600082015250565b60006145f26015836143af565b91506145fd826145bc565b602082019050919050565b60006020820190508181036000830152614621816145e5565b9050919050565b7f5f646576322063616e206e6f74206265207a65726f0000000000000000000000600082015250565b600061465e6015836143af565b915061466982614628565b602082019050919050565b6000602082019050818103600083015261468d81614651565b9050919050565b7f5f6164762063616e206e6f74206265207a65726f000000000000000000000000600082015250565b60006146ca6014836143af565b91506146d582614694565b602082019050919050565b600060208201905081810360008301526146f9816146bd565b9050919050565b60006060820190506147156000830186613da7565b6147226020830185613da7565b61472f6040830184613da7565b949350505050565b600061474282613636565b915061474d83613636565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614782576147816142d5565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147d457607f821691505b6020821081036147e7576147e661478d565b5b50919050565b7f6465763120616464726573732063616e206e6f74206265207a65726f00000000600082015250565b6000614823601c836143af565b915061482e826147ed565b602082019050919050565b6000602082019050818103600083015261485281614816565b9050919050565b7f6465763220616464726573732063616e206e6f74206265207a65726f00000000600082015250565b600061488f601c836143af565b915061489a82614859565b602082019050919050565b600060208201905081810360008301526148be81614882565b9050919050565b7f61647669736f7220616464726573732063616e206e6f74206265207a65726f00600082015250565b60006148fb601f836143af565b9150614906826148c5565b602082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4465762042616c616e6365206d7573742062652067726561746572207468616e60008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061498d6025836143af565b915061499882614931565b604082019050919050565b600060208201905081810360008301526149bc81614980565b9050919050565b60006149ce82613636565b91506149d983613636565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a1257614a116142d5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a5782613636565b9150614a6283613636565b925082614a7257614a71614a1d565b5b828204905092915050565b7f436f6d6d756e6974792062616c616e6365206d7573742062652031206f72206760008201527f7265617465720000000000000000000000000000000000000000000000000000602082015250565b6000614ad96026836143af565b9150614ae482614a7d565b604082019050919050565b60006020820190508181036000830152614b0881614acc565b9050919050565b7f5468657265206973206e6f207175616c696669656420746f6b656e7320796574600082015250565b6000614b456020836143af565b9150614b5082614b0f565b602082019050919050565b60006020820190508181036000830152614b7481614b38565b9050919050565b7f53686172652070657220746f6b656e206973207a65726f000000000000000000600082015250565b6000614bb16017836143af565b9150614bbc82614b7b565b602082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b7f746f74616c47616d6556616c7565206d757374206265206e6f74206c6f77657260008201527f207468616e203100000000000000000000000000000000000000000000000000602082015250565b6000614c436027836143af565b9150614c4e82614be7565b604082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b7f536f6d657468696e672077656e742077726f6e672c20706c656173652063686160008201527f6e67652074686520746f74616c47616d6556616c756500000000000000000000602082015250565b6000614cd56036836143af565b9150614ce082614c79565b604082019050919050565b60006020820190508181036000830152614d0481614cc8565b9050919050565b7f54686973204d6172636f4275647320746f6b656e20697320616c72656164792060008201527f696e20612067616d650000000000000000000000000000000000000000000000602082015250565b6000614d676029836143af565b9150614d7282614d0b565b604082019050919050565b60006020820190508181036000830152614d9681614d5a565b9050919050565b7f506c65617365207761697420666577207365636f6e647320616e64207472792060008201527f6a6f696e696e6720616761696e00000000000000000000000000000000000000602082015250565b6000614df9602d836143af565b9150614e0482614d9d565b604082019050919050565b60006020820190508181036000830152614e2881614dec565b9050919050565b7f456e747279206665652073686f756c64206d617463682074686520726571756960008201527f7265642066656500000000000000000000000000000000000000000000000000602082015250565b6000614e8b6027836143af565b9150614e9682614e2f565b604082019050919050565b60006020820190508181036000830152614eba81614e7e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f1d6026836143af565b9150614f2882614ec1565b604082019050919050565b60006020820190508181036000830152614f4c81614f10565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f896020836143af565b9150614f9482614f53565b602082019050919050565b60006020820190508181036000830152614fb881614f7c565b9050919050565b6000614fca82613636565b9150614fd583613636565b925082614fe557614fe4614a1d565b5b828206905092915050565b600081519050614fff81613d28565b92915050565b60006020828403121561501b5761501a613674565b5b600061502984828501614ff0565b91505092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006150686010836143af565b915061507382615032565b602082019050919050565b600060208201905081810360008301526150978161505b565b9050919050565b60008160001c9050919050565b6000819050919050565b60006150c86150c38361509e565b6150ab565b9050919050565b600060049050919050565b6000819050919050565b60006150f082546150b5565b9050919050565b6000600182019050919050565b61510d816150cf565b6151178184613e3d565b9250615122826150da565b8060005b8381101561515a57615137826150e4565b61514187826138ba565b965061514c836150f7565b925050600181019050615126565b505050505050565b600060049050919050565b6000819050919050565b60008190508160005260206000209050919050565b60008154615199816147bc565b6151a38186613eca565b945060018216600081146151be57600181146151d457615207565b60ff198316865281151560200286019350615207565b6151dd85615177565b60005b838110156151ff578154818901526001820191506020810190506151e0565b808801955050505b50505092915050565b600061521c838361518c565b905092915050565b6000600182019050919050565b600061523c82615162565b6152468185613eaa565b9350836020820285016152588561516d565b8060005b85811015615293578484038952816152748582615210565b945061527f83615224565b925060208a0199505060018101905061525c565b50829750879550505050505092915050565b60006101e0830160008084015490506152bd816150b5565b6152ca60008701826138ab565b50600184016152dc6020870182615104565b50600584016152ee60a0870182615104565b50600984018583036101208701526153068382615231565b925050600d8401549050615319816150b5565b6153276101408701826138ab565b50600e8401549050615338816150b5565b6153466101608701826138ab565b50600f8401549050615357816150b5565b6153656101808701826138ab565b5060108401549050615376816150b5565b6153846101a08701826138ab565b5060118401549050615395816150b5565b6153a36101c08701826138ab565b50819250505092915050565b600060208201905081810360008301526153c981846152a5565b905092915050565b60006040820190506153e66000830185613640565b6153f36020830184613640565b9392505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006154306014836143af565b915061543b826153fa565b602082019050919050565b6000602082019050818103600083015261545f81615423565b9050919050565b600060a08201905061547b6000830188614229565b61548860208301876141fc565b615495604083018661421a565b6154a2606083018561420b565b6154af608083018461420b565b9695505050505050565b6000815190506154c8816137d1565b92915050565b6000602082840312156154e4576154e3613674565b5b60006154f2848285016154b9565b91505092915050565b7f52616e646f6d20726573756c74206973206f7574206f662072616e6765000000600082015250565b6000615531601d836143af565b915061553c826154fb565b602082019050919050565b6000602082019050818103600083015261556081615524565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026155b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615577565b6155be8683615577565b95508019841693508086168417925050509392505050565b6000819050919050565b60006155fb6155f66155f184613636565b6155d6565b613636565b9050919050565b6000819050919050565b615615836155e0565b61562961562182615602565b848454615584565b825550505050565b600090565b61563e615631565b61564981848461560c565b505050565b5b8181101561566d57615662600082615636565b60018101905061564f565b5050565b601f8211156156b25761568381615177565b61568c84615567565b8101602085101561569b578190505b6156af6156a785615567565b83018261564e565b50505b505050565b600082821c905092915050565b60006156d5600019846008026156b7565b1980831691505092915050565b60006156ee83836156c4565b9150826002028217905092915050565b61570782613ebf565b67ffffffffffffffff8111156157205761571f613967565b5b61572a82546147bc565b615735828285615671565b600060209050601f8311600181146157685760008415615756578287015190505b61576085826156e2565b8655506157c8565b601f19841661577686615177565b60005b8281101561579e57848901518255600182019150602085019450602081019050615779565b868310156157bb57848901516157b7601f8916826156c4565b8355505b6001600288020188555050505b505050505050565b7f545241434b5f56414c554553206c656e677468206d757374206265206772656160008201527f746572207468616e203732000000000000000000000000000000000000000000602082015250565b600061582c602b836143af565b9150615837826157d0565b604082019050919050565b6000602082019050818103600083015261585b8161581f565b9050919050565b600081905092915050565b600061587882613ebf565b6158828185615862565b9350615892818560208601613edb565b80840191505092915050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b60006158d4600183615862565b91506158df8261589e565b600182019050919050565b600081546158f7816147bc565b6159018186615862565b9450600182166000811461591c576001811461593157615964565b60ff1983168652811515820286019350615964565b61593a85615177565b60005b8381101561595c5781548189015260018201915060208101905061593d565b838801955050505b50505092915050565b6000615979828561586d565b9150615984826158c7565b915061599082846158ea565b9150819050939250505056fea26469706673582212204ddf30fd67f42de201bf0ec09b15451266f13e2397b2ce7ca9ec313875225fc464736f6c634300080f0033000000000000000000000000e2093b621e6231b9365194399bbb30d4348e523100000000000000000000000000000000000000000000000000000000000000bc000000000000000000000000ae975071be8f8ee67addbc1a82488f1c24858067cc294a196eeeb44da2888d17c0625cc88d70d9760a69d58d853ba6581a9ab0cd00000000000000000000000000000000000000000000000053444835ec580000
Deployed Bytecode
0x6080604052600436106102515760003560e01c80637ec9ff9611610139578063b58fea3b116100b6578063eb770d0c1161007a578063eb770d0c1461089d578063efaa55a0146108c6578063f2879bf1146108e2578063f2fde38b1461090d578063f6d361cc14610936578063fcb522aa1461096157610251565b8063b58fea3b146107c8578063c1a45417146107df578063cd9a1b631461080a578063e609426114610835578063e9f1cc6b1461087257610251565b80638e4cbc83116100fd5780638e4cbc83146106f3578063ac4511851461071e578063ae979ae61461075b578063b0c6825414610772578063b5077f441461079d57610251565b80637ec9ff961461061e578063825cedd9146106495780638456cb59146106745780638b470d861461068b5780638da5cb5b146106c857610251565b806335760c14116101d25780635eb6a78f116101965780635eb6a78f146105325780636099beec1461055d578063666352d41461058857806367b2f6a0146105b35780636d0083e8146105dc578063715018a61461060757610251565b806335760c141461045f578063379607f51461048a5780633f4ba83a146104b35780634f84e128146104ca5780635c975abb1461050757610251565b806315a40f491161021957806315a40f49146103425780631aff478b1461037f5780631fa072db146103bc5780631fe543e3146103f95780632b3b88ed1461042257610251565b8063029dd6ba1461025657806307bcd85f1461028157806309e7d2de146102aa5780630b045c67146102d5578063117a5b9014610300575b600080fd5b34801561026257600080fd5b5061026b6109a3565b604051610278919061364f565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a3919061376a565b6109a9565b005b3480156102b657600080fd5b506102bf610a62565b6040516102cc919061364f565b60405180910390f35b3480156102e157600080fd5b506102ea610a68565b6040516102f7919061364f565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906137fd565b610a6e565b6040516103399695949392919061382a565b60405180910390f35b34801561034e57600080fd5b50610369600480360381019061036491906137fd565b610aaa565b6040516103769190613936565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a191906137fd565b610b0b565b6040516103b3919061364f565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de91906137fd565b610b23565b6040516103f0919061364f565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190613aaa565b610b3b565b005b34801561042e57600080fd5b5061044960048036038101906104449190613b2b565b610bfb565b6040516104569190613c9e565b60405180910390f35b34801561046b57600080fd5b50610474610e52565b604051610481919061364f565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac91906137fd565b610e57565b005b3480156104bf57600080fd5b506104c8610ff8565b005b3480156104d657600080fd5b506104f160048036038101906104ec91906137fd565b61100a565b6040516104fe9190613936565b60405180910390f35b34801561051357600080fd5b5061051c61106b565b6040516105299190613cdb565b60405180910390f35b34801561053e57600080fd5b50610547611081565b604051610554919061364f565b60405180910390f35b34801561056957600080fd5b50610572611087565b60405161057f919061364f565b60405180910390f35b34801561059457600080fd5b5061059d61108d565b6040516105aa919061364f565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190613d54565b611093565b005b3480156105e857600080fd5b506105f16112eb565b6040516105fe919061364f565b60405180910390f35b34801561061357600080fd5b5061061c6112f0565b005b34801561062a57600080fd5b50610633611304565b604051610640919061364f565b60405180910390f35b34801561065557600080fd5b5061065e611309565b60405161066b919061364f565b60405180910390f35b34801561068057600080fd5b50610689611315565b005b34801561069757600080fd5b506106b260048036038101906106ad91906137fd565b611327565b6040516106bf919061364f565b60405180910390f35b3480156106d457600080fd5b506106dd61133f565b6040516106ea9190613db6565b60405180910390f35b3480156106ff57600080fd5b50610708611368565b604051610715919061364f565b60405180910390f35b34801561072a57600080fd5b5061074560048036038101906107409190613dd1565b61136e565b604051610752919061413d565b60405180910390f35b34801561076757600080fd5b506107706115ea565b005b34801561077e57600080fd5b506107876119b8565b604051610794919061364f565b60405180910390f35b3480156107a957600080fd5b506107b26119be565b6040516107bf919061364f565b60405180910390f35b3480156107d457600080fd5b506107dd6119c4565b005b3480156107eb57600080fd5b506107f4611b3e565b604051610801919061364f565b60405180910390f35b34801561081657600080fd5b5061081f611b44565b60405161082c919061364f565b60405180910390f35b34801561084157600080fd5b5061085c600480360381019061085791906137fd565b611b4a565b604051610869919061364f565b60405180910390f35b34801561087e57600080fd5b50610887611b62565b604051610894919061364f565b60405180910390f35b3480156108a957600080fd5b506108c460048036038101906108bf91906137fd565b611b68565b005b6108e060048036038101906108db91906137fd565b611d14565b005b3480156108ee57600080fd5b506108f761210c565b604051610904919061364f565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f919061415f565b612118565b005b34801561094257600080fd5b5061094b61219b565b604051610958919061364f565b60405180910390f35b34801561096d57600080fd5b50610988600480360381019061098391906137fd565b6121a1565b60405161099a9695949392919061419b565b60405180910390f35b60115481565b6109b16121ea565b83600160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600360006101000a81548163ffffffff021916908363ffffffff16021790555081600360046101000a81548161ffff021916908361ffff160217905550806002819055507f21c3280824c4b41c8107036783a63f9dc0ac271a24f7b296ce7e05811b12e32184848484604051610a549493929190614238565b60405180910390a150505050565b60095481565b60125481565b601760205280600052604060002060009150905080600001549080600d01549080600e01549080600f0154908060100154908060110154905086565b610ab2613449565b60176000838152602001908152602001600020600101600480602002604051908101604052809291908260048015610aff576020028201915b815481526020019060010190808311610aeb575b50505050509050919050565b601b6020528060005260406000206000915090505481565b60196020528060005260406000206000915090505481565b7f000000000000000000000000ae975071be8f8ee67addbc1a82488f1c2485806773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bed57337f000000000000000000000000ae975071be8f8ee67addbc1a82488f1c248580676040517f1cf993f4000000000000000000000000000000000000000000000000000000008152600401610be492919061427d565b60405180910390fd5b610bf78282612268565b5050565b60606000601e67ffffffffffffffff811115610c1a57610c19613967565b5b604051908082528060200260200182016040528015610c5357816020015b610c4061346b565b815260200190600190039081610c385790505b50905060006001811115610c6a57610c696142a6565b5b836001811115610c7d57610c7c6142a6565b5b03610d50576000600190505b601e8111610d4e5760166000601a60008481526020019081526020016000205481526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff1660ff1660ff168152602001600382015481526020016004820154815260200160058201548152505082600183610d1f9190614304565b81518110610d3057610d2f614338565b5b60200260200101819052508080610d4690614367565b915050610c89565b505b600180811115610d6357610d626142a6565b5b836001811115610d7657610d756142a6565b5b03610e49576000600190505b601e8111610e475760166000601b60008481526020019081526020016000205481526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff1660ff1660ff168152602001600382015481526020016004820154815260200160058201548152505082600183610e189190614304565b81518110610e2957610e28614338565b5b60200260200101819052508080610e3f90614367565b915050610d82565b505b80915050919050565b600481565b600081118015610e6957506108988111155b610ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9f90614432565b60405180910390fd5b610eb1816122af565b610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee7906144c4565b60405180910390fd5b60006016600083815260200190815260200160002060050154905060008111610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590614530565b60405180910390fd5b80471015610f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f889061459c565b60405180910390fd5b600060166000848152602001908152602001600020600501819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ff3573d6000803e3d6000fd5b505050565b6110006121ea565b611008612387565b565b611012613449565b6017600083815260200190815260200160002060050160048060200260405190810160405280929190826004801561105f576020028201915b81548152602001906001019080831161104b575b50505050509050919050565b60008060009054906101000a900460ff16905090565b60185481565b60105481565b600f5481565b61109b6121ea565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190614608565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117090614674565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111df906146e0565b60405180910390fd5b82600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fb010a24183c66b3769044101cb999cf598afb1f00e0104e4bf105780fe67ffd68383836040516112de93929190614700565b60405180910390a1505050565b600481565b6112f86121ea565b61130260006123e9565b565b601e81565b670de0b6b3a764000081565b61131d6121ea565b6113256124ae565b565b60146020528060005260406000206000915090505481565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b5481565b60606000838361137e9190614304565b9050600060018261138f9190614737565b67ffffffffffffffff8111156113a8576113a7613967565b5b6040519080825280602002602001820160405280156113e157816020015b6113ce6134a4565b8152602001906001900390816113c65790505b5090506000808690505b8581116115dd5760176000828152602001908152602001600020604051806101200160405290816000820154815260200160018201600480602002604051908101604052809291908260048015611457576020028201915b815481526020019060010190808311611443575b505050505081526020016005820160048060200260405190810160405280929190826004801561149c576020028201915b815481526020019060010190808311611488575b5050505050815260200160098201600480602002604051908101604052809291906000905b828210156115645783820180546114d7906147bc565b80601f0160208091040260200160405190810160405280929190818152602001828054611503906147bc565b80156115505780601f1061152557610100808354040283529160200191611550565b820191906000526020600020905b81548152906001019060200180831161153357829003601f168201915b5050505050815260200190600101906114c1565b505050508152602001600d8201548152602001600e8201548152602001600f8201548152602001601082015481526020016011820154815250508383815181106115b1576115b0614338565b5b602002602001018190525081806115c790614367565b92505080806115d590614367565b9150506113eb565b5081935050505092915050565b6115f26121ea565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614839565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170b906148a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036117a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179c90614911565b60405180910390fd5b6000600a54116117ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e1906149a3565b60405180910390fd5b600a5447101561182f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118269061459c565b60405180910390fd5b6000600a5490506000600a819055506000606460288361184f91906149c3565b6118599190614a4c565b90506000606460148461186c91906149c3565b6118769190614a4c565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156118e0573d6000803e3d6000fd5b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015611949573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156119b2573d6000803e3d6000fd5b50505050565b60135481565b61089881565b670de0b6b3a7640000600b541015611a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0890614aef565b60405180910390fd5b600060135411611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614b5b565b60405180910390fd5b601354600b541015611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490614bc7565b60405180910390fd5b6000601354600b54611aaf9190614a4c565b90506000600b819055506000600190505b6108988111611b3a576016600082815260200190815260200160002060020160009054906101000a900460ff1660ff1682611afb91906149c3565b601660008381526020019081526020016000206005016000828254611b209190614737565b925050819055508080611b3290614367565b915050611ac0565b5050565b600d5481565b600a5481565b601a6020528060005260406000206000915090505481565b60155481565b611b706121ea565b670de0b6b3a7640000811015611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290614c59565b60405180910390fd5b80600d81905550600481611bcf9190614a4c565b600e819055506064603382611be491906149c3565b611bee9190614a4c565b600f8190555060006064602283611c0591906149c3565b611c0f9190614a4c565b9050600381611c1e9190614a4c565b6010819055506064600a83611c3391906149c3565b611c3d9190614a4c565b6011819055506064600583611c5291906149c3565b611c5c9190614a4c565b601281905550816012546011546003601054611c7891906149c3565b600f54611c859190614737565b611c8f9190614737565b611c999190614737565b14611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090614ceb565b60405180910390fd5b7f24a0b2e591795f2c27be52ff14a57d0a39ac957304305bc05e8b04be49e8fe1582604051611d08919061364f565b60405180910390a15050565b611d1c612510565b600081118015611d2e57506108988111155b611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6490614432565b60405180910390fd5b611d76816122af565b611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906144c4565b60405180910390fd5b611dbe8161255a565b611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490614d7d565b60405180910390fd5b600460155410611e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3990614e0f565b60405180910390fd5b600e543414611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90614ea1565b60405180910390fd5b60156000815480929190611e9990614367565b91905055508060146000601554815260200190815260200160002081905550806016600083815260200190815260200160002060000181905550610898601354108015611f0c575060006016600083815260200190815260200160002060020160009054906101000a900460ff1660ff16145b8015611f2f57506004601660008381526020019081526020016000206001015410155b15611f7d5760016016600083815260200190815260200160002060020160006101000a81548160ff021916908360ff16021790555060136000815480929190611f7790614367565b91905055505b60008190506000806001905082601b60008381526020019081526020016000205403611fa857600191505b81612052576000600290505b601e81116120505783601b60008381526020019081526020016000205403611fdf5760019250612050565b60166000601b60008581526020019081526020016000205481526020019081526020016000206001015460166000601b600085815260200190815260200160002054815260200190815260200160002060010154101561203d578091505b808061204890614367565b915050611fb4565b505b8115801561209e5750601660008481526020019081526020016000206001015460166000601b600085815260200190815260200160002054815260200190815260200160002060010154105b156120bc5782601b6000838152602001908152602001600020819055505b7ffe9befc84fdb142bebdf33b7564a6dc1d47e60864b996a5f6c7949c210d1f544846040516120eb919061364f565b60405180910390a1600460155403612106576121056125ba565b5b50505050565b670de0b6b3a764000081565b6121206121ea565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614f33565b60405180910390fd5b612198816123e9565b50565b600e5481565b60166020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060030154908060040154908060050154905086565b6121f2612912565b73ffffffffffffffffffffffffffffffffffffffff1661221061133f565b73ffffffffffffffffffffffffffffffffffffffff1614612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225d90614f9f565b60405180910390fd5b565b6000600160648360008151811061228257612281614338565b5b60200260200101516122949190614fbf565b61229e9190614737565b90506122aa838261291a565b505050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161230d919061364f565b602060405180830381865afa15801561232a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234e9190615005565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614915050919050565b61238f612b7c565b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123d2612912565b6040516123df9190613db6565b60405180910390a1565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124b6612510565b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586124f9612912565b6040516125069190613db6565b60405180910390a1565b61251861106b565b15612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f9061507e565b60405180910390fd5b565b600080600090505b6015548110156125af57826014600060018461257e9190614737565b8152602001908152602001600020540361259c5760009150506125b5565b80806125a790614367565b915050612562565b50600190505b919050565b601860008154809291906125cd90614367565b9190505550600d54600960008282546125e69190614737565b925050819055506125f5613449565b6014600060018152602001908152602001600020548160006004811061261e5761261d614338565b5b602002018181525050601460006002815260200190815260200160002054816001600481106126505761264f614338565b5b6020020181815250506014600060038152602001908152602001600020548160026004811061268257612681614338565b5b602002018181525050601460006004815260200190815260200160002054816003600481106126b4576126b3614338565b5b6020020181815250506000604051806080016040528060008152602001600081526020016000815260200160008152509050600060405180608001604052806040518060200160405280600081525081526020016040518060200160405280600081525081526020016040518060200160405280600081525081526020016040518060200160405280600081525081525090506040518061012001604052806018548152602001848152602001838152602001828152602001600081526020016000815260200160008152602001600081526020016000815250601760006018548152602001908152602001600020600082015181600001556020820151816001019060046127c4929190613502565b506040820151816005019060046127dc929190613502565b506060820151816009019060046127f4929190613542565b50608082015181600d015560a082015181600e015560c082015181600f015560e082015181601001556101008201518160110155905050600060146000600181526020019081526020016000208190555060006014600060028152602001908152602001600020819055506000601460006003815260200190815260200160002081905550600060146000600481526020019081526020016000208190555060006015819055507f52e1c72d80850618c805768e266b9f1959adfcdb06464930b838a1016e399cb36017600060185481526020019081526020016000206040516128de91906153af565b60405180910390a160006128f0612bc5565b9050601854601960008381526020019081526020016000208190555050505050565b600033905090565b60006019600084815260200190815260200160002054905061293b81612cad565b600060176000838152602001908152602001600020905061295c8284612deb565b81600e01819055508281601101819055504281600d018190555061298c601854846129879190614737565b612f0e565b81600f01819055506129b66003601854856129a79190614737565b6129b19190614737565b612f3c565b81601001819055506129c88284612f5e565b6129d28284613033565b6129db826130ba565b6000806001905082600e0154601a60008381526020019081526020016000205403612a0557600191505b81612ab3576000600290505b601e8111612ab15783600e0154601a60008381526020019081526020016000205403612a405760019250612ab1565b60166000601a60008581526020019081526020016000205481526020019081526020016000206003015460166000601a6000858152602001908152602001600020548152602001908152602001600020600301541015612a9e578091505b8080612aa990614367565b915050612a11565b505b81158015612b0357506016600084600e015481526020019081526020016000206003015460166000601a600085815260200190815260200160002054815260200190815260200160002060030154105b15612b255782600e0154601a6000838152602001908152602001600020819055505b7f4c4660db760944215f41e957066d756ad5fd0eed1b4640632322eb06f77b034d8460176000878152602001908152602001600020600e0154604051612b6c9291906153d1565b60405180910390a1505050505050565b612b8461106b565b612bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bba90615446565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600254600160149054906101000a900467ffffffffffffffff16600360049054906101000a900461ffff16600360009054906101000a900463ffffffff1660016040518663ffffffff1660e01b8152600401612c65959493929190615466565b6020604051808303816000875af1158015612c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca891906154ce565b905090565b600060176000838152602001908152602001600020905060006004905060005b81811015612de5576000600182612ce49190614737565b90505b82811015612dd15760166000856001018360048110612d0957612d08614338565b5b015481526020019081526020016000206001015460166000866001018560048110612d3757612d36614338565b5b01548152602001908152602001600020600101541115612dbe576000846001018360048110612d6957612d68614338565b5b01549050846001018260048110612d8357612d82614338565b5b0154856001018460048110612d9b57612d9a614338565b5b018190555080856001018360048110612db757612db6614338565b5b0181905550505b8080612dc990614367565b915050612ce7565b508080612ddd90614367565b915050612ccd565b50505050565b600060018210158015612dff575060648211155b612e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3590615547565b60405180910390fd5b600060048054905090506000600190505b81811015612f05576004600182612e669190614304565b81548110612e7757612e76614338565b5b906000526020600020015484118015612eae575060048181548110612e9f57612e9e614338565b5b90600052602060002001548411155b15612ef25760176000868152602001908152602001600020600101600182612ed69190614304565b60048110612ee757612ee6614338565b5b015492505050612f08565b8080612efd90614367565b915050612e4f565b50505b92915050565b600060016004600784612f2191906149c3565b612f2b9190614fbf565b612f359190614737565b9050919050565b60006001600a83612f4d9190614fbf565b612f579190614737565b9050919050565b600060176000848152602001908152602001600020905060006004905060005b8181101561302c57826001018160048110612f9c57612f9b614338565b5b015460176000878152602001908152602001600020600e015403612fdc576000836005018260048110612fd257612fd1614338565b5b0181905550613019565b612ffd84846001018360048110612ff657612ff5614338565b5b015461326e565b83600501826004811061301357613012614338565b5b01819055505b808061302490614367565b915050612f7e565b5050505050565b600060176000848152602001908152602001600020905060006004905060005b818110156130b35761307c8484600101836004811061307557613074614338565b5b015461329c565b83600901826004811061309257613091614338565b5b01908161309f91906156fe565b5080806130ab90614367565b915050613053565b5050505050565b6000601760008381526020019081526020016000209050600081600e0154905060166000828152602001908152602001600020600301600081548092919061310190614367565b919050555060166000828152602001908152602001600020600101600081548092919061312d90614367565b9190505550600f5460166000838152602001908152602001600020600501600082825461315a9190614737565b9250508190555060006004905060005b8181101561323157600084600101826004811061318a57613189614338565b5b0154905083811461321d576016600082815260200190815260200160002060010160008154809291906131bc90614367565b91905055506016600082815260200190815260200160002060040160008154809291906131e890614367565b91905055506010546016600083815260200190815260200160002060050160008282546132159190614737565b925050819055505b50808061322990614367565b91505061316a565b50601154600a60008282546132469190614737565b92505081905550601254600b60008282546132619190614737565b9250508190555050505050565b60006001600683856132809190614737565b61328a9190614fbf565b6132949190614737565b905092915050565b60606048600580549050116132e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132dd90615842565b60405180910390fd5b600060486005805490506132fa9190614304565b83856133069190614737565b6133109190614fbf565b905060006009826133219190614737565b905060006005838154811061333957613338614338565b5b90600052602060002001805461334e906147bc565b80601f016020809104026020016040519081016040528092919081815260200182805461337a906147bc565b80156133c75780601f1061339c576101008083540402835291602001916133c7565b820191906000526020600020905b8154815290600101906020018083116133aa57829003601f168201915b5050505050905060006001846133dd9190614737565b90505b8281101561343c5781600582815481106133fd576133fc614338565b5b9060005260206000200160405160200161341892919061596d565b6040516020818303038152906040529150808061343490614367565b9150506133e0565b5080935050505092915050565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060c001604052806000815260200160008152602001600060ff1681526020016000815260200160008152602001600081525090565b604051806101200160405280600081526020016134bf613449565b81526020016134cc613449565b81526020016134d961358e565b815260200160008152602001600081526020016000815260200160008152602001600081525090565b8260048101928215613531579160200282015b82811115613530578251825591602001919060010190613515565b5b50905061353e91906135b5565b5090565b826004810192821561357d579160200282015b8281111561357c57825182908161356c91906156fe565b5091602001919060010190613555565b5b50905061358a91906135d2565b5090565b60405180608001604052806004905b606081526020019060019003908161359d5790505090565b5b808211156135ce5760008160009055506001016135b6565b5090565b5b808211156135f257600081816135e991906135f6565b506001016135d3565b5090565b508054613602906147bc565b6000825580601f106136145750613633565b601f01602090049060005260206000209081019061363291906135b5565b5b50565b6000819050919050565b61364981613636565b82525050565b60006020820190506136646000830184613640565b92915050565b6000604051905090565b600080fd5b600080fd5b600067ffffffffffffffff82169050919050565b61369b8161367e565b81146136a657600080fd5b50565b6000813590506136b881613692565b92915050565b600063ffffffff82169050919050565b6136d7816136be565b81146136e257600080fd5b50565b6000813590506136f4816136ce565b92915050565b600061ffff82169050919050565b613711816136fa565b811461371c57600080fd5b50565b60008135905061372e81613708565b92915050565b6000819050919050565b61374781613734565b811461375257600080fd5b50565b6000813590506137648161373e565b92915050565b6000806000806080858703121561378457613783613674565b5b6000613792878288016136a9565b94505060206137a3878288016136e5565b93505060406137b48782880161371f565b92505060606137c587828801613755565b91505092959194509250565b6137da81613636565b81146137e557600080fd5b50565b6000813590506137f7816137d1565b92915050565b60006020828403121561381357613812613674565b5b6000613821848285016137e8565b91505092915050565b600060c08201905061383f6000830189613640565b61384c6020830188613640565b6138596040830187613640565b6138666060830186613640565b6138736080830185613640565b61388060a0830184613640565b979650505050505050565b600060049050919050565b600081905092915050565b6000819050919050565b6138b481613636565b82525050565b60006138c683836138ab565b60208301905092915050565b6000602082019050919050565b6138e88161388b565b6138f28184613896565b92506138fd826138a1565b8060005b8381101561392e57815161391587826138ba565b9650613920836138d2565b925050600181019050613901565b505050505050565b600060808201905061394b60008301846138df565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61399f82613956565b810181811067ffffffffffffffff821117156139be576139bd613967565b5b80604052505050565b60006139d161366a565b90506139dd8282613996565b919050565b600067ffffffffffffffff8211156139fd576139fc613967565b5b602082029050602081019050919050565b600080fd5b6000613a26613a21846139e2565b6139c7565b90508083825260208201905060208402830185811115613a4957613a48613a0e565b5b835b81811015613a725780613a5e88826137e8565b845260208401935050602081019050613a4b565b5050509392505050565b600082601f830112613a9157613a90613951565b5b8135613aa1848260208601613a13565b91505092915050565b60008060408385031215613ac157613ac0613674565b5b6000613acf858286016137e8565b925050602083013567ffffffffffffffff811115613af057613aef613679565b5b613afc85828601613a7c565b9150509250929050565b60028110613b1357600080fd5b50565b600081359050613b2581613b06565b92915050565b600060208284031215613b4157613b40613674565b5b6000613b4f84828501613b16565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600060ff82169050919050565b613b9a81613b84565b82525050565b60c082016000820151613bb660008501826138ab565b506020820151613bc960208501826138ab565b506040820151613bdc6040850182613b91565b506060820151613bef60608501826138ab565b506080820151613c0260808501826138ab565b5060a0820151613c1560a08501826138ab565b50505050565b6000613c278383613ba0565b60c08301905092915050565b6000602082019050919050565b6000613c4b82613b58565b613c558185613b63565b9350613c6083613b74565b8060005b83811015613c91578151613c788882613c1b565b9750613c8383613c33565b925050600181019050613c64565b5085935050505092915050565b60006020820190508181036000830152613cb88184613c40565b905092915050565b60008115159050919050565b613cd581613cc0565b82525050565b6000602082019050613cf06000830184613ccc565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d2182613cf6565b9050919050565b613d3181613d16565b8114613d3c57600080fd5b50565b600081359050613d4e81613d28565b92915050565b600080600060608486031215613d6d57613d6c613674565b5b6000613d7b86828701613d3f565b9350506020613d8c86828701613d3f565b9250506040613d9d86828701613d3f565b9150509250925092565b613db081613d16565b82525050565b6000602082019050613dcb6000830184613da7565b92915050565b60008060408385031215613de857613de7613674565b5b6000613df6858286016137e8565b9250506020613e07858286016137e8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b613e518161388b565b613e5b8184613e3d565b9250613e66826138a1565b8060005b83811015613e97578151613e7e87826138ba565b9650613e89836138d2565b925050600181019050613e6a565b505050505050565b600060049050919050565b600081905092915050565b6000819050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ef9578082015181840152602081019050613ede565b83811115613f08576000848401525b50505050565b6000613f1982613ebf565b613f238185613eca565b9350613f33818560208601613edb565b613f3c81613956565b840191505092915050565b6000613f538383613f0e565b905092915050565b6000602082019050919050565b6000613f7382613e9f565b613f7d8185613eaa565b935083602082028501613f8f85613eb5565b8060005b85811015613fcb5784840389528151613fac8582613f47565b9450613fb783613f5b565b925060208a01995050600181019050613f93565b50829750879550505050505092915050565b60006101e083016000830151613ff660008601826138ab565b5060208301516140096020860182613e48565b50604083015161401c60a0860182613e48565b5060608301518482036101208601526140358282613f68565b915050608083015161404b6101408601826138ab565b5060a083015161405f6101608601826138ab565b5060c08301516140736101808601826138ab565b5060e08301516140876101a08601826138ab565b5061010083015161409c6101c08601826138ab565b508091505092915050565b60006140b38383613fdd565b905092915050565b6000602082019050919050565b60006140d382613e11565b6140dd8185613e1c565b9350836020820285016140ef85613e2d565b8060005b8581101561412b578484038952815161410c85826140a7565b9450614117836140bb565b925060208a019950506001810190506140f3565b50829750879550505050505092915050565b6000602082019050818103600083015261415781846140c8565b905092915050565b60006020828403121561417557614174613674565b5b600061418384828501613d3f565b91505092915050565b61419581613b84565b82525050565b600060c0820190506141b06000830189613640565b6141bd6020830188613640565b6141ca604083018761418c565b6141d76060830186613640565b6141e46080830185613640565b6141f160a0830184613640565b979650505050505050565b6142058161367e565b82525050565b614214816136be565b82525050565b614223816136fa565b82525050565b61423281613734565b82525050565b600060808201905061424d60008301876141fc565b61425a602083018661420b565b614267604083018561421a565b6142746060830184614229565b95945050505050565b60006040820190506142926000830185613da7565b61429f6020830184613da7565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061430f82613636565b915061431a83613636565b92508282101561432d5761432c6142d5565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061437282613636565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143a4576143a36142d5565b5b600182019050919050565b600082825260208201905092915050565b7f4d6172636f4275647320746f6b656e204964206d75737420626520626574776560008201527f656e203120616e64203232303000000000000000000000000000000000000000602082015250565b600061441c602d836143af565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b7f506c65617365206d616b65207375726520796f75206f776e2074686973204d6160008201527f72636f4275647320746f6b656e00000000000000000000000000000000000000602082015250565b60006144ae602d836143af565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b7f42616c616e6365206973207a65726f0000000000000000000000000000000000600082015250565b600061451a600f836143af565b9150614525826144e4565b602082019050919050565b600060208201905081810360008301526145498161450d565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e6365000000600082015250565b6000614586601d836143af565b915061459182614550565b602082019050919050565b600060208201905081810360008301526145b581614579565b9050919050565b7f5f646576312063616e206e6f74206265207a65726f0000000000000000000000600082015250565b60006145f26015836143af565b91506145fd826145bc565b602082019050919050565b60006020820190508181036000830152614621816145e5565b9050919050565b7f5f646576322063616e206e6f74206265207a65726f0000000000000000000000600082015250565b600061465e6015836143af565b915061466982614628565b602082019050919050565b6000602082019050818103600083015261468d81614651565b9050919050565b7f5f6164762063616e206e6f74206265207a65726f000000000000000000000000600082015250565b60006146ca6014836143af565b91506146d582614694565b602082019050919050565b600060208201905081810360008301526146f9816146bd565b9050919050565b60006060820190506147156000830186613da7565b6147226020830185613da7565b61472f6040830184613da7565b949350505050565b600061474282613636565b915061474d83613636565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614782576147816142d5565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806147d457607f821691505b6020821081036147e7576147e661478d565b5b50919050565b7f6465763120616464726573732063616e206e6f74206265207a65726f00000000600082015250565b6000614823601c836143af565b915061482e826147ed565b602082019050919050565b6000602082019050818103600083015261485281614816565b9050919050565b7f6465763220616464726573732063616e206e6f74206265207a65726f00000000600082015250565b600061488f601c836143af565b915061489a82614859565b602082019050919050565b600060208201905081810360008301526148be81614882565b9050919050565b7f61647669736f7220616464726573732063616e206e6f74206265207a65726f00600082015250565b60006148fb601f836143af565b9150614906826148c5565b602082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4465762042616c616e6365206d7573742062652067726561746572207468616e60008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061498d6025836143af565b915061499882614931565b604082019050919050565b600060208201905081810360008301526149bc81614980565b9050919050565b60006149ce82613636565b91506149d983613636565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a1257614a116142d5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a5782613636565b9150614a6283613636565b925082614a7257614a71614a1d565b5b828204905092915050565b7f436f6d6d756e6974792062616c616e6365206d7573742062652031206f72206760008201527f7265617465720000000000000000000000000000000000000000000000000000602082015250565b6000614ad96026836143af565b9150614ae482614a7d565b604082019050919050565b60006020820190508181036000830152614b0881614acc565b9050919050565b7f5468657265206973206e6f207175616c696669656420746f6b656e7320796574600082015250565b6000614b456020836143af565b9150614b5082614b0f565b602082019050919050565b60006020820190508181036000830152614b7481614b38565b9050919050565b7f53686172652070657220746f6b656e206973207a65726f000000000000000000600082015250565b6000614bb16017836143af565b9150614bbc82614b7b565b602082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b7f746f74616c47616d6556616c7565206d757374206265206e6f74206c6f77657260008201527f207468616e203100000000000000000000000000000000000000000000000000602082015250565b6000614c436027836143af565b9150614c4e82614be7565b604082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b7f536f6d657468696e672077656e742077726f6e672c20706c656173652063686160008201527f6e67652074686520746f74616c47616d6556616c756500000000000000000000602082015250565b6000614cd56036836143af565b9150614ce082614c79565b604082019050919050565b60006020820190508181036000830152614d0481614cc8565b9050919050565b7f54686973204d6172636f4275647320746f6b656e20697320616c72656164792060008201527f696e20612067616d650000000000000000000000000000000000000000000000602082015250565b6000614d676029836143af565b9150614d7282614d0b565b604082019050919050565b60006020820190508181036000830152614d9681614d5a565b9050919050565b7f506c65617365207761697420666577207365636f6e647320616e64207472792060008201527f6a6f696e696e6720616761696e00000000000000000000000000000000000000602082015250565b6000614df9602d836143af565b9150614e0482614d9d565b604082019050919050565b60006020820190508181036000830152614e2881614dec565b9050919050565b7f456e747279206665652073686f756c64206d617463682074686520726571756960008201527f7265642066656500000000000000000000000000000000000000000000000000602082015250565b6000614e8b6027836143af565b9150614e9682614e2f565b604082019050919050565b60006020820190508181036000830152614eba81614e7e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614f1d6026836143af565b9150614f2882614ec1565b604082019050919050565b60006020820190508181036000830152614f4c81614f10565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f896020836143af565b9150614f9482614f53565b602082019050919050565b60006020820190508181036000830152614fb881614f7c565b9050919050565b6000614fca82613636565b9150614fd583613636565b925082614fe557614fe4614a1d565b5b828206905092915050565b600081519050614fff81613d28565b92915050565b60006020828403121561501b5761501a613674565b5b600061502984828501614ff0565b91505092915050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006150686010836143af565b915061507382615032565b602082019050919050565b600060208201905081810360008301526150978161505b565b9050919050565b60008160001c9050919050565b6000819050919050565b60006150c86150c38361509e565b6150ab565b9050919050565b600060049050919050565b6000819050919050565b60006150f082546150b5565b9050919050565b6000600182019050919050565b61510d816150cf565b6151178184613e3d565b9250615122826150da565b8060005b8381101561515a57615137826150e4565b61514187826138ba565b965061514c836150f7565b925050600181019050615126565b505050505050565b600060049050919050565b6000819050919050565b60008190508160005260206000209050919050565b60008154615199816147bc565b6151a38186613eca565b945060018216600081146151be57600181146151d457615207565b60ff198316865281151560200286019350615207565b6151dd85615177565b60005b838110156151ff578154818901526001820191506020810190506151e0565b808801955050505b50505092915050565b600061521c838361518c565b905092915050565b6000600182019050919050565b600061523c82615162565b6152468185613eaa565b9350836020820285016152588561516d565b8060005b85811015615293578484038952816152748582615210565b945061527f83615224565b925060208a0199505060018101905061525c565b50829750879550505050505092915050565b60006101e0830160008084015490506152bd816150b5565b6152ca60008701826138ab565b50600184016152dc6020870182615104565b50600584016152ee60a0870182615104565b50600984018583036101208701526153068382615231565b925050600d8401549050615319816150b5565b6153276101408701826138ab565b50600e8401549050615338816150b5565b6153466101608701826138ab565b50600f8401549050615357816150b5565b6153656101808701826138ab565b5060108401549050615376816150b5565b6153846101a08701826138ab565b5060118401549050615395816150b5565b6153a36101c08701826138ab565b50819250505092915050565b600060208201905081810360008301526153c981846152a5565b905092915050565b60006040820190506153e66000830185613640565b6153f36020830184613640565b9392505050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006154306014836143af565b915061543b826153fa565b602082019050919050565b6000602082019050818103600083015261545f81615423565b9050919050565b600060a08201905061547b6000830188614229565b61548860208301876141fc565b615495604083018661421a565b6154a2606083018561420b565b6154af608083018461420b565b9695505050505050565b6000815190506154c8816137d1565b92915050565b6000602082840312156154e4576154e3613674565b5b60006154f2848285016154b9565b91505092915050565b7f52616e646f6d20726573756c74206973206f7574206f662072616e6765000000600082015250565b6000615531601d836143af565b915061553c826154fb565b602082019050919050565b6000602082019050818103600083015261556081615524565b9050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026155b47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615577565b6155be8683615577565b95508019841693508086168417925050509392505050565b6000819050919050565b60006155fb6155f66155f184613636565b6155d6565b613636565b9050919050565b6000819050919050565b615615836155e0565b61562961562182615602565b848454615584565b825550505050565b600090565b61563e615631565b61564981848461560c565b505050565b5b8181101561566d57615662600082615636565b60018101905061564f565b5050565b601f8211156156b25761568381615177565b61568c84615567565b8101602085101561569b578190505b6156af6156a785615567565b83018261564e565b50505b505050565b600082821c905092915050565b60006156d5600019846008026156b7565b1980831691505092915050565b60006156ee83836156c4565b9150826002028217905092915050565b61570782613ebf565b67ffffffffffffffff8111156157205761571f613967565b5b61572a82546147bc565b615735828285615671565b600060209050601f8311600181146157685760008415615756578287015190505b61576085826156e2565b8655506157c8565b601f19841661577686615177565b60005b8281101561579e57848901518255600182019150602085019450602081019050615779565b868310156157bb57848901516157b7601f8916826156c4565b8355505b6001600288020188555050505b505050505050565b7f545241434b5f56414c554553206c656e677468206d757374206265206772656160008201527f746572207468616e203732000000000000000000000000000000000000000000602082015250565b600061582c602b836143af565b9150615837826157d0565b604082019050919050565b6000602082019050818103600083015261585b8161581f565b9050919050565b600081905092915050565b600061587882613ebf565b6158828185615862565b9350615892818560208601613edb565b80840191505092915050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b60006158d4600183615862565b91506158df8261589e565b600182019050919050565b600081546158f7816147bc565b6159018186615862565b9450600182166000811461591c576001811461593157615964565b60ff1983168652811515820286019350615964565b61593a85615177565b60005b8381101561595c5781548189015260018201915060208101905061593d565b838801955050505b50505092915050565b6000615979828561586d565b9150615984826158c7565b915061599082846158ea565b9150819050939250505056fea26469706673582212204ddf30fd67f42de201bf0ec09b15451266f13e2397b2ce7ca9ec313875225fc464736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e2093b621e6231b9365194399bbb30d4348e523100000000000000000000000000000000000000000000000000000000000000bc000000000000000000000000ae975071be8f8ee67addbc1a82488f1c24858067cc294a196eeeb44da2888d17c0625cc88d70d9760a69d58d853ba6581a9ab0cd00000000000000000000000000000000000000000000000053444835ec580000
-----Decoded View---------------
Arg [0] : MarcoBudsContractAddress (address): 0xE2093b621e6231B9365194399bbb30d4348e5231
Arg [1] : subscriptionId (uint64): 188
Arg [2] : _vrfCoordinator (address): 0xAE975071Be8F8eE67addBC1A82488F1C24858067
Arg [3] : _keyHash (bytes32): 0xcc294a196eeeb44da2888d17c0625cc88d70d9760a69d58d853ba6581a9ab0cd
Arg [4] : totalGameValue (uint256): 6000000000000000000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000e2093b621e6231b9365194399bbb30d4348e5231
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000bc
Arg [2] : 000000000000000000000000ae975071be8f8ee67addbc1a82488f1c24858067
Arg [3] : cc294a196eeeb44da2888d17c0625cc88d70d9760a69d58d853ba6581a9ab0cd
Arg [4] : 00000000000000000000000000000000000000000000000053444835ec580000
Deployed Bytecode Sourcemap
1229:22705:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5539:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7794:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4623:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5581:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6151:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;15057:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6612:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6386:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6618:256:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14442:582:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5749:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17450:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8383:69;;;;;;;;;;;;;:::i;:::-;;15229:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1615:84:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6194:27:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5495:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5452:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18805:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3946:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1831:101:3;;;;;;;;;;;;;:::i;:::-;;6477:38:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4850:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8310:65;;;;;;;;;;;;;:::i;:::-;;5964:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1201:85:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4746:41:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14030:351;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18047:715;;;;;;;;;;;;;:::i;:::-;;5876:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3899:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16530:866;;;;;;;;;;;;;:::i;:::-;;5323:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4705;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6547:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6019:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19240:1102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20372:2225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5112:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2081:198:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5410:36:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6088:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;5539:36;;;;:::o;7794:411::-;1094:13:3;:11;:13::i;:::-;7958:14:0::1;7939:16;;:33;;;;;;;;;;;;;;;;;;8001:17;7982:16;;:36;;;;;;;;;;;;;;;;;;8051:21;8028:20;;:44;;;;;;;;;;;;;;;;;;8092:8;8082:7;:18;;;;8115:81;8132:14;8147:17;8165:21;8187:8;8115:81;;;;;;;;;:::i;:::-;;;;;;;;7794:411:::0;;;;:::o;4623:41::-;;;;:::o;5581:42::-;;;;:::o;6151:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15057:139::-;15119:29;;:::i;:::-;15168:5;:13;15174:6;15168:13;;;;;;;;;;;:21;;15161:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15057:139;;;:::o;6612:62::-;;;;;;;;;;;;;;;;;:::o;6386:52::-;;;;;;;;;;;;;;;;;:::o;6618:256:1:-;6731:14;6717:28;;:10;:28;;;6713:109;;6788:10;6800:14;6762:53;;;;;;;;;;;;:::i;:::-;;;;;;;;6713:109;6827:42;6846:9;6857:11;6827:18;:42::i;:::-;6618:256;;:::o;14442:582:0:-;14509:23;14541:33;6513:2;14577:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;14541:67;;14631:19;14619:31;;;;;;;;:::i;:::-;;:8;:31;;;;;;;;:::i;:::-;;;14616:183;;14668:9;14678:1;14668:11;;14663:128;6513:2;14681:1;:12;14663:128;;14733:15;:44;14749:24;:27;14774:1;14749:27;;;;;;;;;;;;14733:44;;;;;;;;;;;14716:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;14728:1;14726;:3;;;;:::i;:::-;14716:14;;;;;;;;:::i;:::-;;;;;;;:61;;;;14695:3;;;;;:::i;:::-;;;;14663:128;;;;14616:183;14821:21;14809:33;;;;;;;;:::i;:::-;;:8;:33;;;;;;;;:::i;:::-;;;14806:188;;14860:9;14870:1;14860:11;;14855:131;6513:2;14873:1;:12;14855:131;;14925:15;:47;14941:27;:30;14969:1;14941:30;;;;;;;;;;;;14925:47;;;;;;;;;;;14908:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;14920:1;14918;:3;;;;:::i;:::-;14908:14;;;;;;;;:::i;:::-;;;;;;;:64;;;;14887:3;;;;;:::i;:::-;;;;14855:131;;;;14806:188;15008:9;15001:16;;;14442:582;;;:::o;5749:51::-;5799:1;5749:51;:::o;17450:555::-;17522:1;17511:8;:12;:42;;;;;3940:4;17527:8;:26;;17511:42;17502:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;17622:26;17639:8;17622:16;:26::i;:::-;17613:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;17709:17;17729:15;:25;17745:8;17729:25;;;;;;;;;;;:33;;;17709:53;;17793:1;17781:9;:13;17772:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;17859:9;17834:21;:34;;17825:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;17948:1;17912:15;:25;17928:8;17912:25;;;;;;;;;;;:33;;:37;;;;17967:10;17959:28;;:39;17988:9;17959:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17492:513;17450:555;:::o;8383:69::-;1094:13:3;:11;:13::i;:::-;8433:10:0::1;:8;:10::i;:::-;8383:69::o:0;15229:139::-;15291:29;;:::i;:::-;15340:5;:13;15346:6;15340:13;;;;;;;;;;;:21;;15333:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15229:139;;;:::o;1615:84:4:-;1662:4;1685:7;;;;;;;;;;;1678:14;;1615:84;:::o;6194:27:0:-;;;;:::o;5495:38::-;;;;:::o;5452:37::-;;;;:::o;18805:406::-;1094:13:3;:11;:13::i;:::-;18928:1:0::1;18911:19;;:5;:19;;::::0;18902:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18992:1;18975:19;;:5;:19;;::::0;18966:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19055:1;19039:18;;:4;:18;;::::0;19030:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19099:5;19092:4;;:12;;;;;;;;;;;;;;;;;;19121:5;19114:4;;:12;;;;;;;;;;;;;;;;;;19146:4;19136:7;;:14;;;;;;;;;;;;;;;;;;19166:38;19187:5;19193;19199:4;19166:38;;;;;;;;:::i;:::-;;;;;;;;18805:406:::0;;;:::o;3946:41::-;3986:1;3946:41;:::o;1831:101:3:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;6477:38:0:-;6513:2;6477:38;:::o;4850:59::-;4902:7;4850:59;:::o;8310:65::-;1094:13:3;:11;:13::i;:::-;8358:8:0::1;:6;:8::i;:::-;8310:65::o:0;5964:49::-;;;;;;;;;;;;;;;;;:::o;1201:85:3:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;4746:41:0:-;;;;:::o;14030:351::-;14107:13;14129:14;14157:10;14146:8;:21;;;;:::i;:::-;14129:38;;14175:22;14218:1;14211:6;:8;;;;:::i;:::-;14200:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;14175:45;;14228:9;14252:6;14261:10;14252:19;;14247:105;14279:8;14274:1;:13;14247:105;;14320:5;:8;14326:1;14320:8;;;;;;;;;;;14306:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;14315:1;14306:11;;;;;;;;:::i;:::-;;;;;;;:22;;;;14340:3;;;;;:::i;:::-;;;;14289;;;;;:::i;:::-;;;;14247:105;;;;14366:8;14359:15;;;;;14030:351;;;;:::o;18047:715::-;1094:13:3;:11;:13::i;:::-;18121:1:0::1;18105:18;;:4;;;;;;;;;;;:18;;::::0;18096:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18191:1;18175:18;;:4;;;;;;;;;;;:18;;::::0;18166:60:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18264:1;18245:21;;:7;;;;;;;;;;;:21;;::::0;18236:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18334:1;18321:10;;:14;18312:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;18422:10;;18397:21;:35;;18388:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;18476:19;18498:10;;18476:32;;18531:1;18518:10;:14;;;;18542:15;18577:3;18573:2;18561:11;:14;;;;:::i;:::-;18560:20;;;;:::i;:::-;18542:38;;18590:15;18625:3;18621:2;18609:11;:14;;;;:::i;:::-;18608:20;;;;:::i;:::-;18590:38;;18647:4;;;;;;;;;;;18639:22;;:31;18662:7;18639:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;18688:4;;;;;;;;;;;18680:22;;:31;18703:7;18680:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;18729:7;;;;;;;;;;;18721:25;;:34;18747:7;18721:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;18086:676;;;18047:715::o:0;5876:39::-;;;;:::o;3899:45::-;3940:4;3899:45;:::o;16530:866::-;4902:7;16591:16;;:45;;16583:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;16718:1;16695:20;;:24;16687:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;16792:20;;16772:16;;:40;;16764:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17132:21;17173:20;;17156:16;;:37;;;;:::i;:::-;17132:61;;17222:1;17203:16;:20;;;;17238:9;17248:1;17238:11;;17233:157;3940:4;17251:1;:17;17233:157;;17336:15;:18;17352:1;17336:18;;;;;;;;;;;:42;;;;;;;;;;;;17320:58;;:13;:58;;;;:::i;:::-;17289:15;:18;17305:1;17289:18;;;;;;;;;;;:26;;;:90;;;;;;;:::i;:::-;;;;;;;;17270:3;;;;;:::i;:::-;;;;17233:157;;;;16575:821;16530:866::o;5323:35::-;;;;:::o;4705:::-;;;;:::o;6547:59::-;;;;;;;;;;;;;;;;;:::o;6019:34::-;;;;:::o;19240:1102::-;1094:13:3;:11;:13::i;:::-;5157:7:0::1;19319:14;:36;;19310:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;19665:14;19652:10;:27;;;;19743:1;19728:14;:16;;;;:::i;:::-;19716:9;:28;;;;19805:3;19801:2;19786:14;:17;;;;:::i;:::-;19785:23;;;;:::i;:::-;19773:9;:35;;;;19845:24;19892:3;19888:2;19873:14;:17;;;;:::i;:::-;19872:23;;;;:::i;:::-;19845:50;;19981:1;19964:16;:18;;;;:::i;:::-;19951:10;:31;;;;20046:3;20042:2;20027:14;:17;;;;:::i;:::-;20026:23;;;;:::i;:::-;20014:9;:35;;;;20123:3;20120:1;20105:14;:16;;;;:::i;:::-;20104:22;;;;:::i;:::-;20086:15;:40;;;;20192:14;20173:15;;20163:9;;20160:1;20149:10;;:12;;;;:::i;:::-;20138:9;;:24;;;;:::i;:::-;:34;;;;:::i;:::-;:50;;;;:::i;:::-;:68;20135:155;;20217:64;;;;;;;;;;:::i;:::-;;;;;;;;20135:155;20303:31;20319:14;20303:31;;;;;;:::i;:::-;;;;;;;;19302:1040;19240:1102:::0;:::o;20372:2225::-;1239:19:4;:17;:19::i;:::-;20467:1:0::1;20456:8;:12;:42;;;;;3940:4;20472:8;:26;;20456:42;20447:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;20564:26;20581:8;20564:16;:26::i;:::-;20555:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;20657:36;20684:8;20657:26;:36::i;:::-;20648:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;3986:1;20754:19;;:35;20745:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;20868:9;;20855;:22;20846:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;20931:19;;:21;;;;;;;;;:::i;:::-;;;;;;20998:8;20960:14;:35;20975:19;;20960:35;;;;;;;;;;;:46;;;;21050:8;21014:15;:25;21030:8;21014:25;;;;;;;;;;;:33;;:44;;;;3940:4;21069:20;;:37;:95;;;;;21163:1;21110:15;:25;21126:8;21110:25;;;;;;;;;;;:49;;;;;;;;;;;;:54;;;21069:95;:168;;;;;5799:1;21168:15;:25;21184:8;21168:25;;;;;;;;;;;:42;;;:69;;21069:168;21066:276;;;21300:1;21248:15;:25;21264:8;21248:25;;;;;;;;;;;:49;;;:53;;;;;;;;;;;;;;;;;;21311:20;;:22;;;;;;;;;:::i;:::-;;;;;;21066:276;21434:21;21458:8;21434:32;;21476:17;21511:28:::0;21542:1:::1;21511:32;;21610:13;21557:27;:49;21585:20;21557:49;;;;;;;;;;;;:66:::0;21554:114:::1;;21653:4;21638:19;;21554:114;21681:12;21677:448;;21711:9;21721:1;21711:11;;21706:409;6513:2;21724:1;:12;21706:409;;21794:13;21760:27;:30;21788:1;21760:30;;;;;;;;;;;;:47:::0;21757:122:::1;;21839:4;21824:19;;21859:5;;21757:122;21962:15;:66;21978:27;:49;22006:20;21978:49;;;;;;;;;;;;21962:66;;;;;;;;;;;:83;;;21895:15;:47;21911:27;:30;21939:1;21911:30;;;;;;;;;;;;21895:47;;;;;;;;;;;:64;;;:150;21892:211;;;22087:1;22064:24;;21892:211;21738:3;;;;;:::i;:::-;;;;21706:409;;;;21677:448;22187:12;22186:13;:150;;;;;22289:15;:30;22305:13;22289:30;;;;;;;;;;;:47;;;22203:15;:66;22219:27;:49;22247:20;22219:49;;;;;;;;;;;;22203:66;;;;;;;;;;;:83;;;:133;22186:150;22183:242;;;22401:13;22349:27;:49;22377:20;22349:49;;;;;;;;;;;:65;;;;22183:242;22440:20;22451:8;22440:20;;;;;;:::i;:::-;;;;;;;;3986:1;22471:19;;:36:::0;22468:124:::1;;22573:11;:9;:11::i;:::-;22468:124;20440:2157;;;20372:2225:::0;:::o;5112:52::-;5157:7;5112:52;:::o;2081:198:3:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;::::0;2161:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;5410:36:0:-;;;;:::o;6088:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1359:130:3:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;8828:226:0:-;8952:20;6299:1;6337:3;8976:11;8988:1;8976:14;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;8975:28;;;;:::i;:::-;8952:51;;9013:34;9024:9;9034:12;9013:10;:34::i;:::-;8942:112;8828:226;;:::o;22606:193::-;22673:4;22684:25;22712:18;;;;;;;;;;;:26;;;22739:8;22712:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22684:64;;22783:10;22762:31;;:17;:31;;;22754:40;;;22606:193;;;:::o;2433:117:4:-;1486:16;:14;:16::i;:::-;2501:5:::1;2491:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;2521:22;2530:12;:10;:12::i;:::-;2521:22;;;;;;:::i;:::-;;;;;;;;2433:117::o:0;:187:3:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;2186:115:4:-;1239:19;:17;:19::i;:::-;2255:4:::1;2245:7;::::0;:14:::1;;;;;;;;;;;;;;;;;;2274:20;2281:12;:10;:12::i;:::-;2274:20;;;;;;:::i;:::-;;;;;;;;2186:115::o:0;1767:106::-;1837:8;:6;:8::i;:::-;1836:9;1828:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1767:106::o;22805:246:0:-;22882:4;22900:9;22910:1;22900:11;;22895:135;22915:19;;22913:1;:21;22895:135;;;22977:8;22954:14;:19;22971:1;22969;:3;;;;:::i;:::-;22954:19;;;;;;;;;;;;:31;22951:71;;23006:5;22999:12;;;;;22951:71;22936:3;;;;;:::i;:::-;;;;22895:135;;;;23042:4;23035:11;;22805:246;;;;:::o;23137:791::-;23171:12;;:14;;;;;;;;;:::i;:::-;;;;;;23211:10;;23191:16;;:30;;;;;;;:::i;:::-;;;;;;;;23227:38;;:::i;:::-;23285:14;:17;23300:1;23285:17;;;;;;;;;;;;23271:8;23280:1;23271:11;;;;;;;:::i;:::-;;;;;:31;;;;;23322:14;:17;23337:1;23322:17;;;;;;;;;;;;23308:8;23317:1;23308:11;;;;;;;:::i;:::-;;;;;:31;;;;;23359:14;:17;23374:1;23359:17;;;;;;;;;;;;23345:8;23354:1;23345:11;;;;;;;:::i;:::-;;;;;:31;;;;;23396:14;:17;23411:1;23396:17;;;;;;;;;;;;23382:8;23391:1;23382:11;;;;;;;:::i;:::-;;;;;:31;;;;;23421:38;:59;;;;;;;;23471:1;23421:59;;;;23474:1;23421:59;;;;23476:1;23421:59;;;;23478:1;23421:59;;;;;23486:36;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23567:54;;;;;;;;23572:12;;23567:54;;;;23585:8;23567:54;;;;23594:8;23567:54;;;;23603:7;23567:54;;;;23611:1;23567:54;;;;23613:1;23567:54;;;;23615:1;23567:54;;;;23617:1;23567:54;;;;23619:1;23567:54;;;23545:5;:19;23551:12;;23545:19;;;;;;;;;;;:76;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23662:1;23642:14;:17;23657:1;23642:17;;;;;;;;;;;:21;;;;23689:1;23669:14;:17;23684:1;23669:17;;;;;;;;;;;:21;;;;23716:1;23696:14;:17;23711:1;23696:17;;;;;;;;;;;:21;;;;23743:1;23723:14;:17;23738:1;23723:17;;;;;;;;;;;:21;;;;23772:1;23750:19;:23;;;;23796:32;23808:5;:19;23814:12;;23808:19;;;;;;;;;;;23796:32;;;;;;:::i;:::-;;;;;;;;23835:17;23855;:15;:17::i;:::-;23835:37;;23909:12;;23878:17;:28;23896:9;23878:28;;;;;;;;;;;:43;;;;23165:763;;;;23137:791::o;640:96:5:-;693:7;719:10;712:17;;640:96;:::o;10182:1783:0:-;10261:14;10278:17;:28;10296:9;10278:28;;;;;;;;;;;;10261:45;;10316:37;10346:6;10316:29;:37::i;:::-;10363:17;10383:5;:13;10389:6;10383:13;;;;;;;;;;;10363:33;;10427:37;10444:6;10451:12;10427:16;:37::i;:::-;10406:4;:18;;:58;;;;10492:12;10475:4;:14;;:29;;;;10531:15;10514:4;:14;;:32;;;;10612:33;10632:12;;10619;:25;;;;:::i;:::-;10612:6;:33::i;:::-;10601:4;:8;;:44;;;;10667:36;10701:1;10688:12;;10675;:25;;;;:::i;:::-;:27;;;;:::i;:::-;10667:7;:36::i;:::-;10655:4;:9;;:48;;;;10713:38;10731:6;10738:12;10713:17;:38::i;:::-;10761:37;10778:6;10785:12;10761:16;:37::i;:::-;10846:23;10862:6;10846:15;:23::i;:::-;10919:17;10954:28;10985:1;10954:32;;11082:4;:18;;;11032:24;:46;11057:20;11032:46;;;;;;;;;;;;:68;11029:116;;11130:4;11115:19;;11029:116;11158:12;11154:438;;11188:9;11198:1;11188:11;;11183:399;6513:2;11201:1;:12;11183:399;;11268:4;:18;;;11237:24;:27;11262:1;11237:27;;;;;;;;;;;;:49;11234:124;;11318:4;11303:19;;11338:5;;11234:124;11435:15;:63;11451:24;:46;11476:20;11451:46;;;;;;;;;;;;11435:63;;;;;;;;;;;:77;;;11374:15;:44;11390:24;:27;11415:1;11390:27;;;;;;;;;;;;11374:44;;;;;;;;;;;:58;;;:138;11371:199;;;11554:1;11531:24;;11371:199;11215:3;;;;;:::i;:::-;;;;11183:399;;;;11154:438;11654:12;11653:13;:146;;;;;11750:15;:35;11766:4;:18;;;11750:35;;;;;;;;;;;:49;;;11670:15;:63;11686:24;:46;11711:20;11686:46;;;;;;;;;;;;11670:63;;;;;;;;;;;:77;;;:129;11653:146;11650:240;;;11861:4;:18;;;11812:24;:46;11837:20;11812:46;;;;;;;;;;;:67;;;;11650:240;11913:45;11923:6;11930:5;:13;11936:6;11930:13;;;;;;;;;;;:27;;;11913:45;;;;;;;:::i;:::-;;;;;;;;10250:1715;;;;10182:1783;;:::o;1945:106:4:-;2011:8;:6;:8::i;:::-;2003:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;1945:106::o;8507:255:0:-;8552:17;8588:11;;;;;;;;;;;:30;;;8630:7;;8649:16;;;;;;;;;;;8677:20;;;;;;;;;;;8709:16;;;;;;;;;;;2882:1;8588:167;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8581:174;;8507:255;:::o;12866:572::-;12939:17;12959:5;:13;12965:6;12959:13;;;;;;;;;;;12939:33;;12982:9;12994:19;12982:31;;13027:9;13023:409;13046:1;13042;:5;13023:409;;;13072:9;13086:1;13084;:3;;;;:::i;:::-;13072:15;;13068:354;13093:1;13089;:5;13068:354;;;13187:15;:32;13203:4;:12;;13216:1;13203:15;;;;;;;:::i;:::-;;;;13187:32;;;;;;;;;;;:49;;;13135:15;:32;13151:4;:12;;13164:1;13151:15;;;;;;;:::i;:::-;;;;13135:32;;;;;;;;;;;:49;;;:101;13132:276;;;13260:12;13275:4;:12;;13288:1;13275:15;;;;;;;:::i;:::-;;;;13260:30;;13330:4;:12;;13343:1;13330:15;;;;;;;:::i;:::-;;;;13312:4;:12;;13325:1;13312:15;;;;;;;:::i;:::-;;;:33;;;;13385:4;13367;:12;;13380:1;13367:15;;;;;;;:::i;:::-;;;:22;;;;13238:170;13132:276;13096:3;;;;;:::i;:::-;;;;13068:354;;;;13049:3;;;;;:::i;:::-;;;;13023:409;;;;12929:509;;12866:572;:::o;13524:448::-;13610:21;13664:1;13648:12;:17;;:40;;;;;13685:3;13669:12;:19;;13648:40;13640:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;13732:9;13744:15;:22;;;;13732:34;;13780:9;13792:1;13780:13;;13776:190;13799:1;13795;:5;13776:190;;;13837:15;13855:1;13853;:3;;;;:::i;:::-;13837:20;;;;;;;;:::i;:::-;;;;;;;;;;13822:12;:35;:73;;;;;13877:15;13893:1;13877:18;;;;;;;;:::i;:::-;;;;;;;;;;13861:12;:34;;13822:73;13819:137;;;13917:5;:13;13923:6;13917:13;;;;;;;;;;;:21;;13941:1;13939;:3;;;;:::i;:::-;13917:26;;;;;;;:::i;:::-;;;;13910:33;;;;;;13819:137;13802:3;;;;;:::i;:::-;;;;13776:190;;;;13632:340;13524:448;;;;;:::o;9667:109::-;9723:7;9768:1;9765;9760;9750:7;:11;;;;:::i;:::-;9749:17;;;;:::i;:::-;9748:21;;;;:::i;:::-;9741:28;;9667:109;;;:::o;9804:105::-;9861:7;9901:1;9897:2;9887:7;:12;;;;:::i;:::-;9886:16;;;;:::i;:::-;9879:23;;9804:105;;;:::o;12025:426::-;12107:17;12127:5;:13;12133:6;12127:13;;;;;;;;;;;12107:33;;12150:9;12162:19;12150:31;;12195:9;12191:254;12214:1;12210;:5;12191:254;;;12270:4;:12;;12283:1;12270:15;;;;;;;:::i;:::-;;;;12239:5;:13;12245:6;12239:13;;;;;;;;;;;:27;;;:46;12236:199;;12323:1;12305:4;:12;;12318:1;12305:15;;;;;;;:::i;:::-;;;:19;;;;12236:199;;;12381:39;12391:12;12404:4;:12;;12417:1;12404:15;;;;;;;:::i;:::-;;;;12381:9;:39::i;:::-;12363:4;:12;;12376:1;12363:15;;;;;;;:::i;:::-;;;:57;;;;12236:199;12217:3;;;;;:::i;:::-;;;;12191:254;;;;12097:354;;12025:426;;:::o;12495:282::-;12576:17;12596:5;:13;12602:6;12596:13;;;;;;;;;;;12576:33;;12619:9;12631:19;12619:31;;12664:9;12660:111;12683:1;12679;:5;12660:111;;;12722:38;12731:12;12744:4;:12;;12757:1;12744:15;;;;;;;:::i;:::-;;;;12722:8;:38::i;:::-;12705:4;:11;;12717:1;12705:14;;;;;;;:::i;:::-;;;:55;;;;;;:::i;:::-;;12686:3;;;;;:::i;:::-;;;;12660:111;;;;12566:211;;12495:282;;:::o;15453:950::-;15511:17;15531:5;:13;15537:6;15531:13;;;;;;;;;;;15511:33;;15627:21;15651:4;:18;;;15627:42;;15677:15;:30;15693:13;15677:30;;;;;;;;;;;:44;;;:46;;;;;;;;;:::i;:::-;;;;;;15731:15;:30;15747:13;15731:30;;;;;;;;;;;:47;;;:49;;;;;;;;;:::i;:::-;;;;;;15831:9;;15789:15;:30;15805:13;15789:30;;;;;;;;;;;:38;;;:51;;;;;;;:::i;:::-;;;;;;;;15907:9;15919:19;15907:31;;15953:9;15948:328;15968:1;15966;:3;15948:328;;;15990:15;16008:4;:12;;16021:1;16008:15;;;;;;;:::i;:::-;;;;15990:33;;16058:13;16047:7;:24;16044:222;;16088:15;:24;16104:7;16088:24;;;;;;;;;;;:41;;;:43;;;;;;;;;:::i;:::-;;;;;;16148:15;:24;16164:7;16148:24;;;;;;;;;;;:39;;;:41;;;;;;;;;:::i;:::-;;;;;;16241:10;;16205:15;:24;16221:7;16205:24;;;;;;;;;;;:32;;;:46;;;;;;;:::i;:::-;;;;;;;;16044:222;15976:300;15971:3;;;;;:::i;:::-;;;;15948:328;;;;16317:9;;16303:10;;:23;;;;;;;:::i;:::-;;;;;;;;16380:15;;16360:16;;:35;;;;;;;:::i;:::-;;;;;;;;15502:901;;;15453:950;:::o;9938:138::-;10015:7;10068:1;10065;10052:9;10042:7;:19;;;;:::i;:::-;10041:25;;;;:::i;:::-;10040:29;;;;:::i;:::-;10033:36;;9938:138;;;;:::o;9111:530::-;9187:13;9241:2;9219:12;:19;;;;:24;9211:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9300:18;9368:2;9346:12;:19;;;;:24;;;;:::i;:::-;9332:9;9322:7;:19;;;;:::i;:::-;9321:50;;;;:::i;:::-;9300:71;;9381:16;9412:1;9401:10;:12;;;;:::i;:::-;9381:32;;9423:19;9445:12;9458:10;9445:24;;;;;;;;:::i;:::-;;;;;;;;;9423:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9483:9;9504:1;9493:10;:12;;;;:::i;:::-;9483:22;;9479:134;9511:8;9507:1;:12;9479:134;;;9574:5;9585:12;9598:1;9585:15;;;;;;;;:::i;:::-;;;;;;;;;9557:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9542:60;;9522:4;;;;;:::i;:::-;;;;9479:134;;;;9629:5;9622:12;;;;;9111:530;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;7:77:6:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:101;805:7;845:18;838:5;834:30;823:41;;769:101;;;:::o;876:120::-;948:23;965:5;948:23;:::i;:::-;941:5;938:34;928:62;;986:1;983;976:12;928:62;876:120;:::o;1002:137::-;1047:5;1085:6;1072:20;1063:29;;1101:32;1127:5;1101:32;:::i;:::-;1002:137;;;;:::o;1145:93::-;1181:7;1221:10;1214:5;1210:22;1199:33;;1145:93;;;:::o;1244:120::-;1316:23;1333:5;1316:23;:::i;:::-;1309:5;1306:34;1296:62;;1354:1;1351;1344:12;1296:62;1244:120;:::o;1370:137::-;1415:5;1453:6;1440:20;1431:29;;1469:32;1495:5;1469:32;:::i;:::-;1370:137;;;;:::o;1513:89::-;1549:7;1589:6;1582:5;1578:18;1567:29;;1513:89;;;:::o;1608:120::-;1680:23;1697:5;1680:23;:::i;:::-;1673:5;1670:34;1660:62;;1718:1;1715;1708:12;1660:62;1608:120;:::o;1734:137::-;1779:5;1817:6;1804:20;1795:29;;1833:32;1859:5;1833:32;:::i;:::-;1734:137;;;;:::o;1877:77::-;1914:7;1943:5;1932:16;;1877:77;;;:::o;1960:122::-;2033:24;2051:5;2033:24;:::i;:::-;2026:5;2023:35;2013:63;;2072:1;2069;2062:12;2013:63;1960:122;:::o;2088:139::-;2134:5;2172:6;2159:20;2150:29;;2188:33;2215:5;2188:33;:::i;:::-;2088:139;;;;:::o;2233:759::-;2316:6;2324;2332;2340;2389:3;2377:9;2368:7;2364:23;2360:33;2357:120;;;2396:79;;:::i;:::-;2357:120;2516:1;2541:52;2585:7;2576:6;2565:9;2561:22;2541:52;:::i;:::-;2531:62;;2487:116;2642:2;2668:52;2712:7;2703:6;2692:9;2688:22;2668:52;:::i;:::-;2658:62;;2613:117;2769:2;2795:52;2839:7;2830:6;2819:9;2815:22;2795:52;:::i;:::-;2785:62;;2740:117;2896:2;2922:53;2967:7;2958:6;2947:9;2943:22;2922:53;:::i;:::-;2912:63;;2867:118;2233:759;;;;;;;:::o;2998:122::-;3071:24;3089:5;3071:24;:::i;:::-;3064:5;3061:35;3051:63;;3110:1;3107;3100:12;3051:63;2998:122;:::o;3126:139::-;3172:5;3210:6;3197:20;3188:29;;3226:33;3253:5;3226:33;:::i;:::-;3126:139;;;;:::o;3271:329::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3505:1;3530:53;3575:7;3566:6;3555:9;3551:22;3530:53;:::i;:::-;3520:63;;3476:117;3271:329;;;;:::o;3606:775::-;3839:4;3877:3;3866:9;3862:19;3854:27;;3891:71;3959:1;3948:9;3944:17;3935:6;3891:71;:::i;:::-;3972:72;4040:2;4029:9;4025:18;4016:6;3972:72;:::i;:::-;4054;4122:2;4111:9;4107:18;4098:6;4054:72;:::i;:::-;4136;4204:2;4193:9;4189:18;4180:6;4136:72;:::i;:::-;4218:73;4286:3;4275:9;4271:19;4262:6;4218:73;:::i;:::-;4301;4369:3;4358:9;4354:19;4345:6;4301:73;:::i;:::-;3606:775;;;;;;;;;:::o;4387:104::-;4452:6;4480:4;4470:14;;4387:104;;;:::o;4497:143::-;4594:11;4631:3;4616:18;;4497:143;;;;:::o;4646:98::-;4711:4;4734:3;4726:11;;4646:98;;;:::o;4750:108::-;4827:24;4845:5;4827:24;:::i;:::-;4822:3;4815:37;4750:108;;:::o;4864:179::-;4933:10;4954:46;4996:3;4988:6;4954:46;:::i;:::-;5032:4;5027:3;5023:14;5009:28;;4864:179;;;;:::o;5049:111::-;5117:4;5149;5144:3;5140:14;5132:22;;5049:111;;;:::o;5198:694::-;5334:52;5380:5;5334:52;:::i;:::-;5402:84;5479:6;5474:3;5402:84;:::i;:::-;5395:91;;5510:54;5558:5;5510:54;:::i;:::-;5587:7;5618:1;5603:282;5628:6;5625:1;5622:13;5603:282;;;5704:6;5698:13;5731:63;5790:3;5775:13;5731:63;:::i;:::-;5724:70;;5817:58;5868:6;5817:58;:::i;:::-;5807:68;;5663:222;5650:1;5647;5643:9;5638:14;;5603:282;;;5607:14;5310:582;;;5198:694;;:::o;5898:315::-;6037:4;6075:3;6064:9;6060:19;6052:27;;6089:117;6203:1;6192:9;6188:17;6179:6;6089:117;:::i;:::-;5898:315;;;;:::o;6219:117::-;6328:1;6325;6318:12;6342:102;6383:6;6434:2;6430:7;6425:2;6418:5;6414:14;6410:28;6400:38;;6342:102;;;:::o;6450:180::-;6498:77;6495:1;6488:88;6595:4;6592:1;6585:15;6619:4;6616:1;6609:15;6636:281;6719:27;6741:4;6719:27;:::i;:::-;6711:6;6707:40;6849:6;6837:10;6834:22;6813:18;6801:10;6798:34;6795:62;6792:88;;;6860:18;;:::i;:::-;6792:88;6900:10;6896:2;6889:22;6679:238;6636:281;;:::o;6923:129::-;6957:6;6984:20;;:::i;:::-;6974:30;;7013:33;7041:4;7033:6;7013:33;:::i;:::-;6923:129;;;:::o;7058:311::-;7135:4;7225:18;7217:6;7214:30;7211:56;;;7247:18;;:::i;:::-;7211:56;7297:4;7289:6;7285:17;7277:25;;7357:4;7351;7347:15;7339:23;;7058:311;;;:::o;7375:117::-;7484:1;7481;7474:12;7515:710;7611:5;7636:81;7652:64;7709:6;7652:64;:::i;:::-;7636:81;:::i;:::-;7627:90;;7737:5;7766:6;7759:5;7752:21;7800:4;7793:5;7789:16;7782:23;;7853:4;7845:6;7841:17;7833:6;7829:30;7882:3;7874:6;7871:15;7868:122;;;7901:79;;:::i;:::-;7868:122;8016:6;7999:220;8033:6;8028:3;8025:15;7999:220;;;8108:3;8137:37;8170:3;8158:10;8137:37;:::i;:::-;8132:3;8125:50;8204:4;8199:3;8195:14;8188:21;;8075:144;8059:4;8054:3;8050:14;8043:21;;7999:220;;;8003:21;7617:608;;7515:710;;;;;:::o;8248:370::-;8319:5;8368:3;8361:4;8353:6;8349:17;8345:27;8335:122;;8376:79;;:::i;:::-;8335:122;8493:6;8480:20;8518:94;8608:3;8600:6;8593:4;8585:6;8581:17;8518:94;:::i;:::-;8509:103;;8325:293;8248:370;;;;:::o;8624:684::-;8717:6;8725;8774:2;8762:9;8753:7;8749:23;8745:32;8742:119;;;8780:79;;:::i;:::-;8742:119;8900:1;8925:53;8970:7;8961:6;8950:9;8946:22;8925:53;:::i;:::-;8915:63;;8871:117;9055:2;9044:9;9040:18;9027:32;9086:18;9078:6;9075:30;9072:117;;;9108:79;;:::i;:::-;9072:117;9213:78;9283:7;9274:6;9263:9;9259:22;9213:78;:::i;:::-;9203:88;;8998:303;8624:684;;;;;:::o;9314:111::-;9399:1;9392:5;9389:12;9379:40;;9415:1;9412;9405:12;9379:40;9314:111;:::o;9431:163::-;9489:5;9527:6;9514:20;9505:29;;9543:45;9582:5;9543:45;:::i;:::-;9431:163;;;;:::o;9600:353::-;9671:6;9720:2;9708:9;9699:7;9695:23;9691:32;9688:119;;;9726:79;;:::i;:::-;9688:119;9846:1;9871:65;9928:7;9919:6;9908:9;9904:22;9871:65;:::i;:::-;9861:75;;9817:129;9600:353;;;;:::o;9959:145::-;10057:6;10091:5;10085:12;10075:22;;9959:145;;;:::o;10110:215::-;10240:11;10274:6;10269:3;10262:19;10314:4;10309:3;10305:14;10290:29;;10110:215;;;;:::o;10331:163::-;10429:4;10452:3;10444:11;;10482:4;10477:3;10473:14;10465:22;;10331:163;;;:::o;10500:86::-;10535:7;10575:4;10568:5;10564:16;10553:27;;10500:86;;;:::o;10592:102::-;10665:22;10681:5;10665:22;:::i;:::-;10660:3;10653:35;10592:102;;:::o;10782:1257::-;10931:4;10926:3;10922:14;11021:4;11014:5;11010:16;11004:23;11040:63;11097:4;11092:3;11088:14;11074:12;11040:63;:::i;:::-;10946:167;11207:4;11200:5;11196:16;11190:23;11226:63;11283:4;11278:3;11274:14;11260:12;11226:63;:::i;:::-;11123:176;11400:4;11393:5;11389:16;11383:23;11419:59;11472:4;11467:3;11463:14;11449:12;11419:59;:::i;:::-;11309:179;11579:4;11572:5;11568:16;11562:23;11598:63;11655:4;11650:3;11646:14;11632:12;11598:63;:::i;:::-;11498:173;11763:4;11756:5;11752:16;11746:23;11782:63;11839:4;11834:3;11830:14;11816:12;11782:63;:::i;:::-;11681:174;11940:4;11933:5;11929:16;11923:23;11959:63;12016:4;12011:3;12007:14;11993:12;11959:63;:::i;:::-;11865:167;10900:1139;10782:1257;;:::o;12045:303::-;12176:10;12197:108;12301:3;12293:6;12197:108;:::i;:::-;12337:4;12332:3;12328:14;12314:28;;12045:303;;;;:::o;12354:144::-;12455:4;12487;12482:3;12478:14;12470:22;;12354:144;;;:::o;12590:980::-;12771:3;12800:85;12879:5;12800:85;:::i;:::-;12901:117;13011:6;13006:3;12901:117;:::i;:::-;12894:124;;13042:87;13123:5;13042:87;:::i;:::-;13152:7;13183:1;13168:377;13193:6;13190:1;13187:13;13168:377;;;13269:6;13263:13;13296:125;13417:3;13402:13;13296:125;:::i;:::-;13289:132;;13444:91;13528:6;13444:91;:::i;:::-;13434:101;;13228:317;13215:1;13212;13208:9;13203:14;;13168:377;;;13172:14;13561:3;13554:10;;12776:794;;;12590:980;;;;:::o;13576:497::-;13781:4;13819:2;13808:9;13804:18;13796:26;;13868:9;13862:4;13858:20;13854:1;13843:9;13839:17;13832:47;13896:170;14061:4;14052:6;13896:170;:::i;:::-;13888:178;;13576:497;;;;:::o;14079:90::-;14113:7;14156:5;14149:13;14142:21;14131:32;;14079:90;;;:::o;14175:109::-;14256:21;14271:5;14256:21;:::i;:::-;14251:3;14244:34;14175:109;;:::o;14290:210::-;14377:4;14415:2;14404:9;14400:18;14392:26;;14428:65;14490:1;14479:9;14475:17;14466:6;14428:65;:::i;:::-;14290:210;;;;:::o;14506:126::-;14543:7;14583:42;14576:5;14572:54;14561:65;;14506:126;;;:::o;14638:96::-;14675:7;14704:24;14722:5;14704:24;:::i;:::-;14693:35;;14638:96;;;:::o;14740:122::-;14813:24;14831:5;14813:24;:::i;:::-;14806:5;14803:35;14793:63;;14852:1;14849;14842:12;14793:63;14740:122;:::o;14868:139::-;14914:5;14952:6;14939:20;14930:29;;14968:33;14995:5;14968:33;:::i;:::-;14868:139;;;;:::o;15013:619::-;15090:6;15098;15106;15155:2;15143:9;15134:7;15130:23;15126:32;15123:119;;;15161:79;;:::i;:::-;15123:119;15281:1;15306:53;15351:7;15342:6;15331:9;15327:22;15306:53;:::i;:::-;15296:63;;15252:117;15408:2;15434:53;15479:7;15470:6;15459:9;15455:22;15434:53;:::i;:::-;15424:63;;15379:118;15536:2;15562:53;15607:7;15598:6;15587:9;15583:22;15562:53;:::i;:::-;15552:63;;15507:118;15013:619;;;;;:::o;15638:118::-;15725:24;15743:5;15725:24;:::i;:::-;15720:3;15713:37;15638:118;;:::o;15762:222::-;15855:4;15893:2;15882:9;15878:18;15870:26;;15906:71;15974:1;15963:9;15959:17;15950:6;15906:71;:::i;:::-;15762:222;;;;:::o;15990:474::-;16058:6;16066;16115:2;16103:9;16094:7;16090:23;16086:32;16083:119;;;16121:79;;:::i;:::-;16083:119;16241:1;16266:53;16311:7;16302:6;16291:9;16287:22;16266:53;:::i;:::-;16256:63;;16212:117;16368:2;16394:53;16439:7;16430:6;16419:9;16415:22;16394:53;:::i;:::-;16384:63;;16339:118;15990:474;;;;;:::o;16470:135::-;16558:6;16592:5;16586:12;16576:22;;16470:135;;;:::o;16611:205::-;16731:11;16765:6;16760:3;16753:19;16805:4;16800:3;16796:14;16781:29;;16611:205;;;;:::o;16822:153::-;16910:4;16933:3;16925:11;;16963:4;16958:3;16954:14;16946:22;;16822:153;;;:::o;16981:133::-;17068:11;17105:3;17090:18;;16981:133;;;;:::o;17152:674::-;17278:52;17324:5;17278:52;:::i;:::-;17346:74;17413:6;17408:3;17346:74;:::i;:::-;17339:81;;17444:54;17492:5;17444:54;:::i;:::-;17521:7;17552:1;17537:282;17562:6;17559:1;17556:13;17537:282;;;17638:6;17632:13;17665:63;17724:3;17709:13;17665:63;:::i;:::-;17658:70;;17751:58;17802:6;17751:58;:::i;:::-;17741:68;;17597:222;17584:1;17581;17577:9;17572:14;;17537:282;;;17541:14;17254:572;;;17152:674;;:::o;17832:114::-;17907:6;17935:4;17925:14;;17832:114;;;:::o;17952:143::-;18049:11;18086:3;18071:18;;17952:143;;;;:::o;18101:108::-;18176:4;18199:3;18191:11;;18101:108;;;:::o;18215:99::-;18267:6;18301:5;18295:12;18285:22;;18215:99;;;:::o;18320:159::-;18394:11;18428:6;18423:3;18416:19;18468:4;18463:3;18459:14;18444:29;;18320:159;;;;:::o;18485:307::-;18553:1;18563:113;18577:6;18574:1;18571:13;18563:113;;;18662:1;18657:3;18653:11;18647:18;18643:1;18638:3;18634:11;18627:39;18599:2;18596:1;18592:10;18587:15;;18563:113;;;18694:6;18691:1;18688:13;18685:101;;;18774:1;18765:6;18760:3;18756:16;18749:27;18685:101;18534:258;18485:307;;;:::o;18798:344::-;18876:3;18904:39;18937:5;18904:39;:::i;:::-;18959:61;19013:6;19008:3;18959:61;:::i;:::-;18952:68;;19029:52;19074:6;19069:3;19062:4;19055:5;19051:16;19029:52;:::i;:::-;19106:29;19128:6;19106:29;:::i;:::-;19101:3;19097:39;19090:46;;18880:262;18798:344;;;;:::o;19148:196::-;19237:10;19272:66;19334:3;19326:6;19272:66;:::i;:::-;19258:80;;19148:196;;;;:::o;19350:121::-;19428:4;19460;19455:3;19451:14;19443:22;;19350:121;;;:::o;19507:959::-;19632:3;19661:62;19717:5;19661:62;:::i;:::-;19739:84;19816:6;19811:3;19739:84;:::i;:::-;19732:91;;19849:3;19894:4;19886:6;19882:17;19877:3;19873:27;19924:64;19982:5;19924:64;:::i;:::-;20011:7;20042:1;20027:394;20052:6;20049:1;20046:13;20027:394;;;20123:9;20117:4;20113:20;20108:3;20101:33;20174:6;20168:13;20202:84;20281:4;20266:13;20202:84;:::i;:::-;20194:92;;20309:68;20370:6;20309:68;:::i;:::-;20299:78;;20406:4;20401:3;20397:14;20390:21;;20087:334;20074:1;20071;20067:9;20062:14;;20027:394;;;20031:14;20437:4;20430:11;;20457:3;20450:10;;19637:829;;;;;19507:959;;;;:::o;20534:1984::-;20635:3;20671:6;20666:3;20662:16;20758:4;20751:5;20747:16;20741:23;20777:63;20834:4;20829:3;20825:14;20811:12;20777:63;:::i;:::-;20688:162;20935:4;20928:5;20924:16;20918:23;20954:109;21057:4;21052:3;21048:14;21034:12;20954:109;:::i;:::-;20860:213;21158:4;21151:5;21147:16;21141:23;21177:109;21280:4;21275:3;21271:14;21257:12;21177:109;:::i;:::-;21083:213;21380:4;21373:5;21369:16;21363:23;21435:3;21429:4;21425:14;21416:6;21411:3;21407:16;21400:40;21461:119;21575:4;21561:12;21461:119;:::i;:::-;21453:127;;21306:285;21678:4;21671:5;21667:16;21661:23;21697:65;21754:6;21749:3;21745:16;21731:12;21697:65;:::i;:::-;21601:171;21863:4;21856:5;21852:16;21846:23;21882:65;21939:6;21934:3;21930:16;21916:12;21882:65;:::i;:::-;21782:175;22038:4;22031:5;22027:16;22021:23;22057:65;22114:6;22109:3;22105:16;22091:12;22057:65;:::i;:::-;21967:165;22214:4;22207:5;22203:16;22197:23;22233:65;22290:6;22285:3;22281:16;22267:12;22233:65;:::i;:::-;22142:166;22395:6;22388:5;22384:18;22378:25;22416:65;22473:6;22468:3;22464:16;22450:12;22416:65;:::i;:::-;22318:173;22508:4;22501:11;;20640:1878;20534:1984;;;;:::o;22524:240::-;22635:10;22670:88;22754:3;22746:6;22670:88;:::i;:::-;22656:102;;22524:240;;;;:::o;22770:134::-;22861:4;22893;22888:3;22884:14;22876:22;;22770:134;;;:::o;22976:1079::-;23137:3;23166:75;23235:5;23166:75;:::i;:::-;23257:107;23357:6;23352:3;23257:107;:::i;:::-;23250:114;;23390:3;23435:4;23427:6;23423:17;23418:3;23414:27;23465:77;23536:5;23465:77;:::i;:::-;23565:7;23596:1;23581:429;23606:6;23603:1;23600:13;23581:429;;;23677:9;23671:4;23667:20;23662:3;23655:33;23728:6;23722:13;23756:106;23857:4;23842:13;23756:106;:::i;:::-;23748:114;;23885:81;23959:6;23885:81;:::i;:::-;23875:91;;23995:4;23990:3;23986:14;23979:21;;23641:369;23628:1;23625;23621:9;23616:14;;23581:429;;;23585:14;24026:4;24019:11;;24046:3;24039:10;;23142:913;;;;;22976:1079;;;;:::o;24061:457::-;24246:4;24284:2;24273:9;24269:18;24261:26;;24333:9;24327:4;24323:20;24319:1;24308:9;24304:17;24297:47;24361:150;24506:4;24497:6;24361:150;:::i;:::-;24353:158;;24061:457;;;;:::o;24524:329::-;24583:6;24632:2;24620:9;24611:7;24607:23;24603:32;24600:119;;;24638:79;;:::i;:::-;24600:119;24758:1;24783:53;24828:7;24819:6;24808:9;24804:22;24783:53;:::i;:::-;24773:63;;24729:117;24524:329;;;;:::o;24859:112::-;24942:22;24958:5;24942:22;:::i;:::-;24937:3;24930:35;24859:112;;:::o;24977:767::-;25206:4;25244:3;25233:9;25229:19;25221:27;;25258:71;25326:1;25315:9;25311:17;25302:6;25258:71;:::i;:::-;25339:72;25407:2;25396:9;25392:18;25383:6;25339:72;:::i;:::-;25421:68;25485:2;25474:9;25470:18;25461:6;25421:68;:::i;:::-;25499:72;25567:2;25556:9;25552:18;25543:6;25499:72;:::i;:::-;25581:73;25649:3;25638:9;25634:19;25625:6;25581:73;:::i;:::-;25664;25732:3;25721:9;25717:19;25708:6;25664:73;:::i;:::-;24977:767;;;;;;;;;:::o;25750:115::-;25835:23;25852:5;25835:23;:::i;:::-;25830:3;25823:36;25750:115;;:::o;25871:::-;25956:23;25973:5;25956:23;:::i;:::-;25951:3;25944:36;25871:115;;:::o;25992:::-;26077:23;26094:5;26077:23;:::i;:::-;26072:3;26065:36;25992:115;;:::o;26113:118::-;26200:24;26218:5;26200:24;:::i;:::-;26195:3;26188:37;26113:118;;:::o;26237:541::-;26408:4;26446:3;26435:9;26431:19;26423:27;;26460:69;26526:1;26515:9;26511:17;26502:6;26460:69;:::i;:::-;26539:70;26605:2;26594:9;26590:18;26581:6;26539:70;:::i;:::-;26619;26685:2;26674:9;26670:18;26661:6;26619:70;:::i;:::-;26699:72;26767:2;26756:9;26752:18;26743:6;26699:72;:::i;:::-;26237:541;;;;;;;:::o;26784:332::-;26905:4;26943:2;26932:9;26928:18;26920:26;;26956:71;27024:1;27013:9;27009:17;27000:6;26956:71;:::i;:::-;27037:72;27105:2;27094:9;27090:18;27081:6;27037:72;:::i;:::-;26784:332;;;;;:::o;27122:180::-;27170:77;27167:1;27160:88;27267:4;27264:1;27257:15;27291:4;27288:1;27281:15;27308:180;27356:77;27353:1;27346:88;27453:4;27450:1;27443:15;27477:4;27474:1;27467:15;27494:191;27534:4;27554:20;27572:1;27554:20;:::i;:::-;27549:25;;27588:20;27606:1;27588:20;:::i;:::-;27583:25;;27627:1;27624;27621:8;27618:34;;;27632:18;;:::i;:::-;27618:34;27677:1;27674;27670:9;27662:17;;27494:191;;;;:::o;27691:180::-;27739:77;27736:1;27729:88;27836:4;27833:1;27826:15;27860:4;27857:1;27850:15;27877:233;27916:3;27939:24;27957:5;27939:24;:::i;:::-;27930:33;;27985:66;27978:5;27975:77;27972:103;;28055:18;;:::i;:::-;27972:103;28102:1;28095:5;28091:13;28084:20;;27877:233;;;:::o;28116:169::-;28200:11;28234:6;28229:3;28222:19;28274:4;28269:3;28265:14;28250:29;;28116:169;;;;:::o;28291:232::-;28431:34;28427:1;28419:6;28415:14;28408:58;28500:15;28495:2;28487:6;28483:15;28476:40;28291:232;:::o;28529:366::-;28671:3;28692:67;28756:2;28751:3;28692:67;:::i;:::-;28685:74;;28768:93;28857:3;28768:93;:::i;:::-;28886:2;28881:3;28877:12;28870:19;;28529:366;;;:::o;28901:419::-;29067:4;29105:2;29094:9;29090:18;29082:26;;29154:9;29148:4;29144:20;29140:1;29129:9;29125:17;29118:47;29182:131;29308:4;29182:131;:::i;:::-;29174:139;;28901:419;;;:::o;29326:232::-;29466:34;29462:1;29454:6;29450:14;29443:58;29535:15;29530:2;29522:6;29518:15;29511:40;29326:232;:::o;29564:366::-;29706:3;29727:67;29791:2;29786:3;29727:67;:::i;:::-;29720:74;;29803:93;29892:3;29803:93;:::i;:::-;29921:2;29916:3;29912:12;29905:19;;29564:366;;;:::o;29936:419::-;30102:4;30140:2;30129:9;30125:18;30117:26;;30189:9;30183:4;30179:20;30175:1;30164:9;30160:17;30153:47;30217:131;30343:4;30217:131;:::i;:::-;30209:139;;29936:419;;;:::o;30361:165::-;30501:17;30497:1;30489:6;30485:14;30478:41;30361:165;:::o;30532:366::-;30674:3;30695:67;30759:2;30754:3;30695:67;:::i;:::-;30688:74;;30771:93;30860:3;30771:93;:::i;:::-;30889:2;30884:3;30880:12;30873:19;;30532:366;;;:::o;30904:419::-;31070:4;31108:2;31097:9;31093:18;31085:26;;31157:9;31151:4;31147:20;31143:1;31132:9;31128:17;31121:47;31185:131;31311:4;31185:131;:::i;:::-;31177:139;;30904:419;;;:::o;31329:179::-;31469:31;31465:1;31457:6;31453:14;31446:55;31329:179;:::o;31514:366::-;31656:3;31677:67;31741:2;31736:3;31677:67;:::i;:::-;31670:74;;31753:93;31842:3;31753:93;:::i;:::-;31871:2;31866:3;31862:12;31855:19;;31514:366;;;:::o;31886:419::-;32052:4;32090:2;32079:9;32075:18;32067:26;;32139:9;32133:4;32129:20;32125:1;32114:9;32110:17;32103:47;32167:131;32293:4;32167:131;:::i;:::-;32159:139;;31886:419;;;:::o;32311:171::-;32451:23;32447:1;32439:6;32435:14;32428:47;32311:171;:::o;32488:366::-;32630:3;32651:67;32715:2;32710:3;32651:67;:::i;:::-;32644:74;;32727:93;32816:3;32727:93;:::i;:::-;32845:2;32840:3;32836:12;32829:19;;32488:366;;;:::o;32860:419::-;33026:4;33064:2;33053:9;33049:18;33041:26;;33113:9;33107:4;33103:20;33099:1;33088:9;33084:17;33077:47;33141:131;33267:4;33141:131;:::i;:::-;33133:139;;32860:419;;;:::o;33285:171::-;33425:23;33421:1;33413:6;33409:14;33402:47;33285:171;:::o;33462:366::-;33604:3;33625:67;33689:2;33684:3;33625:67;:::i;:::-;33618:74;;33701:93;33790:3;33701:93;:::i;:::-;33819:2;33814:3;33810:12;33803:19;;33462:366;;;:::o;33834:419::-;34000:4;34038:2;34027:9;34023:18;34015:26;;34087:9;34081:4;34077:20;34073:1;34062:9;34058:17;34051:47;34115:131;34241:4;34115:131;:::i;:::-;34107:139;;33834:419;;;:::o;34259:170::-;34399:22;34395:1;34387:6;34383:14;34376:46;34259:170;:::o;34435:366::-;34577:3;34598:67;34662:2;34657:3;34598:67;:::i;:::-;34591:74;;34674:93;34763:3;34674:93;:::i;:::-;34792:2;34787:3;34783:12;34776:19;;34435:366;;;:::o;34807:419::-;34973:4;35011:2;35000:9;34996:18;34988:26;;35060:9;35054:4;35050:20;35046:1;35035:9;35031:17;35024:47;35088:131;35214:4;35088:131;:::i;:::-;35080:139;;34807:419;;;:::o;35232:442::-;35381:4;35419:2;35408:9;35404:18;35396:26;;35432:71;35500:1;35489:9;35485:17;35476:6;35432:71;:::i;:::-;35513:72;35581:2;35570:9;35566:18;35557:6;35513:72;:::i;:::-;35595;35663:2;35652:9;35648:18;35639:6;35595:72;:::i;:::-;35232:442;;;;;;:::o;35680:305::-;35720:3;35739:20;35757:1;35739:20;:::i;:::-;35734:25;;35773:20;35791:1;35773:20;:::i;:::-;35768:25;;35927:1;35859:66;35855:74;35852:1;35849:81;35846:107;;;35933:18;;:::i;:::-;35846:107;35977:1;35974;35970:9;35963:16;;35680:305;;;;:::o;35991:180::-;36039:77;36036:1;36029:88;36136:4;36133:1;36126:15;36160:4;36157:1;36150:15;36177:320;36221:6;36258:1;36252:4;36248:12;36238:22;;36305:1;36299:4;36295:12;36326:18;36316:81;;36382:4;36374:6;36370:17;36360:27;;36316:81;36444:2;36436:6;36433:14;36413:18;36410:38;36407:84;;36463:18;;:::i;:::-;36407:84;36228:269;36177:320;;;:::o;36503:178::-;36643:30;36639:1;36631:6;36627:14;36620:54;36503:178;:::o;36687:366::-;36829:3;36850:67;36914:2;36909:3;36850:67;:::i;:::-;36843:74;;36926:93;37015:3;36926:93;:::i;:::-;37044:2;37039:3;37035:12;37028:19;;36687:366;;;:::o;37059:419::-;37225:4;37263:2;37252:9;37248:18;37240:26;;37312:9;37306:4;37302:20;37298:1;37287:9;37283:17;37276:47;37340:131;37466:4;37340:131;:::i;:::-;37332:139;;37059:419;;;:::o;37484:178::-;37624:30;37620:1;37612:6;37608:14;37601:54;37484:178;:::o;37668:366::-;37810:3;37831:67;37895:2;37890:3;37831:67;:::i;:::-;37824:74;;37907:93;37996:3;37907:93;:::i;:::-;38025:2;38020:3;38016:12;38009:19;;37668:366;;;:::o;38040:419::-;38206:4;38244:2;38233:9;38229:18;38221:26;;38293:9;38287:4;38283:20;38279:1;38268:9;38264:17;38257:47;38321:131;38447:4;38321:131;:::i;:::-;38313:139;;38040:419;;;:::o;38465:181::-;38605:33;38601:1;38593:6;38589:14;38582:57;38465:181;:::o;38652:366::-;38794:3;38815:67;38879:2;38874:3;38815:67;:::i;:::-;38808:74;;38891:93;38980:3;38891:93;:::i;:::-;39009:2;39004:3;39000:12;38993:19;;38652:366;;;:::o;39024:419::-;39190:4;39228:2;39217:9;39213:18;39205:26;;39277:9;39271:4;39267:20;39263:1;39252:9;39248:17;39241:47;39305:131;39431:4;39305:131;:::i;:::-;39297:139;;39024:419;;;:::o;39449:224::-;39589:34;39585:1;39577:6;39573:14;39566:58;39658:7;39653:2;39645:6;39641:15;39634:32;39449:224;:::o;39679:366::-;39821:3;39842:67;39906:2;39901:3;39842:67;:::i;:::-;39835:74;;39918:93;40007:3;39918:93;:::i;:::-;40036:2;40031:3;40027:12;40020:19;;39679:366;;;:::o;40051:419::-;40217:4;40255:2;40244:9;40240:18;40232:26;;40304:9;40298:4;40294:20;40290:1;40279:9;40275:17;40268:47;40332:131;40458:4;40332:131;:::i;:::-;40324:139;;40051:419;;;:::o;40476:348::-;40516:7;40539:20;40557:1;40539:20;:::i;:::-;40534:25;;40573:20;40591:1;40573:20;:::i;:::-;40568:25;;40761:1;40693:66;40689:74;40686:1;40683:81;40678:1;40671:9;40664:17;40660:105;40657:131;;;40768:18;;:::i;:::-;40657:131;40816:1;40813;40809:9;40798:20;;40476:348;;;;:::o;40830:180::-;40878:77;40875:1;40868:88;40975:4;40972:1;40965:15;40999:4;40996:1;40989:15;41016:185;41056:1;41073:20;41091:1;41073:20;:::i;:::-;41068:25;;41107:20;41125:1;41107:20;:::i;:::-;41102:25;;41146:1;41136:35;;41151:18;;:::i;:::-;41136:35;41193:1;41190;41186:9;41181:14;;41016:185;;;;:::o;41207:225::-;41347:34;41343:1;41335:6;41331:14;41324:58;41416:8;41411:2;41403:6;41399:15;41392:33;41207:225;:::o;41438:366::-;41580:3;41601:67;41665:2;41660:3;41601:67;:::i;:::-;41594:74;;41677:93;41766:3;41677:93;:::i;:::-;41795:2;41790:3;41786:12;41779:19;;41438:366;;;:::o;41810:419::-;41976:4;42014:2;42003:9;41999:18;41991:26;;42063:9;42057:4;42053:20;42049:1;42038:9;42034:17;42027:47;42091:131;42217:4;42091:131;:::i;:::-;42083:139;;41810:419;;;:::o;42235:182::-;42375:34;42371:1;42363:6;42359:14;42352:58;42235:182;:::o;42423:366::-;42565:3;42586:67;42650:2;42645:3;42586:67;:::i;:::-;42579:74;;42662:93;42751:3;42662:93;:::i;:::-;42780:2;42775:3;42771:12;42764:19;;42423:366;;;:::o;42795:419::-;42961:4;42999:2;42988:9;42984:18;42976:26;;43048:9;43042:4;43038:20;43034:1;43023:9;43019:17;43012:47;43076:131;43202:4;43076:131;:::i;:::-;43068:139;;42795:419;;;:::o;43220:173::-;43360:25;43356:1;43348:6;43344:14;43337:49;43220:173;:::o;43399:366::-;43541:3;43562:67;43626:2;43621:3;43562:67;:::i;:::-;43555:74;;43638:93;43727:3;43638:93;:::i;:::-;43756:2;43751:3;43747:12;43740:19;;43399:366;;;:::o;43771:419::-;43937:4;43975:2;43964:9;43960:18;43952:26;;44024:9;44018:4;44014:20;44010:1;43999:9;43995:17;43988:47;44052:131;44178:4;44052:131;:::i;:::-;44044:139;;43771:419;;;:::o;44196:226::-;44336:34;44332:1;44324:6;44320:14;44313:58;44405:9;44400:2;44392:6;44388:15;44381:34;44196:226;:::o;44428:366::-;44570:3;44591:67;44655:2;44650:3;44591:67;:::i;:::-;44584:74;;44667:93;44756:3;44667:93;:::i;:::-;44785:2;44780:3;44776:12;44769:19;;44428:366;;;:::o;44800:419::-;44966:4;45004:2;44993:9;44989:18;44981:26;;45053:9;45047:4;45043:20;45039:1;45028:9;45024:17;45017:47;45081:131;45207:4;45081:131;:::i;:::-;45073:139;;44800:419;;;:::o;45225:241::-;45365:34;45361:1;45353:6;45349:14;45342:58;45434:24;45429:2;45421:6;45417:15;45410:49;45225:241;:::o;45472:366::-;45614:3;45635:67;45699:2;45694:3;45635:67;:::i;:::-;45628:74;;45711:93;45800:3;45711:93;:::i;:::-;45829:2;45824:3;45820:12;45813:19;;45472:366;;;:::o;45844:419::-;46010:4;46048:2;46037:9;46033:18;46025:26;;46097:9;46091:4;46087:20;46083:1;46072:9;46068:17;46061:47;46125:131;46251:4;46125:131;:::i;:::-;46117:139;;45844:419;;;:::o;46269:228::-;46409:34;46405:1;46397:6;46393:14;46386:58;46478:11;46473:2;46465:6;46461:15;46454:36;46269:228;:::o;46503:366::-;46645:3;46666:67;46730:2;46725:3;46666:67;:::i;:::-;46659:74;;46742:93;46831:3;46742:93;:::i;:::-;46860:2;46855:3;46851:12;46844:19;;46503:366;;;:::o;46875:419::-;47041:4;47079:2;47068:9;47064:18;47056:26;;47128:9;47122:4;47118:20;47114:1;47103:9;47099:17;47092:47;47156:131;47282:4;47156:131;:::i;:::-;47148:139;;46875:419;;;:::o;47300:232::-;47440:34;47436:1;47428:6;47424:14;47417:58;47509:15;47504:2;47496:6;47492:15;47485:40;47300:232;:::o;47538:366::-;47680:3;47701:67;47765:2;47760:3;47701:67;:::i;:::-;47694:74;;47777:93;47866:3;47777:93;:::i;:::-;47895:2;47890:3;47886:12;47879:19;;47538:366;;;:::o;47910:419::-;48076:4;48114:2;48103:9;48099:18;48091:26;;48163:9;48157:4;48153:20;48149:1;48138:9;48134:17;48127:47;48191:131;48317:4;48191:131;:::i;:::-;48183:139;;47910:419;;;:::o;48335:226::-;48475:34;48471:1;48463:6;48459:14;48452:58;48544:9;48539:2;48531:6;48527:15;48520:34;48335:226;:::o;48567:366::-;48709:3;48730:67;48794:2;48789:3;48730:67;:::i;:::-;48723:74;;48806:93;48895:3;48806:93;:::i;:::-;48924:2;48919:3;48915:12;48908:19;;48567:366;;;:::o;48939:419::-;49105:4;49143:2;49132:9;49128:18;49120:26;;49192:9;49186:4;49182:20;49178:1;49167:9;49163:17;49156:47;49220:131;49346:4;49220:131;:::i;:::-;49212:139;;48939:419;;;:::o;49364:225::-;49504:34;49500:1;49492:6;49488:14;49481:58;49573:8;49568:2;49560:6;49556:15;49549:33;49364:225;:::o;49595:366::-;49737:3;49758:67;49822:2;49817:3;49758:67;:::i;:::-;49751:74;;49834:93;49923:3;49834:93;:::i;:::-;49952:2;49947:3;49943:12;49936:19;;49595:366;;;:::o;49967:419::-;50133:4;50171:2;50160:9;50156:18;50148:26;;50220:9;50214:4;50210:20;50206:1;50195:9;50191:17;50184:47;50248:131;50374:4;50248:131;:::i;:::-;50240:139;;49967:419;;;:::o;50392:182::-;50532:34;50528:1;50520:6;50516:14;50509:58;50392:182;:::o;50580:366::-;50722:3;50743:67;50807:2;50802:3;50743:67;:::i;:::-;50736:74;;50819:93;50908:3;50819:93;:::i;:::-;50937:2;50932:3;50928:12;50921:19;;50580:366;;;:::o;50952:419::-;51118:4;51156:2;51145:9;51141:18;51133:26;;51205:9;51199:4;51195:20;51191:1;51180:9;51176:17;51169:47;51233:131;51359:4;51233:131;:::i;:::-;51225:139;;50952:419;;;:::o;51377:176::-;51409:1;51426:20;51444:1;51426:20;:::i;:::-;51421:25;;51460:20;51478:1;51460:20;:::i;:::-;51455:25;;51499:1;51489:35;;51504:18;;:::i;:::-;51489:35;51545:1;51542;51538:9;51533:14;;51377:176;;;;:::o;51559:143::-;51616:5;51647:6;51641:13;51632:22;;51663:33;51690:5;51663:33;:::i;:::-;51559:143;;;;:::o;51708:351::-;51778:6;51827:2;51815:9;51806:7;51802:23;51798:32;51795:119;;;51833:79;;:::i;:::-;51795:119;51953:1;51978:64;52034:7;52025:6;52014:9;52010:22;51978:64;:::i;:::-;51968:74;;51924:128;51708:351;;;;:::o;52065:166::-;52205:18;52201:1;52193:6;52189:14;52182:42;52065:166;:::o;52237:366::-;52379:3;52400:67;52464:2;52459:3;52400:67;:::i;:::-;52393:74;;52476:93;52565:3;52476:93;:::i;:::-;52594:2;52589:3;52585:12;52578:19;;52237:366;;;:::o;52609:419::-;52775:4;52813:2;52802:9;52798:18;52790:26;;52862:9;52856:4;52852:20;52848:1;52837:9;52833:17;52826:47;52890:131;53016:4;52890:131;:::i;:::-;52882:139;;52609:419;;;:::o;53034:102::-;53076:8;53123:5;53120:1;53116:13;53095:34;;53034:102;;;:::o;53142:90::-;53192:7;53221:5;53210:16;;53142:90;;;:::o;53238:166::-;53307:5;53332:66;53363:34;53386:10;53363:34;:::i;:::-;53332:66;:::i;:::-;53323:75;;53238:166;;;:::o;53410:101::-;53472:6;53500:4;53490:14;;53410:101;;;:::o;53517:95::-;53579:4;53602:3;53594:11;;53517:95;;;:::o;53618:144::-;53673:5;53698:57;53749:4;53743:11;53698:57;:::i;:::-;53689:66;;53618:144;;;:::o;53768:108::-;53833:4;53865;53860:3;53856:14;53848:22;;53768:108;;;:::o;53914:693::-;54037:49;54080:5;54037:49;:::i;:::-;54102:74;54169:6;54164:3;54102:74;:::i;:::-;54095:81;;54200:51;54245:5;54200:51;:::i;:::-;54274:7;54305:1;54290:310;54315:6;54312:1;54309:13;54290:310;;;54385:44;54422:6;54385:44;:::i;:::-;54449:63;54508:3;54493:13;54449:63;:::i;:::-;54442:70;;54535:55;54583:6;54535:55;:::i;:::-;54525:65;;54350:250;54337:1;54334;54330:9;54325:14;;54290:310;;;54294:14;54013:594;;;53914:693;;:::o;54613:108::-;54682:6;54710:4;54700:14;;54613:108;;;:::o;54727:102::-;54796:4;54819:3;54811:11;;54727:102;;;:::o;54835:141::-;54884:4;54907:3;54899:11;;54930:3;54927:1;54920:14;54964:4;54961:1;54951:18;54943:26;;54835:141;;;:::o;55006:811::-;55081:3;55118:5;55112:12;55147:36;55173:9;55147:36;:::i;:::-;55199:61;55253:6;55248:3;55199:61;:::i;:::-;55192:68;;55291:1;55280:9;55276:17;55307:1;55302:164;;;;55480:1;55475:336;;;;55269:542;;55302:164;55386:4;55382:9;55371;55367:25;55362:3;55355:38;55446:6;55439:14;55432:22;55426:4;55422:33;55417:3;55413:43;55406:50;;55302:164;;55475:336;55542:38;55574:5;55542:38;:::i;:::-;55602:1;55616:154;55630:6;55627:1;55624:13;55616:154;;;55704:7;55698:14;55694:1;55689:3;55685:11;55678:35;55754:1;55745:7;55741:15;55730:26;;55652:4;55649:1;55645:12;55640:17;;55616:154;;;55799:1;55794:3;55790:11;55783:18;;55482:329;;55269:542;;55085:732;;55006:811;;;;:::o;55823:190::-;55909:10;55944:63;56003:3;55995:6;55944:63;:::i;:::-;55930:77;;55823:190;;;;:::o;56019:115::-;56091:4;56123;56118:3;56114:14;56106:22;;56019:115;;;:::o;56170:925::-;56289:3;56318:56;56368:5;56318:56;:::i;:::-;56390:84;56467:6;56462:3;56390:84;:::i;:::-;56383:91;;56500:3;56545:4;56537:6;56533:17;56528:3;56524:27;56575:58;56627:5;56575:58;:::i;:::-;56656:7;56687:1;56672:378;56697:6;56694:1;56691:13;56672:378;;;56768:9;56762:4;56758:20;56753:3;56746:33;56813:6;56840:81;56916:4;56901:13;56840:81;:::i;:::-;56832:89;;56944:62;56999:6;56944:62;:::i;:::-;56934:72;;57035:4;57030:3;57026:14;57019:21;;56732:318;56719:1;56716;56712:9;56707:14;;56672:378;;;56676:14;57066:4;57059:11;;57086:3;57079:10;;56294:801;;;;;56170:925;;;;:::o;57163:2463::-;57271:3;57307:6;57302:3;57298:16;57340:1;57413:4;57406:5;57402:16;57396:23;57383:36;;57452:55;57497:9;57452:55;:::i;:::-;57520:63;57577:4;57572:3;57568:14;57554:12;57520:63;:::i;:::-;57351:242;57672:4;57665:5;57661:16;57690:106;57790:4;57785:3;57781:14;57767:12;57690:106;:::i;:::-;57603:203;57885:4;57878:5;57874:16;57903:106;58003:4;57998:3;57994:14;57980:12;57903:106;:::i;:::-;57816:203;58097:4;58090:5;58086:16;58151:3;58145:4;58141:14;58132:6;58127:3;58123:16;58116:40;58177:113;58285:4;58271:12;58177:113;:::i;:::-;58169:121;;58029:272;58380:4;58373:5;58369:16;58363:23;58350:36;;58419:55;58464:9;58419:55;:::i;:::-;58487:65;58544:6;58539:3;58535:16;58521:12;58487:65;:::i;:::-;58311:251;58645:4;58638:5;58634:16;58628:23;58615:36;;58684:55;58729:9;58684:55;:::i;:::-;58752:65;58809:6;58804:3;58800:16;58786:12;58752:65;:::i;:::-;58572:255;58900:4;58893:5;58889:16;58883:23;58870:36;;58939:55;58984:9;58939:55;:::i;:::-;59007:65;59064:6;59059:3;59055:16;59041:12;59007:65;:::i;:::-;58837:245;59156:4;59149:5;59145:16;59139:23;59126:36;;59195:55;59240:9;59195:55;:::i;:::-;59263:65;59320:6;59315:3;59311:16;59297:12;59263:65;:::i;:::-;59092:246;59417:4;59410:5;59406:16;59400:23;59387:36;;59456:55;59501:9;59456:55;:::i;:::-;59524:65;59581:6;59576:3;59572:16;59558:12;59524:65;:::i;:::-;59348:251;59616:4;59609:11;;57276:2350;;57163:2463;;;;:::o;59632:351::-;59764:4;59802:2;59791:9;59787:18;59779:26;;59851:9;59845:4;59841:20;59837:1;59826:9;59822:17;59815:47;59879:97;59971:4;59962:6;59879:97;:::i;:::-;59871:105;;59632:351;;;;:::o;59989:332::-;60110:4;60148:2;60137:9;60133:18;60125:26;;60161:71;60229:1;60218:9;60214:17;60205:6;60161:71;:::i;:::-;60242:72;60310:2;60299:9;60295:18;60286:6;60242:72;:::i;:::-;59989:332;;;;;:::o;60327:170::-;60467:22;60463:1;60455:6;60451:14;60444:46;60327:170;:::o;60503:366::-;60645:3;60666:67;60730:2;60725:3;60666:67;:::i;:::-;60659:74;;60742:93;60831:3;60742:93;:::i;:::-;60860:2;60855:3;60851:12;60844:19;;60503:366;;;:::o;60875:419::-;61041:4;61079:2;61068:9;61064:18;61056:26;;61128:9;61122:4;61118:20;61114:1;61103:9;61099:17;61092:47;61156:131;61282:4;61156:131;:::i;:::-;61148:139;;60875:419;;;:::o;61300:648::-;61497:4;61535:3;61524:9;61520:19;61512:27;;61549:71;61617:1;61606:9;61602:17;61593:6;61549:71;:::i;:::-;61630:70;61696:2;61685:9;61681:18;61672:6;61630:70;:::i;:::-;61710;61776:2;61765:9;61761:18;61752:6;61710:70;:::i;:::-;61790;61856:2;61845:9;61841:18;61832:6;61790:70;:::i;:::-;61870:71;61936:3;61925:9;61921:19;61912:6;61870:71;:::i;:::-;61300:648;;;;;;;;:::o;61954:143::-;62011:5;62042:6;62036:13;62027:22;;62058:33;62085:5;62058:33;:::i;:::-;61954:143;;;;:::o;62103:351::-;62173:6;62222:2;62210:9;62201:7;62197:23;62193:32;62190:119;;;62228:79;;:::i;:::-;62190:119;62348:1;62373:64;62429:7;62420:6;62409:9;62405:22;62373:64;:::i;:::-;62363:74;;62319:128;62103:351;;;;:::o;62460:179::-;62600:31;62596:1;62588:6;62584:14;62577:55;62460:179;:::o;62645:366::-;62787:3;62808:67;62872:2;62867:3;62808:67;:::i;:::-;62801:74;;62884:93;62973:3;62884:93;:::i;:::-;63002:2;62997:3;62993:12;62986:19;;62645:366;;;:::o;63017:419::-;63183:4;63221:2;63210:9;63206:18;63198:26;;63270:9;63264:4;63260:20;63256:1;63245:9;63241:17;63234:47;63298:131;63424:4;63298:131;:::i;:::-;63290:139;;63017:419;;;:::o;63442:93::-;63479:6;63526:2;63521;63514:5;63510:14;63506:23;63496:33;;63442:93;;;:::o;63541:107::-;63585:8;63635:5;63629:4;63625:16;63604:37;;63541:107;;;;:::o;63654:393::-;63723:6;63773:1;63761:10;63757:18;63796:97;63826:66;63815:9;63796:97;:::i;:::-;63914:39;63944:8;63933:9;63914:39;:::i;:::-;63902:51;;63986:4;63982:9;63975:5;63971:21;63962:30;;64035:4;64025:8;64021:19;64014:5;64011:30;64001:40;;63730:317;;63654:393;;;;;:::o;64053:60::-;64081:3;64102:5;64095:12;;64053:60;;;:::o;64119:142::-;64169:9;64202:53;64220:34;64229:24;64247:5;64229:24;:::i;:::-;64220:34;:::i;:::-;64202:53;:::i;:::-;64189:66;;64119:142;;;:::o;64267:75::-;64310:3;64331:5;64324:12;;64267:75;;;:::o;64348:269::-;64458:39;64489:7;64458:39;:::i;:::-;64519:91;64568:41;64592:16;64568:41;:::i;:::-;64560:6;64553:4;64547:11;64519:91;:::i;:::-;64513:4;64506:105;64424:193;64348:269;;;:::o;64623:73::-;64668:3;64623:73;:::o;64702:189::-;64779:32;;:::i;:::-;64820:65;64878:6;64870;64864:4;64820:65;:::i;:::-;64755:136;64702:189;;:::o;64897:186::-;64957:120;64974:3;64967:5;64964:14;64957:120;;;65028:39;65065:1;65058:5;65028:39;:::i;:::-;65001:1;64994:5;64990:13;64981:22;;64957:120;;;64897:186;;:::o;65089:543::-;65190:2;65185:3;65182:11;65179:446;;;65224:38;65256:5;65224:38;:::i;:::-;65308:29;65326:10;65308:29;:::i;:::-;65298:8;65294:44;65491:2;65479:10;65476:18;65473:49;;;65512:8;65497:23;;65473:49;65535:80;65591:22;65609:3;65591:22;:::i;:::-;65581:8;65577:37;65564:11;65535:80;:::i;:::-;65194:431;;65179:446;65089:543;;;:::o;65638:117::-;65692:8;65742:5;65736:4;65732:16;65711:37;;65638:117;;;;:::o;65761:169::-;65805:6;65838:51;65886:1;65882:6;65874:5;65871:1;65867:13;65838:51;:::i;:::-;65834:56;65919:4;65913;65909:15;65899:25;;65812:118;65761:169;;;;:::o;65935:295::-;66011:4;66157:29;66182:3;66176:4;66157:29;:::i;:::-;66149:37;;66219:3;66216:1;66212:11;66206:4;66203:21;66195:29;;65935:295;;;;:::o;66235:1395::-;66352:37;66385:3;66352:37;:::i;:::-;66454:18;66446:6;66443:30;66440:56;;;66476:18;;:::i;:::-;66440:56;66520:38;66552:4;66546:11;66520:38;:::i;:::-;66605:67;66665:6;66657;66651:4;66605:67;:::i;:::-;66699:1;66723:4;66710:17;;66755:2;66747:6;66744:14;66772:1;66767:618;;;;67429:1;67446:6;67443:77;;;67495:9;67490:3;67486:19;67480:26;67471:35;;67443:77;67546:67;67606:6;67599:5;67546:67;:::i;:::-;67540:4;67533:81;67402:222;66737:887;;66767:618;66819:4;66815:9;66807:6;66803:22;66853:37;66885:4;66853:37;:::i;:::-;66912:1;66926:208;66940:7;66937:1;66934:14;66926:208;;;67019:9;67014:3;67010:19;67004:26;66996:6;66989:42;67070:1;67062:6;67058:14;67048:24;;67117:2;67106:9;67102:18;67089:31;;66963:4;66960:1;66956:12;66951:17;;66926:208;;;67162:6;67153:7;67150:19;67147:179;;;67220:9;67215:3;67211:19;67205:26;67263:48;67305:4;67297:6;67293:17;67282:9;67263:48;:::i;:::-;67255:6;67248:64;67170:156;67147:179;67372:1;67368;67360:6;67356:14;67352:22;67346:4;67339:36;66774:611;;;66737:887;;66327:1303;;;66235:1395;;:::o;67636:230::-;67776:34;67772:1;67764:6;67760:14;67753:58;67845:13;67840:2;67832:6;67828:15;67821:38;67636:230;:::o;67872:366::-;68014:3;68035:67;68099:2;68094:3;68035:67;:::i;:::-;68028:74;;68111:93;68200:3;68111:93;:::i;:::-;68229:2;68224:3;68220:12;68213:19;;67872:366;;;:::o;68244:419::-;68410:4;68448:2;68437:9;68433:18;68425:26;;68497:9;68491:4;68487:20;68483:1;68472:9;68468:17;68461:47;68525:131;68651:4;68525:131;:::i;:::-;68517:139;;68244:419;;;:::o;68669:148::-;68771:11;68808:3;68793:18;;68669:148;;;;:::o;68823:377::-;68929:3;68957:39;68990:5;68957:39;:::i;:::-;69012:89;69094:6;69089:3;69012:89;:::i;:::-;69005:96;;69110:52;69155:6;69150:3;69143:4;69136:5;69132:16;69110:52;:::i;:::-;69187:6;69182:3;69178:16;69171:23;;68933:267;68823:377;;;;:::o;69206:151::-;69346:3;69342:1;69334:6;69330:14;69323:27;69206:151;:::o;69363:400::-;69523:3;69544:84;69626:1;69621:3;69544:84;:::i;:::-;69537:91;;69637:93;69726:3;69637:93;:::i;:::-;69755:1;69750:3;69746:11;69739:18;;69363:400;;;:::o;69793:874::-;69896:3;69933:5;69927:12;69962:36;69988:9;69962:36;:::i;:::-;70014:89;70096:6;70091:3;70014:89;:::i;:::-;70007:96;;70134:1;70123:9;70119:17;70150:1;70145:166;;;;70325:1;70320:341;;;;70112:549;;70145:166;70229:4;70225:9;70214;70210:25;70205:3;70198:38;70291:6;70284:14;70277:22;70269:6;70265:35;70260:3;70256:45;70249:52;;70145:166;;70320:341;70387:38;70419:5;70387:38;:::i;:::-;70447:1;70461:154;70475:6;70472:1;70469:13;70461:154;;;70549:7;70543:14;70539:1;70534:3;70530:11;70523:35;70599:1;70590:7;70586:15;70575:26;;70497:4;70494:1;70490:12;70485:17;;70461:154;;;70644:6;70639:3;70635:16;70628:23;;70327:334;;70112:549;;69900:767;;69793:874;;;;:::o;70673:695::-;70951:3;70973:95;71064:3;71055:6;70973:95;:::i;:::-;70966:102;;71085:148;71229:3;71085:148;:::i;:::-;71078:155;;71250:92;71338:3;71329:6;71250:92;:::i;:::-;71243:99;;71359:3;71352:10;;70673:695;;;;;:::o
Swarm Source
ipfs://4ddf30fd67f42de201bf0ec09b15451266f13e2397b2ce7ca9ec313875225fc4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | Polygon (POL) | 100.00% | $0.573501 | 31.9591 | $18.33 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.