Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.07 ETH
Eth Value
$226.71 (@ $3,238.74/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,841 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Clover Wit... | 20371692 | 4 days ago | IN | 0 ETH | 0.00147119 | ||||
Claim Clover Wit... | 20247946 | 21 days ago | IN | 0 ETH | 0.00139631 | ||||
Claim Clover Wit... | 20196949 | 28 days ago | IN | 0 ETH | 0.00067195 | ||||
Claim Clover Wit... | 19714171 | 96 days ago | IN | 0 ETH | 0.00250777 | ||||
Claim Clover Wit... | 19714154 | 96 days ago | IN | 0 ETH | 0.00235784 | ||||
Claim Clover Wit... | 19714051 | 96 days ago | IN | 0 ETH | 0.00242009 | ||||
Claim Clover Wit... | 19664501 | 103 days ago | IN | 0 ETH | 0.00015806 | ||||
Claim Clover Wit... | 19652482 | 104 days ago | IN | 0.005 ETH | 0.00382673 | ||||
Claim Clover Wit... | 19652310 | 104 days ago | IN | 0.005 ETH | 0.00494592 | ||||
Claim Clover Wit... | 19625137 | 108 days ago | IN | 0.005 ETH | 0.00566264 | ||||
Claim Clover Wit... | 19625135 | 108 days ago | IN | 0.005 ETH | 0.00641156 | ||||
Claim Clover Wit... | 19625135 | 108 days ago | IN | 0.005 ETH | 0.00623697 | ||||
Claim Clover Wit... | 19370432 | 144 days ago | IN | 0 ETH | 0.00346256 | ||||
Claim Clover Wit... | 19370388 | 144 days ago | IN | 0.005 ETH | 0.00392709 | ||||
Claim Clover Wit... | 19139111 | 176 days ago | IN | 0 ETH | 0.00871495 | ||||
Claim Clover Wit... | 19139019 | 176 days ago | IN | 0 ETH | 0.00681802 | ||||
Claim Clover Wit... | 19138976 | 176 days ago | IN | 0.005 ETH | 0.00721358 | ||||
Claim Clover Wit... | 19138821 | 176 days ago | IN | 0.005 ETH | 0.00570372 | ||||
Claim Clover Wit... | 18979949 | 199 days ago | IN | 0.005 ETH | 0.0011172 | ||||
Claim Clover Wit... | 18179616 | 311 days ago | IN | 0 ETH | 0.00107701 | ||||
Claim Clover Wit... | 18179598 | 311 days ago | IN | 0 ETH | 0.00074764 | ||||
Claim Clover Wit... | 18144161 | 316 days ago | IN | 0.005 ETH | 0.00448782 | ||||
Claim Clover Wit... | 18116646 | 320 days ago | IN | 0.005 ETH | 0.00406663 | ||||
Claim Clover Wit... | 18114529 | 320 days ago | IN | 0.005 ETH | 0.00937021 | ||||
Claim Clover Wit... | 18058924 | 328 days ago | IN | 0.01 ETH | 0.00404674 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
19652482 | 104 days ago | 0.005 ETH | ||||
19652310 | 104 days ago | 0.005 ETH | ||||
19625137 | 108 days ago | 0.005 ETH | ||||
19625135 | 108 days ago | 0.005 ETH | ||||
19625135 | 108 days ago | 0.005 ETH | ||||
19138976 | 176 days ago | 0.005 ETH | ||||
19138821 | 176 days ago | 0.005 ETH | ||||
18144161 | 316 days ago | 0.005 ETH | ||||
18116646 | 320 days ago | 0.005 ETH | ||||
18114529 | 320 days ago | 0.005 ETH | ||||
18058924 | 328 days ago | 0.01 ETH | ||||
17813267 | 362 days ago | 0.01 ETH | ||||
17709901 | 377 days ago | 0.005 ETH | ||||
17601700 | 392 days ago | 0.005 ETH | ||||
16863713 | 496 days ago | 0.005 ETH | ||||
16856664 | 497 days ago | 0.005 ETH | ||||
16856650 | 497 days ago | 0.005 ETH | ||||
16856634 | 497 days ago | 0.005 ETH | ||||
16812131 | 503 days ago | 0.005 ETH | ||||
16804885 | 504 days ago | 0.005 ETH | ||||
16800174 | 505 days ago | 0.005 ETH | ||||
16798092 | 505 days ago | 0.005 ETH | ||||
16794216 | 506 days ago | 0.005 ETH | ||||
16667497 | 523 days ago | 0.005 ETH | ||||
16656204 | 525 days ago | 0.005 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
CloversController
Compiler Version
v0.5.9+commit.e560f70d
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-10-16 */ // File: contracts/v5/Reversi.sol pragma solidity ^0.5.9; library Reversi { // event DebugBool(bool boolean); // event DebugBoard(bytes16 board); // event DebugUint(uint u); uint8 constant BLACK = 1; //0b01 //0x1 uint8 constant WHITE = 2; //0b10 //0x2 uint8 constant EMPTY = 3; //0b11 //0x3 struct Game { bool error; bool complete; bool symmetrical; bool RotSym; bool Y0Sym; bool X0Sym; bool XYSym; bool XnYSym; bytes16 board; bytes28 first32Moves; bytes28 lastMoves; uint8 currentPlayer; uint8 moveKey; uint8 blackScore; uint8 whiteScore; // string msg; } function isValid (bytes28[2] memory moves) public pure returns (bool) { Game memory game = playGame(moves); if (game.error) { return false; } else if (!game.complete) { return false; } else { return true; } } function getGame (bytes28[2] memory moves) public pure returns ( bool error, bool complete, bool symmetrical, bytes16 board, uint8 currentPlayer, uint8 moveKey // , string memory msg ) { Game memory game = playGame(moves); return ( game.error, game.complete, game.symmetrical, game.board, game.currentPlayer, game.moveKey // , game.msg ); } function showColors () public pure returns(uint8, uint8, uint8) { return (EMPTY, BLACK, WHITE); } function emptyBoard() public pure returns (bytes16) { // game.board = bytes16(10625432672847758622720); // completely empty board return bytes16(uint128(340282366920938456379662753540715053055)); // empty board except for center pieces } function playGame (bytes28[2] memory moves) internal pure returns (Game memory) { Game memory game; game.first32Moves = moves[0]; game.lastMoves = moves[1]; game.moveKey = 0; game.blackScore = 2; game.whiteScore = 2; game.error = false; game.complete = false; game.currentPlayer = BLACK; game.board = emptyBoard(); bool skip; uint8 move; uint8 col; uint8 row; uint8 i; bytes28 currentMoves; for (i = 0; i < 60 && !skip; i++) { currentMoves = game.moveKey < 32 ? game.first32Moves : game.lastMoves; move = readMove(currentMoves, game.moveKey % 32, 32); (col, row) = convertMove(move); skip = !validMove(move); if (i == 0 && (col != 2 || row != 3)) { skip = true; // this is to force the first move to always be C4 to avoid repeatable boards via mirroring translations game.error = true; } if (!skip && col < 8 && row < 8 && col >= 0 && row >= 0) { // game.msg = "make a move"; game = makeMove(game, col, row); game.moveKey = game.moveKey + 1; if (game.error) { if (!validMoveRemains(game)) { // player has no valid moves and must pass game.error = false; if (game.currentPlayer == BLACK) { game.currentPlayer = WHITE; } else { game.currentPlayer = BLACK; } game = makeMove(game, col, row); if (game.error) { game.error = true; skip = true; } } } } } if (!game.error) { game = isComplete(game); game = isSymmetrical(game); } return game; } function validMoveRemains (Game memory game) internal pure returns (bool) { bool validMovesRemain = false; bytes16 board = game.board; uint8 i; for (i = 0; i < 64 && !validMovesRemain; i++) { uint8[2] memory move = [((i - (i % 8)) / 8), (i % 8)]; uint8 tile = returnTile(game.board, move[0], move[1]); if (tile == EMPTY) { game.error = false; game.board = board; game = makeMove(game, move[0], move[1]); if (!game.error) { validMovesRemain = true; } } } return validMovesRemain; } function makeMove (Game memory game, uint8 col, uint8 row) internal pure returns (Game memory) { // square is already occupied if (returnTile(game.board, col, row) != EMPTY){ game.error = true; // game.msg = "Invalid Game (square is already occupied)"; return game; } int8[2][8] memory possibleDirections; uint8 possibleDirectionsLength; (possibleDirections, possibleDirectionsLength) = getPossibleDirections(game, col, row); // no valid directions if (possibleDirectionsLength == 0) { game.error = true; // game.msg = "Invalid Game (doesnt border other tiles)"; return game; } bytes28 newFlips; uint8 newFlipsLength; uint8 newFlipCol; uint8 newFlipRow; uint8 j; bool valid = false; for (uint8 i = 0; i < possibleDirectionsLength; i++) { delete newFlips; delete newFlipsLength; (newFlips, newFlipsLength) = traverseDirection(game, possibleDirections[i], col, row); for (j = 0; j < newFlipsLength; j++) { if (!valid) valid = true; (newFlipCol, newFlipRow) = convertMove(readMove(newFlips, j, newFlipsLength)); game.board = turnTile(game.board, game.currentPlayer, newFlipCol, newFlipRow); if (game.currentPlayer == WHITE) { game.whiteScore += 1; game.blackScore -= 1; } else { game.whiteScore -= 1; game.blackScore += 1; } } } //no valid flips in directions if (valid) { game.board = turnTile(game.board, game.currentPlayer, col, row); if (game.currentPlayer == WHITE) { game.whiteScore += 1; } else { game.blackScore += 1; } } else { game.error = true; // game.msg = "Invalid Game (doesnt flip any other tiles)"; return game; } // switch players if (game.currentPlayer == BLACK) { game.currentPlayer = WHITE; } else { game.currentPlayer = BLACK; } return game; } function getPossibleDirections (Game memory game, uint8 col, uint8 row) internal pure returns(int8[2][8] memory, uint8){ int8[2][8] memory possibleDirections; uint8 possibleDirectionsLength = 0; int8[2][8] memory dirs = [ [int8(-1), int8(0)], // W [int8(-1), int8(1)], // SW [int8(0), int8(1)], // S [int8(1), int8(1)], // SE [int8(1), int8(0)], // E [int8(1), int8(-1)], // NE [int8(0), int8(-1)], // N [int8(-1), int8(-1)] // NW ]; int8 focusedRowPos; int8 focusedColPos; int8[2] memory dir; uint8 testSquare; for (uint8 i = 0; i < 8; i++) { dir = dirs[i]; focusedColPos = int8(col) + dir[0]; focusedRowPos = int8(row) + dir[1]; // if tile is off the board it is not a valid move if (!(focusedRowPos > 7 || focusedRowPos < 0 || focusedColPos > 7 || focusedColPos < 0)) { testSquare = returnTile(game.board, uint8(focusedColPos), uint8(focusedRowPos)); // if the surrounding tile is current color or no color it can"t be part of a capture if (testSquare != game.currentPlayer) { if (testSquare != EMPTY) { possibleDirections[possibleDirectionsLength] = dir; possibleDirectionsLength++; } } } } return (possibleDirections, possibleDirectionsLength); } function traverseDirection (Game memory game, int8[2] memory dir, uint8 col, uint8 row) internal pure returns(bytes28, uint8) { bytes28 potentialFlips; uint8 potentialFlipsLength = 0; uint8 opponentColor; if (game.currentPlayer == BLACK) { opponentColor = WHITE; } else { opponentColor = BLACK; } // take one step at a time in this direction // ignoring the first step look for the same color as your tile bool skip = false; int8 testCol; int8 testRow; uint8 tile; for (uint8 j = 1; j < 9; j++) { if (!skip) { testCol = (int8(j) * dir[0]) + int8(col); testRow = (int8(j) * dir[1]) + int8(row); // ran off the board before hitting your own tile if (testCol > 7 || testCol < 0 || testRow > 7 || testRow < 0) { delete potentialFlips; potentialFlipsLength = 0; skip = true; } else{ tile = returnTile(game.board, uint8(testCol), uint8(testRow)); if (tile == opponentColor) { // if tile is opposite color it could be flipped, so add to potential flip array (potentialFlips, potentialFlipsLength) = addMove(potentialFlips, potentialFlipsLength, uint8(testCol), uint8(testRow)); } else if (tile == game.currentPlayer && j > 1) { // hit current players tile which means capture is complete skip = true; } else { // either hit current players own color before hitting an opponent"s // or hit an empty space delete potentialFlips; delete potentialFlipsLength; skip = true; } } } } return (potentialFlips, potentialFlipsLength); } function isComplete (Game memory game) internal pure returns (Game memory) { if (game.moveKey == 60) { // game.msg = "good game"; game.complete = true; return game; } else { uint8 i; bool validMovesRemains = false; bytes16 board = game.board; for (i = 0; i < 64 && !validMovesRemains; i++) { uint8[2] memory move = [((i - (i % 8)) / 8), (i % 8)]; uint8 tile = returnTile(game.board, move[0], move[1]); if (tile == EMPTY) { game.currentPlayer = BLACK; game.error = false; game.board = board; game = makeMove(game, move[0], move[1]); if (!game.error) { validMovesRemains = true; } game.currentPlayer = WHITE; game.error = false; game.board = board; game = makeMove(game, move[0], move[1]); if (!game.error) { validMovesRemains = true; } } } if (validMovesRemains) { game.error = true; // game.msg = "Invalid Game (moves still available)"; } else { // game.msg = "good game"; game.complete = true; game.error = false; } } return game; } function isSymmetrical (Game memory game) internal pure returns (Game memory) { bool RotSym = true; bool Y0Sym = true; bool X0Sym = true; bool XYSym = true; bool XnYSym = true; for (uint8 i = 0; i < 8 && (RotSym || Y0Sym || X0Sym || XYSym || XnYSym); i++) { for (uint8 j = 0; j < 8 && (RotSym || Y0Sym || X0Sym || XYSym || XnYSym); j++) { // rotational symmetry if (returnBytes(game.board, i, j) != returnBytes(game.board, (7 - i), (7 - j))) { RotSym = false; } // symmetry on y = 0 if (returnBytes(game.board, i, j) != returnBytes(game.board, i, (7 - j))) { Y0Sym = false; } // symmetry on x = 0 if (returnBytes(game.board, i, j) != returnBytes(game.board, (7 - i), j)) { X0Sym = false; } // symmetry on x = y if (returnBytes(game.board, i, j) != returnBytes(game.board, (7 - j), (7 - i))) { XYSym = false; } // symmetry on x = -y if (returnBytes(game.board, i, j) != returnBytes(game.board, j, i)) { XnYSym = false; } } } if (RotSym || Y0Sym || X0Sym || XYSym || XnYSym) { game.symmetrical = true; game.RotSym = RotSym; game.Y0Sym = Y0Sym; game.X0Sym = X0Sym; game.XYSym = XYSym; game.XnYSym = XnYSym; } return game; } // Utilities function returnSymmetricals (bool RotSym, bool Y0Sym, bool X0Sym, bool XYSym, bool XnYSym) public pure returns (uint256) { uint256 symmetries = 0; if(RotSym) symmetries |= 16; if(Y0Sym) symmetries |= 8; if(X0Sym) symmetries |= 4; if(XYSym) symmetries |= 2; if(XnYSym) symmetries |= 1; return symmetries; } function returnBytes (bytes16 board, uint8 col, uint8 row) internal pure returns (bytes16) { uint128 push = posToPush(col, row); return (board >> push) & bytes16(uint128(3)); } function turnTile (bytes16 board, uint8 color, uint8 col, uint8 row) internal pure returns (bytes16){ if (col > 7) revert("can't turn tile outside of board col"); if (row > 7) revert("can't turn tile outside of board row"); uint128 push = posToPush(col, row); bytes16 mask = bytes16(uint128(3)) << push;// 0b00000011 (ones) board = ((board ^ mask) & board); return board | (bytes16(uint128(color)) << push); } function returnTile (bytes16 board, uint8 col, uint8 row) public pure returns (uint8){ uint128 push = posToPush(col, row); bytes16 tile = (board >> push ) & bytes16(uint128(3)); return uint8(uint128(tile)); // returns 2 } function posToPush (uint8 col, uint8 row) internal pure returns (uint128){ return uint128(((64) - ((8 * col) + row + 1)) * 2); } function readMove (bytes28 moveSequence, uint8 moveKey, uint8 movesLength) public pure returns(uint8) { bytes28 mask = bytes28(uint224(127)); uint8 push = (movesLength * 7) - (moveKey * 7) - 7; return uint8(uint224((moveSequence >> push) & mask)); } function addMove (bytes28 moveSequence, uint8 movesLength, uint8 col, uint8 row) internal pure returns (bytes28, uint8) { uint256 foo = col + (row * 8) + 64; bytes28 move = bytes28(uint224(foo)); moveSequence = moveSequence << 7; moveSequence = moveSequence | move; movesLength++; return (moveSequence, movesLength); } function validMove (uint8 move) internal pure returns(bool) { return move >= 64; } function convertMove (uint8 move) public pure returns(uint8, uint8) { move = move - 64; uint8 col = move % 8; uint8 row = (move - col) / 8; return (col, row); } } // File: contracts/v5/IClovers.sol pragma solidity ^0.5.9; contract IClovers { function ownerOf(uint256 _tokenId) public view returns (address _owner); function setCloverMoves(uint256 _tokenId, bytes28[2] memory moves) public; function getCloverMoves(uint256 _tokenId) public view returns (bytes28[2] memory); function getAllSymmetries() public view returns (uint256, uint256, uint256, uint256, uint256, uint256); function exists(uint256 _tokenId) public view returns (bool _exists); function getBlockMinted(uint256 _tokenId) public view returns (uint256); function setBlockMinted(uint256 _tokenId, uint256 value) public; function setKeep(uint256 _tokenId, bool value) public; function setSymmetries(uint256 _tokenId, uint256 _symmetries) public; function setReward(uint256 _tokenId, uint256 _amount) public; function mint (address _to, uint256 _tokenId) public; function getReward(uint256 _tokenId) public view returns (uint256); function getKeep(uint256 _tokenId) public view returns (bool); function transferFrom(address _from, address _to, uint256 _tokenId) public; function moveEth(address _to, uint256 _amount) public; function getSymmetries(uint256 _tokenId) public view returns (uint256); function deleteClover(uint256 _tokenId) public; function setAllSymmetries(uint256 _totalSymmetries, uint256 RotSym, uint256 Y0Sym, uint256 X0Sym, uint256 XYSym, uint256 XnYSym) public; } // File: contracts/v5/IClubToken.sol pragma solidity ^0.5.9; contract IClubToken { function balanceOf(address _owner) public view returns (uint256); function burn(address _burner, uint256 _value) public; function mint(address _to, uint256 _amount) public returns (bool); } // File: contracts/v5/IClubTokenController.sol pragma solidity ^0.5.9; contract IClubTokenController { function buy(address buyer) public payable returns(bool); } // File: contracts/v5/ISimpleCloversMarket.sol pragma solidity ^0.5.9; contract ISimpleCloversMarket { function sell(uint256 _tokenId, uint256 price) public; } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } // File: @openzeppelin/contracts/ownership/Ownable.sol pragma solidity ^0.5.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be aplied to your functions to restrict their use to * the owner. */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * > Note: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/cryptography/ECDSA.sol pragma solidity ^0.5.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * (.note) This call _does not revert_ if the signature is invalid, or * if the signer is otherwise unable to be retrieved. In those scenarios, * the zero address is returned. * * (.warning) `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise) * be too long), and then calling `toEthSignedMessageHash` on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { return (address(0)); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return address(0); } if (v != 27 && v != 28) { return address(0); } // If the signature is valid (and not malleable), return the signer address return ecrecover(hash, v, r, s); } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * [`eth_sign`](https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign) * JSON-RPC method. * * See `recover`. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // File: contracts/v5/CloversController.sol pragma solidity ^0.5.9; /** * The CloversController is a replaceable endpoint for minting and unminting Clovers.sol and ClubToken.sol */ contract CloversController is Ownable { event cloverCommitted(bytes32 movesHash, address owner); event cloverClaimed(uint256 tokenId, bytes28[2] moves, address sender, address recepient, uint reward, uint256 symmetries, bool keep); event cloverChallenged(uint256 tokenId, bytes28[2] moves, address owner, address challenger); using SafeMath for uint256; using ECDSA for bytes32; bool public paused; address public oracle; IClovers public clovers; IClubToken public clubToken; IClubTokenController public clubTokenController; ISimpleCloversMarket public simpleCloversMarket; // Reversi public reversi; uint256 public gasLastUpdated_fastGasPrice_averageGasPrice_safeLowGasPrice; uint256 public gasBlockMargin = 240; // ~1 hour at 15 second blocks uint256 public basePrice; uint256 public priceMultiplier; uint256 public payMultiplier; mapping(bytes32=>address) public commits; modifier notPaused() { require(!paused, "Must not be paused"); _; } constructor( IClovers _clovers, IClubToken _clubToken, IClubTokenController _clubTokenController // Reversi _reversi ) public { clovers = _clovers; clubToken = _clubToken; clubTokenController = _clubTokenController; // reversi = _reversi; paused = true; } function getMovesHash(bytes28[2] memory moves) public pure returns (bytes32) { return keccak256(abi.encodePacked(moves)); } function getMovesHashWithRecepient(bytes32 movesHash, address recepient) public pure returns (bytes32) { return keccak256(abi.encodePacked(movesHash, recepient)); } /** * @dev Checks whether the game is valid. * @param moves The moves needed to play validate the game. * @return A boolean representing whether or not the game is valid. */ function isValid(bytes28[2] memory moves) public pure returns (bool) { Reversi.Game memory game = Reversi.playGame(moves); return isValidGame(game.error, game.complete); } /** * @dev Checks whether the game is valid. * @param error The pre-played game error * @param complete The pre-played game complete boolean * @return A boolean representing whether or not the game is valid. */ function isValidGame(bool error, bool complete) public pure returns (bool) { if (error || !complete) { return false; } else { return true; } } function getGame (bytes28[2] memory moves) public pure returns (bool error, bool complete, bool symmetrical, bytes16 board, uint8 currentPlayer, uint8 moveKey) { // return Reversi.getGame(moves); Reversi.Game memory game = Reversi.playGame(moves); return ( game.error, game.complete, game.symmetrical, game.board, game.currentPlayer, game.moveKey // game.msg ); } /** * @dev Calculates the reward of the board. * @param symmetries symmetries saved as a uint256 value like 00010101 where bits represent symmetry types. * @return A uint256 representing the reward that would be returned for claiming the board. */ function calculateReward(uint256 symmetries) public view returns (uint256) { uint256 Symmetricals; uint256 RotSym; uint256 Y0Sym; uint256 X0Sym; uint256 XYSym; uint256 XnYSym; (Symmetricals, RotSym, Y0Sym, X0Sym, XYSym, XnYSym) = clovers.getAllSymmetries(); uint256 base = 0; if (symmetries >> 4 & 1 == 1) base = base.add(payMultiplier.mul(Symmetricals + 1).div(RotSym + 1)); if (symmetries >> 3 & 1 == 1) base = base.add(payMultiplier.mul(Symmetricals + 1).div(Y0Sym + 1)); if (symmetries >> 2 & 1 == 1) base = base.add(payMultiplier.mul(Symmetricals + 1).div(X0Sym + 1)); if (symmetries >> 1 & 1 == 1) base = base.add(payMultiplier.mul(Symmetricals + 1).div(XYSym + 1)); if (symmetries & 1 == 1) base = base.add(payMultiplier.mul(Symmetricals + 1).div(XnYSym + 1)); return base; } function getPrice(uint256 symmetries) public view returns(uint256) { return basePrice.add(calculateReward(symmetries)); } // In order to prevent commit reveal griefing the first commit is a combined hash of the moves and the recepient. // In order to use the same commit mapping, we mark this hash simply as address(1) so it is no longer the equivalent of address(0) function claimCloverSecurelyPartOne(bytes32 movesHashWithRecepient) public { commits[movesHashWithRecepient] = address(1); commits[keccak256(abi.encodePacked(msg.sender))] = address(block.number); } // Once a commit has been made to guarantee the move hash is associated with the recepient we can make a commit on the hash of the moves themselves // If we were to make a claim on the moves in plaintext, the transaction could be front run on the claimCloverWithVerification or the claimCloverWithSignature function claimCloverSecurelyPartTwo(bytes32 movesHash) public { require(uint256(commits[keccak256(abi.encodePacked(msg.sender))]) < block.number, "Can't combine step1 with step2"); bytes32 commitHash = getMovesHashWithRecepient(movesHash, msg.sender); address commitOfMovesHashWithRecepient = commits[commitHash]; require( address(commitOfMovesHashWithRecepient) == address(1), "Invalid commitOfMovesHashWithRecepient, please do claimCloverSecurelyPartOne" ); delete(commits[commitHash]); commits[movesHash] = msg.sender; } function claimCloverWithVerification(bytes28[2] memory moves, bool keep) public payable returns (bool) { bytes32 movesHash = getMovesHash(moves); address committedRecepient = commits[movesHash]; require(committedRecepient == address(0) || committedRecepient == msg.sender, "Invalid committedRecepient"); Reversi.Game memory game = Reversi.playGame(moves); require(isValidGame(game.error, game.complete), "Invalid game"); uint256 tokenId = convertBytes16ToUint(game.board); require(!clovers.exists(tokenId), "Clover already exists"); uint256 symmetries = Reversi.returnSymmetricals(game.RotSym, game.Y0Sym, game.X0Sym, game.XYSym, game.XnYSym); require(_claimClover(tokenId, moves, symmetries, msg.sender, keep), "Claim must succeed"); delete(commits[movesHash]); return true; } /** * @dev Claim the Clover without a commit or reveal. Payable so you can buy tokens if needed. * @param tokenId The board that results from the moves. * @param moves The moves that make up the Clover reversi game. * @param symmetries symmetries saved as a uint256 value like 00010101 where bits represent symmetry * @param keep symmetries saved as a uint256 value like 00010101 where bits represent symmetry * @param signature symmetries saved as a uint256 value like 00010101 where bits represent symmetry * types. * @return A boolean representing whether or not the claim was successful. */ function claimCloverWithSignature(uint256 tokenId, bytes28[2] memory moves, uint256 symmetries, bool keep, bytes memory signature) public payable notPaused returns (bool) { address committedRecepient = commits[getMovesHash(moves)]; require(committedRecepient == address(0) || committedRecepient == msg.sender, "Invalid committedRecepient"); require(!clovers.exists(tokenId), "Clover already exists"); require(checkSignature(tokenId, moves, symmetries, keep, msg.sender, signature, oracle), "Invalid Signature"); require(_claimClover(tokenId, moves, symmetries, msg.sender, keep), "Claim must succeed"); return true; } function _claimClover(uint256 tokenId, bytes28[2] memory moves, uint256 symmetries, address recepient, bool keep) internal returns (bool) { clovers.setCloverMoves(tokenId, moves); clovers.setKeep(tokenId, keep); uint256 reward; if (symmetries > 0) { clovers.setSymmetries(tokenId, symmetries); reward = calculateReward(symmetries); clovers.setReward(tokenId, reward); addSymmetries(symmetries); } uint256 price = basePrice.add(reward); if (keep && price > 0) { // If the user decides to keep the Clover, they must // pay for it in club tokens according to the reward price. if (clubToken.balanceOf(msg.sender) < price) { clubTokenController.buy.value(msg.value)(msg.sender); } clubToken.burn(msg.sender, price); } if (keep) { // If the user decided to keep the Clover clovers.mint(recepient, tokenId); } else { // If the user decided not to keep the Clover, they will // receive the reward price in club tokens, and the clover will // go for sale by the contract. clovers.mint(address(clovers), tokenId); simpleCloversMarket.sell(tokenId, basePrice.add(reward.mul(priceMultiplier))); if (reward > 0) { require(clubToken.mint(recepient, reward), "mint must succeed"); } } emit cloverClaimed(tokenId, moves, msg.sender, recepient, reward, symmetries, keep); return true; } /** * @dev Convert a bytes16 board into a uint256. * @param _board The board being converted. * @return number the uint256 being converted. */ function convertBytes16ToUint(bytes16 _board) public pure returns(uint256 number) { for(uint i=0;i<_board.length;i++){ number = number + uint(uint8(_board[i]))*(2**(8*(_board.length-(i+1)))); } } /** * @dev Challenge a Clover for being invalid. * @param tokenId The board being challenged. * @return A boolean representing whether or not the challenge was successful. */ function challengeClover(uint256 tokenId) public returns (bool) { require(clovers.exists(tokenId), "Clover must exist to be challenged"); bool valid = true; bytes28[2] memory moves = clovers.getCloverMoves(tokenId); address payable _owner = address(uint160(owner())); if (msg.sender != _owner && msg.sender != oracle) { Reversi.Game memory game = Reversi.playGame(moves); if(convertBytes16ToUint(game.board) != tokenId) { valid = false; } if(valid && isValidGame(game.error, game.complete)) { uint256 symmetries = clovers.getSymmetries(tokenId); valid = (symmetries >> 4 & 1) > 0 == game.RotSym ? valid : false; valid = (symmetries >> 3 & 1) > 0 == game.Y0Sym ? valid : false; valid = (symmetries >> 2 & 1) > 0 == game.X0Sym ? valid : false; valid = (symmetries >> 1 & 1) > 0 == game.XYSym ? valid : false; valid = (symmetries & 1) > 0 == game.XnYSym ? valid : false; } else { valid = false; } require(!valid, "Must be invalid to challenge"); } removeSymmetries(tokenId); address committer = clovers.ownerOf(tokenId); emit cloverChallenged(tokenId, moves, committer, msg.sender); clovers.deleteClover(tokenId); return true; } function updateSalePrice(uint256 tokenId, uint256 _price) public onlyOwner { simpleCloversMarket.sell(tokenId, _price); } /** * @dev Moves clovers without explicit allow permission for use by simpleCloversMarket * in order to avoid double transaction (allow, transferFrom) * @param _from The current owner of the Clover * @param _to The future owner of the Clover * @param tokenId The Clover */ function transferFrom(address _from, address _to, uint256 tokenId) public { require(msg.sender == address(simpleCloversMarket), "transferFrom can only be done by simpleCloversMarket"); clovers.transferFrom(_from, _to, tokenId); } /** * @dev Updates pause boolean. * @param _paused The new puased boolean. */ function updatePaused(bool _paused) public onlyOwner { paused = _paused; } /** * @dev Updates oracle Address. * @param _oracle The new oracle Address. */ function updateOracle(address _oracle) public onlyOwner { oracle = _oracle; } /** * @dev Updates simpleCloversMarket Address. * @param _simpleCloversMarket The new simpleCloversMarket address. */ function updateSimpleCloversMarket(ISimpleCloversMarket _simpleCloversMarket) public onlyOwner { simpleCloversMarket = _simpleCloversMarket; } /** * @dev Updates clubTokenController Address. * @param _clubTokenController The new clubTokenController address. */ function updateClubTokenController(IClubTokenController _clubTokenController) public onlyOwner { clubTokenController = _clubTokenController; } /** * @dev Updates the pay multiplier, used to calculate token reward. * @param _payMultiplier The uint256 value of pay multiplier. */ function updatePayMultipier(uint256 _payMultiplier) public onlyOwner { payMultiplier = _payMultiplier; } /** * @dev Updates the price multiplier, used to calculate the clover price (multiplied by the original reward). * @param _priceMultiplier The uint256 value of the price multiplier. */ function updatePriceMultipier(uint256 _priceMultiplier) public onlyOwner { priceMultiplier = _priceMultiplier; } /** * @dev Updates the base price, used to calculate the clover cost. * @param _basePrice The uint256 value of the base price. */ function updateBasePrice(uint256 _basePrice) public onlyOwner { basePrice = _basePrice; } /** * @dev Adds new tallys of the totals numbers of clover symmetries. * @param symmetries The symmetries which needs to be added. */ function addSymmetries(uint256 symmetries) private { uint256 Symmetricals; uint256 RotSym; uint256 Y0Sym; uint256 X0Sym; uint256 XYSym; uint256 XnYSym; (Symmetricals, RotSym, Y0Sym, X0Sym, XYSym, XnYSym) = clovers.getAllSymmetries(); Symmetricals = Symmetricals.add(symmetries > 0 ? 1 : 0); RotSym = RotSym.add(uint256(symmetries >> 4 & 1)); Y0Sym = Y0Sym.add(uint256(symmetries >> 3 & 1)); X0Sym = X0Sym.add(uint256(symmetries >> 2 & 1)); XYSym = XYSym.add(uint256(symmetries >> 1 & 1)); XnYSym = XnYSym.add(uint256(symmetries & 1)); clovers.setAllSymmetries(Symmetricals, RotSym, Y0Sym, X0Sym, XYSym, XnYSym); } /** * @dev Remove false tallys of the totals numbers of clover symmetries. * @param tokenId The token which needs to be examined. */ function removeSymmetries(uint256 tokenId) private { uint256 Symmetricals; uint256 RotSym; uint256 Y0Sym; uint256 X0Sym; uint256 XYSym; uint256 XnYSym; (Symmetricals, RotSym, Y0Sym, X0Sym, XYSym, XnYSym) = clovers.getAllSymmetries(); uint256 symmetries = clovers.getSymmetries(tokenId); Symmetricals = Symmetricals.sub(symmetries > 0 ? 1 : 0); RotSym = RotSym.sub(uint256(symmetries >> 4 & 1)); Y0Sym = Y0Sym.sub(uint256(symmetries >> 3 & 1)); X0Sym = X0Sym.sub(uint256(symmetries >> 2 & 1)); XYSym = XYSym.sub(uint256(symmetries >> 1 & 1)); XnYSym = XnYSym.sub(uint256(symmetries & 1)); clovers.setAllSymmetries(Symmetricals, RotSym, Y0Sym, X0Sym, XYSym, XnYSym); } function checkSignature( uint256 tokenId, bytes28[2] memory moves, uint256 symmetries, bool keep, address recepient, bytes memory signature, address signer ) public pure returns (bool) { bytes32 hash = toEthSignedMessageHash(getHash(tokenId, moves, symmetries, keep, recepient)); address result = recover(hash, signature); return (result != address(0) && result == signer); } function getHash(uint256 tokenId, bytes28[2] memory moves, uint256 symmetries, bool keep, address recepient) public pure returns (bytes32) { return keccak256(abi.encodePacked(tokenId, moves, symmetries, keep, recepient)); } function recover(bytes32 hash, bytes memory signature) public pure returns (address) { return hash.recover(signature); } function toEthSignedMessageHash(bytes32 hash) public pure returns (bytes32) { return hash.toEthSignedMessageHash(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_paused","type":"bool"}],"name":"updatePaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"moves","type":"bytes28[2]"}],"name":"getGame","outputs":[{"name":"error","type":"bool"},{"name":"complete","type":"bool"},{"name":"symmetrical","type":"bool"},{"name":"board","type":"bytes16"},{"name":"currentPlayer","type":"uint8"},{"name":"moveKey","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"clovers","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"signature","type":"bytes"}],"name":"recover","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"moves","type":"bytes28[2]"},{"name":"keep","type":"bool"}],"name":"claimCloverWithVerification","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_oracle","type":"address"}],"name":"updateOracle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"moves","type":"bytes28[2]"}],"name":"getMovesHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"error","type":"bool"},{"name":"complete","type":"bool"}],"name":"isValidGame","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"moves","type":"bytes28[2]"}],"name":"isValid","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"payMultiplier","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"commits","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"updateSalePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"moves","type":"bytes28[2]"},{"name":"symmetries","type":"uint256"},{"name":"keep","type":"bool"},{"name":"recepient","type":"address"}],"name":"getHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"movesHashWithRecepient","type":"bytes32"}],"name":"claimCloverSecurelyPartOne","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"moves","type":"bytes28[2]"},{"name":"symmetries","type":"uint256"},{"name":"keep","type":"bool"},{"name":"recepient","type":"address"},{"name":"signature","type":"bytes"},{"name":"signer","type":"address"}],"name":"checkSignature","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"challengeClover","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gasLastUpdated_fastGasPrice_averageGasPrice_safeLowGasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"oracle","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_payMultiplier","type":"uint256"}],"name":"updatePayMultipier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"}],"name":"toEthSignedMessageHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_clubTokenController","type":"address"}],"name":"updateClubTokenController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"simpleCloversMarket","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"},{"name":"moves","type":"bytes28[2]"},{"name":"symmetries","type":"uint256"},{"name":"keep","type":"bool"},{"name":"signature","type":"bytes"}],"name":"claimCloverWithSignature","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"gasBlockMargin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_board","type":"bytes16"}],"name":"convertBytes16ToUint","outputs":[{"name":"number","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_priceMultiplier","type":"uint256"}],"name":"updatePriceMultipier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"clubTokenController","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"movesHash","type":"bytes32"}],"name":"claimCloverSecurelyPartTwo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"basePrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_simpleCloversMarket","type":"address"}],"name":"updateSimpleCloversMarket","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"symmetries","type":"uint256"}],"name":"calculateReward","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"priceMultiplier","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"clubToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"symmetries","type":"uint256"}],"name":"getPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"movesHash","type":"bytes32"},{"name":"recepient","type":"address"}],"name":"getMovesHashWithRecepient","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_basePrice","type":"uint256"}],"name":"updateBasePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_clovers","type":"address"},{"name":"_clubToken","type":"address"},{"name":"_clubTokenController","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"movesHash","type":"bytes32"},{"indexed":false,"name":"owner","type":"address"}],"name":"cloverCommitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"moves","type":"bytes28[2]"},{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"recepient","type":"address"},{"indexed":false,"name":"reward","type":"uint256"},{"indexed":false,"name":"symmetries","type":"uint256"},{"indexed":false,"name":"keep","type":"bool"}],"name":"cloverClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"moves","type":"bytes28[2]"},{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"challenger","type":"address"}],"name":"cloverChallenged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
608060405260f060075534801561001557600080fd5b5060405162004802380380620048028339818101604052606081101561003a57600080fd5b5080516020820151604092830151600080546001600160a01b031916331780825594519394929391926001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600280546001600160a01b039485166001600160a01b0319918216179091556003805493851693821693909317909255600480549190931691161790556000805460ff60a01b1916740100000000000000000000000000000000000000001790556146ff80620001036000396000f3fe6080604052600436106102d15760003560e01c80638a05aafa11610179578063a89b55da116100d6578063d50cb88b1161008a578063f1b4bce911610064578063f1b4bce914610c2d578063f2fde38b14610c66578063fd5baa8814610c99576102d1565b8063d50cb88b14610bd9578063d76bbd5214610bee578063e757223014610c03576102d1565b8063c7876ea4116100bb578063c7876ea414610b67578063d010ed7014610b7c578063d2d7231f14610baf576102d1565b8063a89b55da14610b28578063c434968414610b3d576102d1565b8063975e4b2a1161012d578063a069870611610112578063a069870614610aac578063a4a83ca614610ac1578063a7e901b014610afe576102d1565b8063975e4b2a146109af5780639a0d981e146109c4576102d1565b80638f32d59b1161015e5780638f32d59b1461093d578063918a15cf146109525780639564e1801461097c576102d1565b80638a05aafa146108fe5780638da5cb5b14610928576102d1565b80633afcba96116102325780636e1258e7116101e65780637b7db9fa116101c05780637b7db9fa146108aa5780637cce4656146108d45780637dc0d1d0146108e9576102d1565b80636e1258e71461075b5780636e88f21f14610785578063715018a614610895576102d1565b80634896672e116102175780634896672e146106a0578063580bdd8c146106d05780635c975abb14610746576102d1565b80633afcba96146106615780634788578114610676576102d1565b80631cb44dfc11610289578063225c35b21161026e578063225c35b21461059257806323b872dd146105c6578063271eff9414610609576102d1565b80631cb44dfc146104f55780631ce5145614610528576102d1565b80630d576bfa116102ba5780630d576bfa146103a957806319045a25146103da57806319faa73014610494576102d1565b806308cdc2a8146102d657806308d27c7f14610304575b600080fd5b3480156102e257600080fd5b50610302600480360360208110156102f957600080fd5b50351515610cc3565b005b34801561031057600080fd5b5061035c6004803603604081101561032757600080fd5b60408051808201825291830192918183019183906002908390839080828437600092019190915250919450610d669350505050565b6040805196151587529415156020870152921515858501526fffffffffffffffffffffffffffffffff19909116606085015260ff90811660808501521660a0830152519081900360c00190f35b3480156103b557600080fd5b506103be610db4565b604080516001600160a01b039092168252519081900360200190f35b3480156103e657600080fd5b506103be600480360360408110156103fd57600080fd5b8135919081019060408101602082013564010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610dc3945050505050565b6104e1600480360360608110156104aa57600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201919091525091945050503515159050610dde565b604080519115158252519081900360200190f35b34801561050157600080fd5b506103026004803603602081101561051857600080fd5b50356001600160a01b031661114a565b34801561053457600080fd5b506105806004803603604081101561054b57600080fd5b604080518082018252918301929181830191839060029083908390808284376000920191909152509194506111dd9350505050565b60408051918252519081900360200190f35b34801561059e57600080fd5b506104e1600480360360408110156105b557600080fd5b508035151590602001351515611233565b3480156105d257600080fd5b50610302600480360360608110156105e957600080fd5b506001600160a01b03813581169160208101359091169060400135611254565b34801561061557600080fd5b506104e16004803603604081101561062c57600080fd5b604080518082018252918301929181830191839060029083908390808284376000920191909152509194506113309350505050565b34801561066d57600080fd5b5061058061135e565b34801561068257600080fd5b506103be6004803603602081101561069957600080fd5b5035611364565b3480156106ac57600080fd5b50610302600480360360408110156106c357600080fd5b508035906020013561137f565b3480156106dc57600080fd5b50610580600480360360c08110156106f357600080fd5b6040805180820182528335939283019291606083019190602084019060029083908390808284376000920191909152509194505081359250506020810135151590604001356001600160a01b0316611461565b34801561075257600080fd5b506104e16114f6565b34801561076757600080fd5b506103026004803603602081101561077e57600080fd5b5035611517565b34801561079157600080fd5b506104e160048036036101008110156107a957600080fd5b604080518082018252833593928301929160608301919060208401906002908390839080828437600092019190915250919483359460208501351515946001600160a01b0360408201351694509192509060808101906060013564010000000081111561081557600080fd5b82018360208201111561082757600080fd5b8035906020019184600183028401116401000000008311171561084957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506115929050565b3480156108a157600080fd5b506103026115f1565b3480156108b657600080fd5b506104e1600480360360208110156108cd57600080fd5b50356116ac565b3480156108e057600080fd5b50610580611c00565b3480156108f557600080fd5b506103be611c06565b34801561090a57600080fd5b506103026004803603602081101561092157600080fd5b5035611c15565b34801561093457600080fd5b506103be611c73565b34801561094957600080fd5b506104e1611c82565b34801561095e57600080fd5b506105806004803603602081101561097557600080fd5b5035611c93565b34801561098857600080fd5b506103026004803603602081101561099f57600080fd5b50356001600160a01b0316611c9e565b3480156109bb57600080fd5b506103be611d31565b6104e1600480360360c08110156109da57600080fd5b604080518082018252833593928301929160608301919060208401906002908390839080828437600092019190915250919483359460208501351515949193509150606081019060400135640100000000811115610a3757600080fd5b820183602082011115610a4957600080fd5b80359060200191846001830284011164010000000083111715610a6b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d40945050505050565b348015610ab857600080fd5b50610580612005565b348015610acd57600080fd5b5061058060048036036020811015610ae457600080fd5b50356fffffffffffffffffffffffffffffffff191661200b565b348015610b0a57600080fd5b5061030260048036036020811015610b2157600080fd5b5035612049565b348015610b3457600080fd5b506103be6120a7565b348015610b4957600080fd5b5061030260048036036020811015610b6057600080fd5b50356120b6565b348015610b7357600080fd5b506105806121fa565b348015610b8857600080fd5b5061030260048036036020811015610b9f57600080fd5b50356001600160a01b0316612200565b348015610bbb57600080fd5b5061058060048036036020811015610bd257600080fd5b5035612293565b348015610be557600080fd5b5061058061246a565b348015610bfa57600080fd5b506103be612470565b348015610c0f57600080fd5b5061058060048036036020811015610c2657600080fd5b503561247f565b348015610c3957600080fd5b5061058060048036036040811015610c5057600080fd5b50803590602001356001600160a01b031661249c565b348015610c7257600080fd5b5061030260048036036020811015610c8957600080fd5b50356001600160a01b03166124ee565b348015610ca557600080fd5b5061030260048036036020811015610cbc57600080fd5b5035612553565b610ccb611c82565b610d1c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600080600080600080610d776144d1565b610d80886125b1565b80516020820151604083015161010084015161016085015161018090950151939d929c50909a509850919650945092505050565b6002546001600160a01b031681565b6000610dd5838363ffffffff6127d916565b90505b92915050565b600080610dea846111dd565b6000818152600b60205260409020549091506001600160a01b0316801580610e1a57506001600160a01b03811633145b610e6b576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420636f6d6d6974746564526563657069656e74000000000000604482015290519081900360640190fd5b610e736144d1565b610e7c866125b1565b9050610e9081600001518260200151611233565b610ee1576040805162461bcd60e51b815260206004820152600c60248201527f496e76616c69642067616d650000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610ef182610100015161200b565b600254604080517f4f558e790000000000000000000000000000000000000000000000000000000081526004810184905290519293506001600160a01b0390911691634f558e7991602480820192602092909190829003018186803b158015610f5957600080fd5b505afa158015610f6d573d6000803e3d6000fd5b505050506040513d6020811015610f8357600080fd5b505115610fd7576040805162461bcd60e51b815260206004820152601560248201527f436c6f76657220616c7265616479206578697374730000000000000000000000604482015290519081900360640190fd5b6060820151608083015160a084015160c085015160e0860151604080517fa250cc3400000000000000000000000000000000000000000000000000000000815295151560048701529315156024860152911515604485015215156064840152151560848301525160009173b03b3533420c154acb4298614566b391269ace689163a250cc349160a480820192602092909190829003018186803b15801561107d57600080fd5b505af4158015611091573d6000803e3d6000fd5b505050506040513d60208110156110a757600080fd5b505190506110b8828983338b612903565b611109576040805162461bcd60e51b815260206004820152601260248201527f436c61696d206d75737420737563636565640000000000000000000000000000604482015290519081900360640190fd5b505050600091825250600b6020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550600192915050565b611152611c82565b6111a3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000816040516020018082600260200280838360005b8381101561120b5781810151838201526020016111f3565b505050509050019150506040516020818303038152906040528051906020012090505b919050565b6000828061123f575081155b1561124c57506000610dd8565b506001610dd8565b6005546001600160a01b0316331461129d5760405162461bcd60e51b81526004018080602001828103825260348152602001806146526034913960400191505060405180910390fd5b600254604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015260448201859052915191909216916323b872dd91606480830192600092919082900301818387803b15801561131357600080fd5b505af1158015611327573d6000803e3d6000fd5b50505050505050565b600061133a6144d1565b611343836125b1565b905061135781600001518260200151611233565b9392505050565b600a5481565b600b602052600090815260409020546001600160a01b031681565b611387611c82565b6113d8576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600554604080517fd79875eb000000000000000000000000000000000000000000000000000000008152600481018590526024810184905290516001600160a01b039092169163d79875eb9160448082019260009290919082900301818387803b15801561144557600080fd5b505af1158015611459573d6000803e3d6000fd5b505050505050565b600085858585856040516020018086815260200185600260200280838360005b83811015611499578181015183820152602001611481565b50505050905001848152602001831515151560f81b8152600101826001600160a01b03166001600160a01b031660601b81526014019550505050505060405160208183030381529060405280519060200120905095945050505050565b60005474010000000000000000000000000000000000000000900460ff1681565b6000908152600b60208181526040808420805460017fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915581513360601b81850152825160148183030181526034909101835280519084012085529290915290912080549091166001600160a01b034316179055565b6000806115aa6115a58a8a8a8a8a611461565b611c93565b905060006115b88286610dc3565b90506001600160a01b038116158015906115e35750836001600160a01b0316816001600160a01b0316145b9a9950505050505050505050565b6115f9611c82565b61164a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600254604080517f4f558e790000000000000000000000000000000000000000000000000000000081526004810184905290516000926001600160a01b031691634f558e79916024808301926020929190829003018186803b15801561171157600080fd5b505afa158015611725573d6000803e3d6000fd5b505050506040513d602081101561173b57600080fd5b50516117785760405162461bcd60e51b81526004018080602001828103825260228152602001806146306022913960400191505060405180910390fd5b600161178261454d565b600254604080517f62f9acf90000000000000000000000000000000000000000000000000000000081526004810187905281516001600160a01b03909316926362f9acf992602480840193919291829003018186803b1580156117e457600080fd5b505afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250604081101561181d57600080fd5b509050600061182a611c73565b9050336001600160a01b0382161480159061185057506001546001600160a01b03163314155b15611a3d5761185d6144d1565b611866836125b1565b90508561187782610100015161200b565b1461188157600093505b83801561189b575061189b81600001518260200151611233565b156119e357600254604080517fc53b4bf90000000000000000000000000000000000000000000000000000000081526004810189905290516000926001600160a01b03169163c53b4bf9916024808301926020929190829003018186803b15801561190557600080fd5b505afa158015611919573d6000803e3d6000fd5b505050506040513d602081101561192f57600080fd5b505160608301519091501515600482901c600116151514611951576000611953565b845b9450816080015115156000600383901c60011611151514611975576000611977565b845b94508160a0015115156000600283901c6001161115151461199957600061199b565b845b60c08301519095501515600182811c161515146119b95760006119bb565b845b94508160e001511515600082600116111515146119d95760006119db565b845b9450506119e8565b600093505b8315611a3b576040805162461bcd60e51b815260206004820152601c60248201527f4d75737420626520696e76616c696420746f206368616c6c656e676500000000604482015290519081900360640190fd5b505b611a4685613070565b600254604080517f6352211e0000000000000000000000000000000000000000000000000000000081526004810188905290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b158015611aab57600080fd5b505afa158015611abf573d6000803e3d6000fd5b505050506040513d6020811015611ad557600080fd5b5051604080518881529192507f36b306723b6493a90002bbf27460db864a9ac8ce1af82ad1f0183f83c0cecc39918891869185913391906020820190859080838360005b83811015611b31578181015183820152602001611b19565b50505050905001836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200194505050505060405180910390a1600254604080517f0e8310d60000000000000000000000000000000000000000000000000000000081526004810189905290516001600160a01b0390921691630e8310d69160248082019260009290919082900301818387803b158015611bdc57600080fd5b505af1158015611bf0573d6000803e3d6000fd5b5060019998505050505050505050565b60065481565b6001546001600160a01b031681565b611c1d611c82565b611c6e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600a55565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6000610dd88261331c565b611ca6611c82565b611cf7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6005546001600160a01b031681565b6000805474010000000000000000000000000000000000000000900460ff1615611db1576040805162461bcd60e51b815260206004820152601260248201527f4d757374206e6f74206265207061757365640000000000000000000000000000604482015290519081900360640190fd5b6000600b6000611dc0886111dd565b81526020810191909152604001600020546001600160a01b03169050801580611df157506001600160a01b03811633145b611e42576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420636f6d6d6974746564526563657069656e74000000000000604482015290519081900360640190fd5b600254604080517f4f558e79000000000000000000000000000000000000000000000000000000008152600481018a905290516001600160a01b0390921691634f558e7991602480820192602092909190829003018186803b158015611ea757600080fd5b505afa158015611ebb573d6000803e3d6000fd5b505050506040513d6020811015611ed157600080fd5b505115611f25576040805162461bcd60e51b815260206004820152601560248201527f436c6f76657220616c7265616479206578697374730000000000000000000000604482015290519081900360640190fd5b611f49878787873388600160009054906101000a90046001600160a01b0316611592565b611f9a576040805162461bcd60e51b815260206004820152601160248201527f496e76616c6964205369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b611fa78787873388612903565b611ff8576040805162461bcd60e51b815260206004820152601260248201527f436c61696d206d75737420737563636565640000000000000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b60075481565b6000805b60108110156120435780600101601060ff160360080260020a83826010811061203457fe5b1a02919091019060010161200f565b50919050565b612051611c82565b6120a2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600955565b6004546001600160a01b031681565b604080513360601b60208083019190915282516014818403018152603490920183528151918101919091206000908152600b9091522054436001600160a01b039091161061214b576040805162461bcd60e51b815260206004820152601e60248201527f43616e277420636f6d62696e6520737465703120776974682073746570320000604482015290519081900360640190fd5b6000612157823361249c565b6000818152600b60205260409020549091506001600160a01b0316600181146121b15760405162461bcd60e51b815260040180806020018281038252604c8152602001806145e4604c913960600191505060405180910390fd5b506000908152600b602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091559282529020805490911633179055565b60085481565b612208611c82565b612259576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000806000806000806000600260009054906101000a90046001600160a01b03166001600160a01b031663785d8d716040518163ffffffff1660e01b815260040160c06040518083038186803b1580156122ec57600080fd5b505afa158015612300573d6000803e3d6000fd5b505050506040513d60c081101561231657600080fd5b508051602082015160408301516060840151608085015160a090950151939a509198509650945090925090506000600160048a901c811614156123915761238e612381876001016123758a600101600a5461336d90919063ffffffff16565b9063ffffffff6133c616565b829063ffffffff61343016565b90505b600389901c600116600114156123c6576123c3612381866001016123758a600101600a5461336d90919063ffffffff16565b90505b600289901c600116600114156123fb576123f8612381856001016123758a600101600a5461336d90919063ffffffff16565b90505b600189811c8116141561242d5761242a612381846001016123758a600101600a5461336d90919063ffffffff16565b90505b886001166001141561245e5761245b612381836001016123758a600101600a5461336d90919063ffffffff16565b90505b98975050505050505050565b60095481565b6003546001600160a01b031681565b6000610dd861248d83612293565b6008549063ffffffff61343016565b6040805160208082019490945260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016828201528051808303603401815260549092019052805191012090565b6124f6611c82565b612547576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6125508161348a565b50565b61255b611c82565b6125ac576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600855565b6125b96144d1565b6125c16144d1565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009081166101208301526020808501519091166101408301526000610180830181905260026101a084018190526101c084015280835290820152600161016082015261262d613542565b6fffffffffffffffffffffffffffffffff1916610100820152600080808080805b603c8260ff1610801561265f575085155b156127af57602087610180015160ff161061267f57866101400151612686565b8661012001515b90506126a681602089610180015160ff168161269e57fe5b066020613566565b94506126b1856135c4565b90945092506126bf856135ff565b15955060ff82161580156126e557508360ff1660021415806126e557508260ff16600314155b156126f257600180885295505b85158015612703575060088460ff16105b8015612712575060088360ff16105b801561271c575060015b8015612726575060015b156127a45761273687858561360c565b6101808101805160010160ff1690528051909750156127a4576127588761387b565b6127a4576000875261016087015160ff166001141561277e576002610160880152612787565b60016101608801525b61279287858561360c565b8051909750156127a457600180885295505b60019091019061264e565b86516127cc576127be87613979565b96506127c987613ae9565b96505b5094979650505050505050565b600081516041146127ec57506000610dd8565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156128325760009350505050610dd8565b8060ff16601b1415801561284a57508060ff16601c14155b1561285b5760009350505050610dd8565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a08084019391927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156128d0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151979650505050505050565b600254604080517f0b628395000000000000000000000000000000000000000000000000000000008152600481018881526000936001600160a01b031692630b628395928a928a9290916024019083908083838b5b83811015612970578181015183820152602001612958565b5050505090500192505050600060405180830381600087803b15801561299557600080fd5b505af11580156129a9573d6000803e3d6000fd5b5050600254604080517f76e4a87f000000000000000000000000000000000000000000000000000000008152600481018b9052861515602482015290516001600160a01b0390921693506376e4a87f925060448082019260009290919082900301818387803b158015612a1b57600080fd5b505af1158015612a2f573d6000803e3d6000fd5b50505050600080851115612b5c57600254604080517fdc3f7758000000000000000000000000000000000000000000000000000000008152600481018a90526024810188905290516001600160a01b039092169163dc3f77589160448082019260009290919082900301818387803b158015612aaa57600080fd5b505af1158015612abe573d6000803e3d6000fd5b50505050612acb85612293565b600254604080517fa47bd496000000000000000000000000000000000000000000000000000000008152600481018b90526024810184905290519293506001600160a01b039091169163a47bd4969160448082019260009290919082900301818387803b158015612b3b57600080fd5b505af1158015612b4f573d6000803e3d6000fd5b50505050612b5c85613d7a565b600854600090612b72908363ffffffff61343016565b9050838015612b815750600081115b15612d3757600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612be957600080fd5b505afa158015612bfd573d6000803e3d6000fd5b505050506040513d6020811015612c1357600080fd5b50511015612cb25760048054604080517ff088d5470000000000000000000000000000000000000000000000000000000081523393810193909352516001600160a01b039091169163f088d54791349160248082019260209290919082900301818588803b158015612c8457600080fd5b505af1158015612c98573d6000803e3d6000fd5b50505050506040513d6020811015612caf57600080fd5b50505b600354604080517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810184905290516001600160a01b0390921691639dc29fac9160448082019260009290919082900301818387803b158015612d1e57600080fd5b505af1158015612d32573d6000803e3d6000fd5b505050505b8315612dc857600254604080517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152602482018c9052915191909216916340c10f1991604480830192600092919082900301818387803b158015612dab57600080fd5b505af1158015612dbf573d6000803e3d6000fd5b50505050612fc6565b600254604080517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301819052602483018b9052905190916340c10f1991604480830192600092919082900301818387803b158015612e3557600080fd5b505af1158015612e49573d6000803e3d6000fd5b50506005546009546001600160a01b03909116925063d79875eb91508a90612e7c9061248d90879063ffffffff61336d16565b6040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015612eb957600080fd5b505af1158015612ecd573d6000803e3d6000fd5b505050506000821115612fc657600354604080517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015260248201869052915191909216916340c10f199160448083019260209291908290030181600087803b158015612f4957600080fd5b505af1158015612f5d573d6000803e3d6000fd5b505050506040513d6020811015612f7357600080fd5b5051612fc6576040805162461bcd60e51b815260206004820152601160248201527f6d696e74206d7573742073756363656564000000000000000000000000000000604482015290519081900360640190fd5b7fbffd4880cee44a71d4266cf8dcf3179608df035c1883808a2370a9cfd180f6ed88883388868b8a6040518088815260200187600260200280838360005b8381101561301c578181015183820152602001613004565b5050506001600160a01b03998a16939091019283525050949095166020850152604080850193909352606084019190915215156080830152519081900360a0019350915050a1506001979650505050505050565b600080600080600080600260009054906101000a90046001600160a01b03166001600160a01b031663785d8d716040518163ffffffff1660e01b815260040160c06040518083038186803b1580156130c757600080fd5b505afa1580156130db573d6000803e3d6000fd5b505050506040513d60c08110156130f157600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050809650819750829850839950849a50859b505050505050506000600260009054906101000a90046001600160a01b03166001600160a01b031663c53b4bf9896040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156131a757600080fd5b505afa1580156131bb573d6000803e3d6000fd5b505050506040513d60208110156131d157600080fd5b505190506131f7816131e45760006131e7565b60015b889060ff1663ffffffff613f6d16565b9650613210866001600484901c1663ffffffff613f6d16565b9550613229856001600384901c1663ffffffff613f6d16565b9450613242846001600284901c1663ffffffff613f6d16565b935061325983600183811c1663ffffffff613f6d16565b925061326e826001831663ffffffff613f6d16565b600254604080517f8b1b2ba8000000000000000000000000000000000000000000000000000000008152600481018b9052602481018a905260448101899052606481018890526084810187905260a4810184905290519294506001600160a01b0390911691638b1b2ba89160c48082019260009290919082900301818387803b1580156132fa57600080fd5b505af115801561330e573d6000803e3d6000fd5b505050505050505050505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008261337c57506000610dd8565b8282028284828161338957fe5b0414610dd55760405162461bcd60e51b81526004018080602001828103825260218152602001806146aa6021913960400191505060405180910390fd5b600080821161341c576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161342757fe5b04949350505050565b600082820183811015610dd5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0381166134cf5760405162461bcd60e51b815260040180806020018281038252602681526020018061459a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ffffffffffffffe7ffdbfffffffffffff0000000000000000000000000000000090565b607f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000093909316600792830291909202037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90160ff161c60201c1690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc081810160071692600860ff93859003909201929092160490565b604060ff82161015919050565b6136146144d1565b600360ff166136298561010001518585613fca565b60ff161461363c57506001835282611357565b61364461456b565b6000613651868686614010565b909250905060ff811661366b575050600184525082611357565b60008080808080805b8760ff168160ff1610156137bf5760009650600095506136a98d8a8360ff166008811061369d57fe5b60200201518e8e6141ed565b9097509550600092505b8560ff168360ff1610156137b757816136cb57600191505b6136de6136d9888589613566565b6135c4565b80955081965050506136fc8d61010001518e61016001518787614318565b6fffffffffffffffffffffffffffffffff19166101008e01526101608d015160ff166002141561376b576101c08d01805160010160ff9081169091526101a08e0180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911690526137ac565b6101c08d0180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff9081169091526101a08e01805160010190911690525b6001909201916136b3565b600101613674565b50801561382f576137dc8c61010001518d61016001518d8d614318565b6fffffffffffffffffffffffffffffffff19166101008d01526101608c015160ff166002141561381a576101c08c01805160010160ff16905261382a565b6101a08c01805160010160ff1690525b613844565b505060018a5250889550611357945050505050565b6101608c015160ff16600114156138625760026101608d015261386b565b60016101608d01525b50999a9950505050505050505050565b6101008101516000908190815b60408160ff16108015613899575082155b15613970576138a661454d565b60405180604001604052806008808560ff16816138bf57fe5b06850360ff16816138cc57fe5b0460ff1660ff16815260200160088460ff16816138e557fe5b0660ff1690526101008701519091506000906139109083835b60200201518460016020020151613fca565b905060ff8116600314156139665760008088526fffffffffffffffffffffffffffffffff19851661010089015261395890889084905b6020020151846001602002015161360c565b805190975061396657600194505b5050600101613888565b50909392505050565b6139816144d1565b81610180015160ff16603c14156139a05750600160208201528061122e565b61010082015160009081905b60408360ff161080156139bd575081155b15613ac5576139ca61454d565b60405180604001604052806008808760ff16816139e357fe5b06870360ff16816139f057fe5b0460ff1660ff16815260200160088660ff1681613a0957fe5b0660ff169052610100870151909150600090613a269083836138fe565b905060ff811660031415613ab857600161016088015260008088526fffffffffffffffffffffffffffffffff198416610100890152613a689088908490613946565b8051909750613a7657600193505b600261016088015260008088526fffffffffffffffffffffffffffffffff198416610100890152613aaa9088908490613946565b8051909750613ab857600193505b50506001909201916139ac565b8115613ad45760018552613ae0565b60016020860152600085525b50929392505050565b613af16144d1565b60018080808060005b60088160ff16108015613b2957508580613b115750845b80613b195750835b80613b215750825b80613b295750815b15613d185760005b60088160ff16108015613b6057508680613b485750855b80613b505750845b80613b585750835b80613b605750825b15613d0f57613b7b8961010001518360070383600703614402565b6fffffffffffffffffffffffffffffffff1916613b9e8a61010001518484614402565b6fffffffffffffffffffffffffffffffff191614613bbb57600096505b613bce8961010001518383600703614402565b6fffffffffffffffffffffffffffffffff1916613bf18a61010001518484614402565b6fffffffffffffffffffffffffffffffff191614613c0e57600095505b613c218961010001518360070383614402565b6fffffffffffffffffffffffffffffffff1916613c448a61010001518484614402565b6fffffffffffffffffffffffffffffffff191614613c6157600094505b613c778961010001518260070384600703614402565b6fffffffffffffffffffffffffffffffff1916613c9a8a61010001518484614402565b6fffffffffffffffffffffffffffffffff191614613cb757600093505b613cc78961010001518284614402565b6fffffffffffffffffffffffffffffffff1916613cea8a61010001518484614402565b6fffffffffffffffffffffffffffffffff191614613d0757600092505b600101613b31565b50600101613afa565b508480613d225750835b80613d2a5750825b80613d325750815b80613d3a5750805b15613d6f57600160408801528415156060880152831515608088015282151560a088015281151560c088015280151560e08801525b509495945050505050565b600080600080600080600260009054906101000a90046001600160a01b03166001600160a01b031663785d8d716040518163ffffffff1660e01b815260040160c06040518083038186803b158015613dd157600080fd5b505afa158015613de5573d6000803e3d6000fd5b505050506040513d60c0811015613dfb57600080fd5b508051602082015160408301516060840151608085015160a090950151939a50919850965094509092509050613e4987613e36576000613e39565b60015b879060ff1663ffffffff61343016565b9550613e6285600160048a901c1663ffffffff61343016565b9450613e7b84600160038a901c1663ffffffff61343016565b9350613e9483600160028a901c1663ffffffff61343016565b9250613eab82600189811c1663ffffffff61343016565b9150613ec0816001891663ffffffff61343016565b600254604080517f8b1b2ba8000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260448101889052606481018790526084810186905260a4810184905290519293506001600160a01b0390911691638b1b2ba89160c48082019260009290919082900301818387803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b5050505050505050505050565b600082821115613fc4576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080613fd78484614455565b6fffffffffffffffffffffffffffffffff1986166fffffffffffffffffffffffffffffffff9091161c60801c6003169150509392505050565b61401861456b565b600061402261456b565b600061402c61456b565b5060408051610140810182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010082018181526000610120840181905290835283518085018552828152600160208281018290528086019290925285518087018752838152808301829052858701528551808701875281815280830182905260608601528551808701875281815280830184905260808601528551808701875290815280820184905260a08501528451808601865282815280820184905260c0850152845180860190955282855284019190915260e0820192909252908061411461454d565b6000805b60088160ff1610156141da57858160ff166008811061413357fe5b6020020151925082600060200201518c01935082600160200201518b01945060078560000b1380614167575060008560000b125b80614175575060078460000b135b80614183575060008460000b125b6141d2576141978d61010001518587613fca565b91508c610160015160ff168260ff16146141d25760ff82166003146141d25782888860ff16600881106141c657fe5b60200201526001909601955b600101614118565b50959b949a509398505050505050505050565b600080600080600090506000600160ff1689610160015160ff16141561421557506002614219565b5060015b600080808060015b60098160ff16101561430457846142fc578c5160208e01519082028d01945081028b0192506007600085900b138061425c575060008460000b125b8061426a575060078360000b135b80614278575060008360000b125b1561428e576000975060009650600194506142fc565b61429e8e61010001518585613fca565b91508560ff168260ff1614156142c4576142ba8888868661448a565b90985096506142fc565b8d610160015160ff168260ff161480156142e1575060018160ff16115b156142ef57600194506142fc565b6000975060009650600194505b600101614221565b50959c949b50939950505050505050505050565b600060078360ff16111561435d5760405162461bcd60e51b81526004018080602001828103825260248152602001806145c06024913960400191505060405180910390fd5b60078260ff1611156143a05760405162461bcd60e51b81526004018080602001828103825260248152602001806146866024913960400191505060405180910390fd5b60006143ac8484614455565b7003000000000000000000000000000000006fffffffffffffffffffffffffffffffff90911690811b87189096169570ff00000000000000000000000000000000608087901b16901b8617915050949350505050565b60008061440f8484614455565b6fffffffffffffffffffffffffffffffff1986166fffffffffffffffffffffffffffffffff9091161c700300000000000000000000000000000000169150509392505050565b600891909102016040037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160020260ff1690565b6008020160400160201b64ff000000001660079290921b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff800000000016919091179160019190910190565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081019190915290565b60405180604001604052806002906020820280388339509192915050565b6040518061020001604052806008905b61458361454d565b81526020019060019003908161457b579050509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737363616e2774207475726e2074696c65206f757473696465206f6620626f61726420636f6c496e76616c696420636f6d6d69744f664d6f7665734861736857697468526563657069656e742c20706c6561736520646f20636c61696d436c6f7665725365637572656c79506172744f6e65436c6f766572206d75737420657869737420746f206265206368616c6c656e6765647472616e7366657246726f6d2063616e206f6e6c7920626520646f6e652062792073696d706c65436c6f766572734d61726b657463616e2774207475726e2074696c65206f757473696465206f6620626f61726420726f77536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72305820a1384626a88d9d844ae04a694e75dc7e22a96eae21c39a2fbca28181889237f864736f6c63430005090032000000000000000000000000b55c5cac5014c662fdbf21a2c59cd45403c482fd0000000000000000000000001a94656a6245379bc0d9c64c402197528edb2bd10000000000000000000000001754a612ca578f72d678196bcc16710f01db7655
Deployed Bytecode
0x6080604052600436106102d15760003560e01c80638a05aafa11610179578063a89b55da116100d6578063d50cb88b1161008a578063f1b4bce911610064578063f1b4bce914610c2d578063f2fde38b14610c66578063fd5baa8814610c99576102d1565b8063d50cb88b14610bd9578063d76bbd5214610bee578063e757223014610c03576102d1565b8063c7876ea4116100bb578063c7876ea414610b67578063d010ed7014610b7c578063d2d7231f14610baf576102d1565b8063a89b55da14610b28578063c434968414610b3d576102d1565b8063975e4b2a1161012d578063a069870611610112578063a069870614610aac578063a4a83ca614610ac1578063a7e901b014610afe576102d1565b8063975e4b2a146109af5780639a0d981e146109c4576102d1565b80638f32d59b1161015e5780638f32d59b1461093d578063918a15cf146109525780639564e1801461097c576102d1565b80638a05aafa146108fe5780638da5cb5b14610928576102d1565b80633afcba96116102325780636e1258e7116101e65780637b7db9fa116101c05780637b7db9fa146108aa5780637cce4656146108d45780637dc0d1d0146108e9576102d1565b80636e1258e71461075b5780636e88f21f14610785578063715018a614610895576102d1565b80634896672e116102175780634896672e146106a0578063580bdd8c146106d05780635c975abb14610746576102d1565b80633afcba96146106615780634788578114610676576102d1565b80631cb44dfc11610289578063225c35b21161026e578063225c35b21461059257806323b872dd146105c6578063271eff9414610609576102d1565b80631cb44dfc146104f55780631ce5145614610528576102d1565b80630d576bfa116102ba5780630d576bfa146103a957806319045a25146103da57806319faa73014610494576102d1565b806308cdc2a8146102d657806308d27c7f14610304575b600080fd5b3480156102e257600080fd5b50610302600480360360208110156102f957600080fd5b50351515610cc3565b005b34801561031057600080fd5b5061035c6004803603604081101561032757600080fd5b60408051808201825291830192918183019183906002908390839080828437600092019190915250919450610d669350505050565b6040805196151587529415156020870152921515858501526fffffffffffffffffffffffffffffffff19909116606085015260ff90811660808501521660a0830152519081900360c00190f35b3480156103b557600080fd5b506103be610db4565b604080516001600160a01b039092168252519081900360200190f35b3480156103e657600080fd5b506103be600480360360408110156103fd57600080fd5b8135919081019060408101602082013564010000000081111561041f57600080fd5b82018360208201111561043157600080fd5b8035906020019184600183028401116401000000008311171561045357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610dc3945050505050565b6104e1600480360360608110156104aa57600080fd5b6040805180820182529183019291818301918390600290839083908082843760009201919091525091945050503515159050610dde565b604080519115158252519081900360200190f35b34801561050157600080fd5b506103026004803603602081101561051857600080fd5b50356001600160a01b031661114a565b34801561053457600080fd5b506105806004803603604081101561054b57600080fd5b604080518082018252918301929181830191839060029083908390808284376000920191909152509194506111dd9350505050565b60408051918252519081900360200190f35b34801561059e57600080fd5b506104e1600480360360408110156105b557600080fd5b508035151590602001351515611233565b3480156105d257600080fd5b50610302600480360360608110156105e957600080fd5b506001600160a01b03813581169160208101359091169060400135611254565b34801561061557600080fd5b506104e16004803603604081101561062c57600080fd5b604080518082018252918301929181830191839060029083908390808284376000920191909152509194506113309350505050565b34801561066d57600080fd5b5061058061135e565b34801561068257600080fd5b506103be6004803603602081101561069957600080fd5b5035611364565b3480156106ac57600080fd5b50610302600480360360408110156106c357600080fd5b508035906020013561137f565b3480156106dc57600080fd5b50610580600480360360c08110156106f357600080fd5b6040805180820182528335939283019291606083019190602084019060029083908390808284376000920191909152509194505081359250506020810135151590604001356001600160a01b0316611461565b34801561075257600080fd5b506104e16114f6565b34801561076757600080fd5b506103026004803603602081101561077e57600080fd5b5035611517565b34801561079157600080fd5b506104e160048036036101008110156107a957600080fd5b604080518082018252833593928301929160608301919060208401906002908390839080828437600092019190915250919483359460208501351515946001600160a01b0360408201351694509192509060808101906060013564010000000081111561081557600080fd5b82018360208201111561082757600080fd5b8035906020019184600183028401116401000000008311171561084957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506115929050565b3480156108a157600080fd5b506103026115f1565b3480156108b657600080fd5b506104e1600480360360208110156108cd57600080fd5b50356116ac565b3480156108e057600080fd5b50610580611c00565b3480156108f557600080fd5b506103be611c06565b34801561090a57600080fd5b506103026004803603602081101561092157600080fd5b5035611c15565b34801561093457600080fd5b506103be611c73565b34801561094957600080fd5b506104e1611c82565b34801561095e57600080fd5b506105806004803603602081101561097557600080fd5b5035611c93565b34801561098857600080fd5b506103026004803603602081101561099f57600080fd5b50356001600160a01b0316611c9e565b3480156109bb57600080fd5b506103be611d31565b6104e1600480360360c08110156109da57600080fd5b604080518082018252833593928301929160608301919060208401906002908390839080828437600092019190915250919483359460208501351515949193509150606081019060400135640100000000811115610a3757600080fd5b820183602082011115610a4957600080fd5b80359060200191846001830284011164010000000083111715610a6b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d40945050505050565b348015610ab857600080fd5b50610580612005565b348015610acd57600080fd5b5061058060048036036020811015610ae457600080fd5b50356fffffffffffffffffffffffffffffffff191661200b565b348015610b0a57600080fd5b5061030260048036036020811015610b2157600080fd5b5035612049565b348015610b3457600080fd5b506103be6120a7565b348015610b4957600080fd5b5061030260048036036020811015610b6057600080fd5b50356120b6565b348015610b7357600080fd5b506105806121fa565b348015610b8857600080fd5b5061030260048036036020811015610b9f57600080fd5b50356001600160a01b0316612200565b348015610bbb57600080fd5b5061058060048036036020811015610bd257600080fd5b5035612293565b348015610be557600080fd5b5061058061246a565b348015610bfa57600080fd5b506103be612470565b348015610c0f57600080fd5b5061058060048036036020811015610c2657600080fd5b503561247f565b348015610c3957600080fd5b5061058060048036036040811015610c5057600080fd5b50803590602001356001600160a01b031661249c565b348015610c7257600080fd5b5061030260048036036020811015610c8957600080fd5b50356001600160a01b03166124ee565b348015610ca557600080fd5b5061030260048036036020811015610cbc57600080fd5b5035612553565b610ccb611c82565b610d1c576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600080600080600080610d776144d1565b610d80886125b1565b80516020820151604083015161010084015161016085015161018090950151939d929c50909a509850919650945092505050565b6002546001600160a01b031681565b6000610dd5838363ffffffff6127d916565b90505b92915050565b600080610dea846111dd565b6000818152600b60205260409020549091506001600160a01b0316801580610e1a57506001600160a01b03811633145b610e6b576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420636f6d6d6974746564526563657069656e74000000000000604482015290519081900360640190fd5b610e736144d1565b610e7c866125b1565b9050610e9081600001518260200151611233565b610ee1576040805162461bcd60e51b815260206004820152600c60248201527f496e76616c69642067616d650000000000000000000000000000000000000000604482015290519081900360640190fd5b6000610ef182610100015161200b565b600254604080517f4f558e790000000000000000000000000000000000000000000000000000000081526004810184905290519293506001600160a01b0390911691634f558e7991602480820192602092909190829003018186803b158015610f5957600080fd5b505afa158015610f6d573d6000803e3d6000fd5b505050506040513d6020811015610f8357600080fd5b505115610fd7576040805162461bcd60e51b815260206004820152601560248201527f436c6f76657220616c7265616479206578697374730000000000000000000000604482015290519081900360640190fd5b6060820151608083015160a084015160c085015160e0860151604080517fa250cc3400000000000000000000000000000000000000000000000000000000815295151560048701529315156024860152911515604485015215156064840152151560848301525160009173b03b3533420c154acb4298614566b391269ace689163a250cc349160a480820192602092909190829003018186803b15801561107d57600080fd5b505af4158015611091573d6000803e3d6000fd5b505050506040513d60208110156110a757600080fd5b505190506110b8828983338b612903565b611109576040805162461bcd60e51b815260206004820152601260248201527f436c61696d206d75737420737563636565640000000000000000000000000000604482015290519081900360640190fd5b505050600091825250600b6020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905550600192915050565b611152611c82565b6111a3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000816040516020018082600260200280838360005b8381101561120b5781810151838201526020016111f3565b505050509050019150506040516020818303038152906040528051906020012090505b919050565b6000828061123f575081155b1561124c57506000610dd8565b506001610dd8565b6005546001600160a01b0316331461129d5760405162461bcd60e51b81526004018080602001828103825260348152602001806146526034913960400191505060405180910390fd5b600254604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015260448201859052915191909216916323b872dd91606480830192600092919082900301818387803b15801561131357600080fd5b505af1158015611327573d6000803e3d6000fd5b50505050505050565b600061133a6144d1565b611343836125b1565b905061135781600001518260200151611233565b9392505050565b600a5481565b600b602052600090815260409020546001600160a01b031681565b611387611c82565b6113d8576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600554604080517fd79875eb000000000000000000000000000000000000000000000000000000008152600481018590526024810184905290516001600160a01b039092169163d79875eb9160448082019260009290919082900301818387803b15801561144557600080fd5b505af1158015611459573d6000803e3d6000fd5b505050505050565b600085858585856040516020018086815260200185600260200280838360005b83811015611499578181015183820152602001611481565b50505050905001848152602001831515151560f81b8152600101826001600160a01b03166001600160a01b031660601b81526014019550505050505060405160208183030381529060405280519060200120905095945050505050565b60005474010000000000000000000000000000000000000000900460ff1681565b6000908152600b60208181526040808420805460017fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915581513360601b81850152825160148183030181526034909101835280519084012085529290915290912080549091166001600160a01b034316179055565b6000806115aa6115a58a8a8a8a8a611461565b611c93565b905060006115b88286610dc3565b90506001600160a01b038116158015906115e35750836001600160a01b0316816001600160a01b0316145b9a9950505050505050505050565b6115f9611c82565b61164a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600254604080517f4f558e790000000000000000000000000000000000000000000000000000000081526004810184905290516000926001600160a01b031691634f558e79916024808301926020929190829003018186803b15801561171157600080fd5b505afa158015611725573d6000803e3d6000fd5b505050506040513d602081101561173b57600080fd5b50516117785760405162461bcd60e51b81526004018080602001828103825260228152602001806146306022913960400191505060405180910390fd5b600161178261454d565b600254604080517f62f9acf90000000000000000000000000000000000000000000000000000000081526004810187905281516001600160a01b03909316926362f9acf992602480840193919291829003018186803b1580156117e457600080fd5b505afa1580156117f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250604081101561181d57600080fd5b509050600061182a611c73565b9050336001600160a01b0382161480159061185057506001546001600160a01b03163314155b15611a3d5761185d6144d1565b611866836125b1565b90508561187782610100015161200b565b1461188157600093505b83801561189b575061189b81600001518260200151611233565b156119e357600254604080517fc53b4bf90000000000000000000000000000000000000000000000000000000081526004810189905290516000926001600160a01b03169163c53b4bf9916024808301926020929190829003018186803b15801561190557600080fd5b505afa158015611919573d6000803e3d6000fd5b505050506040513d602081101561192f57600080fd5b505160608301519091501515600482901c600116151514611951576000611953565b845b9450816080015115156000600383901c60011611151514611975576000611977565b845b94508160a0015115156000600283901c6001161115151461199957600061199b565b845b60c08301519095501515600182811c161515146119b95760006119bb565b845b94508160e001511515600082600116111515146119d95760006119db565b845b9450506119e8565b600093505b8315611a3b576040805162461bcd60e51b815260206004820152601c60248201527f4d75737420626520696e76616c696420746f206368616c6c656e676500000000604482015290519081900360640190fd5b505b611a4685613070565b600254604080517f6352211e0000000000000000000000000000000000000000000000000000000081526004810188905290516000926001600160a01b031691636352211e916024808301926020929190829003018186803b158015611aab57600080fd5b505afa158015611abf573d6000803e3d6000fd5b505050506040513d6020811015611ad557600080fd5b5051604080518881529192507f36b306723b6493a90002bbf27460db864a9ac8ce1af82ad1f0183f83c0cecc39918891869185913391906020820190859080838360005b83811015611b31578181015183820152602001611b19565b50505050905001836001600160a01b03166001600160a01b03168152602001826001600160a01b03166001600160a01b0316815260200194505050505060405180910390a1600254604080517f0e8310d60000000000000000000000000000000000000000000000000000000081526004810189905290516001600160a01b0390921691630e8310d69160248082019260009290919082900301818387803b158015611bdc57600080fd5b505af1158015611bf0573d6000803e3d6000fd5b5060019998505050505050505050565b60065481565b6001546001600160a01b031681565b611c1d611c82565b611c6e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600a55565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6000610dd88261331c565b611ca6611c82565b611cf7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6005546001600160a01b031681565b6000805474010000000000000000000000000000000000000000900460ff1615611db1576040805162461bcd60e51b815260206004820152601260248201527f4d757374206e6f74206265207061757365640000000000000000000000000000604482015290519081900360640190fd5b6000600b6000611dc0886111dd565b81526020810191909152604001600020546001600160a01b03169050801580611df157506001600160a01b03811633145b611e42576040805162461bcd60e51b815260206004820152601a60248201527f496e76616c696420636f6d6d6974746564526563657069656e74000000000000604482015290519081900360640190fd5b600254604080517f4f558e79000000000000000000000000000000000000000000000000000000008152600481018a905290516001600160a01b0390921691634f558e7991602480820192602092909190829003018186803b158015611ea757600080fd5b505afa158015611ebb573d6000803e3d6000fd5b505050506040513d6020811015611ed157600080fd5b505115611f25576040805162461bcd60e51b815260206004820152601560248201527f436c6f76657220616c7265616479206578697374730000000000000000000000604482015290519081900360640190fd5b611f49878787873388600160009054906101000a90046001600160a01b0316611592565b611f9a576040805162461bcd60e51b815260206004820152601160248201527f496e76616c6964205369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b611fa78787873388612903565b611ff8576040805162461bcd60e51b815260206004820152601260248201527f436c61696d206d75737420737563636565640000000000000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b60075481565b6000805b60108110156120435780600101601060ff160360080260020a83826010811061203457fe5b1a02919091019060010161200f565b50919050565b612051611c82565b6120a2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600955565b6004546001600160a01b031681565b604080513360601b60208083019190915282516014818403018152603490920183528151918101919091206000908152600b9091522054436001600160a01b039091161061214b576040805162461bcd60e51b815260206004820152601e60248201527f43616e277420636f6d62696e6520737465703120776974682073746570320000604482015290519081900360640190fd5b6000612157823361249c565b6000818152600b60205260409020549091506001600160a01b0316600181146121b15760405162461bcd60e51b815260040180806020018281038252604c8152602001806145e4604c913960600191505060405180910390fd5b506000908152600b602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091559282529020805490911633179055565b60085481565b612208611c82565b612259576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000806000806000806000600260009054906101000a90046001600160a01b03166001600160a01b031663785d8d716040518163ffffffff1660e01b815260040160c06040518083038186803b1580156122ec57600080fd5b505afa158015612300573d6000803e3d6000fd5b505050506040513d60c081101561231657600080fd5b508051602082015160408301516060840151608085015160a090950151939a509198509650945090925090506000600160048a901c811614156123915761238e612381876001016123758a600101600a5461336d90919063ffffffff16565b9063ffffffff6133c616565b829063ffffffff61343016565b90505b600389901c600116600114156123c6576123c3612381866001016123758a600101600a5461336d90919063ffffffff16565b90505b600289901c600116600114156123fb576123f8612381856001016123758a600101600a5461336d90919063ffffffff16565b90505b600189811c8116141561242d5761242a612381846001016123758a600101600a5461336d90919063ffffffff16565b90505b886001166001141561245e5761245b612381836001016123758a600101600a5461336d90919063ffffffff16565b90505b98975050505050505050565b60095481565b6003546001600160a01b031681565b6000610dd861248d83612293565b6008549063ffffffff61343016565b6040805160208082019490945260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016828201528051808303603401815260549092019052805191012090565b6124f6611c82565b612547576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6125508161348a565b50565b61255b611c82565b6125ac576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600855565b6125b96144d1565b6125c16144d1565b82517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009081166101208301526020808501519091166101408301526000610180830181905260026101a084018190526101c084015280835290820152600161016082015261262d613542565b6fffffffffffffffffffffffffffffffff1916610100820152600080808080805b603c8260ff1610801561265f575085155b156127af57602087610180015160ff161061267f57866101400151612686565b8661012001515b90506126a681602089610180015160ff168161269e57fe5b066020613566565b94506126b1856135c4565b90945092506126bf856135ff565b15955060ff82161580156126e557508360ff1660021415806126e557508260ff16600314155b156126f257600180885295505b85158015612703575060088460ff16105b8015612712575060088360ff16105b801561271c575060015b8015612726575060015b156127a45761273687858561360c565b6101808101805160010160ff1690528051909750156127a4576127588761387b565b6127a4576000875261016087015160ff166001141561277e576002610160880152612787565b60016101608801525b61279287858561360c565b8051909750156127a457600180885295505b60019091019061264e565b86516127cc576127be87613979565b96506127c987613ae9565b96505b5094979650505050505050565b600081516041146127ec57506000610dd8565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156128325760009350505050610dd8565b8060ff16601b1415801561284a57508060ff16601c14155b1561285b5760009350505050610dd8565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a08084019391927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156128d0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151979650505050505050565b600254604080517f0b628395000000000000000000000000000000000000000000000000000000008152600481018881526000936001600160a01b031692630b628395928a928a9290916024019083908083838b5b83811015612970578181015183820152602001612958565b5050505090500192505050600060405180830381600087803b15801561299557600080fd5b505af11580156129a9573d6000803e3d6000fd5b5050600254604080517f76e4a87f000000000000000000000000000000000000000000000000000000008152600481018b9052861515602482015290516001600160a01b0390921693506376e4a87f925060448082019260009290919082900301818387803b158015612a1b57600080fd5b505af1158015612a2f573d6000803e3d6000fd5b50505050600080851115612b5c57600254604080517fdc3f7758000000000000000000000000000000000000000000000000000000008152600481018a90526024810188905290516001600160a01b039092169163dc3f77589160448082019260009290919082900301818387803b158015612aaa57600080fd5b505af1158015612abe573d6000803e3d6000fd5b50505050612acb85612293565b600254604080517fa47bd496000000000000000000000000000000000000000000000000000000008152600481018b90526024810184905290519293506001600160a01b039091169163a47bd4969160448082019260009290919082900301818387803b158015612b3b57600080fd5b505af1158015612b4f573d6000803e3d6000fd5b50505050612b5c85613d7a565b600854600090612b72908363ffffffff61343016565b9050838015612b815750600081115b15612d3757600354604080517f70a08231000000000000000000000000000000000000000000000000000000008152336004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015612be957600080fd5b505afa158015612bfd573d6000803e3d6000fd5b505050506040513d6020811015612c1357600080fd5b50511015612cb25760048054604080517ff088d5470000000000000000000000000000000000000000000000000000000081523393810193909352516001600160a01b039091169163f088d54791349160248082019260209290919082900301818588803b158015612c8457600080fd5b505af1158015612c98573d6000803e3d6000fd5b50505050506040513d6020811015612caf57600080fd5b50505b600354604080517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810184905290516001600160a01b0390921691639dc29fac9160448082019260009290919082900301818387803b158015612d1e57600080fd5b505af1158015612d32573d6000803e3d6000fd5b505050505b8315612dc857600254604080517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152602482018c9052915191909216916340c10f1991604480830192600092919082900301818387803b158015612dab57600080fd5b505af1158015612dbf573d6000803e3d6000fd5b50505050612fc6565b600254604080517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301819052602483018b9052905190916340c10f1991604480830192600092919082900301818387803b158015612e3557600080fd5b505af1158015612e49573d6000803e3d6000fd5b50506005546009546001600160a01b03909116925063d79875eb91508a90612e7c9061248d90879063ffffffff61336d16565b6040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015612eb957600080fd5b505af1158015612ecd573d6000803e3d6000fd5b505050506000821115612fc657600354604080517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015260248201869052915191909216916340c10f199160448083019260209291908290030181600087803b158015612f4957600080fd5b505af1158015612f5d573d6000803e3d6000fd5b505050506040513d6020811015612f7357600080fd5b5051612fc6576040805162461bcd60e51b815260206004820152601160248201527f6d696e74206d7573742073756363656564000000000000000000000000000000604482015290519081900360640190fd5b7fbffd4880cee44a71d4266cf8dcf3179608df035c1883808a2370a9cfd180f6ed88883388868b8a6040518088815260200187600260200280838360005b8381101561301c578181015183820152602001613004565b5050506001600160a01b03998a16939091019283525050949095166020850152604080850193909352606084019190915215156080830152519081900360a0019350915050a1506001979650505050505050565b600080600080600080600260009054906101000a90046001600160a01b03166001600160a01b031663785d8d716040518163ffffffff1660e01b815260040160c06040518083038186803b1580156130c757600080fd5b505afa1580156130db573d6000803e3d6000fd5b505050506040513d60c08110156130f157600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050809650819750829850839950849a50859b505050505050506000600260009054906101000a90046001600160a01b03166001600160a01b031663c53b4bf9896040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156131a757600080fd5b505afa1580156131bb573d6000803e3d6000fd5b505050506040513d60208110156131d157600080fd5b505190506131f7816131e45760006131e7565b60015b889060ff1663ffffffff613f6d16565b9650613210866001600484901c1663ffffffff613f6d16565b9550613229856001600384901c1663ffffffff613f6d16565b9450613242846001600284901c1663ffffffff613f6d16565b935061325983600183811c1663ffffffff613f6d16565b925061326e826001831663ffffffff613f6d16565b600254604080517f8b1b2ba8000000000000000000000000000000000000000000000000000000008152600481018b9052602481018a905260448101899052606481018890526084810187905260a4810184905290519294506001600160a01b0390911691638b1b2ba89160c48082019260009290919082900301818387803b1580156132fa57600080fd5b505af115801561330e573d6000803e3d6000fd5b505050505050505050505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008261337c57506000610dd8565b8282028284828161338957fe5b0414610dd55760405162461bcd60e51b81526004018080602001828103825260218152602001806146aa6021913960400191505060405180910390fd5b600080821161341c576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b600082848161342757fe5b04949350505050565b600082820183811015610dd5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0381166134cf5760405162461bcd60e51b815260040180806020018281038252602681526020018061459a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ffffffffffffffe7ffdbfffffffffffff0000000000000000000000000000000090565b607f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000093909316600792830291909202037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90160ff161c60201c1690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc081810160071692600860ff93859003909201929092160490565b604060ff82161015919050565b6136146144d1565b600360ff166136298561010001518585613fca565b60ff161461363c57506001835282611357565b61364461456b565b6000613651868686614010565b909250905060ff811661366b575050600184525082611357565b60008080808080805b8760ff168160ff1610156137bf5760009650600095506136a98d8a8360ff166008811061369d57fe5b60200201518e8e6141ed565b9097509550600092505b8560ff168360ff1610156137b757816136cb57600191505b6136de6136d9888589613566565b6135c4565b80955081965050506136fc8d61010001518e61016001518787614318565b6fffffffffffffffffffffffffffffffff19166101008e01526101608d015160ff166002141561376b576101c08d01805160010160ff9081169091526101a08e0180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190911690526137ac565b6101c08d0180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160ff9081169091526101a08e01805160010190911690525b6001909201916136b3565b600101613674565b50801561382f576137dc8c61010001518d61016001518d8d614318565b6fffffffffffffffffffffffffffffffff19166101008d01526101608c015160ff166002141561381a576101c08c01805160010160ff16905261382a565b6101a08c01805160010160ff1690525b613844565b505060018a5250889550611357945050505050565b6101608c015160ff16600114156138625760026101608d015261386b565b60016101608d01525b50999a9950505050505050505050565b6101008101516000908190815b60408160ff16108015613899575082155b15613970576138a661454d565b60405180604001604052806008808560ff16816138bf57fe5b06850360ff16816138cc57fe5b0460ff1660ff16815260200160088460ff16816138e557fe5b0660ff1690526101008701519091506000906139109083835b60200201518460016020020151613fca565b905060ff8116600314156139665760008088526fffffffffffffffffffffffffffffffff19851661010089015261395890889084905b6020020151846001602002015161360c565b805190975061396657600194505b5050600101613888565b50909392505050565b6139816144d1565b81610180015160ff16603c14156139a05750600160208201528061122e565b61010082015160009081905b60408360ff161080156139bd575081155b15613ac5576139ca61454d565b60405180604001604052806008808760ff16816139e357fe5b06870360ff16816139f057fe5b0460ff1660ff16815260200160088660ff1681613a0957fe5b0660ff169052610100870151909150600090613a269083836138fe565b905060ff811660031415613ab857600161016088015260008088526fffffffffffffffffffffffffffffffff198416610100890152613a689088908490613946565b8051909750613a7657600193505b600261016088015260008088526fffffffffffffffffffffffffffffffff198416610100890152613aaa9088908490613946565b8051909750613ab857600193505b50506001909201916139ac565b8115613ad45760018552613ae0565b60016020860152600085525b50929392505050565b613af16144d1565b60018080808060005b60088160ff16108015613b2957508580613b115750845b80613b195750835b80613b215750825b80613b295750815b15613d185760005b60088160ff16108015613b6057508680613b485750855b80613b505750845b80613b585750835b80613b605750825b15613d0f57613b7b8961010001518360070383600703614402565b6fffffffffffffffffffffffffffffffff1916613b9e8a61010001518484614402565b6fffffffffffffffffffffffffffffffff191614613bbb57600096505b613bce8961010001518383600703614402565b6fffffffffffffffffffffffffffffffff1916613bf18a61010001518484614402565b6fffffffffffffffffffffffffffffffff191614613c0e57600095505b613c218961010001518360070383614402565b6fffffffffffffffffffffffffffffffff1916613c448a61010001518484614402565b6fffffffffffffffffffffffffffffffff191614613c6157600094505b613c778961010001518260070384600703614402565b6fffffffffffffffffffffffffffffffff1916613c9a8a61010001518484614402565b6fffffffffffffffffffffffffffffffff191614613cb757600093505b613cc78961010001518284614402565b6fffffffffffffffffffffffffffffffff1916613cea8a61010001518484614402565b6fffffffffffffffffffffffffffffffff191614613d0757600092505b600101613b31565b50600101613afa565b508480613d225750835b80613d2a5750825b80613d325750815b80613d3a5750805b15613d6f57600160408801528415156060880152831515608088015282151560a088015281151560c088015280151560e08801525b509495945050505050565b600080600080600080600260009054906101000a90046001600160a01b03166001600160a01b031663785d8d716040518163ffffffff1660e01b815260040160c06040518083038186803b158015613dd157600080fd5b505afa158015613de5573d6000803e3d6000fd5b505050506040513d60c0811015613dfb57600080fd5b508051602082015160408301516060840151608085015160a090950151939a50919850965094509092509050613e4987613e36576000613e39565b60015b879060ff1663ffffffff61343016565b9550613e6285600160048a901c1663ffffffff61343016565b9450613e7b84600160038a901c1663ffffffff61343016565b9350613e9483600160028a901c1663ffffffff61343016565b9250613eab82600189811c1663ffffffff61343016565b9150613ec0816001891663ffffffff61343016565b600254604080517f8b1b2ba8000000000000000000000000000000000000000000000000000000008152600481018a90526024810189905260448101889052606481018790526084810186905260a4810184905290519293506001600160a01b0390911691638b1b2ba89160c48082019260009290919082900301818387803b158015613f4c57600080fd5b505af1158015613f60573d6000803e3d6000fd5b5050505050505050505050565b600082821115613fc4576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080613fd78484614455565b6fffffffffffffffffffffffffffffffff1986166fffffffffffffffffffffffffffffffff9091161c60801c6003169150509392505050565b61401861456b565b600061402261456b565b600061402c61456b565b5060408051610140810182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010082018181526000610120840181905290835283518085018552828152600160208281018290528086019290925285518087018752838152808301829052858701528551808701875281815280830182905260608601528551808701875281815280830184905260808601528551808701875290815280820184905260a08501528451808601865282815280820184905260c0850152845180860190955282855284019190915260e0820192909252908061411461454d565b6000805b60088160ff1610156141da57858160ff166008811061413357fe5b6020020151925082600060200201518c01935082600160200201518b01945060078560000b1380614167575060008560000b125b80614175575060078460000b135b80614183575060008460000b125b6141d2576141978d61010001518587613fca565b91508c610160015160ff168260ff16146141d25760ff82166003146141d25782888860ff16600881106141c657fe5b60200201526001909601955b600101614118565b50959b949a509398505050505050505050565b600080600080600090506000600160ff1689610160015160ff16141561421557506002614219565b5060015b600080808060015b60098160ff16101561430457846142fc578c5160208e01519082028d01945081028b0192506007600085900b138061425c575060008460000b125b8061426a575060078360000b135b80614278575060008360000b125b1561428e576000975060009650600194506142fc565b61429e8e61010001518585613fca565b91508560ff168260ff1614156142c4576142ba8888868661448a565b90985096506142fc565b8d610160015160ff168260ff161480156142e1575060018160ff16115b156142ef57600194506142fc565b6000975060009650600194505b600101614221565b50959c949b50939950505050505050505050565b600060078360ff16111561435d5760405162461bcd60e51b81526004018080602001828103825260248152602001806145c06024913960400191505060405180910390fd5b60078260ff1611156143a05760405162461bcd60e51b81526004018080602001828103825260248152602001806146866024913960400191505060405180910390fd5b60006143ac8484614455565b7003000000000000000000000000000000006fffffffffffffffffffffffffffffffff90911690811b87189096169570ff00000000000000000000000000000000608087901b16901b8617915050949350505050565b60008061440f8484614455565b6fffffffffffffffffffffffffffffffff1986166fffffffffffffffffffffffffffffffff9091161c700300000000000000000000000000000000169150509392505050565b600891909102016040037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160020260ff1690565b6008020160400160201b64ff000000001660079290921b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff800000000016919091179160019190910190565b604080516101e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081019190915290565b60405180604001604052806002906020820280388339509192915050565b6040518061020001604052806008905b61458361454d565b81526020019060019003908161457b579050509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737363616e2774207475726e2074696c65206f757473696465206f6620626f61726420636f6c496e76616c696420636f6d6d69744f664d6f7665734861736857697468526563657069656e742c20706c6561736520646f20636c61696d436c6f7665725365637572656c79506172744f6e65436c6f766572206d75737420657869737420746f206265206368616c6c656e6765647472616e7366657246726f6d2063616e206f6e6c7920626520646f6e652062792073696d706c65436c6f766572734d61726b657463616e2774207475726e2074696c65206f757473696465206f6620626f61726420726f77536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72305820a1384626a88d9d844ae04a694e75dc7e22a96eae21c39a2fbca28181889237f864736f6c63430005090032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b55c5cac5014c662fdbf21a2c59cd45403c482fd0000000000000000000000001a94656a6245379bc0d9c64c402197528edb2bd10000000000000000000000001754a612ca578f72d678196bcc16710f01db7655
-----Decoded View---------------
Arg [0] : _clovers (address): 0xB55C5cAc5014C662fDBF21A2C59Cd45403C482Fd
Arg [1] : _clubToken (address): 0x1A94656A6245379bC0d9c64C402197528EdB2bD1
Arg [2] : _clubTokenController (address): 0x1754a612cA578F72d678196bcC16710f01DB7655
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000b55c5cac5014c662fdbf21a2c59cd45403c482fd
Arg [1] : 0000000000000000000000001a94656a6245379bc0d9c64c402197528edb2bd1
Arg [2] : 0000000000000000000000001754a612ca578f72d678196bcc16710f01db7655
Deployed Bytecode Sourcemap
29030:17440:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41736:88;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41736:88:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41736:88:0;;;;:::i;:::-;;31645:495;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31645:495:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31645:495:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;31645:495:0;;-1:-1:-1;31645:495:0;;-1:-1:-1;;;;31645:495:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31645:495:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29496:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29496:23:0;;;:::i;:::-;;;;-1:-1:-1;;;;;29496:23:0;;;;;;;;;;;;;;46196:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46196:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46196:134:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;46196:134:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46196:134:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46196:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;46196:134:0;;-1:-1:-1;46196:134:0;;-1:-1:-1;;;;;46196:134:0:i;34954:885::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34954:885:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;34954:885:0;;-1:-1:-1;;;34954:885:0;;;;-1:-1:-1;34954:885:0;:::i;:::-;;;;;;;;;;;;;;;;;;41931:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41931:91:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41931:91:0;-1:-1:-1;;;;;41931:91:0;;:::i;30464:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30464:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30464:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;30464:137:0;;-1:-1:-1;30464:137:0;;-1:-1:-1;;;;30464:137:0:i;:::-;;;;;;;;;;;;;;;;31437:200;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31437:200:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31437:200:0;;;;;;;;;;;:::i;41378:252::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41378:252:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;41378:252:0;;;;;;;;;;;;;;;;;:::i;30994:194::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30994:194:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30994:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;30994:194:0;;-1:-1:-1;30994:194:0;;-1:-1:-1;;;;30994:194:0:i;29926:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29926:28:0;;;:::i;29963:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29963:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29963:40:0;;:::i;40927:135::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40927:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40927:135:0;;;;;;;:::i;45953:237::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45953:237:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;45953:237:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;45953:237:0;;-1:-1:-1;;45953:237:0;;;-1:-1:-1;;45953:237:0;;;;;;;;;;-1:-1:-1;;;;;45953:237:0;;:::i;29443:18::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29443:18:0;;;:::i;33783:221::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33783:221:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33783:221:0;;:::i;45470:475::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45470:475:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;45470:475:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;45470:475:0;;;;;;;;;;;;-1:-1:-1;;;;;45470:475:0;;;;;;-1:-1:-1;45470:475:0;;-1:-1:-1;45470:475:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;45470:475:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45470:475:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;45470:475:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;45470:475:0;;-1:-1:-1;;;45470:475:0;;-1:-1:-1;;;;;45470:475:0;;-1:-1:-1;45470:475:0;;-1:-1:-1;45470:475:0:i;24277:140::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24277:140:0;;;:::i;39461:1458::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39461:1458:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39461:1458:0;;:::i;29702:74::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29702:74:0;;;:::i;29468:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29468:21:0;;;:::i;42787:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42787:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42787:118:0;;:::i;23466:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23466:79:0;;;:::i;23832:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23832:92:0;;;:::i;46336:131::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46336:131:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46336:131:0;;:::i;42470:156::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42470:156:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42470:156:0;-1:-1:-1;;;;;42470:156:0;;:::i;29614:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29614:47:0;;;:::i;36496:676::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;36496:676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;36496:676:0;;;;;;;;;;;;;;-1:-1:-1;36496:676:0;-1:-1:-1;36496:676:0;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;36496:676:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;36496:676:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;36496:676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;36496:676:0;;-1:-1:-1;36496:676:0;;-1:-1:-1;;;;;36496:676:0:i;29783:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29783:35:0;;;:::i;39020:231::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39020:231:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39020:231:0;-1:-1:-1;;39020:231:0;;:::i;43116:126::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43116:126:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43116:126:0;;:::i;29560:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29560:47:0;;;:::i;34329:617::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34329:617:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34329:617:0;;:::i;29858:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29858:24:0;;;:::i;42168:156::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42168:156:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42168:156:0;-1:-1:-1;;;;;42168:156:0;;:::i;32419:958::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32419:958:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32419:958:0;;:::i;29889:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29889:30:0;;;:::i;29526:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29526:27:0;;;:::i;33385:135::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33385:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33385:135:0;;:::i;30609:178::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30609:178:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30609:178:0;;;;;;-1:-1:-1;;;;;30609:178:0;;:::i;24572:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24572:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24572:109:0;-1:-1:-1;;;;;24572:109:0;;:::i;43398:103::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43398:103:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43398:103:0;;:::i;41736:88::-;23678:9;:7;:9::i;:::-;23670:54;;;;;-1:-1:-1;;;23670:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41800:6;:16;;;;;;;;;;;;;;;;;41736:88::o;31645:495::-;31709:10;31721:13;31736:16;31754:13;31769:19;31790:13;31859:24;;:::i;:::-;31886:23;31903:5;31886:16;:23::i;:::-;31942:10;;31967:13;;;;31995:16;;;;32026:10;;;;32051:18;;;;32084:12;;;;;31942:10;;31967:13;;-1:-1:-1;31995:16:0;;-1:-1:-1;32026:10:0;-1:-1:-1;32051:18:0;;-1:-1:-1;32084:12:0;-1:-1:-1;31645:495:0;-1:-1:-1;;;31645:495:0:o;29496:23::-;;;-1:-1:-1;;;;;29496:23:0;;:::o;46196:134::-;46272:7;46299:23;:4;46312:9;46299:23;:12;:23;:::i;:::-;46292:30;;46196:134;;;;;:::o;34954:885::-;35051:4;35068:17;35088:19;35101:5;35088:12;:19::i;:::-;35118:26;35147:18;;;:7;:18;;;;;;35068:39;;-1:-1:-1;;;;;;35147:18:0;35184:32;;;:68;;-1:-1:-1;;;;;;35220:32:0;;35242:10;35220:32;35184:68;35176:107;;;;;-1:-1:-1;;;35176:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35296:24;;:::i;:::-;35323:23;35340:5;35323:16;:23::i;:::-;35296:50;;35365:38;35377:4;:10;;;35389:4;:13;;;35365:11;:38::i;:::-;35357:63;;;;;-1:-1:-1;;;35357:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35431:15;35449:32;35470:4;:10;;;35449:20;:32::i;:::-;35501:7;;:23;;;;;;;;;;;;;;35431:50;;-1:-1:-1;;;;;;35501:7:0;;;;:14;;:23;;;;;;;;;;;;;;;:7;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;35501:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35501:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35501:23:0;35500:24;35492:58;;;;;-1:-1:-1;;;35492:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35611:11;;;;35624:10;;;;35636;;;;35648;;;;35660:11;;;;35584:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35563:18;;35584:7;;:26;;:88;;;;;;;;;;;;;;;:7;:88;;;5:2:-1;;;;30:1;27;20:12;5:2;35584:88:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35584:88:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35584:88:0;;-1:-1:-1;35691:58:0;35704:7;35713:5;35584:88;35732:10;35744:4;35691:12;:58::i;:::-;35683:89;;;;;-1:-1:-1;;;35683:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;35790:18:0;;;;-1:-1:-1;35790:7:0;:18;;;;;35783:26;;;;;;-1:-1:-1;35783:26:0;34954:885;;;;:::o;41931:91::-;23678:9;:7;:9::i;:::-;23670:54;;;;;-1:-1:-1;;;23670:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41998:6;:16;;;;-1:-1:-1;;;;;41998:16:0;;;;;;;;;;41931:91::o;30464:137::-;30532:7;30586:5;30569:23;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30569:23:0;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;30569:23:0;;;30559:34;;;;;;30552:41;;30464:137;;;;:::o;31437:200::-;31506:4;31527:5;:18;;;;31537:8;31536:9;31527:18;31523:107;;;-1:-1:-1;31569:5:0;31562:12;;31523:107;-1:-1:-1;31614:4:0;31607:11;;41378:252;41493:19;;-1:-1:-1;;;;;41493:19:0;41471:10;:42;41463:107;;;;-1:-1:-1;;;41463:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41581:7;;:41;;;;;;-1:-1:-1;;;;;41581:41:0;;;;;;;;;;;;;;;;;;;;;;:7;;;;;:20;;:41;;;;;:7;;:41;;;;;;;:7;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;41581:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41581:41:0;;;;41378:252;;;:::o;30994:194::-;31057:4;31074:24;;:::i;:::-;31101:23;31118:5;31101:16;:23::i;:::-;31074:50;;31142:38;31154:4;:10;;;31166:4;:13;;;31142:11;:38::i;:::-;31135:45;30994:194;-1:-1:-1;;;30994:194:0:o;29926:28::-;;;;:::o;29963:40::-;;;;;;;;;;;;-1:-1:-1;;;;;29963:40:0;;:::o;40927:135::-;23678:9;:7;:9::i;:::-;23670:54;;;;;-1:-1:-1;;;23670:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41013:19;;:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41013:19:0;;;;:24;;:41;;;;;:19;;:41;;;;;;;;:19;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;41013:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41013:41:0;;;;40927:135;;:::o;45953:237::-;46083:7;46137;46146:5;46153:10;46165:4;46171:9;46120:61;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;46120:61:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46120:61:0;-1:-1:-1;;;;;46120:61:0;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;46120:61:0;;;46110:72;;;;;;46103:79;;45953:237;;;;;;;:::o;29443:18::-;;;;;;;;;:::o;33783:221::-;33869:31;;;;:7;:31;;;;;;;;:44;;33911:1;33869:44;;;;;;;;33942:28;;33959:10;33942:28;;;;;;;;;26:21:-1;;;22:32;6:49;;33942:28:0;;;;;;33932:39;;;;;;33924:48;;;;;;;;;:72;;;;;-1:-1:-1;;;;;33983:12:0;33924:72;;;;33783:221::o;45470:475::-;45717:4;45734:12;45749:76;45772:52;45780:7;45789:5;45796:10;45808:4;45814:9;45772:7;:52::i;:::-;45749:22;:76::i;:::-;45734:91;;45836:14;45853:24;45861:4;45867:9;45853:7;:24::i;:::-;45836:41;-1:-1:-1;;;;;;45896:20:0;;;;;;:40;;;45930:6;-1:-1:-1;;;;;45920:16:0;:6;-1:-1:-1;;;;;45920:16:0;;45896:40;45888:49;45470:475;-1:-1:-1;;;;;;;;;;45470:475:0:o;24277:140::-;23678:9;:7;:9::i;:::-;23670:54;;;;;-1:-1:-1;;;23670:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24376:1;24360:6;;24339:40;;-1:-1:-1;;;;;24360:6:0;;;;24339:40;;24376:1;;24339:40;24407:1;24390:19;;;;;;24277:140::o;39461:1458::-;39544:7;;:23;;;;;;;;;;;;;;39519:4;;-1:-1:-1;;;;;39544:7:0;;:14;;:23;;;;;;;;;;;;;;:7;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;39544:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39544:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39544:23:0;39536:70;;;;-1:-1:-1;;;39536:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39630:4;39645:23;;:::i;:::-;39671:7;;:31;;;;;;;;;;;;;;-1:-1:-1;;;;;39671:7:0;;;;:22;;:31;;;;;;;;;;;;;:7;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;39671:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39671:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13:2;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39671:31:0;-1:-1:-1;39713:22:0;39754:7;:5;:7::i;:::-;39713:50;-1:-1:-1;39778:10:0;-1:-1:-1;;;;;39778:20:0;;;;;;:44;;-1:-1:-1;39816:6:0;;-1:-1:-1;;;;;39816:6:0;39802:10;:20;;39778:44;39774:912;;;39839:24;;:::i;:::-;39866:23;39883:5;39866:16;:23::i;:::-;39839:50;;39943:7;39907:32;39928:4;:10;;;39907:20;:32::i;:::-;:43;39904:96;;39979:5;39971:13;;39904:96;40017:5;:47;;;;;40026:38;40038:4;:10;;;40050:4;:13;;;40026:11;:38::i;:::-;40014:599;;;40106:7;;:30;;;;;;;;;;;;;;40085:18;;-1:-1:-1;;;;;40106:7:0;;:21;;:30;;;;;;;;;;;;;;:7;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;40106:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40106:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40106:30:0;40192:11;;;;40106:30;;-1:-1:-1;40163:40:0;;40178:1;40164:15;;;40182:1;40164:19;40163:25;;:40;:56;;40214:5;40163:56;;;40206:5;40163:56;40155:64;;40275:4;:10;;;40246:39;;40270:1;40261;40247:10;:15;;40265:1;40247:19;40246:25;:39;;;:55;;40296:5;40246:55;;;40288:5;40246:55;40238:63;;40357:4;:10;;;40328:39;;40352:1;40343;40329:10;:15;;40347:1;40329:19;40328:25;:39;;;:55;;40378:5;40328:55;;;40370:5;40328:55;40439:10;;;;40320:63;;-1:-1:-1;40410:39:0;;40425:1;40411:15;;;:19;40410:25;;:39;:55;;40460:5;40410:55;;;40452:5;40410:55;40402:63;;40516:4;:11;;;40492:35;;40511:1;40493:10;40506:1;40493:14;40492:20;:35;;;:51;;40538:5;40492:51;;;40530:5;40492:51;40484:59;;40014:599;;;;40592:5;40584:13;;40014:599;40636:5;40635:6;40627:47;;;;;-1:-1:-1;;;40627:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39774:912;;40698:25;40715:7;40698:16;:25::i;:::-;40754:7;;:24;;;;;;;;;;;;;;40734:17;;-1:-1:-1;;;;;40754:7:0;;:15;;:24;;;;;;;;;;;;;;:7;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;40754:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40754:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40754:24:0;40794:55;;;;;;40754:24;;-1:-1:-1;40794:55:0;;40811:7;;40820:5;;40754:24;;40838:10;;40794:55;40754:24;40794:55;;;40820:5;;40794:55;;40820:5;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;40794:55:0;;;;;;;-1:-1:-1;;;;;40794:55:0;-1:-1:-1;;;;;40794:55:0;;;;;;-1:-1:-1;;;;;40794:55:0;-1:-1:-1;;;;;40794:55:0;;;;;;;;;;;;;;;;;;40860:7;;:29;;;;;;;;;;;;;;-1:-1:-1;;;;;40860:7:0;;;;:20;;:29;;;;;:7;;:29;;;;;;;;:7;;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;40860:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;40907:4:0;;39461:1458;-1:-1:-1;;;;;;;;;39461:1458:0:o;29702:74::-;;;;:::o;29468:21::-;;;-1:-1:-1;;;;;29468:21:0;;:::o;42787:118::-;23678:9;:7;:9::i;:::-;23670:54;;;;;-1:-1:-1;;;23670:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42867:13;:30;42787:118::o;23466:79::-;23504:7;23531:6;-1:-1:-1;;;;;23531:6:0;23466:79;:::o;23832:92::-;23872:4;23910:6;-1:-1:-1;;;;;23910:6:0;23896:10;:20;;23832:92::o;46336:131::-;46403:7;46430:29;:4;:27;:29::i;42470:156::-;23678:9;:7;:9::i;:::-;23670:54;;;;;-1:-1:-1;;;23670:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42576:19;:42;;;;-1:-1:-1;;;;;42576:42:0;;;;;;;;;;42470:156::o;29614:47::-;;;-1:-1:-1;;;;;29614:47:0;;:::o;36496:676::-;36661:4;30053:6;;;;;;;30052:7;30044:38;;;;;-1:-1:-1;;;30044:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36678:26;36707:7;:28;36715:19;36728:5;36715:12;:19::i;:::-;36707:28;;;;;;;;;;;-1:-1:-1;36707:28:0;;-1:-1:-1;;;;;36707:28:0;;-1:-1:-1;36754:32:0;;;:68;;-1:-1:-1;;;;;;36790:32:0;;36812:10;36790:32;36754:68;36746:107;;;;;-1:-1:-1;;;36746:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36873:7;;:23;;;;;;;;;;;;;;-1:-1:-1;;;;;36873:7:0;;;;:14;;:23;;;;;;;;;;;;;;;:7;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;36873:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36873:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36873:23:0;36872:24;36864:58;;;;;-1:-1:-1;;;36864:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36941:79;36956:7;36965:5;36972:10;36984:4;36990:10;37002:9;37013:6;;;;;;;;;-1:-1:-1;;;;;37013:6:0;36941:14;:79::i;:::-;36933:109;;;;;-1:-1:-1;;;36933:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37061:58;37074:7;37083:5;37090:10;37102;37114:4;37061:12;:58::i;:::-;37053:89;;;;;-1:-1:-1;;;37053:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37160:4:0;;36496:676;-1:-1:-1;;;;;;36496:676:0:o;29783:35::-;;;;:::o;39020:231::-;39086:14;;39113:131;39128:13;39126:15;;39113:131;;;39225:1;39227;39225:3;39210:13;:19;;;39207:1;:23;39203:1;:28;39190:6;39197:1;39190:9;;;;;;;;39179:53;39170:62;;;;;39142:3;;39113:131;;;;39020:231;;;:::o;43116:126::-;23678:9;:7;:9::i;:::-;23670:54;;;;;-1:-1:-1;;;23670:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43200:15;:34;43116:126::o;29560:47::-;;;-1:-1:-1;;;;;29560:47:0;;:::o;34329:617::-;34436:28;;;34453:10;34436:28;;;;;;;;;;;;;26:21:-1;;;22:32;6:49;;34436:28:0;;;;;;34426:39;;;;;;;;;34418:48;;;;:7;:48;;;;;34470:12;-1:-1:-1;;;;;34418:48:0;;;34410:72;34402:115;;;;;-1:-1:-1;;;34402:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34528:18;34549:48;34575:9;34586:10;34549:25;:48::i;:::-;34608:38;34649:19;;;:7;:19;;;;;;34528:69;;-1:-1:-1;;;;;;34649:19:0;;34701:53;;34679:179;;;;-1:-1:-1;;;34679:179:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34876:19:0;;;;:7;:19;;;;;;34869:27;;;;;;;;;34907:18;;;;;:31;;;;;34928:10;34907:31;;;34329:617::o;29858:24::-;;;;:::o;42168:156::-;23678:9;:7;:9::i;:::-;23670:54;;;;;-1:-1:-1;;;23670:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42274:19;:42;;;;-1:-1:-1;;;;;42274:42:0;;;;;;;;;;42168:156::o;32419:958::-;32485:7;32505:20;32536:14;32561:13;32585;32609;32633:14;32757:7;;;;;;;;;-1:-1:-1;;;;;32757:7:0;-1:-1:-1;;;;;32757:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32757:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32757:26:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;32757:26:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32757:26:0;;-1:-1:-1;32757:26:0;-1:-1:-1;32757:26:0;-1:-1:-1;32757:26:0;;-1:-1:-1;32757:26:0;-1:-1:-1;32794:12:0;32843:1;32839;32825:15;;;:19;;:24;32821:98;;;32858:61;32867:51;32907:6;32916:1;32907:10;32867:35;32885:12;32900:1;32885:16;32867:13;;:17;;:35;;;;:::i;:::-;:39;:51;:39;:51;:::i;:::-;32858:4;;:61;:8;:61;:::i;:::-;32851:68;;32821:98;32948:1;32934:10;:15;;32952:1;32934:19;32957:1;32934:24;32930:97;;;32967:60;32976:50;33016:5;33024:1;33016:9;32976:35;32994:12;33009:1;32994:16;32976:13;;:17;;:35;;;;:::i;32967:60::-;32960:67;;32930:97;33056:1;33042:10;:15;;33060:1;33042:19;33065:1;33042:24;33038:97;;;33075:60;33084:50;33124:5;33132:1;33124:9;33084:35;33102:12;33117:1;33102:16;33084:13;;:17;;:35;;;;:::i;33075:60::-;33068:67;;33038:97;33164:1;33150:15;;;:19;;:24;33146:97;;;33183:60;33192:50;33232:5;33240:1;33232:9;33192:35;33210:12;33225:1;33210:16;33192:13;;:17;;:35;;;;:::i;33183:60::-;33176:67;;33146:97;33258:10;33271:1;33258:14;33276:1;33258:19;33254:93;;;33286:61;33295:51;33335:6;33344:1;33335:10;33295:35;33313:12;33328:1;33313:16;33295:13;;:17;;:35;;;;:::i;33286:61::-;33279:68;;33254:93;33365:4;32419:958;-1:-1:-1;;;;;;;;32419:958:0:o;29889:30::-;;;;:::o;29526:27::-;;;-1:-1:-1;;;;;29526:27:0;;:::o;33385:135::-;33443:7;33470:42;33484:27;33500:10;33484:15;:27::i;:::-;33470:9;;;:42;:13;:42;:::i;30609:178::-;30740:38;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;6:49;;30740:38:0;;;;;;30730:49;;;;;;30609:178::o;24572:109::-;23678:9;:7;:9::i;:::-;23670:54;;;;;-1:-1:-1;;;23670:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24645:28;24664:8;24645:18;:28::i;:::-;24572:109;:::o;43398:103::-;23678:9;:7;:9::i;:::-;23670:54;;;;;-1:-1:-1;;;23670:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43471:9;:22;43398:103::o;1987:2149::-;2054:11;;:::i;:::-;2079:16;;:::i;:::-;2128:8;;2108:28;;;;:17;;;:28;2128:8;2164;;;;2147:25;;;:14;;;:25;2134:1;2183:12;;;:16;;;2228:1;2210:15;;;:19;;;2240:15;;;:19;2272:18;;;2301:13;;;:21;2170:1;-1:-1:-1;2333:18:0;;:26;2385:12;:10;:12::i;:::-;-1:-1:-1;;2372:25:0;:10;;;:25;2410:9;;;;;;2542:1447;2558:2;2554:1;:6;;;:15;;;;;2565:4;2564:5;2554:15;2542:1447;;;2621:2;2606:4;:12;;;:17;;;:54;;2646:4;:14;;;2606:54;;;2626:4;:17;;;2606:54;2591:69;;2682:45;2691:12;2720:2;2705:4;:12;;;:17;;;;;;;;2724:2;2682:8;:45::i;:::-;2675:52;;2755:17;2767:4;2755:11;:17::i;:::-;2742:30;;-1:-1:-1;2742:30:0;-1:-1:-1;2795:15:0;2805:4;2795:9;:15::i;:::-;2794:16;;-1:-1:-1;2829:6:0;;;;:32;;;;;2840:3;:8;;2847:1;2840:8;;:20;;;;2852:3;:8;;2859:1;2852:8;;2840:20;2825:225;;;2889:4;3017:17;;;2889:4;-1:-1:-1;2825:225:0;3069:4;3068:5;:16;;;;;3083:1;3077:3;:7;;;3068:16;:27;;;;;3094:1;3088:3;:7;;;3068:27;:39;;;;-1:-1:-1;3099:8:0;3068:39;:51;;;;-1:-1:-1;3111:8:0;3068:51;3064:914;;;3193:24;3202:4;3208:3;3213;3193:8;:24::i;:::-;3251:12;;;;;3266:1;3251:16;3236:31;;;;3290:10;;3251:12;;-1:-1:-1;3286:677:0;;;3330:22;3347:4;3330:16;:22::i;:::-;3325:619;;3462:5;3449:18;;3498;;;;:27;;3449:18;3498:27;3494:209;;;267:1;3558:18;;;:26;3494:209;;;223:1;3649:18;;;:26;3494:209;3736:24;3745:4;3751:3;3756;3736:8;:24::i;:::-;3791:10;;3729:31;;-1:-1:-1;3787:134:0;;;3847:4;3834:17;;;3847:4;-1:-1:-1;3787:134:0;2571:3;;;;;2542:1447;;;4004:10;;3999:108;;4038:16;4049:4;4038:10;:16::i;:::-;4031:23;;4076:19;4090:4;4076:13;:19::i;:::-;4069:26;;3999:108;-1:-1:-1;4124:4:0;;1987:2149;-1:-1:-1;;;;;;;1987:2149:0:o;26338:1930::-;26416:7;26479:9;:16;26499:2;26479:22;26475:74;;-1:-1:-1;26534:1:0;26518:19;;26475:74;26910:4;26895:20;;26889:27;26956:4;26941:20;;26935:27;27010:4;26995:20;;26989:27;26618:9;26981:36;27940:66;27927:79;;27923:129;;;28038:1;28023:17;;;;;;;27923:129;28068:1;:7;;28073:2;28068:7;;:18;;;;;28079:1;:7;;28084:2;28079:7;;28068:18;28064:68;;;28118:1;28103:17;;;;;;;28064:68;28236:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28236:24:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28236:24:0;;;;;;26338:1930;-1:-1:-1;;;;;;;26338:1930:0:o;37180:1662::-;37329:7;;:38;;;;;;;;;;;;37312:4;;-1:-1:-1;;;;;37329:7:0;;:22;;37352:7;;37361:5;;37329:38;;;;;37361:5;;37329:38;;37361:5;37312:4;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37329:38:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37329:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37378:7:0;;:30;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37378:7:0;;;;-1:-1:-1;37378:15:0;;-1:-1:-1;37378:30:0;;;;;:7;;:30;;;;;;;;:7;;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;37378:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37378:30:0;;;;37419:14;37461:1;37448:10;:14;37444:229;;;37479:7;;:42;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37479:7:0;;;;:21;;:42;;;;;:7;;:42;;;;;;;;:7;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;37479:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37479:42:0;;;;37545:27;37561:10;37545:15;:27::i;:::-;37587:7;;:34;;;;;;;;;;;;;;;;;;;;37536:36;;-1:-1:-1;;;;;;37587:7:0;;;;:17;;:34;;;;;:7;;:34;;;;;;;;:7;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;37587:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37587:34:0;;;;37636:25;37650:10;37636:13;:25::i;:::-;37699:9;;37683:13;;37699:21;;37713:6;37699:21;:13;:21;:::i;:::-;37683:37;;37735:4;:17;;;;;37751:1;37743:5;:9;37735:17;37731:368;;;37912:9;;:31;;;;;;37932:10;37912:31;;;;;;37946:5;;-1:-1:-1;;;;;37912:9:0;;:19;;:31;;;;;;;;;;;;;;:9;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;37912:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37912:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37912:31:0;:39;37908:132;;;37972:19;;;:52;;;;;;38013:10;37972:52;;;;;;;;-1:-1:-1;;;;;37972:19:0;;;;:23;;38002:9;;37972:52;;;;;;;;;;;;;;;38002:9;37972:19;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;37972:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37972:52:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;37908:132:0;38054:9;;:33;;;;;;38069:10;38054:33;;;;;;;;;;;;-1:-1:-1;;;;;38054:9:0;;;;:14;;:33;;;;;:9;;:33;;;;;;;;:9;;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;38054:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38054:33:0;;;;37731:368;38115:4;38111:608;;;38191:7;;:32;;;;;;-1:-1:-1;;;;;38191:32:0;;;;;;;;;;;;;;;:7;;;;;:12;;:32;;;;;:7;;:32;;;;;;;:7;;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;38191:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38191:32:0;;;;38111:608;;;38448:7;;:39;;;;;;-1:-1:-1;;;;;38448:7:0;;;:39;;;;;;;;;;;;;;:7;;:12;;:39;;;;;:7;;:39;;;;;;;:7;;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;38448:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;38502:19:0;;38561:15;;-1:-1:-1;;;;;38502:19:0;;;;-1:-1:-1;38502:24:0;;-1:-1:-1;38527:7:0;;38536:42;;38550:27;;:6;;:27;:10;:27;:::i;38536:42::-;38502:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38502:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38502:77:0;;;;38607:1;38598:6;:10;38594:114;;;38637:9;;:33;;;;;;-1:-1:-1;;;;;38637:33:0;;;;;;;;;;;;;;;:9;;;;;:14;;:33;;;;;;;;;;;;;;:9;;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;38637:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38637:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38637:33:0;38629:63;;;;;-1:-1:-1;;;38629:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38734:78;38748:7;38757:5;38764:10;38776:9;38787:6;38795:10;38807:4;38734:78;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;;;;;38734:78:0;;;;;;;;;;-1:-1:-1;;38734:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38734:78:0;-1:-1:-1;;38734:78:0;-1:-1:-1;38830:4:0;;37180:1662;-1:-1:-1;;;;;;;37180:1662:0:o;44611:851::-;44673:20;44704:14;44729:13;44753;44777;44801:14;44925:7;;;;;;;;;-1:-1:-1;;;;;44925:7:0;-1:-1:-1;;;;;44925:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44925:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44925:26:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;44925:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44826:125;;;;;;;;;;;;;;;;;;;;;;;;44962:18;44983:7;;;;;;;;;-1:-1:-1;;;;;44983:7:0;-1:-1:-1;;;;;44983:21:0;;45005:7;44983:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44983:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44983:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44983:30:0;;-1:-1:-1;45039:40:0;45056:14;:22;;45077:1;45056:22;;;45073:1;45056:22;45039:12;;:40;;;:16;:40;:::i;:::-;45024:55;-1:-1:-1;45099:40:0;:6;45136:1;45132;45118:15;;;:19;45099:40;:10;:40;:::i;:::-;45090:49;-1:-1:-1;45158:39:0;:5;45194:1;45190;45176:15;;;:19;45158:39;:9;:39;:::i;:::-;45150:47;-1:-1:-1;45216:39:0;:5;45252:1;45248;45234:15;;;:19;45216:39;:9;:39;:::i;:::-;45208:47;-1:-1:-1;45274:39:0;:5;45306:1;45292:15;;;:19;45274:39;:9;:39;:::i;:::-;45266:47;-1:-1:-1;45333:35:0;:6;45365:1;45352:14;;45333:35;:10;:35;:::i;:::-;45379:7;;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45324:44;;-1:-1:-1;;;;;;45379:7:0;;;;:24;;:75;;;;;:7;;:75;;;;;;;;:7;;:75;;;5:2:-1;;;;30:1;27;20:12;5:2;45379:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45379:75:0;;;;44611:851;;;;;;;;:::o;28544:269::-;28746:58;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;28746:58:0;;;;;;;28736:69;;;;;;28544:269::o;20679:471::-;20737:7;20982:6;20978:47;;-1:-1:-1;21012:1:0;21005:8;;20978:47;21049:5;;;21053:1;21049;:5;:1;21073:5;;;;;:10;21065:56;;;;-1:-1:-1;;;21065:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21618:333;21676:7;21775:1;21771;:5;21763:44;;;;;-1:-1:-1;;;21763:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21818:9;21834:1;21830;:5;;;;;;;21618:333;-1:-1:-1;;;;21618:333:0:o;19788:181::-;19846:7;19878:5;;;19902:6;;;;19894:46;;;;;-1:-1:-1;;;19894:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;24787:229;-1:-1:-1;;;;;24861:22:0;;24853:73;;;;-1:-1:-1;;;24853:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24963:6;;;24942:38;;-1:-1:-1;;;;;24942:38:0;;;;24963:6;;;24942:38;;;24991:6;:17;;;;-1:-1:-1;;;;;24991:17:0;;;;;;;;;;24787:229::o;1719:260::-;1874:57;1719:260;:::o;15752:281::-;15896:3;15995:20;;;;;15961:1;15946:11;;;15926:15;;;;15925:33;:37;;15995:20;;;15880:21;15986:38;;;15752:281::o;16530:201::-;16616:9;;;;16648:8;;;16655:1;16648:8;16680:10;;;;;;;16679:16;;;;;;16530:201::o;16426:96::-;16512:2;16504:10;;;;;16426:96;;;:::o;4849:2389::-;4931:11;;:::i;:::-;311:1;4999:41;;:32;5010:4;:10;;;5022:3;5027;4999:10;:32::i;:::-;:41;;;4995:188;;-1:-1:-1;5069:4:0;5056:17;;:4;5160:11;;4995:188;5193:36;;:::i;:::-;5240:31;5331:37;5353:4;5359:3;5364;5331:21;:37::i;:::-;5282:86;;-1:-1:-1;5282:86:0;-1:-1:-1;5415:29:0;;;5411:176;;-1:-1:-1;;5474:4:0;5461:17;;-1:-1:-1;5461:4:0;5564:11;;5411:176;5599:16;;;;;;;5758:802;5780:24;5776:28;;:1;:28;;;5758:802;;;5826:15;;;5856:21;;;5921:56;5939:4;5945:18;5964:1;5945:21;;;;;;;;;;;;;5968:3;5973;5921:17;:56::i;:::-;5892:85;;-1:-1:-1;5892:85:0;-1:-1:-1;6001:1:0;;-1:-1:-1;5992:557:0;6008:14;6004:18;;:1;:18;;;5992:557;;;6053:5;6048:24;;6068:4;6060:12;;6048:24;6118:50;6130:37;6139:8;6149:1;6152:14;6130:8;:37::i;:::-;6118:11;:50::i;:::-;6091:77;;;;;;;;6200:64;6209:4;:10;;;6221:4;:18;;;6241:10;6253;6200:8;:64::i;:::-;-1:-1:-1;;6187:77:0;:10;;;:77;6287:18;;;;:27;;267:1;6287:27;6283:251;;;6339:15;;;:20;;6358:1;6339:20;;;;;;;;6382:15;;;:20;;;;;;;;;6283:251;;;6451:15;;;:20;;;;;;;;;;;6494:15;;;:20;;6470:1;6494:20;;;;;;6283:251;6024:3;;;;;5992:557;;;5806:3;;5758:802;;;;6616:5;6612:413;;;6651:50;6660:4;:10;;;6672:4;:18;;;6692:3;6697;6651:8;:50::i;:::-;-1:-1:-1;;6638:63:0;:10;;;:63;6720:18;;;;:27;;267:1;6720:27;6716:149;;;6768:15;;;:20;;6787:1;6768:20;;;;;6716:149;;;6829:15;;;:20;;6848:1;6829:20;;;;;6716:149;6612:413;;;-1:-1:-1;;6910:4:0;6897:17;;-1:-1:-1;6897:4:0;;-1:-1:-1;7002:11:0;;-1:-1:-1;;;;;7002:11:0;6612:413;7068:18;;;;:27;;223:1;7068:27;7064:145;;;267:1;7112:18;;;:26;7064:145;;;223:1;7171:18;;;:26;7064:145;-1:-1:-1;7226:4:0;;4849:2389;-1:-1:-1;;;;;;;;;;4849:2389:0:o;4144:697::-;4285:10;;;;4212:4;;;;;4324:476;4340:2;4336:1;:6;;;:27;;;;;4347:16;4346:17;4336:27;4324:476;;;4385:20;;:::i;:::-;:53;;;;;;;;4426:1;4420;4416;:5;;;;;;;;4411:1;:11;4410:17;;;;;;;;4385:53;;;;;;;;4435:1;4431;:5;;;;;;;;4385:53;;;;4477:10;;;;4385:53;;-1:-1:-1;4453:10:0;;4466:40;;4385:53;4453:10;4489:7;;;;;4498:4;4503:1;4498:7;;;;4466:10;:40::i;:::-;4453:53;-1:-1:-1;4525:13:0;;;311:1;4525:13;4521:268;;;4572:5;4559:18;;;-1:-1:-1;;4596:18:0;;:10;;;:18;4640:32;;4559:4;;4655;;:7;;;;;4664:4;4669:1;4664:7;;;;4640:8;:32::i;:::-;4696:10;;4633:39;;-1:-1:-1;4691:83:0;;4750:4;4731:23;;4691:83;-1:-1:-1;;4365:3:0;;4324:476;;;-1:-1:-1;4817:16:0;;4144:697;-1:-1:-1;;;4144:697:0:o;10978:1572::-;11040:11;;:::i;:::-;11068:4;:12;;;:18;;11084:2;11068:18;11064:1457;;;-1:-1:-1;11159:4:0;11143:13;;;:20;:4;11178:11;;11064:1457;11305:10;;;;11222:7;;;;11330:878;11346:2;11342:1;:6;;;:28;;;;;11353:17;11352:18;11342:28;11330:878;;;11396:20;;:::i;:::-;:53;;;;;;;;11437:1;11431;11427;:5;;;;;;;;11422:1;:11;11421:17;;;;;;;;11396:53;;;;;;;;11446:1;11442;:5;;;;;;;;11396:53;;;;11492:10;;;;11396:53;;-1:-1:-1;11468:10:0;;11481:40;;11396:53;11468:10;11504:7;;11481:40;11468:53;-1:-1:-1;11544:13:0;;;311:1;11544:13;11540:653;;;223:1;11582:18;;;:26;11644:5;11631:18;;;-1:-1:-1;;11672:18:0;;:10;;;:18;11720:32;;11582:4;;11735;;:7;;11720:32;11780:10;;11713:39;;-1:-1:-1;11775:92:0;;11839:4;11819:24;;11775:92;267:1;11889:18;;;:26;11951:5;11938:18;;;-1:-1:-1;;11979:18:0;;:10;;;:18;12027:32;;11889:4;;12042;;:7;;12027:32;12087:10;;12020:39;;-1:-1:-1;12082:92:0;;12146:4;12126:24;;12082:92;-1:-1:-1;;11372:3:0;;;;;11330:878;;;12226:17;12222:288;;;12277:4;12264:17;;12222:288;;;12453:4;12437:13;;;:20;;12476:18;;12222:288;-1:-1:-1;12538:4:0;;10978:1572;-1:-1:-1;;;10978:1572:0:o;12558:1681::-;12623:11;;:::i;:::-;12661:4;;;;;12647:11;12789:1143;12811:1;12807;:5;;;:54;;;;;12817:6;:15;;;;12827:5;12817:15;:24;;;;12836:5;12817:24;:33;;;;12845:5;12817:33;:43;;;;12854:6;12817:43;12789:1143;;;12888:7;12883:1038;12905:1;12901;:5;;;:54;;;;;12911:6;:15;;;;12921:5;12911:15;:24;;;;12930:5;12911:24;:33;;;;12939:5;12911:33;:43;;;;12948:6;12911:43;12883:1038;;;13060:41;13072:4;:10;;;13089:1;13085;:5;13098:1;13094;:5;13060:11;:41::i;:::-;13027:74;;;:29;13039:4;:10;;;13051:1;13054;13027:11;:29::i;:::-;-1:-1:-1;;13027:74:0;;13023:137;;13135:5;13126:14;;13023:137;13253:35;13265:4;:10;;;13277:1;13285;13281;:5;13253:11;:35::i;:::-;13220:68;;;:29;13232:4;:10;;;13244:1;13247;13220:11;:29::i;:::-;-1:-1:-1;;13220:68:0;;13216:130;;13321:5;13313:13;;13216:130;13439:35;13451:4;:10;;;13468:1;13464;:5;13472:1;13439:11;:35::i;:::-;13406:68;;;:29;13418:4;:10;;;13430:1;13433;13406:11;:29::i;:::-;-1:-1:-1;;13406:68:0;;13402:130;;13507:5;13499:13;;13402:130;13625:41;13637:4;:10;;;13654:1;13650;:5;13663:1;13659;:5;13625:11;:41::i;:::-;13592:74;;;:29;13604:4;:10;;;13616:1;13619;13592:11;:29::i;:::-;-1:-1:-1;;13592:74:0;;13588:136;;13699:5;13691:13;;13588:136;13818:29;13830:4;:10;;;13842:1;13845;13818:11;:29::i;:::-;13785:62;;;:29;13797:4;:10;;;13809:1;13812;13785:11;:29::i;:::-;-1:-1:-1;;13785:62:0;;13781:125;;13881:5;13872:14;;13781:125;12957:3;;12883:1038;;;-1:-1:-1;12863:3:0;;12789:1143;;;;13946:6;:15;;;;13956:5;13946:15;:24;;;;13965:5;13946:24;:33;;;;13974:5;13946:33;:43;;;;13983:6;13946:43;13942:268;;;14025:4;14006:16;;;:23;14044:20;;;:11;;;:20;14079:18;;;:10;;;:18;14112;;;:10;;;:18;14145;;;:10;;;:18;14178:20;;;:11;;;:20;13942:268;-1:-1:-1;14227:4:0;;12558:1681;-1:-1:-1;;;;;12558:1681:0:o;43663:789::-;43725:20;43756:14;43781:13;43805;43829;43853:14;43977:7;;;;;;;;;-1:-1:-1;;;;;43977:7:0;-1:-1:-1;;;;;43977:24:0;;:26;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43977:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43977:26:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;43977:26:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43977:26:0;;-1:-1:-1;43977:26:0;-1:-1:-1;43977:26:0;-1:-1:-1;43977:26:0;;-1:-1:-1;43977:26:0;-1:-1:-1;44029:40:0;44046:14;:22;;44067:1;44046:22;;;44063:1;44046:22;44029:12;;:40;;;:16;:40;:::i;:::-;44014:55;-1:-1:-1;44089:40:0;:6;44126:1;44122;44108:15;;;:19;44089:40;:10;:40;:::i;:::-;44080:49;-1:-1:-1;44148:39:0;:5;44184:1;44180;44166:15;;;:19;44148:39;:9;:39;:::i;:::-;44140:47;-1:-1:-1;44206:39:0;:5;44242:1;44238;44224:15;;;:19;44206:39;:9;:39;:::i;:::-;44198:47;-1:-1:-1;44264:39:0;:5;44296:1;44282:15;;;:19;44264:39;:9;:39;:::i;:::-;44256:47;-1:-1:-1;44323:35:0;:6;44355:1;44342:14;;44323:35;:10;:35;:::i;:::-;44369:7;;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44314:44;;-1:-1:-1;;;;;;44369:7:0;;;;:24;;:75;;;;;:7;;:75;;;;;;;;:7;;:75;;;5:2:-1;;;;30:1;27;20:12;5:2;44369:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44369:75:0;;;;43663:789;;;;;;;:::o;20244:184::-;20302:7;20335:1;20330;:6;;20322:49;;;;;-1:-1:-1;;;20322:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20394:5:0;;;20244:184::o;15341:253::-;15420:5;15437:12;15452:19;15462:3;15467;15452:9;:19::i;:::-;-1:-1:-1;;15498:13:0;;;;;;;15516:19;15559:13;15532:1;15559:13;;-1:-1:-1;;15341:253:0;;;;;:::o;7246:1605::-;7340:17;;:::i;:::-;7359:5;7378:36;;:::i;:::-;7425:30;7470:22;;:::i;:::-;-1:-1:-1;7470:350:0;;;;;;;;7516:2;7470:350;;;;;;-1:-1:-1;7470:350:0;;;;;;;;;;;;;;;;;;;7565:1;7470:350;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7470:350:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7470:350:0;;;;;-1:-1:-1;7889:18:0;;:::i;:::-;7918:16;;7947:833;7969:1;7965;:5;;;7947:833;;;7998:4;8003:1;7998:7;;;;;;;;;;;;;;-1:-1:-1;7998:7:0;8052:1;8048:6;;;;8036:18;;;-1:-1:-1;8097:3:0;8101:1;8097:6;;;;8090:3;8085:18;8069:34;;8206:1;8190:13;:17;;;:38;;;;8227:1;8211:13;:17;;;8190:38;:59;;;;8248:1;8232:13;:17;;;8190:59;:80;;;;8269:1;8253:13;:17;;;8190:80;8184:585;;8305:66;8316:4;:10;;;8334:13;8356;8305:10;:66::i;:::-;8292:79;;8513:4;:18;;;8499:32;;:10;:32;;;8495:259;;8560:19;;;311:1;8560:19;8556:179;;8655:3;8608:18;8627:24;8608:44;;;;;;;;;;;;:50;8685:26;;;;;8556:179;7972:3;;7947:833;;;-1:-1:-1;8798:18:0;;8818:24;;-1:-1:-1;7246:1605:0;;-1:-1:-1;;;;;;;;;7246:1605:0:o;8859:2111::-;8969:7;8978:5;8996:22;9029:26;9058:1;9029:30;;9070:19;223:1;9104:27;;:4;:18;;;:27;;;9100:135;;;-1:-1:-1;267:1:0;9100:135;;;-1:-1:-1;223:1:0;9100:135;9374:9;;;;9484:1;9469:1438;9491:1;9487;:5;;;9469:1438;;;9519:4;9514:1382;;9565:6;;;9624;;;9555:16;;;9554:30;;;-1:-1:-1;9614:16:0;;9613:30;;;-1:-1:-1;9743:1:0;9569;9733:11;;;;;:26;;;9758:1;9748:7;:11;;;9733:26;:41;;;;9773:1;9763:7;:11;;;9733:41;:56;;;;9788:1;9778:7;:11;;;9733:56;9729:1152;;;9814:21;;;9881:1;9858:24;;9912:4;9905:11;;9729:1152;;;9973:54;9984:4;:10;;;10002:7;10018;9973:10;:54::i;:::-;9966:61;;10064:13;10056:21;;:4;:21;;;10052:810;;;10253:77;10261:14;10277:20;10305:7;10321;10253;:77::i;:::-;10212:118;;-1:-1:-1;10212:118:0;-1:-1:-1;10052:810:0;;;10372:4;:18;;;10364:26;;:4;:26;;;:35;;;;;10398:1;10394;:5;;;10364:35;10360:502;;;10520:4;10513:11;;10360:502;;;10725:21;;;10773:27;;;10834:4;10827:11;;10360:502;9494:3;;9469:1438;;;-1:-1:-1;10925:14:0;;10941:20;;-1:-1:-1;8859:2111:0;;-1:-1:-1;;;;;;;;;;8859:2111:0:o;14861:472::-;14953:7;14982:1;14976:3;:7;;;14972:59;;;14985:46;;-1:-1:-1;;;14985:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14972:59;15052:1;15046:3;:7;;;15042:59;;;15055:46;;-1:-1:-1;;;15055:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15042:59;15112:12;15127:19;15137:3;15142;15127:9;:19::i;:::-;15172;:27;;;;;;;15242:12;;15241:22;;;;15293:23;15172:19;15293:23;;;;:31;;15284:41;;;-1:-1:-1;;14861:472:0;;;;;;:::o;14654:199::-;14736:7;14756:12;14771:19;14781:3;14786;14771:9;:19::i;:::-;-1:-1:-1;;14809:13:0;;;;;;;14826:19;14808:37;;-1:-1:-1;;14654:199:0;;;;;:::o;15602:142::-;15711:1;:7;;;;15710:15;15703:2;15702:28;;;15734:1;15701:34;15693:43;;;15602:142::o;16041:377::-;16199:1;16193:7;16186:15;16204:2;16186:20;16232:21;;;;16295:1;16279:17;;;;;;16322:19;;;;;16352:13;;;;;;16041:377::o;29030:17440::-;;;;;;;;;-1:-1:-1;29030:17440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;29030:17440:0;;;-1:-1:-1;;29030:17440:0:o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://a1384626a88d9d844ae04a694e75dc7e22a96eae21c39a2fbca28181889237f8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,238.08 | 0.07 | $226.67 |
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.