*Submitted for verification at Etherscan.io on 2019-06-13
*Submitted for verification at Etherscan.io on 2019-07-11
*/
*/
/**
/**
* Source Code first verified at https://etherscan.io on Wednesday, April 17, 2019
* Source Code first verified at https://etherscan.io on Wednesday, April 17, 2019
(UTC) */
(UTC) */
pragma solidity 0.4.20;
pragma solidity 0.4.20;
/*
/*
Lucky Strike smart contracts version: 5.3.1
Lucky Strike smart contracts version: 6.0.0
last change: 2019-06-13
last change: 2019-06-13
*/
*/
/*
/*
This smart contract is intended for entertainment purposes only. Cryptocurrency gambling is illegal in many jurisdictions and users should consult their legal counsel regarding the legal status of cryptocurrency gambling in their jurisdictions.
This smart contract is intended for entertainment purposes only. Cryptocurrency gambling is illegal in many jurisdictions and users should consult their legal counsel regarding the legal status of cryptocurrency gambling in their jurisdictions.
Since developers of this smart contract are unable to determine which jurisdiction you reside in, you must check current laws including your local and state laws to find out if cryptocurrency gambling is legal in your area.
Since developers of this smart contract are unable to determine which jurisdiction you reside in, you must check current laws including your local and state laws to find out if cryptocurrency gambling is legal in your area.
If you reside in a location where cryptocurrency gambling is illegal, please do not interact with this smart contract in any way and leave it immediately.
If you reside in a location where cryptocurrency gambling is illegal, please do not interact with this smart contract in any way and leave it immediately.
*/
*/
library SafeMath {
library SafeMath {
/**
/**
* @dev Multiplies two numbers, throws on overflow.
* @dev Multiplies two numbers, throws on overflow.
*/
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
if (a == 0) {
return 0;
return 0;
}
}
c = a * b;
c = a * b;
assert(c / a == b);
assert(c / a == b);
return c;
return c;
}
}
/**
/**
* @dev Integer division of two numbers, truncating the quotient.
* @dev Integer division of two numbers, truncating the quotient.
*/
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
// assert(b > 0); // Solidity automatically throws when dividing by 0
// uint256 c = a / b;
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
return a / b;
}
}
/**
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
assert(b <= a);
return a - b;
return a - b;
}
}
/**
/**
* @dev Adds two numbers, throws on overflow.
* @dev Adds two numbers, throws on overflow.
*/
*/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
c = a + b;
assert(c >= a);
assert(c >= a);
return c;
return c;
}
}
}
}
/* "Interfaces" */
/* "Interfaces" */
// this is expected from another contracts
// this is expected from another contracts
// if it wants to spend tokens of behalf of the token owner in our contract
// if it wants to spend tokens of behalf of the token owner in our contract
// this can be used in many situations, for example to convert pre-ICO tokens to ICO tokens
// this can be used in many situations, for example to convert pre-ICO tokens to ICO tokens
// see 'approveAndCall' function
// see 'approveAndCall' function
contract allowanceRecipient {
contract allowanceRecipient {
function receiveApproval(address _from, uint256 _value, address _inContract, bytes _extraData) public returns (bool);
function receiveApproval(address _from, uint256 _value, address _inContract, bytes _extraData) public returns (bool);
}
}
// see:
// see:
// https://github.com/ethereum/EIPs/issues/677
// https://github.com/ethereum/EIPs/issues/677
contract tokenRecipient {
contract tokenRecipient {
function tokenFallback(address _from, uint256 _value, bytes _extraData) public returns (bool);
function tokenFallback(address _from, uint256 _value, bytes _extraData) public returns (bool);