Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 149,071 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Kill | 20705331 | 110 days ago | IN | 0 ETH | 0.00004072 | ||||
Release Locked I... | 20705327 | 110 days ago | IN | 0 ETH | 0.00003928 | ||||
Approve Next Own... | 14853429 | 946 days ago | IN | 0 ETH | 0.00043322 | ||||
Refund Bet | 12218281 | 1356 days ago | IN | 0 ETH | 0.00450676 | ||||
Place Bet | 12218281 | 1356 days ago | IN | 0.03 ETH | 0.0014888 | ||||
Place Bet | 12218010 | 1357 days ago | IN | 0.04 ETH | 0.00809241 | ||||
Place Bet Roulet... | 12153657 | 1366 days ago | IN | 0.03 ETH | 0.0396768 | ||||
Place Bet Roulet... | 12153491 | 1366 days ago | IN | 0.03 ETH | 0.00385632 | ||||
Settle Bet | 12148851 | 1367 days ago | IN | 0 ETH | 0.01379538 | ||||
Place Bet | 12148847 | 1367 days ago | IN | 0.04 ETH | 0.04716608 | ||||
Place Bet Roulet... | 12148827 | 1367 days ago | IN | 0.01 ETH | 0.01495872 | ||||
Place Bet Roulet... | 12123175 | 1371 days ago | IN | 0.03 ETH | 0.00267458 | ||||
Settle Bet Roule... | 12123174 | 1371 days ago | IN | 0 ETH | 0.00438537 | ||||
Place Bet Roulet... | 12123173 | 1371 days ago | IN | 0.03 ETH | 0.02142211 | ||||
Settle Bet | 12119499 | 1372 days ago | IN | 0 ETH | 0.00408282 | ||||
Place Bet | 12119495 | 1372 days ago | IN | 0.01 ETH | 0.0137082 | ||||
Settle Bet | 12119488 | 1372 days ago | IN | 0 ETH | 0.00472881 | ||||
Place Bet | 12119466 | 1372 days ago | IN | 0.02 ETH | 0.0152382 | ||||
Settle Bet | 12119197 | 1372 days ago | IN | 0 ETH | 0.00438273 | ||||
Place Bet | 12119187 | 1372 days ago | IN | 0.05 ETH | 0.0152389 | ||||
Settle Bet | 12119173 | 1372 days ago | IN | 0 ETH | 0.00437108 | ||||
Place Bet | 12119171 | 1372 days ago | IN | 0.07 ETH | 0.0147427 | ||||
Settle Bet | 12119169 | 1372 days ago | IN | 0 ETH | 0.00434599 | ||||
Place Bet | 12119166 | 1372 days ago | IN | 0.08 ETH | 0.0152377 | ||||
Settle Bet | 12119162 | 1372 days ago | IN | 0 ETH | 0.00432787 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20705331 | 110 days ago | 10.28789213 ETH | ||||
12148851 | 1367 days ago | 0.05076923 ETH | ||||
12123174 | 1371 days ago | 1 wei | ||||
12119499 | 1372 days ago | 1 wei | ||||
12119488 | 1372 days ago | 0.02167 ETH | ||||
12119197 | 1372 days ago | 0.02475 ETH | ||||
12119173 | 1372 days ago | 0.07623 ETH | ||||
12119169 | 1372 days ago | 0.08712 ETH | ||||
12119162 | 1372 days ago | 0.09504 ETH | ||||
12119149 | 1372 days ago | 0.07375 ETH | ||||
12119144 | 1372 days ago | 0.16225 ETH | ||||
12119133 | 1372 days ago | 0.16225 ETH | ||||
12109747 | 1373 days ago | 0.10002061 ETH | ||||
12093043 | 1376 days ago | 1 wei | ||||
11870677 | 1410 days ago | 1 wei | ||||
11870366 | 1410 days ago | 1 wei | ||||
11855397 | 1412 days ago | 1 wei | ||||
11782289 | 1424 days ago | 1 wei | ||||
11781720 | 1424 days ago | 1 wei | ||||
11766067 | 1426 days ago | 490 ETH | ||||
11766008 | 1426 days ago | 1 ETH | ||||
11734921 | 1431 days ago | 1 wei | ||||
11733182 | 1431 days ago | 1 wei | ||||
11732769 | 1431 days ago | 1 wei | ||||
11730371 | 1432 days ago | 0.295 ETH |
Loading...
Loading
Self-destruct was called for this contract at txhash 0x539befb495380eb86f5ce3e5bbfb02a53d0fa673d1d0650bd132da28f7814306. With EIP-6780, all contract storage and onchain code are retained upon self-destruct.
Contract Name:
XetherGames
Compiler Version
v0.5.6+commit.b259423e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-04-05 */ pragma solidity 0.5.6; // * xether.io - is a gambling ecosystem, which makes a difference by caring about its users. // It’s our passion for perfection, as well as finding and creating neat solutions, // that keeps us driven towards our goals. // // * Uses hybrid commit-reveal + block hash random number generation that is immune // to tampering by players, house and miners. Apart from being fully transparent, // this also allows arbitrarily high bets. interface xEtherTokensContractInterface { function ecosystemDividends() external payable; } contract XetherGames { uint256 constant HOUSE_EDGE_MINIMUM_AMOUNT = 0.0003 ether; uint256 constant MIN_JACKPOT_BET = 0.1 ether; uint16 constant JACKPOT_MODULO = 1000; uint256 constant JACKPOT_FEE = 0.001 ether; uint256 constant MIN_BET = 0.01 ether; uint256 constant MAX_AMOUNT = 300000 ether; uint8 constant MAX_MODULO = 100; uint8 constant MAX_MASK_MODULO = 40; uint256 constant MAX_BET_MASK = 2 ** uint256(MAX_MASK_MODULO); uint8 constant BET_EXPIRATION_BLOCKS = 250; uint256 public DIVIDENDS_LIMIT = 1 ether; uint16 constant PERCENTAGES_BASE = 1000; address constant DUMMY_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; uint16 public luckyNumber = 777; uint8 public DIVIDENDS_PERCENT = 10; // 1% example: 15 will be 1.5% uint8 public ADVERTISE_PERCENT = 0; // 0% uint8 public HOUSE_EDGE_PERCENT = 10; // 1% uint8 constant ROULETTE_ID = 37; uint8 constant ROULETTE_STAKES_LIMIT = 36; uint8 public rouletteSkipComission = 1; uint256 public rouletteTableLimit = 1.8 ether; uint8 public ROULETTE_PERCENT = 10; uint8 constant PLINKO_BYTES = 16; uint256 constant PLINKO_ID = 2 ** uint256(PLINKO_BYTES); uint16[17] PLINKO1Ratios = [1000,800,600,300,200,130,100,80,50,80,100,130,200,300,600,800,1000]; uint16[17] PLINKO2Ratios = [2000,700,500,300,200,110,100,60,100,60,100,110,200,300,500,700,2000]; uint16[17] PLINKO3Ratios = [5000,800,300,200,140,120,110,100,40,100,110,120,140,200,300,800,5000]; uint8 public plinkoSkipComission = 2; uint8 public PLINKO_PERCENT = HOUSE_EDGE_PERCENT; uint16 constant SLOTS_ID = 999; uint8 constant SLOTS_COUNT = 5; uint16[] SLOTSWinsRatios = [0, 50, 120, 200, 1500]; uint32[] SLOTSWildRatios = [0, 110, 250, 400, 3000, 10000]; xEtherTokensContractInterface public xEtherTokensContract; address payable public owner; address payable private nextOwner; uint256 public totalDividends = 0; uint256 public totalAdvertise = 0; uint256 public maxProfit = 5 ether; uint256 public maxProfitPlinko = 10 ether; uint256 public maxProfitRoulette = 3.6 ether; address public secretSigner; address public moderator; address public croupier; uint128 public jackpotSize; uint128 public lockedInBets; struct Bet { uint256 amount; uint128 locked; uint32 modulo; uint8 rollUnder; uint40 placeBlockNumber; uint256 clientSeed; uint40 mask; address payable gambler; } struct BetRoulette { uint256 totalBetAmount; uint128 locked; mapping (uint8 => uint256) amount; mapping (uint8 => uint8) rollUnder; uint40 placeBlockNumber; uint256 clientSeed; mapping (uint8 => uint40) mask; address payable gambler; uint8 betsCount; } mapping (uint => Bet) bets; mapping (uint => BetRoulette) betsRoulette; mapping (address => uint256) public bonusProgrammAccumulated; event FailedPayment(address beneficiary, uint commit, uint amount, string paymentType); event Payment(address beneficiary, uint commit, uint amount, string paymentType); event JackpotPayment(address indexed beneficiary, uint commit, uint amount); event PayDividendsSuccess(uint time, uint amount); event PayDividendsFailed(uint time, uint amount); event Commit(uint commit, uint clietSeed, uint amount); constructor () public { owner = msg.sender; secretSigner = DUMMY_ADDRESS; croupier = DUMMY_ADDRESS; } modifier onlyOwner { require (msg.sender == owner, "OnlyOwner methods called by non-owner."); _; } modifier onlyModeration { require (msg.sender == owner || msg.sender == moderator, "Moderation methods called by non-moderator."); _; } modifier onlyCroupier { require (msg.sender == croupier, "OnlyCroupier methods called by non-croupier."); _; } 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; } function () external payable { } function setNewPercents( uint8 newHouseEdgePercent, uint8 newDividendsPercent, uint8 newAdvertPercent ) external onlyOwner { // We guarantee that dividends will be minimum 0.5% require(newDividendsPercent >= 5); // Total percentages not greater then 3% require(newHouseEdgePercent + newDividendsPercent + newAdvertPercent <= 30); HOUSE_EDGE_PERCENT = newHouseEdgePercent; ADVERTISE_PERCENT = newAdvertPercent; DIVIDENDS_PERCENT = newDividendsPercent; } function setNewRoulettePercents(uint8 newRoulettePercent) external onlyModeration { require(0 <= newRoulettePercent && newRoulettePercent <= 10); ROULETTE_PERCENT = newRoulettePercent; } function setNewPlinkoPercents(uint8 newPlinkoPercent) external onlyModeration { require(0 <= newPlinkoPercent && newPlinkoPercent <= 10); PLINKO_PERCENT = newPlinkoPercent; } function setXEtherContract(address payable xEtherContract) external onlyOwner{ xEtherTokensContract = xEtherTokensContractInterface(xEtherContract); } function setAddresses(address newCroupier, address newSecretSigner, address newModerator) external onlyOwner { secretSigner = newSecretSigner; croupier = newCroupier; moderator = newModerator; } function changeDividendsLimit(uint _newDividendsLimit) public onlyModeration { DIVIDENDS_LIMIT = _newDividendsLimit; } function setMaxProfit(uint _maxProfit) public onlyModeration { require (_maxProfit < MAX_AMOUNT, "maxProfit cant be great then top limit."); maxProfit = _maxProfit; } function setMaxProfitPlinko(uint _maxProfitPlinko) public onlyModeration { require (_maxProfitPlinko < MAX_AMOUNT, "maxProfitPlinko cant be great then top limit."); maxProfitPlinko = _maxProfitPlinko; } function setMaxProfitRoulette(uint _maxProfitRoulette) public onlyModeration { require (_maxProfitRoulette < MAX_AMOUNT, "maxProfitRoulette cant be great then top limit."); maxProfitRoulette = _maxProfitRoulette; } function setRouletteTableLimit(uint _newRouletteTableLimit) public onlyModeration { require (_newRouletteTableLimit < MAX_AMOUNT, "roultteTableLimit cant be great then top limit."); rouletteTableLimit = _newRouletteTableLimit; } function setComissionState(uint8 _newRouletteState, uint8 _newPlinkoState) public onlyModeration { rouletteSkipComission = _newRouletteState; plinkoSkipComission = _newPlinkoState; } function releaseLockedInBetAmount() external onlyModeration { lockedInBets = 0; } function increaseJackpot(uint increaseAmount) external onlyModeration { require (increaseAmount <= address(this).balance, "Increase amount larger than balance."); require (jackpotSize + lockedInBets + increaseAmount <= address(this).balance, "Not enough funds."); jackpotSize += uint128(increaseAmount); } function withdrawFunds(address payable beneficiary, uint withdrawAmount) external onlyOwner { require (withdrawAmount <= address(this).balance, "Increase amount larger than balance."); require (jackpotSize + lockedInBets + withdrawAmount <= address(this).balance, "Not enough funds."); sendFunds(beneficiary, withdrawAmount, withdrawAmount, 0, 'withdraw'); } function withdrawAdvertiseFunds(address payable beneficiary, uint withdrawAmount) external onlyOwner { require (withdrawAmount <= totalAdvertise, "Increase amount larger than balance."); totalAdvertise -= withdrawAmount; sendFunds(beneficiary, withdrawAmount, withdrawAmount, 0, 'withdraw'); } function getBonusProgrammLevel(address gambler) public view returns (uint8 discount) { uint accumulated = bonusProgrammAccumulated[gambler]; discount = 0; if (accumulated >= 20 ether && accumulated < 100 ether) { discount = 1; } else if (accumulated >= 100 ether && accumulated < 500 ether) { discount = 2; } else if (accumulated >= 500 ether && accumulated < 1000 ether) { discount = 3; } else if (accumulated >= 1000 ether && accumulated < 5000 ether) { discount = 4; } else if (accumulated >= 5000 ether) { discount = 5; } } function kill() external onlyOwner { require (lockedInBets == 0, "All bets should be processed (settled or refunded) before self-destruct."); selfdestruct(owner); } function sendDividends() public payable { if (address(xEtherTokensContract) != address(0)) { uint tmpDividends = totalDividends; xEtherTokensContract.ecosystemDividends.value(tmpDividends)(); totalDividends = 0; emit PayDividendsSuccess(now, tmpDividends); } } function placeBet( uint betMask, uint32 modulo, uint commitLastBlock, uint commit, uint256 clientSeed, bytes32 r, bytes32 s ) external payable { Bet storage bet = bets[commit]; require (bet.gambler == address(0), "Bet should be in a 'clean' state."); uint amount = msg.value; if (modulo > MAX_MODULO) { require (modulo == PLINKO_ID || modulo == SLOTS_ID, "Modulo should be within range."); } else { 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 (block.number <= commitLastBlock, "Commit has expired."); require ( secretSigner == ecrecover(keccak256(abi.encodePacked(uint40(commitLastBlock), commit)), 27, r, s) || secretSigner == ecrecover(keccak256(abi.encodePacked(uint40(commitLastBlock), commit)), 28, r, s), "ECDSA signature is not valid." ); if (totalDividends >= DIVIDENDS_LIMIT) { sendDividends(); } uint rollUnder; uint mask; (mask, rollUnder, bet.locked) = prepareBet(betMask, modulo, amount, commit, clientSeed, msg.sender); bet.amount = amount; bet.modulo = uint32(modulo); bet.rollUnder = uint8(rollUnder); bet.placeBlockNumber = uint40(block.number); bet.mask = uint40(mask); bet.clientSeed = clientSeed; bet.gambler = msg.sender; } function placeBetRoulette( uint[] calldata betMask, uint[] calldata betAmount, uint commitLastBlock, uint commit, uint256 clientSeed, bytes32 r, bytes32 s ) external payable { BetRoulette storage betRoulette = betsRoulette[commit]; require(msg.value <= rouletteTableLimit, "Bets sum must be LTE table limit"); betRoulette.betsCount = uint8(betMask.length); require (betRoulette.gambler == address(0), "Bet should be in a 'clean' state."); require (block.number <= commitLastBlock, "Commit has expired."); require ( secretSigner == ecrecover(keccak256(abi.encodePacked(uint40(commitLastBlock), commit)), 27, r, s) || secretSigner == ecrecover(keccak256(abi.encodePacked(uint40(commitLastBlock), commit)), 28, r, s), "ECDSA signature is not valid." ); if (totalDividends >= DIVIDENDS_LIMIT) { sendDividends(); } (betRoulette.betsCount, betRoulette.locked) = placeBetRouletteProcess(commit, betMask, betAmount); lockedInBets += betRoulette.locked; require (lockedInBets <= address(this).balance, "Cannot afford to lose this bet."); if (rouletteSkipComission != 1) { bonusProgrammAccumulated[msg.sender] += msg.value; } betRoulette.totalBetAmount = msg.value; betRoulette.placeBlockNumber = uint40(block.number); betRoulette.clientSeed = clientSeed; betRoulette.gambler = msg.sender; jackpotSize += msg.value >= MIN_JACKPOT_BET ? uint128(JACKPOT_FEE) : 0; emit Commit(commit, clientSeed, msg.value); } function placeBetRouletteProcess ( uint commit, uint[] memory betMask, uint[] memory betAmount ) internal returns (uint8 betsCount, uint128 locked) { BetRoulette storage betRoulette = betsRoulette[commit]; betsCount = 0; uint totalBetAmount = 0; uint8 addBets = betRoulette.betsCount; uint8 tmpBetCount = betRoulette.betsCount - 1; uint128 curLocked = 0; uint128 tmpLocked = 0; bool numIsAlredyLocked = false; uint8 bonuses = getBonusProgrammLevel(betRoulette.gambler); while (0 <= tmpBetCount) { require (betMask[tmpBetCount] > 0 && betMask[tmpBetCount] < MAX_BET_MASK, "Mask should be within range."); // Check track sectors bets if (betMask[tmpBetCount] == 38721851401) { // Jeu 0 require (betAmount[tmpBetCount] >= MIN_BET * 4 && betAmount[tmpBetCount] <= MAX_AMOUNT, "Amount should be within range."); totalBetAmount += betAmount[tmpBetCount]; require (totalBetAmount <= msg.value, "Total bets amount should be LTE amount"); // 12/15 (betRoulette.mask[tmpBetCount], betRoulette.rollUnder[tmpBetCount], curLocked) = prepareBetRoulette(36864, betAmount[tmpBetCount] / 4, bonuses); betRoulette.amount[tmpBetCount] = betAmount[tmpBetCount] / 4; // 35/32 (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette(38654705664, betAmount[tmpBetCount] / 4, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 4; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 3/0 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette(9, betAmount[tmpBetCount] / 4, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 4; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 26 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette(67108864, betAmount[tmpBetCount] / 4, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 4; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; locked += curLocked; addBets += 1; betsCount += 4; } else if (betMask[tmpBetCount] == 39567790237) { // Voisins mask require (betAmount[tmpBetCount] >= MIN_BET * 9 && betAmount[tmpBetCount] <= MAX_AMOUNT, "Amount should be within range."); totalBetAmount += betAmount[tmpBetCount]; require (totalBetAmount <= msg.value, "Total bets amount should be LTE amount"); // 4/7 (betRoulette.mask[tmpBetCount], betRoulette.rollUnder[tmpBetCount], curLocked) = prepareBetRoulette( 144, betAmount[tmpBetCount] / 9, bonuses); betRoulette.amount[tmpBetCount] = betAmount[tmpBetCount] / 9; // 12/15 (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 36864, betAmount[tmpBetCount] / 9, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 9; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 18/21 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 2359296, betAmount[tmpBetCount] / 9, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 9; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 19/22 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 4718592, betAmount[tmpBetCount] / 9, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 9; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 35/32 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 38654705664, betAmount[tmpBetCount] / 9, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 9; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 25/26/28/29 (x2) addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 905969664, betAmount[tmpBetCount] * 2 / 9, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] * 2 / 9; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 0/2/3 (x2) addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 13, betAmount[tmpBetCount] * 2 / 9, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] * 2 / 9; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; locked += curLocked; addBets += 1; betsCount += 7; } else if (betMask[tmpBetCount] == 19328549442) { // Orphelins mask require (betAmount[tmpBetCount] >= MIN_BET * 5 && betAmount[tmpBetCount] <= MAX_AMOUNT, "Amount should be within range."); totalBetAmount += betAmount[tmpBetCount]; require (totalBetAmount <= msg.value, "Total bets amount should be LTE amount"); // 14/17 (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], curLocked) = prepareBetRoulette( 147456, betAmount[tmpBetCount] / 5, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 5; // 17/20 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 1179648, betAmount[tmpBetCount] / 5, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 5; curLocked += tmpLocked; // 6/9 (betRoulette.mask[tmpBetCount], betRoulette.rollUnder[tmpBetCount], tmpLocked) = prepareBetRoulette( 576, betAmount[tmpBetCount] / 5, bonuses); betRoulette.amount[tmpBetCount] = betAmount[tmpBetCount] / 5; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 31/34 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 19327352832, betAmount[tmpBetCount] / 5, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 5; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 1 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 2, betAmount[tmpBetCount] / 5, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 5; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; locked += curLocked; addBets += 1; betsCount += 5; } else if (betMask[tmpBetCount] == 78542613792) { // Tier mask require (betAmount[tmpBetCount] >= MIN_BET * 6 && betAmount[tmpBetCount] <= MAX_AMOUNT, "Amount should be within range."); totalBetAmount += betAmount[tmpBetCount]; require (totalBetAmount <= msg.value, "Total bets amount should be LTE amount"); // 5/8 (betRoulette.mask[tmpBetCount], betRoulette.rollUnder[tmpBetCount], curLocked) = prepareBetRoulette( 288, betAmount[tmpBetCount] / 6, bonuses); betRoulette.amount[tmpBetCount] = betAmount[tmpBetCount] / 6; // 10/11 (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 3072, betAmount[tmpBetCount] / 6, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 6; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 13/16 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 73728, betAmount[tmpBetCount] / 6, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 6; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 23/24 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 25165824, betAmount[tmpBetCount] / 6, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 6; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 27/30 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 1207959552, betAmount[tmpBetCount] / 6, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 6; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; // 33/36 addBets += 1; (betRoulette.mask[addBets], betRoulette.rollUnder[addBets], tmpLocked) = prepareBetRoulette( 77309411328, betAmount[tmpBetCount] / 6, bonuses); betRoulette.amount[addBets] = betAmount[tmpBetCount] / 6; curLocked = (tmpLocked > curLocked) ? tmpLocked : curLocked; locked += curLocked; addBets += 1; betsCount += 6; } else { require (betAmount[tmpBetCount] >= MIN_BET && betAmount[tmpBetCount] <= MAX_AMOUNT, "Amount should be within range."); totalBetAmount += betAmount[tmpBetCount]; require (totalBetAmount <= msg.value, "Total bets amount should be LTE amount"); (betRoulette.mask[tmpBetCount], betRoulette.rollUnder[tmpBetCount], tmpLocked) = prepareBetRoulette( betMask[tmpBetCount], betAmount[tmpBetCount], bonuses); if (uint8(((betRoulette.mask[tmpBetCount] * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO) != 1) { locked += tmpLocked; } else { if (!numIsAlredyLocked) { numIsAlredyLocked = true; locked += tmpLocked; } } betRoulette.amount[tmpBetCount] = betAmount[tmpBetCount]; betsCount += 1; } if (tmpBetCount == 0) break; tmpBetCount -= 1; } } function prepareBet(uint betMask, uint32 modulo, uint amount, uint commit, uint clientSeed, address gambler) private returns (uint mask, uint8 rollUnder, uint128 possibleWinAmount) { if (modulo <= MAX_MASK_MODULO) { rollUnder = uint8(((betMask * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO); mask = betMask; } else { require (betMask > 0 && betMask <= modulo, "High modulo range, betMask larger than modulo."); rollUnder = uint8(betMask); } uint jackpotFee; (possibleWinAmount, jackpotFee) = getDiceWinAmount(amount, modulo, rollUnder, gambler, true); require (possibleWinAmount <= amount + maxProfitPlinko, "maxProfitPlinko limit violation."); bonusProgrammAccumulated[gambler] += amount; lockedInBets += uint128(possibleWinAmount); jackpotSize += uint128(jackpotFee); require (jackpotSize + lockedInBets <= address(this).balance, "Cannot afford to lose this bet."); emit Commit(commit, clientSeed, amount); } function prepareBetRoulette(uint betMask, uint amount, uint8 bonuses) private returns (uint40 retMask, uint8 retRollUnder, uint128 possibleWinAmount) { uint8 rollUnder = uint8(((betMask * POPCNT_MULT) & POPCNT_MASK) % POPCNT_MODULO); uint mask = betMask; possibleWinAmount = getRouletteWinAmount(amount, 36, rollUnder, bonuses, true); require (possibleWinAmount <= amount + maxProfitRoulette, "maxProfitRoulette limit violation."); retMask = uint40(mask); retRollUnder = rollUnder; } function settleBet(uint reveal) external onlyCroupier { uint commit = uint(keccak256(abi.encodePacked(reveal))); Bet storage bet = bets[commit]; uint placeBlockNumber = bet.placeBlockNumber; require (block.number > placeBlockNumber, "settleBet in the same block as placeBet, or before."); require (block.number <= placeBlockNumber + BET_EXPIRATION_BLOCKS, "Can't be queried by EVM."); if (bet.modulo == PLINKO_ID) { settleBetPlinko(bet, reveal); } else if (bet.modulo == SLOTS_ID) { settleBetSlots(bet, reveal); } else { settleBetCommon(bet, reveal); } } function settleBetRoulette(uint reveal) external onlyCroupier { uint commit = uint(keccak256(abi.encodePacked(reveal))); BetRoulette storage betRoulette = betsRoulette[commit]; uint placeBlockNumber = betRoulette.placeBlockNumber; require (betRoulette.totalBetAmount > 0, "Bet already processed"); require (block.number > placeBlockNumber, "settleBet in the same block as placeBet, or before."); require (block.number <= placeBlockNumber + BET_EXPIRATION_BLOCKS, "Can't be queried by EVM."); settleBetRoulette(betRoulette, reveal); } // Common bets function settleBetCommon(Bet storage bet, uint reveal) private { uint amount = bet.amount; uint8 rollUnder = bet.rollUnder; require (amount != 0, "Bet should be in an 'active' state"); bet.amount = 0; bytes32 entropy = keccak256(abi.encodePacked(reveal, bet.clientSeed)); uint dice = uint(entropy) % bet.modulo; uint diceWinAmount; uint _jackpotFee; uint diceWin; if (bet.modulo <= MAX_MASK_MODULO) { if ((2 ** dice) & bet.mask != 0) { (diceWinAmount, _jackpotFee) = getDiceWinAmount(amount, bet.modulo, rollUnder, bet.gambler, false); diceWin = diceWinAmount; } } else { if (dice < rollUnder) { (diceWinAmount, _jackpotFee) = getDiceWinAmount(amount, bet.modulo, rollUnder, bet.gambler, false); diceWin = diceWinAmount; } } lockedInBets -= uint128(bet.locked); uint jackpotWin = checkJackPotWin(entropy, amount, bet.modulo); if (jackpotWin > 0) { emit JackpotPayment(bet.gambler, uint(keccak256(abi.encodePacked(reveal))), jackpotWin); } sendFunds( bet.gambler, diceWin + jackpotWin == 0 ? 1 wei : diceWin + jackpotWin, diceWin, uint(keccak256(abi.encodePacked(reveal))), 'payment' ); } // Plinko function settleBetPlinko(Bet storage bet, uint reveal) private { uint amount = bet.amount; uint rollUnder = bet.rollUnder; require (amount != 0, "Bet should be in an 'active' state"); bet.amount = 0; bytes32 entropy = keccak256(abi.encodePacked(reveal, bet.clientSeed)); uint dice = uint(entropy) % bet.modulo; uint diceWin = _plinkoGetDiceWin(dice, amount, rollUnder, bet.gambler); lockedInBets -= uint128(bet.locked); uint jackpotWin = checkJackPotWin(entropy, amount, bet.modulo); if (jackpotWin > 0) { emit JackpotPayment(bet.gambler, uint(keccak256(abi.encodePacked(reveal))), jackpotWin); } sendFunds( bet.gambler, diceWin + jackpotWin == 0 ? 1 wei : diceWin + jackpotWin, diceWin, uint(keccak256(abi.encodePacked(reveal))), 'payment' ); } function _plinkoGetDiceWin(uint dice, uint amount, uint rollUnder, address gambler) internal view returns (uint) { uint bytesCount = 0; uint diceWin = 1; for (uint byteNum = 0; byteNum < PLINKO_BYTES; byteNum += 1) { if ((2 ** byteNum) & dice != 0) { bytesCount += 1; } } uint inCellRatio = _getPlinkoCellRatio(rollUnder, bytesCount); uint jackpotFee = amount >= MIN_JACKPOT_BET ? JACKPOT_FEE : 0; uint totalPercentages; if (plinkoSkipComission == 2) { totalPercentages = PLINKO_PERCENT + ADVERTISE_PERCENT + DIVIDENDS_PERCENT; } else { totalPercentages = HOUSE_EDGE_PERCENT + ADVERTISE_PERCENT + DIVIDENDS_PERCENT; } uint houseEdge = amount * (totalPercentages - getBonusProgrammLevel(gambler)) / PERCENTAGES_BASE; if (houseEdge < HOUSE_EDGE_MINIMUM_AMOUNT) { houseEdge = HOUSE_EDGE_MINIMUM_AMOUNT; } diceWin = (amount - houseEdge - jackpotFee) * inCellRatio / 100; return diceWin; } function _getPlinkoCellRatio(uint plinkoNum, uint cell) internal view returns (uint cellRatio) { if (plinkoNum == 1) { cellRatio = PLINKO1Ratios[cell]; } else if (plinkoNum == 2) { cellRatio = PLINKO2Ratios[cell]; } else { cellRatio = PLINKO3Ratios[cell]; } } // Slots function settleBetSlots(Bet storage bet, uint reveal) private { uint amount = bet.amount; uint modulo = bet.modulo; require (amount != 0, "Bet should be in an 'active' state"); bet.amount = 0; bytes32 entropy = keccak256(abi.encodePacked(reveal, bet.clientSeed)); uint diceWin = _slotsWinAmount(entropy, amount, bet.gambler); lockedInBets -= uint128(bet.locked); uint jackpotWin = checkJackPotWin(entropy, amount, modulo); if (jackpotWin > 0) { emit JackpotPayment(bet.gambler, uint(keccak256(abi.encodePacked(reveal))), jackpotWin); } sendFunds( bet.gambler, diceWin + jackpotWin == 0 ? 1 wei : diceWin + jackpotWin, diceWin, uint(keccak256(abi.encodePacked(reveal))), 'payment' ); } function _slotsWinAmount(bytes32 entropy, uint amount, address gambler) internal view returns (uint winAmount) { uint8 wins; uint8 wild; (wins, wild) = _slotsCheckWin(entropy); winAmount = 0; uint jackpotFee = amount >= MIN_JACKPOT_BET ? JACKPOT_FEE : 0; uint totalPercentages = HOUSE_EDGE_PERCENT + ADVERTISE_PERCENT + DIVIDENDS_PERCENT; uint houseEdge = amount * (totalPercentages - getBonusProgrammLevel(gambler)) / PERCENTAGES_BASE; if (houseEdge < HOUSE_EDGE_MINIMUM_AMOUNT) { houseEdge = HOUSE_EDGE_MINIMUM_AMOUNT; } winAmount = (amount - houseEdge - jackpotFee) / 100 * SLOTSWinsRatios[wins]; winAmount += (amount - houseEdge - jackpotFee) / 100 * SLOTSWildRatios[wild]; } function _slotsCheckWin(bytes32 slots) internal pure returns(uint8 wins, uint8 wild) { uint curNum; uint prevNum; bytes1 charAtPos; uint8 firstNums; uint8 prevWins = 0; uint8 curWins = 0; wins = 0; wild = 0; for(uint8 i = 0; i < SLOTS_COUNT; i++) { charAtPos = charAt(slots, i + 2); firstNums = getLastN(charAtPos, 4); curNum = uint(firstNums); if (curNum > 8) { curNum = 16 - curNum; } if (curNum == 7) wild += 1; if (i == 0) { prevNum = curNum; continue; } if (prevNum == curNum) { curWins += 1; } else { prevWins = (curWins > prevWins) ? curWins : prevWins; curWins = 0; } prevNum = curNum; } wins = (curWins > prevWins) ? curWins : prevWins; } function settleBetRoulette(BetRoulette storage betRoulette, uint reveal) private { require (betRoulette.totalBetAmount != 0, "Bet should be in an 'active' state"); address payable gambler = betRoulette.gambler; bytes32 entropy = keccak256(abi.encodePacked(reveal, betRoulette.clientSeed)); uint diceWin = 0; uint diceWinAmount; uint feeToJP = betRoulette.totalBetAmount >= MIN_JACKPOT_BET ? JACKPOT_FEE / betRoulette.betsCount : 0; uint dice = uint(entropy) % ROULETTE_ID; uint8 bonuses = getBonusProgrammLevel(betRoulette.gambler); for(uint8 index = 0; index < betRoulette.betsCount; index += 1) { if ((2 ** dice) & betRoulette.mask[index] != 0) { diceWinAmount = getRouletteWinAmount(betRoulette.amount[index] - feeToJP, ROULETTE_ID - 1, betRoulette.rollUnder[index], bonuses, false); diceWin += diceWinAmount; } } lockedInBets -= betRoulette.locked; uint jackpotWin = checkJackPotWin(entropy, betRoulette.totalBetAmount, ROULETTE_ID); if (jackpotWin > 0) { emit JackpotPayment(gambler, uint(keccak256(abi.encodePacked(reveal))), jackpotWin); } sendFunds( gambler, diceWin + jackpotWin == 0 ? 1 wei : diceWin + jackpotWin, diceWin, uint(keccak256(abi.encodePacked(reveal))), 'payment' ); betRoulette.totalBetAmount = 0; } function refundBet(uint commit) external { Bet storage bet = bets[commit]; uint amount = bet.amount; require (amount != 0, "Bet should be in an 'active' state"); require (block.number > bet.placeBlockNumber + BET_EXPIRATION_BLOCKS, "Blockhash can't be queried by EVM."); bet.amount = 0; lockedInBets -= uint128(bet.locked); if (amount >= MIN_JACKPOT_BET && jackpotSize > JACKPOT_FEE) { jackpotSize -= uint128(JACKPOT_FEE); } sendFunds(bet.gambler, amount, amount, commit, 'refund'); } function refundBetRoulette(uint commit) external { BetRoulette storage betRoulette = betsRoulette[commit]; uint amount = betRoulette.totalBetAmount; require (amount != 0, "Bet should be in an 'active' state"); require (block.number > betRoulette.placeBlockNumber + BET_EXPIRATION_BLOCKS, "Blockhash can't be queried by EVM."); betRoulette.totalBetAmount = 0; for(uint8 index = 0; index < betRoulette.betsCount; index += 1) { betRoulette.amount[index] = 0; } lockedInBets -= betRoulette.locked; if (amount >= MIN_JACKPOT_BET && jackpotSize > JACKPOT_FEE) { jackpotSize -= uint128(JACKPOT_FEE); } sendFunds(betRoulette.gambler, amount, amount, commit, 'refund'); } function getDiceWinAmount(uint amount, uint32 modulo, uint8 rollUnder, address gambler, bool init) private returns (uint128 winAmount, uint jackpotFee) { require (0 < rollUnder && rollUnder <= modulo, "Win probability out of range."); jackpotFee = amount >= MIN_JACKPOT_BET ? JACKPOT_FEE : 0; uint8 totalPercentages; if (plinkoSkipComission == 2) { // Plinko totalPercentages = PLINKO_PERCENT + ADVERTISE_PERCENT + DIVIDENDS_PERCENT; } else { // All other games totalPercentages = HOUSE_EDGE_PERCENT + ADVERTISE_PERCENT + DIVIDENDS_PERCENT; } uint houseEdge = amount * (totalPercentages - getBonusProgrammLevel(gambler)) / PERCENTAGES_BASE; if (houseEdge < HOUSE_EDGE_MINIMUM_AMOUNT) { houseEdge = HOUSE_EDGE_MINIMUM_AMOUNT; } require (houseEdge + jackpotFee <= amount, "Bet doesn't even cover house edge."); if (init) { totalDividends += amount * DIVIDENDS_PERCENT / PERCENTAGES_BASE; totalAdvertise += amount * ADVERTISE_PERCENT / PERCENTAGES_BASE; } if (modulo == PLINKO_ID) { // We lock maximum for selected plinko row if (rollUnder == 1) { modulo = 10; // equal to PLINKO1Ratios[0] / 100 } else if (rollUnder == 2) { modulo = 20; // equal to PLINKO2Ratios[0] / 100 } else { modulo = 50; // equal to PLINKO3Ratios[0] / 100 } rollUnder = 1; } if (modulo == SLOTS_ID) { modulo = 5; // We lock x5 for slots rollUnder = 1; } winAmount = uint128((amount - houseEdge - jackpotFee) * modulo / rollUnder); } function getRouletteWinAmount(uint amount, uint32 modulo, uint8 rollUnder, uint8 bonuses, bool init) private returns (uint128 winAmount) { require (0 < rollUnder && rollUnder <= modulo, "Win probability out of range."); uint houseEdge; if (rouletteSkipComission == 1) { // Roulette houseEdge = amount * ROULETTE_PERCENT / PERCENTAGES_BASE; } else { if (init) { totalDividends += amount * DIVIDENDS_PERCENT / PERCENTAGES_BASE; totalAdvertise += amount * ADVERTISE_PERCENT / PERCENTAGES_BASE; } houseEdge = amount * (HOUSE_EDGE_PERCENT + ADVERTISE_PERCENT + DIVIDENDS_PERCENT - bonuses) / PERCENTAGES_BASE; } if (houseEdge < HOUSE_EDGE_MINIMUM_AMOUNT) { houseEdge = HOUSE_EDGE_MINIMUM_AMOUNT; } require (houseEdge <= amount, "Bet doesn't even cover house edge."); winAmount = uint128((amount - houseEdge) * modulo / rollUnder); } function sendFunds(address payable beneficiary, uint amount, uint successLogAmount, uint commit, string memory paymentType) private { if (beneficiary.send(amount)) { emit Payment(beneficiary, commit, successLogAmount, paymentType); } else { emit FailedPayment(beneficiary, commit, amount, paymentType); } } function checkJackPotWin(bytes32 entropy, uint amount, uint modulo) internal returns (uint jackpotWin) { jackpotWin = 0; if (amount >= MIN_JACKPOT_BET) { uint jackpotRng = (uint(entropy) / modulo) % JACKPOT_MODULO; if (jackpotRng == luckyNumber) { jackpotWin = jackpotSize; jackpotSize = 0; } } } uint constant POPCNT_MULT = 0x0000000000002000000000100000000008000000000400000000020000000001; uint constant POPCNT_MASK = 0x0001041041041041041041041041041041041041041041041041041041041041; uint constant POPCNT_MODULO = 0x3F; function charAt(bytes32 b, uint char) private pure returns (bytes1) { return bytes1(uint8(uint(b) / (2**((31 - char) * 8)))); } function getLastN(bytes1 a, uint8 n) private pure returns (uint8) { uint8 lastN = uint8(a) % uint8(2) ** n; return lastN; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"ADVERTISE_PERCENT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"reveal","type":"uint256"}],"name":"settleBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bonusProgrammAccumulated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"xEtherTokensContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rouletteSkipComission","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxProfitRoulette","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newCroupier","type":"address"},{"name":"newSecretSigner","type":"address"},{"name":"newModerator","type":"address"}],"name":"setAddresses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rouletteTableLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"moderator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"gambler","type":"address"}],"name":"getBonusProgrammLevel","outputs":[{"name":"discount","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"xEtherContract","type":"address"}],"name":"setXEtherContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secretSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"jackpotSize","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newDividendsLimit","type":"uint256"}],"name":"changeDividendsLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newPlinkoPercent","type":"uint8"}],"name":"setNewPlinkoPercents","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"croupier","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newRouletteTableLimit","type":"uint256"}],"name":"setRouletteTableLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"withdrawAmount","type":"uint256"}],"name":"withdrawAdvertiseFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"betMask","type":"uint256[]"},{"name":"betAmount","type":"uint256[]"},{"name":"commitLastBlock","type":"uint256"},{"name":"commit","type":"uint256"},{"name":"clientSeed","type":"uint256"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"placeBetRoulette","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_maxProfitPlinko","type":"uint256"}],"name":"setMaxProfitPlinko","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newRouletteState","type":"uint8"},{"name":"_newPlinkoState","type":"uint8"}],"name":"setComissionState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_maxProfitRoulette","type":"uint256"}],"name":"setMaxProfitRoulette","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"commit","type":"uint256"}],"name":"refundBetRoulette","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalDividends","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalAdvertise","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newHouseEdgePercent","type":"uint8"},{"name":"newDividendsPercent","type":"uint8"},{"name":"newAdvertPercent","type":"uint8"}],"name":"setNewPercents","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"sendDividends","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"maxProfit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PLINKO_PERCENT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"HOUSE_EDGE_PERCENT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"luckyNumber","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","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":"acceptNextOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_nextOwner","type":"address"}],"name":"approveNextOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"increaseAmount","type":"uint256"}],"name":"increaseJackpot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"plinkoSkipComission","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"releaseLockedInBetAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newRoulettePercent","type":"uint8"}],"name":"setNewRoulettePercents","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"betMask","type":"uint256"},{"name":"modulo","type":"uint32"},{"name":"commitLastBlock","type":"uint256"},{"name":"commit","type":"uint256"},{"name":"clientSeed","type":"uint256"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"placeBet","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"lockedInBets","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DIVIDENDS_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"commit","type":"uint256"}],"name":"refundBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reveal","type":"uint256"}],"name":"settleBetRoulette","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"DIVIDENDS_PERCENT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROULETTE_PERCENT","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxProfit","type":"uint256"}],"name":"setMaxProfit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxProfitPlinko","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"commit","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"paymentType","type":"string"}],"name":"FailedPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address"},{"indexed":false,"name":"commit","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"paymentType","type":"string"}],"name":"Payment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"commit","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"JackpotPayment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"time","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PayDividendsSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"time","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PayDividendsFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"commit","type":"uint256"},{"indexed":false,"name":"clietSeed","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Commit","type":"event"}]
Contract Creation Code
670de0b6b3a7640000600055600180546501000000000061030961ffff199092169190911762ff00001916620a00001764ffff0000001916640a000000001765ff000000000019161790556718fae27693b4000060025560038054600a60ff199091161790556102a06040526103e8608081815261032060a081905261025860c081905261012c60e081905260c86101008190526082610120819052606461014081905260506101608190526032610180526101a0526101c0526101e0526102005261022052610240526102605261028091909152620000e49060049060116200035d565b5060408051610220810182526107d08082526102bc602083018190526101f493830184905261012c6060840181905260c860808501819052606e60a08601819052606460c08701819052603c60e0880181905261010088018290526101208801526101408701526101608601526101808501526101a08401526101c08301939093526101e0820192909252610200810191909152620001889060069060116200035d565b5060408051610220810182526113888082526103206020830181905261012c93830184905260c860608401819052608c60808501819052607860a08601819052606e60c08701819052606460e0880181905260286101008901526101208801526101408701526101608601526101808501526101a08401526101c08301939093526101e08201929092526102008101919091526200022b9060089060116200035d565b50600a8054600154640100000000900460ff166101000261ff001960ff19909216600217919091161790556040805160a081018252600081526032602082015260789181019190915260c860608201526105dc60808201526200029390600b906005620003fa565b506040805160c08101825260008152606e602082015260fa918101919091526101906060820152610bb8608082015261271060a0820152620002da90600c90600662000465565b5060006010556000601155674563918244f40000601255678ac7230489e800006013556731f5c4ed276800006014553480156200031657600080fd5b50600e80546001600160a01b0319908116331790915560158054821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee908117909155601780549092161790556200055e565b600283019183908215620003e85791602002820160005b83821115620003b657835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262000374565b8015620003e65782816101000a81549061ffff0219169055600201602081600101049283019260010302620003b6565b505b50620003f692915062000515565b5090565b82805482825590600052602060002090600f01601090048101928215620003e857916020028201600083821115620003b657835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030262000374565b82805482825590600052602060002090600701600890048101928215620005075791602002820160005b83821115620004d357835183826101000a81548163ffffffff021916908361ffff16021790555092602001926004016020816003010492830192600103026200048f565b8015620005055782816101000a81549063ffffffff0219169055600401602081600301049283019260010302620004d3565b505b50620003f69291506200053a565b6200053791905b80821115620003f657805461ffff191681556001016200051c565b90565b6200053791905b80821115620003f657805463ffffffff1916815560010162000541565b615efc806200056e6000396000f3fe6080604052600436106102ae5760003560e01c806398c7d1e311610175578063d6d30a51116100dc578063e0d44b7911610095578063f2d7afe81161006f578063f2d7afe8146109e5578063f8dbd7ee146109fa578063fbd668a914610a0f578063fc9f12a614610a39576102ae565b8063e0d44b791461097c578063e1fdb4b414610991578063e9c90d01146109bb576102ae565b8063d6d30a511461089f578063d930a45a146108c9578063d98f9740146108de578063db53404c146108f3578063dc023f1514610920578063df88126f14610967576102ae565b8063bd0f1df41161012e578063bd0f1df4146107c8578063becf40b6146107dd578063bf205ebc146107f2578063c10753291461081e578063d06c54fb14610857578063d579fd441461086c576102ae565b806398c7d1e314610718578063997664d714610742578063a5197d1014610757578063a84bf40e1461076c578063a8fc32de146107ab578063b539cd55146107b3576102ae565b80634d61537f1161021957806388475e4e116101d257806388475e4e1461056b5780638a0ba9e2146105a45780638ca022321461067a5780638da5cb5b146106a45780638f6ead62146106b957806392f8dc5e146106ee576102ae565b80634d61537f1461048f57806357246d23146104a45780635e05f374146104d55780636896a9d2146104ff5780636b5c5f391461052c57806380a1a0e514610541576102ae565b8063363bf9641161026b578063363bf964146103a5578063371e6ec4146103ea57806338743904146103ff57806338b48ac3146104145780633bad7e9c1461044757806341c0e1b51461047a576102ae565b80630149e4bb146102b057806316fd381a146102db5780631d70f55c1461030557806322ff5faa1461034a578063255858b31461037b57806333450c5d14610390575b005b3480156102bc57600080fd5b506102c5610a4e565b6040805160ff9092168252519081900360200190f35b3480156102e757600080fd5b506102ae600480360360208110156102fe57600080fd5b5035610a5e565b34801561031157600080fd5b506103386004803603602081101561032857600080fd5b50356001600160a01b0316610beb565b60408051918252519081900360200190f35b34801561035657600080fd5b5061035f610bfd565b604080516001600160a01b039092168252519081900360200190f35b34801561038757600080fd5b506102c5610c0c565b34801561039c57600080fd5b50610338610c1c565b3480156103b157600080fd5b506102ae600480360360608110156103c857600080fd5b506001600160a01b038135811691602081013582169160409091013516610c22565b3480156103f657600080fd5b50610338610cab565b34801561040b57600080fd5b5061035f610cb1565b34801561042057600080fd5b506102c56004803603602081101561043757600080fd5b50356001600160a01b0316610cc0565b34801561045357600080fd5b506102ae6004803603602081101561046a57600080fd5b50356001600160a01b0316610db2565b34801561048657600080fd5b506102ae610e20565b34801561049b57600080fd5b5061035f610ecc565b3480156104b057600080fd5b506104b9610edb565b604080516001600160801b039092168252519081900360200190f35b3480156104e157600080fd5b506102ae600480360360208110156104f857600080fd5b5035610eea565b34801561050b57600080fd5b506102ae6004803603602081101561052257600080fd5b503560ff16610f50565b34801561053857600080fd5b5061035f610fde565b34801561054d57600080fd5b506102ae6004803603602081101561056457600080fd5b5035610fed565b34801561057757600080fd5b506102ae6004803603604081101561058e57600080fd5b506001600160a01b03813516906020013561109e565b6102ae600480360360e08110156105ba57600080fd5b810190602081018135600160201b8111156105d457600080fd5b8201836020820111156105e657600080fd5b803590602001918460208302840111600160201b8311171561060757600080fd5b919390929091602081019035600160201b81111561062457600080fd5b82018360208201111561063657600080fd5b803590602001918460208302840111600160201b8311171561065757600080fd5b91935091508035906020810135906040810135906060810135906080013561116f565b34801561068657600080fd5b506102ae6004803603602081101561069d57600080fd5b5035611676565b3480156106b057600080fd5b5061035f611727565b3480156106c557600080fd5b506102ae600480360360408110156106dc57600080fd5b5060ff81358116916020013516611736565b3480156106fa57600080fd5b506102ae6004803603602081101561071157600080fd5b50356117c3565b34801561072457600080fd5b506102ae6004803603602081101561073b57600080fd5b5035611874565b34801561074e57600080fd5b50610338611a1c565b34801561076357600080fd5b50610338611a22565b34801561077857600080fd5b506102ae6004803603606081101561078f57600080fd5b5060ff8135811691602081013582169160409091013516611a28565b6102ae611ae2565b3480156107bf57600080fd5b50610338611b9d565b3480156107d457600080fd5b506102c5611ba3565b3480156107e957600080fd5b506102c5611bb1565b3480156107fe57600080fd5b50610807611bc1565b6040805161ffff9092168252519081900360200190f35b34801561082a57600080fd5b506102ae6004803603604081101561084157600080fd5b506001600160a01b038135169060200135611bcb565b34801561086357600080fd5b506102ae611cfb565b34801561087857600080fd5b506102ae6004803603602081101561088f57600080fd5b50356001600160a01b0316611d6b565b3480156108ab57600080fd5b506102ae600480360360208110156108c257600080fd5b5035611e3f565b3480156108d557600080fd5b506102c5611f7a565b3480156108ea57600080fd5b506102ae611f83565b3480156108ff57600080fd5b506102ae6004803603602081101561091657600080fd5b503560ff16611ff5565b6102ae600480360360e081101561093657600080fd5b5080359063ffffffff6020820135169060408101359060608101359060808101359060a08101359060c0013561207d565b34801561097357600080fd5b506104b96125d2565b34801561098857600080fd5b506103386125e8565b34801561099d57600080fd5b506102ae600480360360208110156109b457600080fd5b50356125ee565b3480156109c757600080fd5b506102ae600480360360208110156109de57600080fd5b5035612765565b3480156109f157600080fd5b506102c56128ec565b348015610a0657600080fd5b506102c56128fb565b348015610a1b57600080fd5b506102ae60048036036020811015610a3257600080fd5b5035612904565b348015610a4557600080fd5b506103386129b5565b6001546301000000900460ff1681565b6017546001600160a01b03163314610aaa57604051600160e51b62461bcd02815260040180806020018281038252602c815260200180615d4b602c913960400191505060405180910390fd5b6040805160208082018490528251808303820181529183018352815191810191909120600081815260199092529190206001810154600160a81b900464ffffffffff16438110610b2e57604051600160e51b62461bcd028152600401808060200182810382526033815260200180615cd86033913960400191505060405180910390fd5b60fa8101431115610b895760408051600160e51b62461bcd02815260206004820152601860248201527f43616e277420626520717565726965642062792045564d2e0000000000000000604482015290519081900360640190fd5b600182015463ffffffff600160801b90910416620100001415610bb557610bb082856129bb565b610be5565b600182015463ffffffff600160801b909104166103e71415610bdb57610bb08285612bbc565b610be58285612d8f565b50505050565b601b6020526000908152604090205481565b600d546001600160a01b031681565b600154600160281b900460ff1681565b60145481565b600e546001600160a01b03163314610c6e57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b601580546001600160a01b03199081166001600160a01b039485161790915560178054821694841694909417909355601680549093169116179055565b60025481565b6016546001600160a01b031681565b6001600160a01b0381166000908152601b60205260408120546801158e460913d000008110801590610cfa575068056bc75e2d6310000081105b15610d085760019150610dac565b68056bc75e2d631000008110158015610d295750681b1ae4d6e2ef50000081105b15610d375760029150610dac565b681b1ae4d6e2ef5000008110158015610d585750683635c9adc5dea0000081105b15610d665760039150610dac565b683635c9adc5dea000008110158015610d88575069010f0cf064dd5920000081105b15610d965760049150610dac565b69010f0cf064dd592000008110610dac57600591505b50919050565b600e546001600160a01b03163314610dfe57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b03163314610e6c57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b601854600160801b90046001600160801b031615610ebe57604051600160e51b62461bcd028152600401808060200182810382526048815260200180615d9b6048913960600191505060405180910390fd5b600e546001600160a01b0316ff5b6015546001600160a01b031681565b6018546001600160801b031681565b600e546001600160a01b0316331480610f0d57506016546001600160a01b031633145b610f4b57604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b600055565b600e546001600160a01b0316331480610f7357506016546001600160a01b031633145b610fb157604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b600a8160ff161115610fc257600080fd5b600a805460ff9092166101000261ff0019909216919091179055565b6017546001600160a01b031681565b600e546001600160a01b031633148061101057506016546001600160a01b031633145b61104e57604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b693f870857a3e0e3800000811061109957604051600160e51b62461bcd02815260040180806020018281038252602f815260200180615ba0602f913960400191505060405180910390fd5b600255565b600e546001600160a01b031633146110ea57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b60115481111561112e57604051600160e51b62461bcd028152600401808060200182810382526024815260200180615d776024913960400191505060405180910390fd5b6011805482900390556040805180820190915260088152600160c01b67776974686472617702602082015261116b90839083908190600090613052565b5050565b6000848152601a602052604090206002543411156111d75760408051600160e51b62461bcd02815260206004820181905260248201527f426574732073756d206d757374206265204c5445207461626c65206c696d6974604482015290519081900360640190fd5b600781018054600160a01b60ff021916600160a01b60ff8c160217908190556001600160a01b03161561123e57604051600160e51b62461bcd028152600401808060200182810382526021815260200180615cb76021913960400191505060405180910390fd5b854311156112965760408051600160e51b62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b6040805164ffffffffff881660d81b6020808301919091526025808301899052835180840390910181526045830180855281519183019190912060009091526065830180855252601b608583015260a5820186905260c58201859052915160019260e5808401939192601f1981019281900390910190855afa158015611320573d6000803e3d6000fd5b5050604051601f1901516015546001600160a01b039081169116149050806113eb57506040805164ffffffffff881660d81b6020808301919091526025808301899052835180840390910181526045830180855281519183019190912060009091526065830180855252601c608583015260a5820186905260c58201859052915160019260e5808401939192601f1981019281900390910190855afa1580156113cd573d6000803e3d6000fd5b5050604051601f1901516015546001600160a01b0390811691161490505b61143f5760408051600160e51b62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b6000546010541061145257611452611ae2565b6114c0858b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d91829185019084908082843760009201919091525061320f92505050565b6001830180546001600160801b039283166001600160801b0319909116179081905560078401805460ff909416600160a01b02600160a01b60ff02199094169390931790925560188054600160801b80820484169484169490940183168402908316179081905530319290041611156115835760408051600160e51b62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b60018054600160281b900460ff16146115ac57336000908152601b602052604090208054340190555b3480825560048201805464ffffffffff431664ffffffffff19909116179055600582018590556007820180546001600160a01b0319163317905567016345785d8a000011156115fc576000611605565b66038d7ea4c680005b601880546001600160801b031981166001600160801b0391821693909301169190911790556040805186815260208101869052348183015290517f7cb363f1be918dc2e8cadae9eb87766dacf1f4f49ae904291aa3e59fc593c413916060908290030190a150505050505050505050565b600e546001600160a01b031633148061169957506016546001600160a01b031633145b6116d757604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b693f870857a3e0e3800000811061172257604051600160e51b62461bcd02815260040180806020018281038252602d815260200180615bf5602d913960400191505060405180910390fd5b601355565b600e546001600160a01b031681565b600e546001600160a01b031633148061175957506016546001600160a01b031633145b61179757604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b6001805465ff00000000001916600160281b60ff94851602179055600a805460ff191691909216179055565b600e546001600160a01b03163314806117e657506016546001600160a01b031633145b61182457604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b693f870857a3e0e3800000811061186f57604051600160e51b62461bcd02815260040180806020018281038252602f815260200180615c22602f913960400191505060405180910390fd5b601455565b6000818152601a602052604090208054806118c357604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b600482015464ffffffffff90811660fa0116431161191557604051600160e51b62461bcd028152600401808060200182810382526022815260200180615e846022913960400191505060405180910390fd5b60008083555b600783015460ff600160a01b909104811690821610156119525760ff8116600090815260028401602052604081205560010161191b565b506001820154601880546001600160801b03808216938116600160801b92839004821603160291909117905567016345785d8a000081108015906119a9575060185466038d7ea4c680006001600160801b03909116115b156119d957601880546001600160801b031981166001600160801b0391821666038d7ea4c67fff19019091161790555b60078201546040805180820190915260068152600160d21b651c99599d5b99026020820152611a17916001600160a01b031690839081908790613052565b505050565b60105481565b60115481565b600e546001600160a01b03163314611a7457604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b60058260ff161015611a8557600080fd5b601e818385010160ff161115611a9a57600080fd5b6001805460ff938416620100000262ff00001993851663010000000263ff0000001995909616600160201b0264ff000000001990921691909117939093169390931716179055565b600d546001600160a01b031615611b9b57601054600d5460408051600160e11b632f3c22c702815290516001600160a01b0390921691635e78458e918491600480830192600092919082900301818588803b158015611b4057600080fd5b505af1158015611b54573d6000803e3d6000fd5b505060006010555050604080514281526020810184905281517f384e13b223db78131ff8fc373c4e03bbab38d141226a80644700e32c974dfa8793509081900390910190a1505b565b60125481565b600a54610100900460ff1681565b600154600160201b900460ff1681565b60015461ffff1681565b600e546001600160a01b03163314611c1757604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b3031811115611c5a57604051600160e51b62461bcd028152600401808060200182810382526024815260200180615d776024913960400191505060405180910390fd5b60185430316001600160801b03808316600160801b90930481169290920190911682011115611cca5760408051600160e51b62461bcd0281526020600482015260116024820152600160791b702737ba1032b737bab3b410333ab732399702604482015290519081900360640190fd5b61116b8282836000604051806040016040528060088152602001600160c01b67776974686472617702815250613052565b600f546001600160a01b03163314611d4757604051600160e51b62461bcd028152600401808060200182810382526026815260200180615bcf6026913960400191505060405180910390fd5b600f54600e80546001600160a01b0319166001600160a01b03909216919091179055565b600e546001600160a01b03163314611db757604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b600e546001600160a01b0382811691161415611e1d5760408051600160e51b62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b0316331480611e6257506016546001600160a01b031633145b611ea057604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b3031811115611ee357604051600160e51b62461bcd028152600401808060200182810382526024815260200180615d776024913960400191505060405180910390fd5b60185430316001600160801b03808316600160801b90930481169290920190911682011115611f535760408051600160e51b62461bcd0281526020600482015260116024820152600160791b702737ba1032b737bab3b410333ab732399702604482015290519081900360640190fd5b601880546001600160801b031981166001600160801b039182169390930116919091179055565b600a5460ff1681565b600e546001600160a01b0316331480611fa657506016546001600160a01b031633145b611fe457604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b601880546001600160801b03169055565b600e546001600160a01b031633148061201857506016546001600160a01b031633145b61205657604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b600a8160ff16111561206757600080fd5b6003805460ff191660ff92909216919091179055565b60008481526019602052604090206003810154600160281b90046001600160a01b0316156120df57604051600160e51b62461bcd028152600401808060200182810382526021815260200180615cb76021913960400191505060405180910390fd5b34606463ffffffff891611156121665763ffffffff881662010000148061210d575063ffffffff88166103e7145b6121615760408051600160e51b62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b6121d7565b60018863ffffffff161180156121835750606463ffffffff891611155b6121d75760408051600160e51b62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc1000081101580156121f85750693f870857a3e0e38000008111155b61223a5760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b60008911801561224d5750600160281b89105b6122a15760408051600160e51b62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b864311156122f95760408051600160e51b62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b6040805164ffffffffff891660d81b60208083019190915260258083018a9052835180840390910181526045830180855281519183019190912060009091526065830180855252601b608583015260a5820187905260c58201869052915160019260e5808401939192601f1981019281900390910190855afa158015612383573d6000803e3d6000fd5b5050604051601f1901516015546001600160a01b0390811691161490508061244e57506040805164ffffffffff891660d81b60208083019190915260258083018a9052835180840390910181526045830180855281519183019190912060009091526065830180855252601c608583015260a5820187905260c58201869052915160019260e5808401939192601f1981019281900390910190855afa158015612430573d6000803e3d6000fd5b5050604051601f1901516015546001600160a01b0390811691161490505b6124a25760408051600160e51b62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b600054601054106124b5576124b5611ae2565b6000806124c68b8b858b8b33614e22565b8160ff1691508660010160008291906101000a8154816001600160801b0302191690836001600160801b03160217905550819450829350505050828460000181905550898460010160106101000a81548163ffffffff021916908363ffffffff160217905550818460010160146101000a81548160ff021916908360ff160217905550438460010160156101000a81548164ffffffffff021916908364ffffffffff160217905550808460030160006101000a81548164ffffffffff021916908364ffffffffff160217905550868460020181905550338460030160056101000a8154816001600160a01b0302191690836001600160a01b031602179055505050505050505050505050565b601854600160801b90046001600160801b031681565b60005481565b600081815260196020526040902080548061263d57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b600182015464ffffffffff600160a81b909104811660fa0116431161269657604051600160e51b62461bcd028152600401808060200182810382526022815260200180615e846022913960400191505060405180910390fd5b600082556001820154601880546001600160801b03808216938116600160801b92839004821603160291909117905567016345785d8a000081108015906126f0575060185466038d7ea4c680006001600160801b03909116115b1561272057601880546001600160801b031981166001600160801b0391821666038d7ea4c67fff19019091161790555b611a178260030160059054906101000a90046001600160a01b0316828386604051806040016040528060068152602001600160d21b651c99599d5b9902815250613052565b6017546001600160a01b031633146127b157604051600160e51b62461bcd02815260040180806020018281038252602c815260200180615d4b602c913960400191505060405180910390fd5b60408051602080820184905282518083038201815291830183528151918101919091206000818152601a9092529190206004810154815464ffffffffff909116906128465760408051600160e51b62461bcd02815260206004820152601560248201527f42657420616c72656164792070726f6365737365640000000000000000000000604482015290519081900360640190fd5b80431161288757604051600160e51b62461bcd028152600401808060200182810382526033815260200180615cd86033913960400191505060405180910390fd5b60fa81014311156128e25760408051600160e51b62461bcd02815260206004820152601860248201527f43616e277420626520717565726965642062792045564d2e0000000000000000604482015290519081900360640190fd5b610be5828561505e565b60015462010000900460ff1681565b60035460ff1681565b600e546001600160a01b031633148061292757506016546001600160a01b031633145b61296557604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b693f870857a3e0e380000081106129b057604051600160e51b62461bcd028152600401808060200182810382526027815260200180615e2f6027913960400191505060405180910390fd5b601255565b60135481565b81546001830154600160a01b900460ff1681612a0b57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b6000808555600285015460408051602080820188905281830193909352815180820383018152606090910190915280519101206001860154909190600160801b900463ffffffff168281612a5b57fe5b0690506000612a838286868a60030160059054906101000a90046001600160a01b03166152e9565b600188018054601880546001600160801b03808216938116600160801b928390048216031681029290921790559054919250600091612acd9186918991900463ffffffff16615409565b90508015612b335760038801546040805160208082018b9052825180830382018152828401808552815191909201209052606081018490529051600160281b9092046001600160a01b031691600080516020615d2b833981519152916080908290030190a25b6003880154612bb290600160281b90046001600160a01b031682840115612b5c57828401612b5f565b60015b848a604051602001808281526020019150506040516020818303038152906040528051906020012060001c604051806040016040528060078152602001600160ca1b661c185e5b595b9d02815250613052565b5050505050505050565b81546001830154600160801b900463ffffffff1681612c0f57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b6000808555600285015460408051602080820188905281830193909352815180820383018152606090910190915280519101206003860154909190612c679083908690600160281b90046001600160a01b031661546a565b6001870154601880546001600160801b03808216938116600160801b92839004821603160291909117905590506000612ca1838686615409565b90508015612d075760038701546040805160208082018a9052825180830382018152828401808552815191909201209052606081018490529051600160281b9092046001600160a01b031691600080516020615d2b833981519152916080908290030190a25b6003870154612d8690600160281b90046001600160a01b031682840115612d3057828401612d33565b60015b8489604051602001808281526020019150506040516020818303038152906040528051906020012060001c604051806040016040528060078152602001600160ca1b661c185e5b595b9d02815250613052565b50505050505050565b81546001830154600160a01b900460ff1681612ddf57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b6000808555600285015460408051602080820188905281830193909352815180820383018152606090910190915280519101206001860154909190600160801b900463ffffffff168281612e2f57fe5b0690506000806000602860ff168960010160109054906101000a900463ffffffff1663ffffffff1611612ec4576003890154600285900a1664ffffffffff1615612ebf57612eac878a60010160109054906101000a900463ffffffff16888c60030160059054906101000a90046001600160a01b03166000615590565b6001600160801b03909116935091508290505b612f1b565b8560ff16841015612f1b57612f08878a60010160109054906101000a900463ffffffff16888c60030160059054906101000a90046001600160a01b03166000615590565b6001600160801b03909116935091508290505b600189018054601880546001600160801b03808216938116600160801b928390048216031681029290921790559054600091612f619188918b910463ffffffff16615409565b90508015612fc75760038a01546040805160208082018d9052825180830382018152828401808552815191909201209052606081018490529051600160281b9092046001600160a01b031691600080516020615d2b833981519152916080908290030190a25b60038a015461304690600160281b90046001600160a01b031682840115612ff057828401612ff3565b60015b848c604051602001808281526020019150506040516020818303038152906040528051906020012060001c604051806040016040528060078152602001600160ca1b661c185e5b595b9d02815250613052565b50505050505050505050565b6040516001600160a01b0386169085156108fc029086906000818181858888f1935050505015613144577fe0be3e380b9d096e907f7ef72465cfc68009c6e3e00d00799c10f946785b1b248583858460405180856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131025781810151838201526020016130ea565b50505050905090810190601f16801561312f5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1613208565b7f5e93fffcba141e3bc2692d3006ceaef1fe77cf16237eda40090c2ee470c5c8e58583868460405180856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131ca5781810151838201526020016131b2565b50505050905090810190601f1680156131f75780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a15b5050505050565b6000838152601a602052604081206007810154829190829060ff600160a01b820416906000198201908390819081908190613252906001600160a01b0316610cc0565b90505b60008c8660ff168151811061326657fe5b602002602001015111801561329757508b51600160281b908d9060ff881690811061328d57fe5b6020026020010151105b6132eb5760408051600160e51b62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b8b8560ff16815181106132fa57fe5b602002602001015164090400900914156137ba57662386f26fc100006004028b8660ff168151811061332857fe5b60200260200101511015801561335e5750693f870857a3e0e38000008b8660ff168151811061335357fe5b602002602001015111155b6133a05760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b8a8560ff16815181106133af57fe5b602002602001015187019650348711156133fd57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615de36026913960400191505060405180910390fd5b61342a61900060048d8860ff168151811061341457fe5b60200260200101518161342357fe5b04836157c5565b8a60060160008960ff1660ff16815260200190815260200160002060008c60030160008b60ff1660ff1681526020019081526020016000206000849a508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060048b8660ff16815181106134b557fe5b6020026020010151816134c457fe5b60ff8716600081815260028c0160205260409020929091049091558b516134f991640900000000916004918f91811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060048b8660ff168151811061358457fe5b60200260200101518161359357fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116135c557836135c7565b825b93506001860195506135e5600960048d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060048b8660ff168151811061367057fe5b60200260200101518161367f57fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116136b157836136b3565b825b93506001860195506136d4630400000060048d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060048b8660ff168151811061375f57fe5b60200260200101518161376e57fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116137a057836137a2565b825b9350838901985060018601955060048a019950614dfa565b8b8560ff16815181106137c957fe5b60200260200101516409366c909d1415613f5357662386f26fc100006009028b8660ff16815181106137f757fe5b60200260200101511015801561382d5750693f870857a3e0e38000008b8660ff168151811061382257fe5b602002602001015111155b61386f5760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b8a8560ff168151811061387e57fe5b602002602001015187019650348711156138cc57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615de36026913960400191505060405180910390fd5b6138e2609060098d8860ff168151811061341457fe5b8a60060160008960ff1660ff16815260200190815260200160002060008c60030160008b60ff1660ff1681526020019081526020016000206000849a508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff168151811061396d57fe5b60200260200101518161397c57fe5b60ff8716600081815260028c0160205260409020929091049091558b516139ae91619000916009918f91811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613a3957fe5b602002602001015181613a4857fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613a7a5783613a7c565b825b9350600186019550613a9c6224000060098d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613b2757fe5b602002602001015181613b3657fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613b685783613b6a565b825b9350600186019550613b8a6248000060098d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613c1557fe5b602002602001015181613c2457fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613c565783613c58565b825b9350600186019550613c7a64090000000060098d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613d0557fe5b602002602001015181613d1457fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613d465783613d48565b825b9350600186019550613d7b633600000060098d8860ff1681518110613d6957fe5b60200260200101516002028161342357fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613e0657fe5b602002602001015160020281613e1857fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613e4a5783613e4c565b825b9350600186019550613e6a600d60098d8860ff1681518110613d6957fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613ef557fe5b602002602001015160020281613f0757fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613f395783613f3b565b825b9350838901985060018601955060078a019950614dfa565b8b8560ff1681518110613f6257fe5b602002602001015164048012424214156144ed57662386f26fc100006005028b8660ff1681518110613f9057fe5b602002602001015110158015613fc65750693f870857a3e0e38000008b8660ff1681518110613fbb57fe5b602002602001015111155b6140085760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b8a8560ff168151811061401757fe5b6020026020010151870196503487111561406557604051600160e51b62461bcd028152600401808060200182810382526026815260200180615de36026913960400191505060405180910390fd5b61407d6202400060058d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff1681526020019081526020016000206000849a508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060058b8660ff168151811061410857fe5b60200260200101518161411757fe5b048860020160008860ff1660ff168152602001908152602001600020819055506001860195506141556212000060058d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060058b8660ff16815181106141e057fe5b6020026020010151816141ef57fe5b048860020160008860ff1660ff16815260200190815260200160002081905550828401935061422b61024060058d8860ff168151811061341457fe5b8a60060160008960ff1660ff16815260200190815260200160002060008c60030160008b60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060058b8660ff16815181106142b657fe5b6020026020010151816142c557fe5b60ff8716600090815260028b016020526040902091900490556001600160801b03808516908416116142f757836142f9565b825b935060018601955061431b64048000000060058d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060058b8660ff16815181106143a657fe5b6020026020010151816143b557fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116143e757836143e9565b825b9350600186019550614407600260058d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060058b8660ff168151811061449257fe5b6020026020010151816144a157fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116144d357836144d5565b825b9350838901985060018601955060058a019950614dfa565b8b8560ff16815181106144fc57fe5b6020026020010151641249812d201415614b8457662386f26fc100006006028b8660ff168151811061452a57fe5b6020026020010151101580156145605750693f870857a3e0e38000008b8660ff168151811061455557fe5b602002602001015111155b6145a25760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b8a8560ff16815181106145b157fe5b602002602001015187019650348711156145ff57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615de36026913960400191505060405180910390fd5b61461661012060068d8860ff168151811061341457fe5b8a60060160008960ff1660ff16815260200190815260200160002060008c60030160008b60ff1660ff1681526020019081526020016000206000849a508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff16815181106146a157fe5b6020026020010151816146b057fe5b60ff8716600081815260028c0160205260409020929091049091558b516146e291610c00916006918f91811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff168151811061476d57fe5b60200260200101518161477c57fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116147ae57836147b0565b825b93506001860195506147d06201200060068d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff168151811061485b57fe5b60200260200101518161486a57fe5b60ff8816600090815260028b016020526040902091900490556001600160801b038085169084161161489c578361489e565b825b93506001860195506148bf630180000060068d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff168151811061494a57fe5b60200260200101518161495957fe5b60ff8816600090815260028b016020526040902091900490556001600160801b038085169084161161498b578361498d565b825b93506001860195506149ae634800000060068d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff1681518110614a3957fe5b602002602001015181614a4857fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611614a7a5783614a7c565b825b9350600186019550614a9e64120000000060068d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff1681518110614b2957fe5b602002602001015181614b3857fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611614b6a5783614b6c565b825b9350838901985060018601955060068a019950614dfa565b662386f26fc100008b8660ff1681518110614b9b57fe5b602002602001015110158015614bd15750693f870857a3e0e38000008b8660ff1681518110614bc657fe5b602002602001015111155b614c135760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b8a8560ff1681518110614c2257fe5b60200260200101518701965034871115614c7057604051600160e51b62461bcd028152600401808060200182810382526026815260200180615de36026913960400191505060405180910390fd5b614ca78c8660ff1681518110614c8257fe5b60200260200101518c8760ff1681518110614c9957fe5b6020026020010151836157c5565b8a60060160008960ff1660ff16815260200190815260200160002060008c60030160008b60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff160217905550505050603f7e010410410410410410410410410410410410410410410410410410410410417920000000001000000000080000000004000000000200000000018a60060160008960ff1660ff16815260200190815260200160002060009054906101000a900464ffffffffff1664ffffffffff16021681614d9b57fe5b0660ff16600114614daf5797820197614dbd565b81614dbd5797820197600191505b8a8560ff1681518110614dcc57fe5b60200260200101518860020160008760ff1660ff1681526020019081526020016000208190555060018a0199505b60ff8516614e0757614e12565b600185039450613255565b5050505050505050935093915050565b60008080602863ffffffff891611614e7f57603f7920000000001000000000080000000004000000000200000000018a027e0104104104104104104104104104104104104104104104104104104104104116069150889250614ed7565b600089118015614e9557508763ffffffff168911155b614ed357604051600160e51b62461bcd02815260040180806020018281038252602e815260200180615e56602e913960400191505060405180910390fd5b8891505b6000614ee7888a85886001615590565b601354919350915088016001600160801b0383161115614f515760408051600160e51b62461bcd02815260206004820181905260248201527f6d617850726f666974506c696e6b6f206c696d69742076696f6c6174696f6e2e604482015290519081900360640190fd5b6001600160a01b0385166000908152601b60205260409020805489019055601880546001600160801b03600160801b808304821686018216810292821692909217808216850182166001600160801b03199190911617928390553031838216929093048116919091011611156150115760408051600160e51b62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b60408051888152602081018890528082018a905290517f7cb363f1be918dc2e8cadae9eb87766dacf1f4f49ae904291aa3e59fc593c4139181900360600190a15096509650969350505050565b815461509e57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b60078201546005830154604080516020808201869052818301939093528151808203830181526060909101909152805191012083546001600160a01b03909216916000908190819067016345785d8a000011156150fc57600061511c565b6007870154600160a01b900460ff1666038d7ea4c680008161511a57fe5b045b6007880154909150602585069060009061513e906001600160a01b0316610cc0565b905060005b60078a015460ff600160a01b909104811690821610156151d75760ff8116600090815260068b016020526040902054600284900a1664ffffffffff16156151cf5760ff808216600090815260028c01602090815260408083205460038f019092528220546151bf93918890039260249291909116908690615878565b6001600160801b03169586019594505b600101615143565b506001890154601880546001600160801b03808216938116600160801b92839004821603160291909117905588546000906152159088906025615409565b9050801561526f576040805160208082018c90528251808303820181528284018085528151919092012090526060810183905290516001600160a01b038a1691600080516020615d2b833981519152919081900360800190a25b6152d9888783011561528357828801615286565b60015b888c604051602001808281526020019150506040516020818303038152906040528051906020012060001c604051806040016040528060078152602001600160ca1b661c185e5b595b9d02815250613052565b5050600090975550505050505050565b6000806001815b601081101561531557878160020a1660001461530d576001830192505b6001016152f0565b5060006153228684615a07565b9050600067016345785d8a000088101561533d576000615346565b66038d7ea4c680005b600a5490915060009060ff16600214156153885750600154600a54610100900460ff9081166301000000830482160162010000909204811691909101166153b1565b50600154600160201b810460ff9081166301000000830482160162010000909204811691909101165b60006103e86153bf89610cc0565b60ff1683038b02816153cd57fe5b049050660110d9316ec0008110156153e95750660110d9316ec0005b60648484838d030302816153f957fe5b049b9a5050505050505050505050565b600067016345785d8a000083106154635760006103e883868161542857fe5b048161543057fe5b600154919006915061ffff1681141561546157601880546001600160801b031981169091556001600160801b031691505b505b9392505050565b600080600061547886615a8e565b6000945090925090508267016345785d8a00008610156154995760006154a2565b66038d7ea4c680005b600154909150600160201b810460ff90811663010000008304821601620100009092048116919091011660006103e86154da88610cc0565b60ff1683038902816154e857fe5b049050660110d9316ec0008110156155045750660110d9316ec0005b600b8560ff168154811061551457fe5b60009182526020909120601082040154600f9091166002026101000a900461ffff166064828a0385900304029550600c8460ff168154811061555257fe5b6000918252602090912060088204015460079091166004026101000a900463ffffffff166064828a0385900304028601955050505050509392505050565b6000808460ff1660001080156155af57508563ffffffff168560ff1611155b6156035760408051600160e51b62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b67016345785d8a000087101561561a576000615623565b66038d7ea4c680005b600a5490915060009060ff16600214156156605750600154600a54610100900460ff90811663010000008304821601620100009092041601615684565b50600154600160201b810460ff908116630100000083048216016201000090920416015b60006103e861569287610cc0565b830360ff168a02816156a057fe5b049050660110d9316ec0008110156156bc5750660110d9316ec0005b88838201111561570057604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c516022913960400191505060405180910390fd5b841561574057600154601080546103e860ff62010000850481168e028290049092019092556011805463010000009094049091168c029190910490910190555b63ffffffff8816620100001415615785578660ff166001141561576657600a9750615780565b8660ff166002141561577b5760149750615780565b603297505b600196505b63ffffffff88166103e7141561579e5760059750600196505b8660ff168863ffffffff1684838c030302816157b657fe5b04935050509550959350505050565b60008080603f7e01041041041041041041041041041041041041041041041041041041041041792000000000100000000008000000000400000000020000000001880216068661581a87602484896001615878565b92506014548701836001600160801b0316111561586b57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c736022913960400191505060405180910390fd5b9790965090945092505050565b60008360ff16600010801561589657508463ffffffff168460ff1611155b6158ea5760408051600160e51b62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b60018054600091600160281b90910460ff161415615916576003546103e89060ff16880204905061598a565b821561595657600154601080546103e860ff62010000850481168c028290049092019092556011805463010000009094049091168a029190910490910190555b6001546103e890600160201b810460ff90811663010000008304821601620100009092048116919091018690031688020490505b660110d9316ec0008110156159a35750660110d9316ec0005b868111156159e557604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c516022913960400191505060405180910390fd5b8460ff168663ffffffff1682890302816159fb57fe5b04979650505050505050565b60008260011415615a445760048260118110615a1f57fe5b601091828204019190066002029054906101000a900461ffff1661ffff169050615a88565b8260021415615a5a5760068260118110615a1f57fe5b60088260118110615a6757fe5b601091828204019190066002029054906101000a900461ffff1661ffff1690505b92915050565b600080808080808080805b600560ff82161015615b3557615ab58a8260020160ff16615b58565b9450615ac2856004615b78565b93508360ff1696506008871115615ada578660100396505b8660071415615aea576001880197505b60ff8116615afa57869550615b2d565b86861415615b0d57600182019150615b29565b8260ff168260ff1611615b205782615b22565b815b9250600091505b8695505b600101615a99565b508160ff168160ff1611615b495781615b4b565b805b9750505050505050915091565b60006008601f8390030260020a8381615b6d57fe5b0460f81b9392505050565b6000808260ff16600260ff160a60ff168460f81c60ff1681615b9657fe5b0694935050505056fe726f756c7474655461626c654c696d69742063616e74206265206772656174207468656e20746f70206c696d69742e43616e206f6e6c792061636365707420707265617070726f766564206e6577206f776e65722e6d617850726f666974506c696e6b6f2063616e74206265206772656174207468656e20746f70206c696d69742e6d617850726f666974526f756c657474652063616e74206265206772656174207468656e20746f70206c696d69742e42657420646f65736e2774206576656e20636f76657220686f75736520656467652e6d617850726f666974526f756c65747465206c696d69742076696f6c6174696f6e2e4265742073686f756c6420626520696e20616e2027616374697665272073746174654265742073686f756c6420626520696e20612027636c65616e272073746174652e736574746c6542657420696e207468652073616d6520626c6f636b20617320706c6163654265742c206f72206265666f72652e416d6f756e742073686f756c642062652077697468696e2072616e67652e000016ea4dcfd06c1efb1dd2edf3c766c9a9b9c1d73cbd8ddf4359bd3961712299504f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e6f6e2d63726f75706965722e496e63726561736520616d6f756e74206c6172676572207468616e2062616c616e63652e416c6c20626574732073686f756c642062652070726f6365737365642028736574746c6564206f7220726566756e64656429206265666f72652073656c662d64657374727563742e546f74616c206265747320616d6f756e742073686f756c64206265204c544520616d6f756e744f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d6f776e65722e6d617850726f6669742063616e74206265206772656174207468656e20746f70206c696d69742e48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676572207468616e206d6f64756c6f2e426c6f636b686173682063616e277420626520717565726965642062792045564d2e4d6f6465726174696f6e206d6574686f64732063616c6c6564206279206e6f6e2d6d6f64657261746f722ea165627a7a72305820bc9d43aef8f6c18e47787228d2f7107318a36b538819d2381f37f3055bc2f6670029
Deployed Bytecode
0x6080604052600436106102ae5760003560e01c806398c7d1e311610175578063d6d30a51116100dc578063e0d44b7911610095578063f2d7afe81161006f578063f2d7afe8146109e5578063f8dbd7ee146109fa578063fbd668a914610a0f578063fc9f12a614610a39576102ae565b8063e0d44b791461097c578063e1fdb4b414610991578063e9c90d01146109bb576102ae565b8063d6d30a511461089f578063d930a45a146108c9578063d98f9740146108de578063db53404c146108f3578063dc023f1514610920578063df88126f14610967576102ae565b8063bd0f1df41161012e578063bd0f1df4146107c8578063becf40b6146107dd578063bf205ebc146107f2578063c10753291461081e578063d06c54fb14610857578063d579fd441461086c576102ae565b806398c7d1e314610718578063997664d714610742578063a5197d1014610757578063a84bf40e1461076c578063a8fc32de146107ab578063b539cd55146107b3576102ae565b80634d61537f1161021957806388475e4e116101d257806388475e4e1461056b5780638a0ba9e2146105a45780638ca022321461067a5780638da5cb5b146106a45780638f6ead62146106b957806392f8dc5e146106ee576102ae565b80634d61537f1461048f57806357246d23146104a45780635e05f374146104d55780636896a9d2146104ff5780636b5c5f391461052c57806380a1a0e514610541576102ae565b8063363bf9641161026b578063363bf964146103a5578063371e6ec4146103ea57806338743904146103ff57806338b48ac3146104145780633bad7e9c1461044757806341c0e1b51461047a576102ae565b80630149e4bb146102b057806316fd381a146102db5780631d70f55c1461030557806322ff5faa1461034a578063255858b31461037b57806333450c5d14610390575b005b3480156102bc57600080fd5b506102c5610a4e565b6040805160ff9092168252519081900360200190f35b3480156102e757600080fd5b506102ae600480360360208110156102fe57600080fd5b5035610a5e565b34801561031157600080fd5b506103386004803603602081101561032857600080fd5b50356001600160a01b0316610beb565b60408051918252519081900360200190f35b34801561035657600080fd5b5061035f610bfd565b604080516001600160a01b039092168252519081900360200190f35b34801561038757600080fd5b506102c5610c0c565b34801561039c57600080fd5b50610338610c1c565b3480156103b157600080fd5b506102ae600480360360608110156103c857600080fd5b506001600160a01b038135811691602081013582169160409091013516610c22565b3480156103f657600080fd5b50610338610cab565b34801561040b57600080fd5b5061035f610cb1565b34801561042057600080fd5b506102c56004803603602081101561043757600080fd5b50356001600160a01b0316610cc0565b34801561045357600080fd5b506102ae6004803603602081101561046a57600080fd5b50356001600160a01b0316610db2565b34801561048657600080fd5b506102ae610e20565b34801561049b57600080fd5b5061035f610ecc565b3480156104b057600080fd5b506104b9610edb565b604080516001600160801b039092168252519081900360200190f35b3480156104e157600080fd5b506102ae600480360360208110156104f857600080fd5b5035610eea565b34801561050b57600080fd5b506102ae6004803603602081101561052257600080fd5b503560ff16610f50565b34801561053857600080fd5b5061035f610fde565b34801561054d57600080fd5b506102ae6004803603602081101561056457600080fd5b5035610fed565b34801561057757600080fd5b506102ae6004803603604081101561058e57600080fd5b506001600160a01b03813516906020013561109e565b6102ae600480360360e08110156105ba57600080fd5b810190602081018135600160201b8111156105d457600080fd5b8201836020820111156105e657600080fd5b803590602001918460208302840111600160201b8311171561060757600080fd5b919390929091602081019035600160201b81111561062457600080fd5b82018360208201111561063657600080fd5b803590602001918460208302840111600160201b8311171561065757600080fd5b91935091508035906020810135906040810135906060810135906080013561116f565b34801561068657600080fd5b506102ae6004803603602081101561069d57600080fd5b5035611676565b3480156106b057600080fd5b5061035f611727565b3480156106c557600080fd5b506102ae600480360360408110156106dc57600080fd5b5060ff81358116916020013516611736565b3480156106fa57600080fd5b506102ae6004803603602081101561071157600080fd5b50356117c3565b34801561072457600080fd5b506102ae6004803603602081101561073b57600080fd5b5035611874565b34801561074e57600080fd5b50610338611a1c565b34801561076357600080fd5b50610338611a22565b34801561077857600080fd5b506102ae6004803603606081101561078f57600080fd5b5060ff8135811691602081013582169160409091013516611a28565b6102ae611ae2565b3480156107bf57600080fd5b50610338611b9d565b3480156107d457600080fd5b506102c5611ba3565b3480156107e957600080fd5b506102c5611bb1565b3480156107fe57600080fd5b50610807611bc1565b6040805161ffff9092168252519081900360200190f35b34801561082a57600080fd5b506102ae6004803603604081101561084157600080fd5b506001600160a01b038135169060200135611bcb565b34801561086357600080fd5b506102ae611cfb565b34801561087857600080fd5b506102ae6004803603602081101561088f57600080fd5b50356001600160a01b0316611d6b565b3480156108ab57600080fd5b506102ae600480360360208110156108c257600080fd5b5035611e3f565b3480156108d557600080fd5b506102c5611f7a565b3480156108ea57600080fd5b506102ae611f83565b3480156108ff57600080fd5b506102ae6004803603602081101561091657600080fd5b503560ff16611ff5565b6102ae600480360360e081101561093657600080fd5b5080359063ffffffff6020820135169060408101359060608101359060808101359060a08101359060c0013561207d565b34801561097357600080fd5b506104b96125d2565b34801561098857600080fd5b506103386125e8565b34801561099d57600080fd5b506102ae600480360360208110156109b457600080fd5b50356125ee565b3480156109c757600080fd5b506102ae600480360360208110156109de57600080fd5b5035612765565b3480156109f157600080fd5b506102c56128ec565b348015610a0657600080fd5b506102c56128fb565b348015610a1b57600080fd5b506102ae60048036036020811015610a3257600080fd5b5035612904565b348015610a4557600080fd5b506103386129b5565b6001546301000000900460ff1681565b6017546001600160a01b03163314610aaa57604051600160e51b62461bcd02815260040180806020018281038252602c815260200180615d4b602c913960400191505060405180910390fd5b6040805160208082018490528251808303820181529183018352815191810191909120600081815260199092529190206001810154600160a81b900464ffffffffff16438110610b2e57604051600160e51b62461bcd028152600401808060200182810382526033815260200180615cd86033913960400191505060405180910390fd5b60fa8101431115610b895760408051600160e51b62461bcd02815260206004820152601860248201527f43616e277420626520717565726965642062792045564d2e0000000000000000604482015290519081900360640190fd5b600182015463ffffffff600160801b90910416620100001415610bb557610bb082856129bb565b610be5565b600182015463ffffffff600160801b909104166103e71415610bdb57610bb08285612bbc565b610be58285612d8f565b50505050565b601b6020526000908152604090205481565b600d546001600160a01b031681565b600154600160281b900460ff1681565b60145481565b600e546001600160a01b03163314610c6e57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b601580546001600160a01b03199081166001600160a01b039485161790915560178054821694841694909417909355601680549093169116179055565b60025481565b6016546001600160a01b031681565b6001600160a01b0381166000908152601b60205260408120546801158e460913d000008110801590610cfa575068056bc75e2d6310000081105b15610d085760019150610dac565b68056bc75e2d631000008110158015610d295750681b1ae4d6e2ef50000081105b15610d375760029150610dac565b681b1ae4d6e2ef5000008110158015610d585750683635c9adc5dea0000081105b15610d665760039150610dac565b683635c9adc5dea000008110158015610d88575069010f0cf064dd5920000081105b15610d965760049150610dac565b69010f0cf064dd592000008110610dac57600591505b50919050565b600e546001600160a01b03163314610dfe57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b03163314610e6c57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b601854600160801b90046001600160801b031615610ebe57604051600160e51b62461bcd028152600401808060200182810382526048815260200180615d9b6048913960600191505060405180910390fd5b600e546001600160a01b0316ff5b6015546001600160a01b031681565b6018546001600160801b031681565b600e546001600160a01b0316331480610f0d57506016546001600160a01b031633145b610f4b57604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b600055565b600e546001600160a01b0316331480610f7357506016546001600160a01b031633145b610fb157604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b600a8160ff161115610fc257600080fd5b600a805460ff9092166101000261ff0019909216919091179055565b6017546001600160a01b031681565b600e546001600160a01b031633148061101057506016546001600160a01b031633145b61104e57604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b693f870857a3e0e3800000811061109957604051600160e51b62461bcd02815260040180806020018281038252602f815260200180615ba0602f913960400191505060405180910390fd5b600255565b600e546001600160a01b031633146110ea57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b60115481111561112e57604051600160e51b62461bcd028152600401808060200182810382526024815260200180615d776024913960400191505060405180910390fd5b6011805482900390556040805180820190915260088152600160c01b67776974686472617702602082015261116b90839083908190600090613052565b5050565b6000848152601a602052604090206002543411156111d75760408051600160e51b62461bcd02815260206004820181905260248201527f426574732073756d206d757374206265204c5445207461626c65206c696d6974604482015290519081900360640190fd5b600781018054600160a01b60ff021916600160a01b60ff8c160217908190556001600160a01b03161561123e57604051600160e51b62461bcd028152600401808060200182810382526021815260200180615cb76021913960400191505060405180910390fd5b854311156112965760408051600160e51b62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b6040805164ffffffffff881660d81b6020808301919091526025808301899052835180840390910181526045830180855281519183019190912060009091526065830180855252601b608583015260a5820186905260c58201859052915160019260e5808401939192601f1981019281900390910190855afa158015611320573d6000803e3d6000fd5b5050604051601f1901516015546001600160a01b039081169116149050806113eb57506040805164ffffffffff881660d81b6020808301919091526025808301899052835180840390910181526045830180855281519183019190912060009091526065830180855252601c608583015260a5820186905260c58201859052915160019260e5808401939192601f1981019281900390910190855afa1580156113cd573d6000803e3d6000fd5b5050604051601f1901516015546001600160a01b0390811691161490505b61143f5760408051600160e51b62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b6000546010541061145257611452611ae2565b6114c0858b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d91829185019084908082843760009201919091525061320f92505050565b6001830180546001600160801b039283166001600160801b0319909116179081905560078401805460ff909416600160a01b02600160a01b60ff02199094169390931790925560188054600160801b80820484169484169490940183168402908316179081905530319290041611156115835760408051600160e51b62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b60018054600160281b900460ff16146115ac57336000908152601b602052604090208054340190555b3480825560048201805464ffffffffff431664ffffffffff19909116179055600582018590556007820180546001600160a01b0319163317905567016345785d8a000011156115fc576000611605565b66038d7ea4c680005b601880546001600160801b031981166001600160801b0391821693909301169190911790556040805186815260208101869052348183015290517f7cb363f1be918dc2e8cadae9eb87766dacf1f4f49ae904291aa3e59fc593c413916060908290030190a150505050505050505050565b600e546001600160a01b031633148061169957506016546001600160a01b031633145b6116d757604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b693f870857a3e0e3800000811061172257604051600160e51b62461bcd02815260040180806020018281038252602d815260200180615bf5602d913960400191505060405180910390fd5b601355565b600e546001600160a01b031681565b600e546001600160a01b031633148061175957506016546001600160a01b031633145b61179757604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b6001805465ff00000000001916600160281b60ff94851602179055600a805460ff191691909216179055565b600e546001600160a01b03163314806117e657506016546001600160a01b031633145b61182457604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b693f870857a3e0e3800000811061186f57604051600160e51b62461bcd02815260040180806020018281038252602f815260200180615c22602f913960400191505060405180910390fd5b601455565b6000818152601a602052604090208054806118c357604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b600482015464ffffffffff90811660fa0116431161191557604051600160e51b62461bcd028152600401808060200182810382526022815260200180615e846022913960400191505060405180910390fd5b60008083555b600783015460ff600160a01b909104811690821610156119525760ff8116600090815260028401602052604081205560010161191b565b506001820154601880546001600160801b03808216938116600160801b92839004821603160291909117905567016345785d8a000081108015906119a9575060185466038d7ea4c680006001600160801b03909116115b156119d957601880546001600160801b031981166001600160801b0391821666038d7ea4c67fff19019091161790555b60078201546040805180820190915260068152600160d21b651c99599d5b99026020820152611a17916001600160a01b031690839081908790613052565b505050565b60105481565b60115481565b600e546001600160a01b03163314611a7457604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b60058260ff161015611a8557600080fd5b601e818385010160ff161115611a9a57600080fd5b6001805460ff938416620100000262ff00001993851663010000000263ff0000001995909616600160201b0264ff000000001990921691909117939093169390931716179055565b600d546001600160a01b031615611b9b57601054600d5460408051600160e11b632f3c22c702815290516001600160a01b0390921691635e78458e918491600480830192600092919082900301818588803b158015611b4057600080fd5b505af1158015611b54573d6000803e3d6000fd5b505060006010555050604080514281526020810184905281517f384e13b223db78131ff8fc373c4e03bbab38d141226a80644700e32c974dfa8793509081900390910190a1505b565b60125481565b600a54610100900460ff1681565b600154600160201b900460ff1681565b60015461ffff1681565b600e546001600160a01b03163314611c1757604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b3031811115611c5a57604051600160e51b62461bcd028152600401808060200182810382526024815260200180615d776024913960400191505060405180910390fd5b60185430316001600160801b03808316600160801b90930481169290920190911682011115611cca5760408051600160e51b62461bcd0281526020600482015260116024820152600160791b702737ba1032b737bab3b410333ab732399702604482015290519081900360640190fd5b61116b8282836000604051806040016040528060088152602001600160c01b67776974686472617702815250613052565b600f546001600160a01b03163314611d4757604051600160e51b62461bcd028152600401808060200182810382526026815260200180615bcf6026913960400191505060405180910390fd5b600f54600e80546001600160a01b0319166001600160a01b03909216919091179055565b600e546001600160a01b03163314611db757604051600160e51b62461bcd028152600401808060200182810382526026815260200180615e096026913960400191505060405180910390fd5b600e546001600160a01b0382811691161415611e1d5760408051600160e51b62461bcd02815260206004820152601d60248201527f43616e6e6f7420617070726f76652063757272656e74206f776e65722e000000604482015290519081900360640190fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600e546001600160a01b0316331480611e6257506016546001600160a01b031633145b611ea057604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b3031811115611ee357604051600160e51b62461bcd028152600401808060200182810382526024815260200180615d776024913960400191505060405180910390fd5b60185430316001600160801b03808316600160801b90930481169290920190911682011115611f535760408051600160e51b62461bcd0281526020600482015260116024820152600160791b702737ba1032b737bab3b410333ab732399702604482015290519081900360640190fd5b601880546001600160801b031981166001600160801b039182169390930116919091179055565b600a5460ff1681565b600e546001600160a01b0316331480611fa657506016546001600160a01b031633145b611fe457604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b601880546001600160801b03169055565b600e546001600160a01b031633148061201857506016546001600160a01b031633145b61205657604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b600a8160ff16111561206757600080fd5b6003805460ff191660ff92909216919091179055565b60008481526019602052604090206003810154600160281b90046001600160a01b0316156120df57604051600160e51b62461bcd028152600401808060200182810382526021815260200180615cb76021913960400191505060405180910390fd5b34606463ffffffff891611156121665763ffffffff881662010000148061210d575063ffffffff88166103e7145b6121615760408051600160e51b62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b6121d7565b60018863ffffffff161180156121835750606463ffffffff891611155b6121d75760408051600160e51b62461bcd02815260206004820152601e60248201527f4d6f64756c6f2073686f756c642062652077697468696e2072616e67652e0000604482015290519081900360640190fd5b662386f26fc1000081101580156121f85750693f870857a3e0e38000008111155b61223a5760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b60008911801561224d5750600160281b89105b6122a15760408051600160e51b62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b864311156122f95760408051600160e51b62461bcd02815260206004820152601360248201527f436f6d6d69742068617320657870697265642e00000000000000000000000000604482015290519081900360640190fd5b6040805164ffffffffff891660d81b60208083019190915260258083018a9052835180840390910181526045830180855281519183019190912060009091526065830180855252601b608583015260a5820187905260c58201869052915160019260e5808401939192601f1981019281900390910190855afa158015612383573d6000803e3d6000fd5b5050604051601f1901516015546001600160a01b0390811691161490508061244e57506040805164ffffffffff891660d81b60208083019190915260258083018a9052835180840390910181526045830180855281519183019190912060009091526065830180855252601c608583015260a5820187905260c58201869052915160019260e5808401939192601f1981019281900390910190855afa158015612430573d6000803e3d6000fd5b5050604051601f1901516015546001600160a01b0390811691161490505b6124a25760408051600160e51b62461bcd02815260206004820152601d60248201527f4543445341207369676e6174757265206973206e6f742076616c69642e000000604482015290519081900360640190fd5b600054601054106124b5576124b5611ae2565b6000806124c68b8b858b8b33614e22565b8160ff1691508660010160008291906101000a8154816001600160801b0302191690836001600160801b03160217905550819450829350505050828460000181905550898460010160106101000a81548163ffffffff021916908363ffffffff160217905550818460010160146101000a81548160ff021916908360ff160217905550438460010160156101000a81548164ffffffffff021916908364ffffffffff160217905550808460030160006101000a81548164ffffffffff021916908364ffffffffff160217905550868460020181905550338460030160056101000a8154816001600160a01b0302191690836001600160a01b031602179055505050505050505050505050565b601854600160801b90046001600160801b031681565b60005481565b600081815260196020526040902080548061263d57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b600182015464ffffffffff600160a81b909104811660fa0116431161269657604051600160e51b62461bcd028152600401808060200182810382526022815260200180615e846022913960400191505060405180910390fd5b600082556001820154601880546001600160801b03808216938116600160801b92839004821603160291909117905567016345785d8a000081108015906126f0575060185466038d7ea4c680006001600160801b03909116115b1561272057601880546001600160801b031981166001600160801b0391821666038d7ea4c67fff19019091161790555b611a178260030160059054906101000a90046001600160a01b0316828386604051806040016040528060068152602001600160d21b651c99599d5b9902815250613052565b6017546001600160a01b031633146127b157604051600160e51b62461bcd02815260040180806020018281038252602c815260200180615d4b602c913960400191505060405180910390fd5b60408051602080820184905282518083038201815291830183528151918101919091206000818152601a9092529190206004810154815464ffffffffff909116906128465760408051600160e51b62461bcd02815260206004820152601560248201527f42657420616c72656164792070726f6365737365640000000000000000000000604482015290519081900360640190fd5b80431161288757604051600160e51b62461bcd028152600401808060200182810382526033815260200180615cd86033913960400191505060405180910390fd5b60fa81014311156128e25760408051600160e51b62461bcd02815260206004820152601860248201527f43616e277420626520717565726965642062792045564d2e0000000000000000604482015290519081900360640190fd5b610be5828561505e565b60015462010000900460ff1681565b60035460ff1681565b600e546001600160a01b031633148061292757506016546001600160a01b031633145b61296557604051600160e51b62461bcd02815260040180806020018281038252602b815260200180615ea6602b913960400191505060405180910390fd5b693f870857a3e0e380000081106129b057604051600160e51b62461bcd028152600401808060200182810382526027815260200180615e2f6027913960400191505060405180910390fd5b601255565b60135481565b81546001830154600160a01b900460ff1681612a0b57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b6000808555600285015460408051602080820188905281830193909352815180820383018152606090910190915280519101206001860154909190600160801b900463ffffffff168281612a5b57fe5b0690506000612a838286868a60030160059054906101000a90046001600160a01b03166152e9565b600188018054601880546001600160801b03808216938116600160801b928390048216031681029290921790559054919250600091612acd9186918991900463ffffffff16615409565b90508015612b335760038801546040805160208082018b9052825180830382018152828401808552815191909201209052606081018490529051600160281b9092046001600160a01b031691600080516020615d2b833981519152916080908290030190a25b6003880154612bb290600160281b90046001600160a01b031682840115612b5c57828401612b5f565b60015b848a604051602001808281526020019150506040516020818303038152906040528051906020012060001c604051806040016040528060078152602001600160ca1b661c185e5b595b9d02815250613052565b5050505050505050565b81546001830154600160801b900463ffffffff1681612c0f57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b6000808555600285015460408051602080820188905281830193909352815180820383018152606090910190915280519101206003860154909190612c679083908690600160281b90046001600160a01b031661546a565b6001870154601880546001600160801b03808216938116600160801b92839004821603160291909117905590506000612ca1838686615409565b90508015612d075760038701546040805160208082018a9052825180830382018152828401808552815191909201209052606081018490529051600160281b9092046001600160a01b031691600080516020615d2b833981519152916080908290030190a25b6003870154612d8690600160281b90046001600160a01b031682840115612d3057828401612d33565b60015b8489604051602001808281526020019150506040516020818303038152906040528051906020012060001c604051806040016040528060078152602001600160ca1b661c185e5b595b9d02815250613052565b50505050505050565b81546001830154600160a01b900460ff1681612ddf57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b6000808555600285015460408051602080820188905281830193909352815180820383018152606090910190915280519101206001860154909190600160801b900463ffffffff168281612e2f57fe5b0690506000806000602860ff168960010160109054906101000a900463ffffffff1663ffffffff1611612ec4576003890154600285900a1664ffffffffff1615612ebf57612eac878a60010160109054906101000a900463ffffffff16888c60030160059054906101000a90046001600160a01b03166000615590565b6001600160801b03909116935091508290505b612f1b565b8560ff16841015612f1b57612f08878a60010160109054906101000a900463ffffffff16888c60030160059054906101000a90046001600160a01b03166000615590565b6001600160801b03909116935091508290505b600189018054601880546001600160801b03808216938116600160801b928390048216031681029290921790559054600091612f619188918b910463ffffffff16615409565b90508015612fc75760038a01546040805160208082018d9052825180830382018152828401808552815191909201209052606081018490529051600160281b9092046001600160a01b031691600080516020615d2b833981519152916080908290030190a25b60038a015461304690600160281b90046001600160a01b031682840115612ff057828401612ff3565b60015b848c604051602001808281526020019150506040516020818303038152906040528051906020012060001c604051806040016040528060078152602001600160ca1b661c185e5b595b9d02815250613052565b50505050505050505050565b6040516001600160a01b0386169085156108fc029086906000818181858888f1935050505015613144577fe0be3e380b9d096e907f7ef72465cfc68009c6e3e00d00799c10f946785b1b248583858460405180856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131025781810151838201526020016130ea565b50505050905090810190601f16801561312f5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1613208565b7f5e93fffcba141e3bc2692d3006ceaef1fe77cf16237eda40090c2ee470c5c8e58583868460405180856001600160a01b03166001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131ca5781810151838201526020016131b2565b50505050905090810190601f1680156131f75780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a15b5050505050565b6000838152601a602052604081206007810154829190829060ff600160a01b820416906000198201908390819081908190613252906001600160a01b0316610cc0565b90505b60008c8660ff168151811061326657fe5b602002602001015111801561329757508b51600160281b908d9060ff881690811061328d57fe5b6020026020010151105b6132eb5760408051600160e51b62461bcd02815260206004820152601c60248201527f4d61736b2073686f756c642062652077697468696e2072616e67652e00000000604482015290519081900360640190fd5b8b8560ff16815181106132fa57fe5b602002602001015164090400900914156137ba57662386f26fc100006004028b8660ff168151811061332857fe5b60200260200101511015801561335e5750693f870857a3e0e38000008b8660ff168151811061335357fe5b602002602001015111155b6133a05760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b8a8560ff16815181106133af57fe5b602002602001015187019650348711156133fd57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615de36026913960400191505060405180910390fd5b61342a61900060048d8860ff168151811061341457fe5b60200260200101518161342357fe5b04836157c5565b8a60060160008960ff1660ff16815260200190815260200160002060008c60030160008b60ff1660ff1681526020019081526020016000206000849a508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060048b8660ff16815181106134b557fe5b6020026020010151816134c457fe5b60ff8716600081815260028c0160205260409020929091049091558b516134f991640900000000916004918f91811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060048b8660ff168151811061358457fe5b60200260200101518161359357fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116135c557836135c7565b825b93506001860195506135e5600960048d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060048b8660ff168151811061367057fe5b60200260200101518161367f57fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116136b157836136b3565b825b93506001860195506136d4630400000060048d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060048b8660ff168151811061375f57fe5b60200260200101518161376e57fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116137a057836137a2565b825b9350838901985060018601955060048a019950614dfa565b8b8560ff16815181106137c957fe5b60200260200101516409366c909d1415613f5357662386f26fc100006009028b8660ff16815181106137f757fe5b60200260200101511015801561382d5750693f870857a3e0e38000008b8660ff168151811061382257fe5b602002602001015111155b61386f5760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b8a8560ff168151811061387e57fe5b602002602001015187019650348711156138cc57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615de36026913960400191505060405180910390fd5b6138e2609060098d8860ff168151811061341457fe5b8a60060160008960ff1660ff16815260200190815260200160002060008c60030160008b60ff1660ff1681526020019081526020016000206000849a508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff168151811061396d57fe5b60200260200101518161397c57fe5b60ff8716600081815260028c0160205260409020929091049091558b516139ae91619000916009918f91811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613a3957fe5b602002602001015181613a4857fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613a7a5783613a7c565b825b9350600186019550613a9c6224000060098d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613b2757fe5b602002602001015181613b3657fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613b685783613b6a565b825b9350600186019550613b8a6248000060098d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613c1557fe5b602002602001015181613c2457fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613c565783613c58565b825b9350600186019550613c7a64090000000060098d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613d0557fe5b602002602001015181613d1457fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613d465783613d48565b825b9350600186019550613d7b633600000060098d8860ff1681518110613d6957fe5b60200260200101516002028161342357fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613e0657fe5b602002602001015160020281613e1857fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613e4a5783613e4c565b825b9350600186019550613e6a600d60098d8860ff1681518110613d6957fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060098b8660ff1681518110613ef557fe5b602002602001015160020281613f0757fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611613f395783613f3b565b825b9350838901985060018601955060078a019950614dfa565b8b8560ff1681518110613f6257fe5b602002602001015164048012424214156144ed57662386f26fc100006005028b8660ff1681518110613f9057fe5b602002602001015110158015613fc65750693f870857a3e0e38000008b8660ff1681518110613fbb57fe5b602002602001015111155b6140085760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b8a8560ff168151811061401757fe5b6020026020010151870196503487111561406557604051600160e51b62461bcd028152600401808060200182810382526026815260200180615de36026913960400191505060405180910390fd5b61407d6202400060058d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff1681526020019081526020016000206000849a508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060058b8660ff168151811061410857fe5b60200260200101518161411757fe5b048860020160008860ff1660ff168152602001908152602001600020819055506001860195506141556212000060058d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060058b8660ff16815181106141e057fe5b6020026020010151816141ef57fe5b048860020160008860ff1660ff16815260200190815260200160002081905550828401935061422b61024060058d8860ff168151811061341457fe5b8a60060160008960ff1660ff16815260200190815260200160002060008c60030160008b60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060058b8660ff16815181106142b657fe5b6020026020010151816142c557fe5b60ff8716600090815260028b016020526040902091900490556001600160801b03808516908416116142f757836142f9565b825b935060018601955061431b64048000000060058d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060058b8660ff16815181106143a657fe5b6020026020010151816143b557fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116143e757836143e9565b825b9350600186019550614407600260058d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060058b8660ff168151811061449257fe5b6020026020010151816144a157fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116144d357836144d5565b825b9350838901985060018601955060058a019950614dfa565b8b8560ff16815181106144fc57fe5b6020026020010151641249812d201415614b8457662386f26fc100006006028b8660ff168151811061452a57fe5b6020026020010151101580156145605750693f870857a3e0e38000008b8660ff168151811061455557fe5b602002602001015111155b6145a25760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b8a8560ff16815181106145b157fe5b602002602001015187019650348711156145ff57604051600160e51b62461bcd028152600401808060200182810382526026815260200180615de36026913960400191505060405180910390fd5b61461661012060068d8860ff168151811061341457fe5b8a60060160008960ff1660ff16815260200190815260200160002060008c60030160008b60ff1660ff1681526020019081526020016000206000849a508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff16815181106146a157fe5b6020026020010151816146b057fe5b60ff8716600081815260028c0160205260409020929091049091558b516146e291610c00916006918f91811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff168151811061476d57fe5b60200260200101518161477c57fe5b60ff8816600090815260028b016020526040902091900490556001600160801b03808516908416116147ae57836147b0565b825b93506001860195506147d06201200060068d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff168151811061485b57fe5b60200260200101518161486a57fe5b60ff8816600090815260028b016020526040902091900490556001600160801b038085169084161161489c578361489e565b825b93506001860195506148bf630180000060068d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff168151811061494a57fe5b60200260200101518161495957fe5b60ff8816600090815260028b016020526040902091900490556001600160801b038085169084161161498b578361498d565b825b93506001860195506149ae634800000060068d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff1681518110614a3957fe5b602002602001015181614a4857fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611614a7a5783614a7c565b825b9350600186019550614a9e64120000000060068d8860ff168151811061341457fe5b8a60060160008a60ff1660ff16815260200190815260200160002060008c60030160008c60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff16021790555050505060068b8660ff1681518110614b2957fe5b602002602001015181614b3857fe5b60ff8816600090815260028b016020526040902091900490556001600160801b0380851690841611614b6a5783614b6c565b825b9350838901985060018601955060068a019950614dfa565b662386f26fc100008b8660ff1681518110614b9b57fe5b602002602001015110158015614bd15750693f870857a3e0e38000008b8660ff1681518110614bc657fe5b602002602001015111155b614c135760408051600160e51b62461bcd02815260206004820152601e6024820152600080516020615d0b833981519152604482015290519081900360640190fd5b8a8560ff1681518110614c2257fe5b60200260200101518701965034871115614c7057604051600160e51b62461bcd028152600401808060200182810382526026815260200180615de36026913960400191505060405180910390fd5b614ca78c8660ff1681518110614c8257fe5b60200260200101518c8760ff1681518110614c9957fe5b6020026020010151836157c5565b8a60060160008960ff1660ff16815260200190815260200160002060008c60030160008b60ff1660ff16815260200190815260200160002060008499508591906101000a81548160ff021916908360ff1602179055508491906101000a81548164ffffffffff021916908364ffffffffff160217905550505050603f7e010410410410410410410410410410410410410410410410410410410410417920000000001000000000080000000004000000000200000000018a60060160008960ff1660ff16815260200190815260200160002060009054906101000a900464ffffffffff1664ffffffffff16021681614d9b57fe5b0660ff16600114614daf5797820197614dbd565b81614dbd5797820197600191505b8a8560ff1681518110614dcc57fe5b60200260200101518860020160008760ff1660ff1681526020019081526020016000208190555060018a0199505b60ff8516614e0757614e12565b600185039450613255565b5050505050505050935093915050565b60008080602863ffffffff891611614e7f57603f7920000000001000000000080000000004000000000200000000018a027e0104104104104104104104104104104104104104104104104104104104104116069150889250614ed7565b600089118015614e9557508763ffffffff168911155b614ed357604051600160e51b62461bcd02815260040180806020018281038252602e815260200180615e56602e913960400191505060405180910390fd5b8891505b6000614ee7888a85886001615590565b601354919350915088016001600160801b0383161115614f515760408051600160e51b62461bcd02815260206004820181905260248201527f6d617850726f666974506c696e6b6f206c696d69742076696f6c6174696f6e2e604482015290519081900360640190fd5b6001600160a01b0385166000908152601b60205260409020805489019055601880546001600160801b03600160801b808304821686018216810292821692909217808216850182166001600160801b03199190911617928390553031838216929093048116919091011611156150115760408051600160e51b62461bcd02815260206004820152601f60248201527f43616e6e6f74206166666f726420746f206c6f73652074686973206265742e00604482015290519081900360640190fd5b60408051888152602081018890528082018a905290517f7cb363f1be918dc2e8cadae9eb87766dacf1f4f49ae904291aa3e59fc593c4139181900360600190a15096509650969350505050565b815461509e57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c956022913960400191505060405180910390fd5b60078201546005830154604080516020808201869052818301939093528151808203830181526060909101909152805191012083546001600160a01b03909216916000908190819067016345785d8a000011156150fc57600061511c565b6007870154600160a01b900460ff1666038d7ea4c680008161511a57fe5b045b6007880154909150602585069060009061513e906001600160a01b0316610cc0565b905060005b60078a015460ff600160a01b909104811690821610156151d75760ff8116600090815260068b016020526040902054600284900a1664ffffffffff16156151cf5760ff808216600090815260028c01602090815260408083205460038f019092528220546151bf93918890039260249291909116908690615878565b6001600160801b03169586019594505b600101615143565b506001890154601880546001600160801b03808216938116600160801b92839004821603160291909117905588546000906152159088906025615409565b9050801561526f576040805160208082018c90528251808303820181528284018085528151919092012090526060810183905290516001600160a01b038a1691600080516020615d2b833981519152919081900360800190a25b6152d9888783011561528357828801615286565b60015b888c604051602001808281526020019150506040516020818303038152906040528051906020012060001c604051806040016040528060078152602001600160ca1b661c185e5b595b9d02815250613052565b5050600090975550505050505050565b6000806001815b601081101561531557878160020a1660001461530d576001830192505b6001016152f0565b5060006153228684615a07565b9050600067016345785d8a000088101561533d576000615346565b66038d7ea4c680005b600a5490915060009060ff16600214156153885750600154600a54610100900460ff9081166301000000830482160162010000909204811691909101166153b1565b50600154600160201b810460ff9081166301000000830482160162010000909204811691909101165b60006103e86153bf89610cc0565b60ff1683038b02816153cd57fe5b049050660110d9316ec0008110156153e95750660110d9316ec0005b60648484838d030302816153f957fe5b049b9a5050505050505050505050565b600067016345785d8a000083106154635760006103e883868161542857fe5b048161543057fe5b600154919006915061ffff1681141561546157601880546001600160801b031981169091556001600160801b031691505b505b9392505050565b600080600061547886615a8e565b6000945090925090508267016345785d8a00008610156154995760006154a2565b66038d7ea4c680005b600154909150600160201b810460ff90811663010000008304821601620100009092048116919091011660006103e86154da88610cc0565b60ff1683038902816154e857fe5b049050660110d9316ec0008110156155045750660110d9316ec0005b600b8560ff168154811061551457fe5b60009182526020909120601082040154600f9091166002026101000a900461ffff166064828a0385900304029550600c8460ff168154811061555257fe5b6000918252602090912060088204015460079091166004026101000a900463ffffffff166064828a0385900304028601955050505050509392505050565b6000808460ff1660001080156155af57508563ffffffff168560ff1611155b6156035760408051600160e51b62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b67016345785d8a000087101561561a576000615623565b66038d7ea4c680005b600a5490915060009060ff16600214156156605750600154600a54610100900460ff90811663010000008304821601620100009092041601615684565b50600154600160201b810460ff908116630100000083048216016201000090920416015b60006103e861569287610cc0565b830360ff168a02816156a057fe5b049050660110d9316ec0008110156156bc5750660110d9316ec0005b88838201111561570057604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c516022913960400191505060405180910390fd5b841561574057600154601080546103e860ff62010000850481168e028290049092019092556011805463010000009094049091168c029190910490910190555b63ffffffff8816620100001415615785578660ff166001141561576657600a9750615780565b8660ff166002141561577b5760149750615780565b603297505b600196505b63ffffffff88166103e7141561579e5760059750600196505b8660ff168863ffffffff1684838c030302816157b657fe5b04935050509550959350505050565b60008080603f7e01041041041041041041041041041041041041041041041041041041041041792000000000100000000008000000000400000000020000000001880216068661581a87602484896001615878565b92506014548701836001600160801b0316111561586b57604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c736022913960400191505060405180910390fd5b9790965090945092505050565b60008360ff16600010801561589657508463ffffffff168460ff1611155b6158ea5760408051600160e51b62461bcd02815260206004820152601d60248201527f57696e2070726f626162696c697479206f7574206f662072616e67652e000000604482015290519081900360640190fd5b60018054600091600160281b90910460ff161415615916576003546103e89060ff16880204905061598a565b821561595657600154601080546103e860ff62010000850481168c028290049092019092556011805463010000009094049091168a029190910490910190555b6001546103e890600160201b810460ff90811663010000008304821601620100009092048116919091018690031688020490505b660110d9316ec0008110156159a35750660110d9316ec0005b868111156159e557604051600160e51b62461bcd028152600401808060200182810382526022815260200180615c516022913960400191505060405180910390fd5b8460ff168663ffffffff1682890302816159fb57fe5b04979650505050505050565b60008260011415615a445760048260118110615a1f57fe5b601091828204019190066002029054906101000a900461ffff1661ffff169050615a88565b8260021415615a5a5760068260118110615a1f57fe5b60088260118110615a6757fe5b601091828204019190066002029054906101000a900461ffff1661ffff1690505b92915050565b600080808080808080805b600560ff82161015615b3557615ab58a8260020160ff16615b58565b9450615ac2856004615b78565b93508360ff1696506008871115615ada578660100396505b8660071415615aea576001880197505b60ff8116615afa57869550615b2d565b86861415615b0d57600182019150615b29565b8260ff168260ff1611615b205782615b22565b815b9250600091505b8695505b600101615a99565b508160ff168160ff1611615b495781615b4b565b805b9750505050505050915091565b60006008601f8390030260020a8381615b6d57fe5b0460f81b9392505050565b6000808260ff16600260ff160a60ff168460f81c60ff1681615b9657fe5b0694935050505056fe726f756c7474655461626c654c696d69742063616e74206265206772656174207468656e20746f70206c696d69742e43616e206f6e6c792061636365707420707265617070726f766564206e6577206f776e65722e6d617850726f666974506c696e6b6f2063616e74206265206772656174207468656e20746f70206c696d69742e6d617850726f666974526f756c657474652063616e74206265206772656174207468656e20746f70206c696d69742e42657420646f65736e2774206576656e20636f76657220686f75736520656467652e6d617850726f666974526f756c65747465206c696d69742076696f6c6174696f6e2e4265742073686f756c6420626520696e20616e2027616374697665272073746174654265742073686f756c6420626520696e20612027636c65616e272073746174652e736574746c6542657420696e207468652073616d6520626c6f636b20617320706c6163654265742c206f72206265666f72652e416d6f756e742073686f756c642062652077697468696e2072616e67652e000016ea4dcfd06c1efb1dd2edf3c766c9a9b9c1d73cbd8ddf4359bd3961712299504f6e6c7943726f7570696572206d6574686f64732063616c6c6564206279206e6f6e2d63726f75706965722e496e63726561736520616d6f756e74206c6172676572207468616e2062616c616e63652e416c6c20626574732073686f756c642062652070726f6365737365642028736574746c6564206f7220726566756e64656429206265666f72652073656c662d64657374727563742e546f74616c206265747320616d6f756e742073686f756c64206265204c544520616d6f756e744f6e6c794f776e6572206d6574686f64732063616c6c6564206279206e6f6e2d6f776e65722e6d617850726f6669742063616e74206265206772656174207468656e20746f70206c696d69742e48696768206d6f64756c6f2072616e67652c206265744d61736b206c6172676572207468616e206d6f64756c6f2e426c6f636b686173682063616e277420626520717565726965642062792045564d2e4d6f6465726174696f6e206d6574686f64732063616c6c6564206279206e6f6e2d6d6f64657261746f722ea165627a7a72305820bc9d43aef8f6c18e47787228d2f7107318a36b538819d2381f37f3055bc2f6670029
Swarm Source
bzzr://bc9d43aef8f6c18e47787228d2f7107318a36b538819d2381f37f3055bc2f667
Loading...
Loading
Loading...
Loading
OVERVIEW
Xether is a gambling ecosystem, which makes a difference by caring about its users.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.