Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 431 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Kill | 7404533 | 2111 days ago | IN | 0 ETH | 0.00002731 | ||||
Withdraw Funds | 7398431 | 2112 days ago | IN | 0 ETH | 0.00003483 | ||||
Settle Bet | 7390172 | 2113 days ago | IN | 0 ETH | 0.00007484 | ||||
Place Bet With I... | 7390170 | 2113 days ago | IN | 0.1 ETH | 0.00186465 | ||||
Settle Bet | 7390168 | 2113 days ago | IN | 0 ETH | 0.00007486 | ||||
Place Bet With I... | 7390165 | 2113 days ago | IN | 0.1 ETH | 0.00186465 | ||||
Settle Bet | 7390162 | 2113 days ago | IN | 0 ETH | 0.00008983 | ||||
Place Bet With I... | 7390158 | 2113 days ago | IN | 0.1 ETH | 0.00186465 | ||||
Settle Bet | 7378133 | 2115 days ago | IN | 0 ETH | 0.0001309 | ||||
Place Bet | 7378131 | 2115 days ago | IN | 0.1 ETH | 0.00158067 | ||||
Settle Bet | 7378130 | 2115 days ago | IN | 0 ETH | 0.00013075 | ||||
Place Bet | 7378128 | 2115 days ago | IN | 0.1 ETH | 0.0015815 | ||||
Settle Bet | 7371027 | 2116 days ago | IN | 0 ETH | 0.00014968 | ||||
Place Bet With I... | 7371026 | 2116 days ago | IN | 0.1 ETH | 0.00186465 | ||||
Settle Bet | 7371024 | 2116 days ago | IN | 0 ETH | 0.00014972 | ||||
Place Bet With I... | 7371022 | 2116 days ago | IN | 0.1 ETH | 0.00186465 | ||||
Refund Bet | 7370990 | 2116 days ago | IN | 0 ETH | 0.0000457 | ||||
Settle Bet | 7370621 | 2116 days ago | IN | 0 ETH | 0.00006338 | ||||
Place Bet | 7370618 | 2116 days ago | IN | 0.01 ETH | 0.00138673 | ||||
Settle Bet | 7370613 | 2116 days ago | IN | 0 ETH | 0.0000634 | ||||
Place Bet | 7370612 | 2116 days ago | IN | 0.01 ETH | 0.00158173 | ||||
Place Bet With I... | 7368338 | 2117 days ago | IN | 0.1 ETH | 0.00186465 | ||||
Settle Bet | 7368334 | 2117 days ago | IN | 0 ETH | 0.00007486 | ||||
Place Bet With I... | 7368332 | 2117 days ago | IN | 0.1 ETH | 0.00186465 | ||||
Settle Bet | 7368330 | 2117 days ago | IN | 0 ETH | 0.0000747 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
7404533 | 2111 days ago | 12.78770037 ETH | ||||
7398431 | 2112 days ago | 2 ETH | ||||
7390172 | 2113 days ago | 1 wei | ||||
7390172 | 2113 days ago | 0.00007 ETH | ||||
7390172 | 2113 days ago | 0.00007 ETH | ||||
7390172 | 2113 days ago | 0.001 ETH | ||||
7390168 | 2113 days ago | 0.1076923 ETH | ||||
7390168 | 2113 days ago | 0.00007 ETH | ||||
7390168 | 2113 days ago | 0.00007 ETH | ||||
7390168 | 2113 days ago | 0.001 ETH | ||||
7390162 | 2113 days ago | 0.1076923 ETH | ||||
7390162 | 2113 days ago | 0.00007 ETH | ||||
7390162 | 2113 days ago | 0.00007 ETH | ||||
7390162 | 2113 days ago | 0.001 ETH | ||||
7378133 | 2115 days ago | 1 wei | ||||
7378133 | 2115 days ago | 0.00007 ETH | ||||
7378133 | 2115 days ago | 0.001 ETH | ||||
7378130 | 2115 days ago | 1 wei | ||||
7378130 | 2115 days ago | 0.00007 ETH | ||||
7378130 | 2115 days ago | 0.001 ETH | ||||
7371027 | 2116 days ago | 1 wei | ||||
7371027 | 2116 days ago | 0.00007 ETH | ||||
7371027 | 2116 days ago | 0.00007 ETH | ||||
7371027 | 2116 days ago | 0.001 ETH | ||||
7371024 | 2116 days ago | 0.1076923 ETH |
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x398f3d1e2a7309b223d6b1579215b92c690adcd6e3ea819534759702926a7c81
Contract Name:
AceDice
Compiler Version
v0.5.2+commit.1df8f40c
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-02-25 */ // solium-disable linebreak-style pragma solidity ^0.5.0; contract CryptoTycoonsVIPLib{ address payable public owner; // Accumulated jackpot fund. uint128 public jackpotSize; uint128 public rankingRewardSize; mapping (address => uint) userExpPool; mapping (address => bool) public callerMap; event RankingRewardPayment(address indexed beneficiary, uint amount); modifier onlyOwner { require(msg.sender == owner, "OnlyOwner methods called by non-owner."); _; } modifier onlyCaller { bool isCaller = callerMap[msg.sender]; require(isCaller, "onlyCaller methods called by non-caller."); _; } constructor() public{ owner = msg.sender; callerMap[owner] = true; } // Fallback function deliberately left empty. It's primary use case // is to top up the bank roll. function () external payable { } function kill() external onlyOwner { selfdestruct(owner); } function addCaller(address caller) public onlyOwner{ bool isCaller = callerMap[caller]; if (isCaller == false){ callerMap[caller] = true; } } function deleteCaller(address caller) external onlyOwner { bool isCaller = callerMap[caller]; if (isCaller == true) { callerMap[caller] = false; } } function addUserExp(address addr, uint256 amount) public onlyCaller{ uint exp = userExpPool[addr]; exp = exp + amount; userExpPool[addr] = exp; } function getUserExp(address addr) public view returns(uint256 exp){ return userExpPool[addr]; } function getVIPLevel(address user) public view returns (uint256 level) { uint exp = userExpPool[user]; if(exp >= 25 ether && exp < 125 ether){ level = 1; } else if(exp >= 125 ether && exp < 250 ether){ level = 2; } else if(exp >= 250 ether && exp < 1250 ether){ level = 3; } else if(exp >= 1250 ether && exp < 2500 ether){ level = 4; } else if(exp >= 2500 ether && exp < 12500 ether){ level = 5; } else if(exp >= 12500 ether && exp < 25000 ether){ level = 6; } else if(exp >= 25000 ether && exp < 125000 ether){ level = 7; } else if(exp >= 125000 ether && exp < 250000 ether){ level = 8; } else if(exp >= 250000 ether && exp < 1250000 ether){ level = 9; } else if(exp >= 1250000 ether){ level = 10; } else{ level = 0; } return level; } function getVIPBounusRate(address user) public view returns (uint256 rate){ uint level = getVIPLevel(user); return level; } // This function is used to bump up the jackpot fund. Cannot be used to lower it. function increaseJackpot(uint increaseAmount) external onlyCaller { require (increaseAmount <= address(this).balance, "Increase amount larger than balance."); require (jackpotSize + increaseAmount <= address(this).balance, "Not enough funds."); jackpotSize += uint128(increaseAmount); } function payJackpotReward(address payable to) external onlyCaller{ to.transfer(jackpotSize); jackpotSize = 0; } function getJackpotSize() external view returns (uint256){ return jackpotSize; } function increaseRankingReward(uint amount) public onlyCaller{ require (amount <= address(this).balance, "Increase amount larger than balance."); require (rankingRewardSize + amount <= address(this).balance, "Not enough funds."); rankingRewardSize += uint128(amount); } function payRankingReward(address payable to) external onlyCaller { uint128 prize = rankingRewardSize / 2; rankingRewardSize = rankingRewardSize - prize; if(to.send(prize)){ emit RankingRewardPayment(to, prize); } } function getRankingRewardSize() external view returns (uint128){ return rankingRewardSize; } } contract AceDice { /// *** Constants section // Each bet is deducted 1% in favour of the house, but no less than some minimum. // The lower bound is dictated by gas costs of the settleBet transaction, providing // headroom for up to 10 Gwei prices. uint constant HOUSE_EDGE_PERCENT = 1; uint constant HOUSE_EDGE_MINIMUM_AMOUNT = 0.0004 ether; // Bets lower than this amount do not participate in jackpot rolls (and are // not deducted JACKPOT_FEE). uint constant MIN_JACKPOT_BET = 0.1 ether; // Chance to win jackpot (currently 0.1%) and fee deducted into jackpot fund. uint constant JACKPOT_MODULO = 1000; uint constant JACKPOT_FEE = 0.001 ether; // There is minimum and maximum bets. uint constant MIN_BET = 0.01 ether; uint constant MAX_AMOUNT = 300000 ether; // Modulo is a number of equiprobable outcomes in a game: // - 2 for coin flip // - 6 for dice // - 6*6 = 36 for double dice // - 100 for etheroll // - 37 for roulette // etc. // It's called so because 256-bit entropy is treated like a huge integer and // the remainder of its division by modulo is considered bet outcome. // uint constant MAX_MODULO = 100; // For modulos below this threshold rolls are checked against a bit mask, // thus allowing betting on any combination of outcomes. For example, given // modulo 6 for dice, 101000 mask (base-2, big endian) means betting on // 4 and 6; for games with modulos higher than threshold (Etheroll), a simple // limit is used, allowing betting on any outcome in [0, N) range. // // The specific value is dictated by the fact that 256-bit intermediate // multiplication result allows implementing population count efficiently // for numbers that are up to 42 bits, and 40 is the highest multiple of // eight below 42. uint constant MAX_MASK_MODULO = 40; // This is a check on bet mask overflow. uint constant MAX_BET_MASK = 2 ** MAX_MASK_MODULO; // EVM BLOCKHASH opcode can query no further than 256 blocks into the // past. Given that settleBet uses block hash of placeBet as one of // complementary entropy sources, we cannot process bets older than this // threshold. On rare occasions AceDice croupier may fail to invoke // settleBet in this timespan due to technical issues or extreme Ethereum // congestion; such bets can be refunded via invoking refundBet. uint constant BET_EXPIRATION_BLOCKS = 250; // Some deliberately invalid address to initialize the secret signer with. // Forces maintainers to invoke setSecretSigner before processing any bets. address constant DUMMY_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; // Standard contract ownership transfer. address payable public owner; address payable private nextOwner; // Adjustable max bet profit. Used to cap bets against dynamic odds. uint public maxProfit; // The address corresponding to a private key used to sign placeBet commits. address public secretSigner; // Funds that are locked in potentially winning bets. Prevents contract from // committing to bets it cannot pay out. uint128 public lockedInBets; // A structure representing a single bet. struct Bet { // Wager amount in wei. uint amount; // Modulo of a game. // uint8 modulo; // Number of winning outcomes, used to compute winning payment (* modulo/rollUnder), // and used instead of mask for games with modulo > MAX_MASK_MODULO. uint8 rollUnder; // Block number of placeBet tx. uint40 placeBlockNumber; // Bit mask representing winning bet outcomes (see MAX_MASK_MODULO comment). uint40 mask; // Address of a gambler, used to pay out winning bets. address payable gambler; // Address of inviter address payable inviter; } struct Profile{ // picture index of profile avatar uint avatarIndex; // nickname of user bytes32 nickName; } // Mapping from commits to all currently active & processed bets. mapping (uint => Bet) bets; mapping (address => Profile) profiles; // Croupier account. mapping (address => bool ) croupierMap; address payable public VIPLibraryAddress; // Events that are issued to make statistic recovery easier. event FailedPayment(address indexed beneficiary, uint amount); event Payment(address indexed beneficiary, uint amount, uint dice, uint rollUnder, uint betAmount); event JackpotPayment(address indexed beneficiary, uint amount, uint dice, uint rollUnder, uint betAmount); event VIPPayback(address indexed beneficiary, uint amount); // This event is emitted in placeBet to record commit in the logs. event Commit(uint commit); // Constructor. Deliberately does not take any parameters. constructor () public { owner = msg.sender; secretSigner = DUMMY_ADDRESS; } // Standard modifier on methods invokable only by contract owner. modifier onlyOwner { require (msg.sender == owner, "OnlyOwner methods called by non-owner."); _; } // Standard modifier on methods invokable only by contract owner. modifier onlyCroupier { bool isCroupier = croupierMap[msg.sender]; require(isCroupier, "OnlyCroupier methods called by non-croupier."); _; } // Standard contract ownership transfer implementation, function approveNextOwner(address payable _nextOwner) external onlyOwner { require (_nextOwner != owner, "Cannot approve current owner."); nextOwner = _nextOwner; } function acceptNextOwner() external { require (msg.sender == nextOwner, "Can only accept preapproved new owner."); owner = nextOwner; } // Fallback function deliberately left empty. It's primary use case // is to top up the bank roll. function () external payable { } // See comment for "secretSigner" variable. function setSecretSigner(address newSecretSigner) external onlyOwner { secretSigner = newSecretSigner; } function getSecretSigner() external onlyOwner view returns(address){ return secretSigner; } function addCroupier(address newCroupier) external onlyOwner { bool isCroupier = croupierMap[newCroupier]; if (isCroupier == false) { croupierMap[newCroupier] = true; } } function deleteCroupier(address newCroupier) external onlyOwner { bool isCroupier = croupierMap[newCroupier]; if (isCroupier == true) { croupierMap[newCroupier] = false; } } function setVIPLibraryAddress(address payable addr) external onlyOwner{ VIPLibraryAddress = addr; } // Change max bet reward. Setting this to zero effectively disables betting. function setMaxProfit(uint _maxProfit) public onlyOwner { require (_maxProfit < MAX_AMOUNT, "maxProfit should be a sane number."); maxProfit = _maxProfit; } // Funds withdrawal to cover costs of AceDice operation. function withdrawFunds(address payable beneficiary, uint withdrawAmount) external onlyOwner { require (withdrawAmount <= address(this).balance, "Increase amount larger than balance."); require (lockedInBets + withdrawAmount <= address(this).balance, "Not enough funds."); sendFunds(beneficiary, withdrawAmount, withdrawAmount, 0, 0, 0); } function kill() external onlyOwner { require (lockedInBets == 0, "All bets should be processed (settled or refunded) before self-destruct."); selfdestruct(owner); } function encodePacketCommit(uint commitLastBlock, uint commit) private pure returns(bytes memory){ return abi.encodePacked(uint40(commitLastBlock), commit); } function verifyCommit(uint commitLastBlock, uint commit, uint8 v, bytes32 r, bytes32 s) private view { // Check that commit is valid - it has not expired and its signature is valid. require (block.number <= commitLastBlock, "Commit has expired."); //bytes32 signatureHash = keccak256(abi.encodePacked(commitLastBlock, commit)); bytes memory prefix = "\x19Ethereum Signed Message:\n32"; bytes memory message = encodePacketCommit(commitLastBlock, commit); bytes32 messageHash = keccak256(abi.encodePacked(prefix, keccak256(message))); require (secretSigner == ecrecover(messageHash, v, r, s), "ECDSA signature is not valid."); } function placeBet(uint betMask, uint commitLastBlock, uint commit, uint8 v, bytes32 r, bytes32 s) external payable { // Check that the bet is in 'clean' state. Bet storage bet = bets[commit]; require (bet.gambler == address(0), "Bet should be in a 'clean' state."); // Validate input data ranges. uint amount = msg.value; //require (modulo > 1 && modulo <= MAX_MODULO, "Modulo should be within range."); require (amount >= MIN_BET && amount <= MAX_AMOUNT, "Amount should be within range."); require (betMask > 0 && betMask < MAX_BET_MASK, "Mask should be within range."); verifyCommit(commitLastBlock, commit, v, r, s); // uint rollUnder; uint mask; // if (modulo <= MAX_MASK_MODULO) { // // Small modulo games specify bet outcomes via bit mask. // // rollUnder is a number of 1 bits in this mask (population count). // // This magic looking formula is an efficient way to compute population // // count on EVM for numbers below 2**40. For detailed proof consult // // the AceDice whitepaper. // rollUnder = ((betMask * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO; // mask = betMask; // } else { // Larger modulos specify the right edge of half-open interval of // winning bet outcomes. require (betMask > 0 && betMask <= 100, "High modulo range, betMask larger than modulo."); // rollUnder = betMask; // } // Winning amount and jackpot increase. uint possibleWinAmount; uint jackpotFee; (possibleWinAmount, jackpotFee) = getDiceWinAmount(amount, betMask); // Enforce max profit limit. require (possibleWinAmount <= amount + maxProfit, "maxProfit limit violation. "); // Lock funds. lockedInBets += uint128(possibleWinAmount); // Check whether contract has enough funds to process this bet. require (jackpotFee + lockedInBets <= address(this).balance, "Cannot afford to lose this bet."); // Record commit in logs. emit Commit(commit); // Store bet parameters on blockchain. bet.amount = amount; // bet.modulo = uint8(modulo); bet.rollUnder = uint8(betMask); bet.placeBlockNumber = uint40(block.number); bet.mask = uint40(mask); bet.gambler = msg.sender; CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress); vipLib.addUserExp(msg.sender, amount); } function placeBetWithInviter(uint betMask, uint commitLastBlock, uint commit, uint8 v, bytes32 r, bytes32 s, address payable inviter) external payable { // Check that the bet is in 'clean' state. Bet storage bet = bets[commit]; require (bet.gambler == address(0), "Bet should be in a 'clean' state."); // Validate input data ranges. uint amount = msg.value; // require (modulo > 1 && modulo <= MAX_MODULO, "Modulo should be within range."); require (amount >= MIN_BET && amount <= MAX_AMOUNT, "Amount should be within range."); require (betMask > 0 && betMask < MAX_BET_MASK, "Mask should be within range."); require (address(this) != inviter && inviter != address(0), "cannot invite mysql"); verifyCommit(commitLastBlock, commit, v, r, s); // uint rollUnder; uint mask; // if (modulo <= MAX_MASK_MODULO) { // // Small modulo games specify bet outcomes via bit mask. // // rollUnder is a number of 1 bits in this mask (population count). // // This magic looking formula is an efficient way to compute population // // count on EVM for numbers below 2**40. For detailed proof consult // // the AceDice whitepaper. // rollUnder = ((betMask * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO; // mask = betMask; // } else { // Larger modulos specify the right edge of half-open interval of // winning bet outcomes. require (betMask > 0 && betMask <= 100, "High modulo range, betMask larger than modulo."); // rollUnder = betMask; // } // Winning amount and jackpot increase. uint possibleWinAmount; uint jackpotFee; (possibleWinAmount, jackpotFee) = getDiceWinAmount(amount, betMask); // Enforce max profit limit. require (possibleWinAmount <= amount + maxProfit, "maxProfit limit violation. "); // Lock funds. lockedInBets += uint128(possibleWinAmount); // jackpotSize += uint128(jackpotFee); // Check whether contract has enough funds to process this bet. require (jackpotFee + lockedInBets <= address(this).balance, "Cannot afford to lose this bet."); // Record commit in logs. emit Commit(commit); // Store bet parameters on blockchain. bet.amount = amount; // bet.modulo = uint8(modulo); bet.rollUnder = uint8(betMask); bet.placeBlockNumber = uint40(block.number); bet.mask = uint40(mask); bet.gambler = msg.sender; bet.inviter = inviter; CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress); vipLib.addUserExp(msg.sender, amount); } function applyVIPLevel(address payable gambler, uint amount) private { CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress); uint rate = vipLib.getVIPBounusRate(gambler); if (rate <= 0) return; uint vipPayback = amount * rate / 10000; if(gambler.send(vipPayback)){ emit VIPPayback(gambler, vipPayback); } } function getMyAccuAmount() external view returns (uint){ CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress); return vipLib.getUserExp(msg.sender); } function getJackpotSize() external view returns (uint){ CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress); return vipLib.getJackpotSize(); } // This is the method used to settle 99% of bets. To process a bet with a specific // "commit", settleBet should supply a "reveal" number that would Keccak256-hash to // "commit". "blockHash" is the block hash of placeBet block as seen by croupier; it // is additionally asserted to prevent changing the bet outcomes on Ethereum reorgs. function settleBet(uint reveal, bytes32 blockHash) external onlyCroupier { uint commit = uint(keccak256(abi.encodePacked(reveal))); Bet storage bet = bets[commit]; uint placeBlockNumber = bet.placeBlockNumber; // Check that bet has not expired yet (see comment to BET_EXPIRATION_BLOCKS). require (block.number > placeBlockNumber, "settleBet in the same block as placeBet, or before."); require (block.number <= placeBlockNumber + BET_EXPIRATION_BLOCKS, "Blockhash can't be queried by EVM."); require (blockhash(placeBlockNumber) == blockHash); // Settle bet using reveal and blockHash as entropy sources. settleBetCommon(bet, reveal, blockHash); } // Common settlement code for settleBet & settleBetUncleMerkleProof. function settleBetCommon(Bet storage bet, uint reveal, bytes32 entropyBlockHash) private { // Fetch bet parameters into local variables (to save gas). uint amount = bet.amount; // uint modulo = bet.modulo; uint rollUnder = bet.rollUnder; address payable gambler = bet.gambler; // Check that bet is in 'active' state. require (amount != 0, "Bet should be in an 'active' state"); applyVIPLevel(gambler, amount); // Move bet into 'processed' state already. bet.amount = 0; // The RNG - combine "reveal" and blockhash of placeBet using Keccak256. Miners // are not aware of "reveal" and cannot deduce it from "commit" (as Keccak256 // preimage is intractable), and house is unable to alter the "reveal" after // placeBet have been mined (as Keccak256 collision finding is also intractable). bytes32 entropy = keccak256(abi.encodePacked(reveal, entropyBlockHash)); // Do a roll by taking a modulo of entropy. Compute winning amount. uint dice = uint(entropy) % 100; uint diceWinAmount; uint _jackpotFee; (diceWinAmount, _jackpotFee) = getDiceWinAmount(amount, rollUnder); uint diceWin = 0; uint jackpotWin = 0; if (dice < rollUnder) { diceWin = diceWinAmount; } // Unlock the bet amount, regardless of the outcome. lockedInBets -= uint128(diceWinAmount); CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress); // Roll for a jackpot (if eligible). if (amount >= MIN_JACKPOT_BET) { VIPLibraryAddress.transfer(_jackpotFee); vipLib.increaseJackpot(_jackpotFee); // The second modulo, statistically independent from the "main" dice roll. // Effectively you are playing two games at once! // uint jackpotRng = (uint(entropy) / modulo) % JACKPOT_MODULO; // Bingo! if ((uint(entropy) / 100) % JACKPOT_MODULO == 0) { jackpotWin = vipLib.getJackpotSize(); vipLib.payJackpotReward(gambler); } } // Log jackpot win. if (jackpotWin > 0) { emit JackpotPayment(gambler, jackpotWin, dice, rollUnder, amount); } if(bet.inviter != address(0)){ // pay 10% of house edge to inviter bet.inviter.transfer(amount * HOUSE_EDGE_PERCENT / 100 * 7 /100); } // uint128 rankingRewardFee = uint128(amount * HOUSE_EDGE_PERCENT / 100 * 9 /100); VIPLibraryAddress.transfer(uint128(amount * HOUSE_EDGE_PERCENT / 100 * 7 /100)); vipLib.increaseRankingReward(uint128(amount * HOUSE_EDGE_PERCENT / 100 * 7 /100)); // Send the funds to gambler. sendFunds(gambler, diceWin == 0 ? 1 wei : diceWin, diceWin, dice, rollUnder, amount); } // Refund transaction - return the bet amount of a roll that was not processed in a // due timeframe. Processing such blocks is not possible due to EVM limitations (see // BET_EXPIRATION_BLOCKS comment above for details). In case you ever find yourself // in a situation like this, just contact the AceDice support, however nothing // precludes you from invoking this method yourself. function refundBet(uint commit) external { // Check that bet is in 'active' state. Bet storage bet = bets[commit]; uint amount = bet.amount; require (amount != 0, "Bet should be in an 'active' state"); // Check that bet has already expired. require (block.number > bet.placeBlockNumber + BET_EXPIRATION_BLOCKS, "Blockhash can't be queried by EVM."); // Move bet into 'processed' state, release funds. bet.amount = 0; uint diceWinAmount; uint jackpotFee; (diceWinAmount, jackpotFee) = getDiceWinAmount(amount, bet.rollUnder); lockedInBets -= uint128(diceWinAmount); // Send the refund. sendFunds(bet.gambler, amount, amount, 0, 0, 0); } // Get the expected win amount after house edge is subtracted. function getDiceWinAmount(uint amount, uint rollUnder) private pure returns (uint winAmount, uint jackpotFee) { require (0 < rollUnder && rollUnder <= 100, "Win probability out of range."); jackpotFee = amount >= MIN_JACKPOT_BET ? JACKPOT_FEE : 0; uint houseEdge = amount * HOUSE_EDGE_PERCENT / 100; if (houseEdge < HOUSE_EDGE_MINIMUM_AMOUNT) { houseEdge = HOUSE_EDGE_MINIMUM_AMOUNT; } require (houseEdge + jackpotFee <= amount, "Bet doesn't even cover house edge."); winAmount = (amount - houseEdge - jackpotFee) * 100 / rollUnder; } // Helper routine to process the payment. function sendFunds(address payable beneficiary, uint amount, uint successLogAmount, uint dice, uint rollUnder, uint betAmount) private { if (beneficiary.send(amount)) { emit Payment(beneficiary, successLogAmount, dice, rollUnder, betAmount); } else { emit FailedPayment(beneficiary, amount); } } function thisBalance() public view returns(uint) { return address(this).balance; } function setAvatarIndex(uint index) external{ require (index >=0 && index <= 100, "avatar index should be in range"); Profile storage profile = profiles[msg.sender]; profile.avatarIndex = index; } function setNickName(bytes32 nickName) external{ Profile storage profile = profiles[msg.sender]; profile.nickName = nickName; } function getProfile() external view returns(uint, bytes32){ Profile storage profile = profiles[msg.sender]; return (profile.avatarIndex, profile.nickName); } function payTodayReward(address payable to) external onlyOwner { CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress); vipLib.payRankingReward(to); } function getRankingRewardSize() external view returns (uint128) { CryptoTycoonsVIPLib vipLib = CryptoTycoonsVIPLib(VIPLibraryAddress); return vipLib.getRankingRewardSize(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"thisBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"}],"name":"payTodayReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setVIPLibraryAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"index","type":"uint256"}],"name":"setAvatarIndex","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCroupier","type":"address"}],"name":"addCroupier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secretSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"nickName","type":"bytes32"}],"name":"setNickName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getRankingRewardSize","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMyAccuAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSecretSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"VIPLibraryAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"betMask","type":"uint256"},{"name":"commitLastBlock","type":"uint256"},{"name":"commit","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"placeBet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"withdrawAmount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reveal","type":"uint256"},{"name":"blockHash","type":"bytes32"}],"name":"settleBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptNextOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCroupier","type":"address"}],"name":"deleteCroupier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nextOwner","type":"address"}],"name":"approveNextOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getProfile","outputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newSecretSigner","type":"address"}],"name":"setSecretSigner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lockedInBets","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"betMask","type":"uint256"},{"name":"commitLastBlock","type":"uint256"},{"name":"commit","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"inviter","type":"address"}],"name":"placeBetWithInviter","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"commit","type":"uint256"}],"name":"refundBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getJackpotSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxProfit","type":"uint256"}],"name":"setMaxProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"FailedPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"dice","type":"uint256"},{"indexed":false,"name":"rollUnder","type":"uint256"},{"indexed":false,"name":"betAmount","type":"uint256"}],"name":"Payment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"dice","type":"uint256"},{"indexed":false,"name":"rollUnder","type":"uint256"},{"indexed":false,"name":"betAmount","type":"uint256"}],"name":"JackpotPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"VIPPayback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"}],"name":"Commit","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613c7b806100b56000396000f3fe6080604052600436106101b9576000357c010000000000000000000000000000000000000000000000000000000090048063b539cd5511610109578063d6afc9b1116100a7578063dfea6ec211610081578063dfea6ec2146107f5578063e1fdb4b414610878578063e78e0362146108b3578063fbd668a9146108de576101b9565b8063d6afc9b114610723578063d702087f14610755578063df88126f146107a6576101b9565b8063ca722cdc116100e3578063ca722cdc14610625578063d06c54fb1461066a578063d3d1996514610681578063d579fd44146106d2576101b9565b8063b539cd551461053c578063bb5a4f4c14610567578063c1075329146105ca576101b9565b80634d61537f116101765780638da5cb5b116101505780638da5cb5b1461040c5780639efedc9114610463578063a43796ce1461048e578063a9c1685b146104e5576101b9565b80634d61537f1461032b57806362246c411461038257806377e24446146103bd576101b9565b806327f3a72a146101bb5780632d7243ef146101e65780633afd716f14610237578063412648bf1461028857806341c0e1b5146102c357806344268655146102da575b005b3480156101c757600080fd5b506101d0610919565b6040518082815260200191505060405180910390f35b3480156101f257600080fd5b506102356004803603602081101561020957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610938565b005b34801561024357600080fd5b506102866004803603602081101561025a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610abd565b005b34801561029457600080fd5b506102c1600480360360208110156102ab57600080fd5b8101908080359060200190929190505050610ba8565b005b3480156102cf57600080fd5b506102d8610c7e565b005b3480156102e657600080fd5b50610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dea565b005b34801561033757600080fd5b50610340610f4c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038e57600080fd5b506103bb600480360360208110156103a557600080fd5b8101908080359060200190929190505050610f72565b005b3480156103c957600080fd5b506103d2610fc2565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041857600080fd5b5061042161108d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046f57600080fd5b506104786110b2565b6040518082815260200191505060405180910390f35b34801561049a57600080fd5b506104a36111b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f157600080fd5b506104fa611285565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054857600080fd5b506105516112ab565b6040518082815260200191505060405180910390f35b6105c8600480360360c081101561057d57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506112b1565b005b3480156105d657600080fd5b50610623600480360360408110156105ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611890565b005b34801561063157600080fd5b506106686004803603604081101561064857600080fd5b810190808035906020019092919080359060200190929190505050611a7e565b005b34801561067657600080fd5b5061067f611c68565b005b34801561068d57600080fd5b506106d0600480360360208110156106a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d74565b005b3480156106de57600080fd5b50610721600480360360208110156106f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed6565b005b34801561072f57600080fd5b50610738612086565b604051808381526020018281526020019250505060405180910390f35b34801561076157600080fd5b506107a46004803603602081101561077857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120df565b005b3480156107b257600080fd5b506107bb6121ca565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610876600480360360e081101561080b57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121ec565b005b34801561088457600080fd5b506108b16004803603602081101561089b57600080fd5b81019080803590602001909291905050506128ec565b005b3480156108bf57600080fd5b506108c8612aa9565b6040518082815260200191505060405180910390f35b3480156108ea57600080fd5b506109176004803603602081101561090157600080fd5b8101908080359060200190929190505050612b74565b005b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663bab46bd3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610aa157600080fd5b505af1158015610ab5573d6000803e3d6000fd5b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008110158015610bba575060648111155b1515610c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f61766174617220696e6465782073686f756c6420626520696e2072616e67650081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001819055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b6000600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16141515610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526048815260200180613b926048913960600191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600015158115151415610f48576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600101819055505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166377e244466040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561104c57600080fd5b505afa158015611060573d6000803e3d6000fd5b505050506040513d602081101561107657600080fd5b810190808051906020019092919050505091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b98f5932336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561117357600080fd5b505afa158015611187573d6000803e3d6000fd5b505050506040513d602081101561119d57600080fd5b810190808051906020019092919050505091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561125d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6000600560008681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1681600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611373576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613aee6021913960400191505060405180910390fd5b6000349050662386f26fc1000081101580156113995750693f870857a3e0e38000008111155b151561140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416d6f756e742073686f756c642062652077697468696e2072616e67652e000081525060200191505060405180910390fd5b6000881180156114205750602860020a88105b1515611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d61736b2073686f756c642062652077697468696e2072616e67652e0000000081525060200191505060405180910390fd5b6114a18787878787612c89565b600080891180156114b3575060648911155b151561150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613c00602e913960400191505060405180910390fd5b600080611517848c612f05565b80925081935050506002548401821115151561159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d617850726f666974206c696d69742076696f6c6174696f6e2e20000000000081525060200191505060405180910390fd5b81600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff1631600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168201111515156116b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e0081525060200191505060405180910390fd5b7f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f87896040518082815260200191505060405180910390a18385600001819055508a8560010160006101000a81548160ff021916908360ff160217905550438560010160016101000a81548164ffffffffff021916908364ffffffffff160217905550828560010160066101000a81548164ffffffffff021916908364ffffffffff1602179055503385600101600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639232fdb533876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611937576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff163181111515156119a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613b6e6024913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff163181600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff160111151515611a6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f7420656e6f7567682066756e64732e00000000000000000000000000000081525060200191505060405180910390fd5b611a7a8282836000806000613057565b5050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801515611b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613b42602c913960400191505060405180910390fd5b6000836040516020018082815260200191505060405160208183030381529060405280519060200120600190049050600060056000838152602001908152602001600020905060008160010160019054906101000a900464ffffffffff1664ffffffffff1690508043111515611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613b0f6033913960400191505060405180910390fd5b60fa81014311151515611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c2e6022913960400191505060405180910390fd5b848140141515611c5557600080fd5b611c60828787613153565b505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613a626026913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600115158115151415611ed2576000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e6e6f7420617070726f76652063757272656e74206f776e65722e00000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154816001015492509250509091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612186576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6000600560008781526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1681600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156122ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613aee6021913960400191505060405180910390fd5b6000349050662386f26fc1000081101580156122d45750693f870857a3e0e38000008111155b1515612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416d6f756e742073686f756c642062652077697468696e2072616e67652e000081525060200191505060405180910390fd5b60008911801561235b5750602860020a89105b15156123cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d61736b2073686f756c642062652077697468696e2072616e67652e0000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141580156124385750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f63616e6e6f7420696e76697465206d7973716c0000000000000000000000000081525060200191505060405180910390fd5b6124b98888888888612c89565b6000808a1180156124cb575060648a11155b1515612522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613c00602e913960400191505060405180910390fd5b60008061252f848d612f05565b8092508193505050600254840182111515156125b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d617850726f666974206c696d69742076696f6c6174696f6e2e20000000000081525060200191505060405180910390fd5b81600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff1631600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168201111515156126ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e0081525060200191505060405180910390fd5b7f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f878a6040518082815260200191505060405180910390a18385600001819055508b8560010160006101000a81548160ff021916908360ff160217905550438560010160016101000a81548164ffffffffff021916908364ffffffffff160217905550828560010160066101000a81548164ffffffffff021916908364ffffffffff1602179055503385600101600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858560020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639232fdb533876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156128c557600080fd5b505af11580156128d9573d6000803e3d6000fd5b5050505050505050505050505050505050565b600060056000838152602001908152602001600020905060008160000154905060008114151515612968576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613acc6022913960400191505060405180910390fd5b60fa8260010160019054906101000a900464ffffffffff1664ffffffffff1601431115156129e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c2e6022913960400191505060405180910390fd5b60008260000181905550600080612a0c838560010160009054906101000a900460ff1660ff16612f05565b809250819350505081600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550612aa284600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684856000806000613057565b5050505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663e78e03626040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015612b3357600080fd5b505afa158015612b47573d6000803e3d6000fd5b505050506040513d6020811015612b5d57600080fd5b810190808051906020019092919050505091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b693f870857a3e0e380000081101515612c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613a886022913960400191505060405180910390fd5b8060028190555050565b844311151515612d01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f436f6d6d69742068617320657870697265642e0000000000000000000000000081525060200191505060405180910390fd5b60606040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506060612d47878761384e565b905060008282805190602001206040516020018083805190602001908083835b602083101515612d8c5780518252602082019150602081019050602083039250612d67565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612e2d573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4543445341207369676e6174757265206973206e6f742076616c69642e00000081525060200191505060405180910390fd5b5050505050505050565b600080826000108015612f19575060648311155b1515612f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f57696e2070726f626162696c697479206f7574206f662072616e67652e00000081525060200191505060405180910390fd5b67016345785d8a0000841015612fa4576000612fad565b66038d7ea4c680005b90506000606460018602811515612fc057fe5b04905066016bcc41e90000811015612fdd5766016bcc41e9000090505b848282011115151561303a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613aaa6022913960400191505060405180910390fd5b83606483838803030281151561304c57fe5b049250509250929050565b8573ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050156130fc578573ffffffffffffffffffffffffffffffffffffffff167f9620cef3a3d39af2426e8362381d59ca9ea0f5ae59621986a897d764f66f953e858585856040518085815260200184815260200183815260200182815260200194505050505060405180910390a261314b565b8573ffffffffffffffffffffffffffffffffffffffff167fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d866040518082815260200191505060405180910390a25b505050505050565b60008360000154905060008460010160009054906101000a900460ff1660ff169050600085600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600083141515156131fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613acc6022913960400191505060405180910390fd5b61320481846138ac565b6000866000018190555060008585604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905060006064826001900481151561325357fe5b0690506000806132638787612f05565b80925081935050506000809050600080905087851015613281578391505b83600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905067016345785d8a00008a10151561357d57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015801561337b573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff1663d6d30a51856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156133eb57600080fd5b505af11580156133ff573d6000803e3d6000fd5b5050505060006103e86064896001900481151561341857fe5b0481151561342257fe5b06141561357c578073ffffffffffffffffffffffffffffffffffffffff1663e78e03626040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561348b57600080fd5b505afa15801561349f573d6000803e3d6000fd5b505050506040513d60208110156134b557600080fd5b810190808051906020019092919050505091508073ffffffffffffffffffffffffffffffffffffffff166362b686fc896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561356357600080fd5b505af1158015613577573d6000803e3d6000fd5b505050505b5b60008211156135ed578773ffffffffffffffffffffffffffffffffffffffff167f1bb05166a98fd97ba6a9f1f04f57b119557528458c1378d421b97451e195fd2c83888c8e6040518085815260200184815260200183815260200182815260200194505050505060405180910390a25b600073ffffffffffffffffffffffffffffffffffffffff168d60020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156136d1578c60020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646007606460018f0281151561369857fe5b04028115156136a357fe5b049081150290604051600060405180830381858888f193505050501580156136cf573d6000803e3d6000fd5b505b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646007606460018f0281151561372057fe5b040281151561372b57fe5b046fffffffffffffffffffffffffffffffff169081150290604051600060405180830381858888f19350505050158015613769573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff1663040448c660646007606460018f0281151561379957fe5b04028115156137a457fe5b046040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826fffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561380957600080fd5b505af115801561381d573d6000803e3d6000fd5b5050505061383f88600085146138335784613836565b60015b85898d8f613057565b50505050505050505050505050565b60608282604051602001808364ffffffffff1664ffffffffff167b0100000000000000000000000000000000000000000000000000000002815260050182815260200192505050604051602081830303815290604052905092915050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663772c658b856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561396e57600080fd5b505afa158015613982573d6000803e3d6000fd5b505050506040513d602081101561399857600080fd5b810190808051906020019092919050505090506000811115156139bc575050613a5d565b60006127108285028115156139cd57fe5b0490508473ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015613a59578473ffffffffffffffffffffffffffffffffffffffff167f63c4a815575db8089483aeea967a8e1205c076ec5ff1eefca70ddb8d93be7eff826040518082815260200191505060405180910390a25b5050505b505056fe43616e206f6e6c792061636365707420707265617070726f766564206e6577206f776e65722e6d617850726f6669742073686f756c6420626520612073616e65206e756d6265722e42657420646f65736e2774206576656e20636f76657220686f75736520656467652e4265742073686f756c6420626520696e20616e2027616374697665272073746174654265742073686f756c6420626520696e20612027636c65616e272073746174652e736574746c6542657420696e207468652073616d6520626c6f636b20617320706c6163654265742c206f72206265666f72652e4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e6f6e2d63726f75706965722e496e63726561736520616d6f756e74206c6172676572207468616e2062616c616e63652e416c6c20626574732073686f756c642062652070726f6365737365642028736574746c6564206f7220726566756e64656429206265666f72652073656c662d64657374727563742e4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d6f776e65722e48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676572207468616e206d6f64756c6f2e426c6f636b686173682063616e277420626520717565726965642062792045564d2ea165627a7a723058207dcf7c417ab72471e0ef39a32d1c6731cf4fc4d9593112c4419c6645b1d2716d0029
Deployed Bytecode
0x6080604052600436106101b9576000357c010000000000000000000000000000000000000000000000000000000090048063b539cd5511610109578063d6afc9b1116100a7578063dfea6ec211610081578063dfea6ec2146107f5578063e1fdb4b414610878578063e78e0362146108b3578063fbd668a9146108de576101b9565b8063d6afc9b114610723578063d702087f14610755578063df88126f146107a6576101b9565b8063ca722cdc116100e3578063ca722cdc14610625578063d06c54fb1461066a578063d3d1996514610681578063d579fd44146106d2576101b9565b8063b539cd551461053c578063bb5a4f4c14610567578063c1075329146105ca576101b9565b80634d61537f116101765780638da5cb5b116101505780638da5cb5b1461040c5780639efedc9114610463578063a43796ce1461048e578063a9c1685b146104e5576101b9565b80634d61537f1461032b57806362246c411461038257806377e24446146103bd576101b9565b806327f3a72a146101bb5780632d7243ef146101e65780633afd716f14610237578063412648bf1461028857806341c0e1b5146102c357806344268655146102da575b005b3480156101c757600080fd5b506101d0610919565b6040518082815260200191505060405180910390f35b3480156101f257600080fd5b506102356004803603602081101561020957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610938565b005b34801561024357600080fd5b506102866004803603602081101561025a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610abd565b005b34801561029457600080fd5b506102c1600480360360208110156102ab57600080fd5b8101908080359060200190929190505050610ba8565b005b3480156102cf57600080fd5b506102d8610c7e565b005b3480156102e657600080fd5b50610329600480360360208110156102fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610dea565b005b34801561033757600080fd5b50610340610f4c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038e57600080fd5b506103bb600480360360208110156103a557600080fd5b8101908080359060200190929190505050610f72565b005b3480156103c957600080fd5b506103d2610fc2565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041857600080fd5b5061042161108d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561046f57600080fd5b506104786110b2565b6040518082815260200191505060405180910390f35b34801561049a57600080fd5b506104a36111b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f157600080fd5b506104fa611285565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054857600080fd5b506105516112ab565b6040518082815260200191505060405180910390f35b6105c8600480360360c081101561057d57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803560ff16906020019092919080359060200190929190803590602001909291905050506112b1565b005b3480156105d657600080fd5b50610623600480360360408110156105ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611890565b005b34801561063157600080fd5b506106686004803603604081101561064857600080fd5b810190808035906020019092919080359060200190929190505050611a7e565b005b34801561067657600080fd5b5061067f611c68565b005b34801561068d57600080fd5b506106d0600480360360208110156106a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d74565b005b3480156106de57600080fd5b50610721600480360360208110156106f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ed6565b005b34801561072f57600080fd5b50610738612086565b604051808381526020018281526020019250505060405180910390f35b34801561076157600080fd5b506107a46004803603602081101561077857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120df565b005b3480156107b257600080fd5b506107bb6121ca565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610876600480360360e081101561080b57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121ec565b005b34801561088457600080fd5b506108b16004803603602081101561089b57600080fd5b81019080803590602001909291905050506128ec565b005b3480156108bf57600080fd5b506108c8612aa9565b6040518082815260200191505060405180910390f35b3480156108ea57600080fd5b506109176004803603602081101561090157600080fd5b8101908080359060200190929190505050612b74565b005b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663bab46bd3836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015610aa157600080fd5b505af1158015610ab5573d6000803e3d6000fd5b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008110158015610bba575060648111155b1515610c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f61766174617220696e6465782073686f756c6420626520696e2072616e67650081525060200191505060405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001819055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b6000600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16141515610db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526048815260200180613b926048913960600191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600015158115151415610f48576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600101819055505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166377e244466040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561104c57600080fd5b505afa158015611060573d6000803e3d6000fd5b505050506040513d602081101561107657600080fd5b810190808051906020019092919050505091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663b98f5932336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561117357600080fd5b505afa158015611187573d6000803e3d6000fd5b505050506040513d602081101561119d57600080fd5b810190808051906020019092919050505091505090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561125d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6000600560008681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1681600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611373576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613aee6021913960400191505060405180910390fd5b6000349050662386f26fc1000081101580156113995750693f870857a3e0e38000008111155b151561140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416d6f756e742073686f756c642062652077697468696e2072616e67652e000081525060200191505060405180910390fd5b6000881180156114205750602860020a88105b1515611494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d61736b2073686f756c642062652077697468696e2072616e67652e0000000081525060200191505060405180910390fd5b6114a18787878787612c89565b600080891180156114b3575060648911155b151561150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613c00602e913960400191505060405180910390fd5b600080611517848c612f05565b80925081935050506002548401821115151561159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d617850726f666974206c696d69742076696f6c6174696f6e2e20000000000081525060200191505060405180910390fd5b81600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff1631600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168201111515156116b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e0081525060200191505060405180910390fd5b7f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f87896040518082815260200191505060405180910390a18385600001819055508a8560010160006101000a81548160ff021916908360ff160217905550438560010160016101000a81548164ffffffffff021916908364ffffffffff160217905550828560010160066101000a81548164ffffffffff021916908364ffffffffff1602179055503385600101600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639232fdb533876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561186a57600080fd5b505af115801561187e573d6000803e3d6000fd5b50505050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611937576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff163181111515156119a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613b6e6024913960400191505060405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff163181600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff160111151515611a6a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4e6f7420656e6f7567682066756e64732e00000000000000000000000000000081525060200191505060405180910390fd5b611a7a8282836000806000613057565b5050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801515611b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613b42602c913960400191505060405180910390fd5b6000836040516020018082815260200191505060405160208183030381529060405280519060200120600190049050600060056000838152602001908152602001600020905060008160010160019054906101000a900464ffffffffff1664ffffffffff1690508043111515611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526033815260200180613b0f6033913960400191505060405180910390fd5b60fa81014311151515611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c2e6022913960400191505060405180910390fd5b848140141515611c5557600080fd5b611c60828787613153565b505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613a626026913960400191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600115158115151415611ed2576000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f43616e6e6f7420617070726f76652063757272656e74206f776e65722e00000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154816001015492509250509091565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612186576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6000600560008781526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff1681600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156122ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613aee6021913960400191505060405180910390fd5b6000349050662386f26fc1000081101580156122d45750693f870857a3e0e38000008111155b1515612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f416d6f756e742073686f756c642062652077697468696e2072616e67652e000081525060200191505060405180910390fd5b60008911801561235b5750602860020a89105b15156123cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4d61736b2073686f756c642062652077697468696e2072616e67652e0000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141580156124385750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f63616e6e6f7420696e76697465206d7973716c0000000000000000000000000081525060200191505060405180910390fd5b6124b98888888888612c89565b6000808a1180156124cb575060648a11155b1515612522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613c00602e913960400191505060405180910390fd5b60008061252f848d612f05565b8092508193505050600254840182111515156125b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f6d617850726f666974206c696d69742076696f6c6174696f6e2e20000000000081525060200191505060405180910390fd5b81600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503073ffffffffffffffffffffffffffffffffffffffff1631600460009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168201111515156126ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e0081525060200191505060405180910390fd5b7f5bdd2fc99022530157777690475b670d3872f32262eb1d47d9ba8000dad58f878a6040518082815260200191505060405180910390a18385600001819055508b8560010160006101000a81548160ff021916908360ff160217905550438560010160016101000a81548164ffffffffff021916908364ffffffffff160217905550828560010160066101000a81548164ffffffffff021916908364ffffffffff1602179055503385600101600b6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858560020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff16639232fdb533876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156128c557600080fd5b505af11580156128d9573d6000803e3d6000fd5b5050505050505050505050505050505050565b600060056000838152602001908152602001600020905060008160000154905060008114151515612968576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613acc6022913960400191505060405180910390fd5b60fa8260010160019054906101000a900464ffffffffff1664ffffffffff1601431115156129e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c2e6022913960400191505060405180910390fd5b60008260000181905550600080612a0c838560010160009054906101000a900460ff1660ff16612f05565b809250819350505081600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550612aa284600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684856000806000613057565b5050505050565b600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663e78e03626040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015612b3357600080fd5b505afa158015612b47573d6000803e3d6000fd5b505050506040513d6020811015612b5d57600080fd5b810190808051906020019092919050505091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613bda6026913960400191505060405180910390fd5b693f870857a3e0e380000081101515612c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613a886022913960400191505060405180910390fd5b8060028190555050565b844311151515612d01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f436f6d6d69742068617320657870697265642e0000000000000000000000000081525060200191505060405180910390fd5b60606040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a33320000000081525090506060612d47878761384e565b905060008282805190602001206040516020018083805190602001908083835b602083101515612d8c5780518252602082019150602081019050602083039250612d67565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612e2d573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4543445341207369676e6174757265206973206e6f742076616c69642e00000081525060200191505060405180910390fd5b5050505050505050565b600080826000108015612f19575060648311155b1515612f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f57696e2070726f626162696c697479206f7574206f662072616e67652e00000081525060200191505060405180910390fd5b67016345785d8a0000841015612fa4576000612fad565b66038d7ea4c680005b90506000606460018602811515612fc057fe5b04905066016bcc41e90000811015612fdd5766016bcc41e9000090505b848282011115151561303a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613aaa6022913960400191505060405180910390fd5b83606483838803030281151561304c57fe5b049250509250929050565b8573ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050156130fc578573ffffffffffffffffffffffffffffffffffffffff167f9620cef3a3d39af2426e8362381d59ca9ea0f5ae59621986a897d764f66f953e858585856040518085815260200184815260200183815260200182815260200194505050505060405180910390a261314b565b8573ffffffffffffffffffffffffffffffffffffffff167fac464fe4d3a86b9121261ac0a01dd981bfe0777c7c9d9c8f4473d31a9c0f9d2d866040518082815260200191505060405180910390a25b505050505050565b60008360000154905060008460010160009054906101000a900460ff1660ff169050600085600101600b9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600083141515156131fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613acc6022913960400191505060405180910390fd5b61320481846138ac565b6000866000018190555060008585604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120905060006064826001900481151561325357fe5b0690506000806132638787612f05565b80925081935050506000809050600080905087851015613281578391505b83600460008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905067016345785d8a00008a10151561357d57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015801561337b573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff1663d6d30a51856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156133eb57600080fd5b505af11580156133ff573d6000803e3d6000fd5b5050505060006103e86064896001900481151561341857fe5b0481151561342257fe5b06141561357c578073ffffffffffffffffffffffffffffffffffffffff1663e78e03626040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561348b57600080fd5b505afa15801561349f573d6000803e3d6000fd5b505050506040513d60208110156134b557600080fd5b810190808051906020019092919050505091508073ffffffffffffffffffffffffffffffffffffffff166362b686fc896040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561356357600080fd5b505af1158015613577573d6000803e3d6000fd5b505050505b5b60008211156135ed578773ffffffffffffffffffffffffffffffffffffffff167f1bb05166a98fd97ba6a9f1f04f57b119557528458c1378d421b97451e195fd2c83888c8e6040518085815260200184815260200183815260200182815260200194505050505060405180910390a25b600073ffffffffffffffffffffffffffffffffffffffff168d60020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156136d1578c60020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646007606460018f0281151561369857fe5b04028115156136a357fe5b049081150290604051600060405180830381858888f193505050501580156136cf573d6000803e3d6000fd5b505b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60646007606460018f0281151561372057fe5b040281151561372b57fe5b046fffffffffffffffffffffffffffffffff169081150290604051600060405180830381858888f19350505050158015613769573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff1663040448c660646007606460018f0281151561379957fe5b04028115156137a457fe5b046040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180826fffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561380957600080fd5b505af115801561381d573d6000803e3d6000fd5b5050505061383f88600085146138335784613836565b60015b85898d8f613057565b50505050505050505050505050565b60608282604051602001808364ffffffffff1664ffffffffff167b0100000000000000000000000000000000000000000000000000000002815260050182815260200192505050604051602081830303815290604052905092915050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663772c658b856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561396e57600080fd5b505afa158015613982573d6000803e3d6000fd5b505050506040513d602081101561399857600080fd5b810190808051906020019092919050505090506000811115156139bc575050613a5d565b60006127108285028115156139cd57fe5b0490508473ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015613a59578473ffffffffffffffffffffffffffffffffffffffff167f63c4a815575db8089483aeea967a8e1205c076ec5ff1eefca70ddb8d93be7eff826040518082815260200191505060405180910390a25b5050505b505056fe43616e206f6e6c792061636365707420707265617070726f766564206e6577206f776e65722e6d617850726f6669742073686f756c6420626520612073616e65206e756d6265722e42657420646f65736e2774206576656e20636f76657220686f75736520656467652e4265742073686f756c6420626520696e20616e2027616374697665272073746174654265742073686f756c6420626520696e20612027636c65616e272073746174652e736574746c6542657420696e207468652073616d6520626c6f636b20617320706c6163654265742c206f72206265666f72652e4f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e6f6e2d63726f75706965722e496e63726561736520616d6f756e74206c6172676572207468616e2062616c616e63652e416c6c20626574732073686f756c642062652070726f6365737365642028736574746c6564206f7220726566756e64656429206265666f72652073656c662d64657374727563742e4f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d6f776e65722e48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676572207468616e206d6f64756c6f2e426c6f636b686173682063616e277420626520717565726965642062792045564d2ea165627a7a723058207dcf7c417ab72471e0ef39a32d1c6731cf4fc4d9593112c4419c6645b1d2716d0029
Swarm Source
bzzr://7dcf7c417ab72471e0ef39a32d1c6731cf4fc4d9593112c4419c6645b1d2716d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.