More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,139 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem Tokens | 16240898 | 734 days ago | IN | 0 ETH | 0.00192239 | ||||
Redeem Tokens | 16012129 | 766 days ago | IN | 0 ETH | 0.00153196 | ||||
Redeem Tokens | 14114313 | 1059 days ago | IN | 0 ETH | 0.01135835 | ||||
Redeem Tokens | 13939403 | 1086 days ago | IN | 0 ETH | 0.00658571 | ||||
Redeem Tokens | 13763109 | 1113 days ago | IN | 0 ETH | 0.00716519 | ||||
Redeem Tokens | 13649587 | 1132 days ago | IN | 0 ETH | 0.01024576 | ||||
Redeem Tokens | 13436039 | 1165 days ago | IN | 0 ETH | 0.00735759 | ||||
Redeem Tokens | 13377859 | 1174 days ago | IN | 0 ETH | 0.00825019 | ||||
Redeem Tokens | 13256550 | 1193 days ago | IN | 0 ETH | 0.00399705 | ||||
Redeem Tokens | 13098894 | 1218 days ago | IN | 0 ETH | 0.00739374 | ||||
Redeem Tokens | 13003471 | 1232 days ago | IN | 0 ETH | 0.00485747 | ||||
Redeem Tokens | 12940277 | 1242 days ago | IN | 0 ETH | 0.00353641 | ||||
Redeem Tokens | 12894991 | 1249 days ago | IN | 0 ETH | 0.00121564 | ||||
Redeem Tokens | 12866014 | 1254 days ago | IN | 0 ETH | 0.00132615 | ||||
Redeem Tokens | 12801568 | 1264 days ago | IN | 0 ETH | 0.00129732 | ||||
Redeem Tokens | 12787726 | 1266 days ago | IN | 0 ETH | 0.00298921 | ||||
Redeem Tokens | 12759751 | 1270 days ago | IN | 0 ETH | 0.00076313 | ||||
Redeem Tokens | 12706538 | 1279 days ago | IN | 0 ETH | 0.00121564 | ||||
Redeem Tokens | 12664462 | 1285 days ago | IN | 0 ETH | 0.00110513 | ||||
Redeem Tokens | 12608266 | 1294 days ago | IN | 0 ETH | 0.00280239 | ||||
Redeem Tokens | 12606189 | 1294 days ago | IN | 0 ETH | 0.00186826 | ||||
Redeem Tokens | 12587982 | 1297 days ago | IN | 0 ETH | 0.00221026 | ||||
Redeem Tokens | 12583948 | 1298 days ago | IN | 0 ETH | 0.00137363 | ||||
Redeem Tokens | 12581892 | 1298 days ago | IN | 0 ETH | 0.00221026 | ||||
Redeem Tokens | 12560574 | 1301 days ago | IN | 0 ETH | 0.00221026 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12229010 | 1353 days ago | 78.74940656 ETH |
Loading...
Loading
Contract Name:
Ignition
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-04-05 */ // File: @openzeppelin/contracts/utils/Context.sol pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity >=0.6.0 <0.8.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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { 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 virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity >=0.6.0 <0.8.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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @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"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity >=0.6.0 <0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/Ignition.sol pragma solidity 0.6.11; pragma experimental ABIEncoderV2; struct Whitelist { address wallet; uint256 amount; uint256 rewardedAmount; uint256 tier; bool whitelist; bool redeemed; } struct Tier { uint256 paidAmount; uint256 maxPayableAmount; } contract Ignition is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; mapping(address => Whitelist) public whitelist; mapping(uint256 => Tier) public tiers; IERC20 private _token; IERC20 private _paidToken; bool public isFinalized; uint256 public soldAmount; uint256 public totalRaise; constructor() public { // Tiers tiers[1] = Tier(0, 48943074310269700); tiers[2] = Tier(0, 97886148620539400); tiers[3] = Tier(0, 146829222930809000); } /** * Crowdsale Token */ function setTokenAddress(IERC20 token) external onlyOwner returns (bool) { _token = token; return true; } /** * Crowdsale Token */ function setPAIDTokenAddress(IERC20 token) external onlyOwner returns (bool) { _paidToken = token; return true; } /** * Add Whitelist * * @param {address[]} * @return {bool} */ function addWhitelist(address[] memory addresses, uint256 tier) external onlyOwner returns (bool) { uint256 addressesLength = addresses.length; for (uint256 i = 0; i < addressesLength; i++) { address address_ = addresses[i]; Whitelist memory whitelist_ = Whitelist(address_, 0, 0, tier, true, false); whitelist[address_] = whitelist_; } return true; } /** * Get Contract Address * * Crowdsale token * @return {address} address */ function getContractAddress() public view returns (address) { return address(this); } /** * Get Total Token * * @return {uint256} totalToken */ function getTotalToken() public view returns (uint256) { return _token.balanceOf(getContractAddress()); } /** * Get Start Time * * @return {uint256} timestamp */ function getStartTime() public pure returns (uint256) { return 1617623940; // DEEPER TIMESTAMP DAO Maker } /** * Is Sale Start */ function isStart() public view returns (bool) { uint256 startTime = getStartTime(); uint256 timestamp = block.timestamp; return timestamp > startTime; } function muldiv(uint256 x, uint256 yPercentage) internal pure returns (uint256 c) { return x.mul(yPercentage).div(10e10); } /** * Get Rate * * 1 Ether = ? Token * Example: 1 Ether = 30 Token * @return {uint256} rate */ function getRate() public view returns (uint256) { return 170265833300000000000000; } /** * Calculate Token */ function calculateAmount(uint256 amount) public view returns (uint256) { uint256 rate = getRate(); uint256 oneEther = 1 ether; uint256 rate_30perct = rate * 3 / 10; uint256 etherMul = muldiv(amount, rate_30perct).div(10e6); return etherMul; } /** * Finalize to sale * * @return {uint256} timestamp */ function finalize() external onlyOwner returns (bool) { isFinalized = true; return isFinalized; } /** * Redeem Rewarded Tokens */ function redeemTokens() external returns (bool) { require(whitelist[_msgSender()].whitelist, "Sender isn't in whitelist"); Whitelist memory whitelistWallet = whitelist[_msgSender()]; require(isFinalized, "Sale isn't finalized yet"); require(!whitelistWallet.redeemed, "Redeemed before"); require(whitelistWallet.rewardedAmount > 0, "No token"); whitelist[_msgSender()].redeemed = true; _token.safeTransfer( whitelistWallet.wallet, whitelistWallet.rewardedAmount ); } /** * Get whitelist wallet */ function getWhitelist(address _address) public view returns ( address, uint256, uint256, bool, bool, uint256 ) { if (whitelist[_address].whitelist) { Whitelist memory whitelistWallet = whitelist[_address]; return ( whitelistWallet.wallet, whitelistWallet.amount, whitelistWallet.rewardedAmount, whitelistWallet.redeemed, true, whitelistWallet.tier ); } return (address(0), 0, 0, false, false, 0); } /** * PAID Token Control */ function controlPAIDTokens() public view returns (bool) { address sender = _msgSender(); uint256 tier = whitelist[sender].tier; return _paidToken.balanceOf(sender) >= tiers[tier].paidAmount; } /** * Revert receive ether without buyTokens */ fallback() external { revert(); } function withdraw() external onlyOwner { // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = _msgSender().call{value: address(this).balance}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * buyTokens */ function buyTokens() external payable { address sender = _msgSender(); uint256 value = msg.value; require(isStart(), "Sale isn't started yet"); require(!isFinalized, "Sale is finished"); require(whitelist[sender].whitelist, "You're not in whitelist"); uint256 tier = whitelist[sender].tier; require( value <= tiers[tier].maxPayableAmount, "You can't send ether more than max payable amount" ); // Require removed because is not being use on DEEPER pools //require(controlPAIDTokens(), "You dont have enough paid token"); uint256 totalToken = getTotalToken(); uint256 rewardedAmount = calculateAmount(value); require( soldAmount.add(rewardedAmount) <= totalToken, "Insufficient token" ); whitelist[sender].amount = value; whitelist[sender].rewardedAmount = rewardedAmount; soldAmount = soldAmount.add(rewardedAmount); totalRaise = totalRaise.add(value); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"addWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controlPAIDTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getTotalToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getWhitelist","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"setPAIDTokenAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"setTokenAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"soldAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tiers","outputs":[{"internalType":"uint256","name":"paidAmount","type":"uint256"},{"internalType":"uint256","name":"maxPayableAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRaise","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardedAmount","type":"uint256"},{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"bool","name":"whitelist","type":"bool"},{"internalType":"bool","name":"redeemed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600061002161019e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060405180604001604052806000815260200166ade1777e7aab048152506002600060018152602001908152602001600020600082015181600001556020820151816001015590505060405180604001604052806000815260200167015bc2eefcf5560881525060026000600281526020019081526020016000206000820151816000015560208201518160010155905050604051806040016040528060008152602001670209a4667b7000a8815250600260006003815260200190815260200160002060008201518160000155602082015181600101559050506101a6565b600033905090565b612b7f80620001b66000396000f3fe6080604052600436106101445760003560e01c8063715018a6116100b6578063c828371e1161006f578063c828371e14610481578063d0febe4c146104ac578063de6e7959146104b6578063e9a9c50c146104f3578063f2fde38b1461051e578063fa1a5f591461054757610145565b8063715018a61461037c5780637ad2c3b3146103935780638a55d36e146103be5780638d4e4083146103e95780638da5cb5b146104145780639b19251a1461043f57610145565b80633ccfd60b116101085780633ccfd60b1461026a5780633d0673d41461028157806348dc5893146102ac5780634bb278f3146102e9578063645b670114610314578063679aefce1461035157610145565b8063039af9eb1461015757806326a4e8d21461019557806330edc0f5146101d257806332a2c5d0146102145780633996dc8f1461023f57610145565b5b34801561015157600080fd5b50600080fd5b34801561016357600080fd5b5061017e60048036038101906101799190611f6e565b610572565b60405161018c92919061299f565b60405180910390f35b3480156101a157600080fd5b506101bc60048036038101906101b79190611f45565b610596565b6040516101c99190612707565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611e9f565b61065e565b60405161020b96959493929190612645565b60405180910390f35b34801561022057600080fd5b50610229610812565b6040516102369190612601565b60405180910390f35b34801561024b57600080fd5b5061025461081a565b6040516102619190612984565b60405180910390f35b34801561027657600080fd5b5061027f610820565b005b34801561028d57600080fd5b50610296610952565b6040516102a39190612984565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190611f6e565b610a0b565b6040516102e09190612984565b60405180910390f35b3480156102f557600080fd5b506102fe610a66565b60405161030b9190612707565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190611ec8565b610b14565b6040516103489190612707565b60405180910390f35b34801561035d57600080fd5b50610366610d16565b6040516103739190612984565b60405180910390f35b34801561038857600080fd5b50610391610d28565b005b34801561039f57600080fd5b506103a8610e63565b6040516103b59190612707565b60405180910390f35b3480156103ca57600080fd5b506103d3610f82565b6040516103e09190612707565b60405180910390f35b3480156103f557600080fd5b506103fe610f9e565b60405161040b9190612707565b60405180910390f35b34801561042057600080fd5b50610429610fb1565b6040516104369190612601565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190611e9f565b610fda565b604051610478969594939291906126a6565b60405180910390f35b34801561048d57600080fd5b50610496611050565b6040516104a39190612984565b60405180910390f35b6104b461105c565b005b3480156104c257600080fd5b506104dd60048036038101906104d89190611f45565b61136e565b6040516104ea9190612707565b60405180910390f35b3480156104ff57600080fd5b50610508611436565b6040516105159190612707565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190611e9f565b611768565b005b34801561055357600080fd5b5061055c611912565b6040516105699190612984565b60405180910390f35b60026020528060005260406000206000915090508060000154908060010154905082565b60006105a0611918565b73ffffffffffffffffffffffffffffffffffffffff166105be610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b906128e4565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600080600080600080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff16156107e7576106c4611d63565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505090508060000151816020015182604001518360a001516001856060015196509650965096509650965050610809565b6000806000806000808595508494508393508090509550955095509550955095505b91939550919395565b600030905090565b60065481565b610828611918565b73ffffffffffffffffffffffffffffffffffffffff16610846610fb1565b73ffffffffffffffffffffffffffffffffffffffff161461089c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610893906128e4565b60405180910390fd5b60006108a6611918565b73ffffffffffffffffffffffffffffffffffffffff16476040516108c9906125ec565b60006040518083038185875af1925050503d8060008114610906576040519150601f19603f3d011682016040523d82523d6000602084013e61090b565b606091505b505090508061094f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094690612804565b60405180910390fd5b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161099a610812565b6040518263ffffffff1660e01b81526004016109b69190612601565b60206040518083038186803b1580156109ce57600080fd5b505afa1580156109e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a069190611f97565b905090565b600080610a16610d16565b90506000670de0b6b3a764000090506000600a6003840281610a3457fe5b0490506000610a5862989680610a4a8885611920565b61195490919063ffffffff16565b905080945050505050919050565b6000610a70611918565b73ffffffffffffffffffffffffffffffffffffffff16610a8e610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb906128e4565b60405180910390fd5b6001600460146101000a81548160ff021916908315150217905550600460149054906101000a900460ff16905090565b6000610b1e611918565b73ffffffffffffffffffffffffffffffffffffffff16610b3c610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b89906128e4565b60405180910390fd5b60008351905060008090505b81811015610d0a576000858281518110610bb457fe5b60200260200101519050610bc6611d63565b6040518060c001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200187815260200160011515815260200160001515815250905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548160ff02191690831515021790555090505050508080600101915050610b9e565b50600191505092915050565b600069240e211aff4d78194000905090565b610d30611918565b73ffffffffffffffffffffffffffffffffffffffff16610d4e610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b906128e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080610e6e611918565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015490506002600082815260200190815260200160002060000154600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610f299190612601565b60206040518083038186803b158015610f4157600080fd5b505afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190611f97565b10159250505090565b600080610f8d611050565b905060004290508181119250505090565b600460149054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900460ff16908060040160019054906101000a900460ff16905086565b600063606afb84905090565b6000611066611918565b90506000349050611075610f82565b6110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90612864565b60405180910390fd5b600460149054906101000a900460ff1615611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90612964565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff16611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a90612944565b60405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015490506002600082815260200190815260200160002060010154821115611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a906128a4565b60405180910390fd5b600061123d610952565b9050600061124a84610a0b565b905081611262826005546119aa90919063ffffffff16565b11156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90612764565b60405180910390fd5b83600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611346816005546119aa90919063ffffffff16565b600581905550611361846006546119aa90919063ffffffff16565b6006819055505050505050565b6000611378611918565b73ffffffffffffffffffffffffffffffffffffffff16611396610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906128e4565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600060016000611444611918565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff166114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c5906127e4565b60405180910390fd5b6114d6611d63565b600160006114e2611918565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250509050600460149054906101000a900460ff16611622576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611619906127c4565b60405180910390fd5b8060a0015115611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e906127a4565b60405180910390fd5b60008160400151116116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590612884565b60405180910390fd5b60018060006116bb611918565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160016101000a81548160ff02191690831515021790555061176481600001518260400151600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119ff9092919063ffffffff16565b5090565b611770611918565b73ffffffffffffffffffffffffffffffffffffffff1661178e610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db906128e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90612744565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b600033905090565b600061194c64174876e80061193e8486611a8590919063ffffffff16565b61195490919063ffffffff16565b905092915050565b6000808211611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90612844565b60405180910390fd5b8183816119a157fe5b04905092915050565b6000808284019050838110156119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ec90612784565b60405180910390fd5b8091505092915050565b611a808363a9059cbb60e01b8484604051602401611a1e92919061261c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611af5565b505050565b600080831415611a985760009050611aef565b6000828402905082848281611aa957fe5b0414611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae1906128c4565b60405180910390fd5b809150505b92915050565b6060611b57826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611bbc9092919063ffffffff16565b9050600081511115611bb75780806020019051810190611b779190611f1c565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90612924565b60405180910390fd5b5b505050565b6060611bcb8484600085611bd4565b90509392505050565b606082471015611c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1090612824565b60405180910390fd5b611c2285611ce9565b611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890612904565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff168587604051611c8b91906125d5565b60006040518083038185875af1925050503d8060008114611cc8576040519150601f19603f3d011682016040523d82523d6000602084013e611ccd565b606091505b5091509150611cdd828286611cfc565b92505050949350505050565b600080823b905060008111915050919050565b60608315611d0c57829050611d5c565b600083511115611d1f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d539190612722565b60405180910390fd5b9392505050565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b600081359050611dc281612aed565b92915050565b600082601f830112611dd957600080fd5b8135611dec611de7826129f5565b6129c8565b91508181835260208401935060208101905083856020840282011115611e1157600080fd5b60005b83811015611e415781611e278882611db3565b845260208401935060208301925050600181019050611e14565b5050505092915050565b600081519050611e5a81612b04565b92915050565b600081359050611e6f81612b1b565b92915050565b600081359050611e8481612b32565b92915050565b600081519050611e9981612b32565b92915050565b600060208284031215611eb157600080fd5b6000611ebf84828501611db3565b91505092915050565b60008060408385031215611edb57600080fd5b600083013567ffffffffffffffff811115611ef557600080fd5b611f0185828601611dc8565b9250506020611f1285828601611e75565b9150509250929050565b600060208284031215611f2e57600080fd5b6000611f3c84828501611e4b565b91505092915050565b600060208284031215611f5757600080fd5b6000611f6584828501611e60565b91505092915050565b600060208284031215611f8057600080fd5b6000611f8e84828501611e75565b91505092915050565b600060208284031215611fa957600080fd5b6000611fb784828501611e8a565b91505092915050565b611fc981612a4f565b82525050565b611fd881612a61565b82525050565b6000611fe982612a1d565b611ff38185612a33565b9350612003818560208601612aa9565b80840191505092915050565b600061201a82612a28565b6120248185612a3e565b9350612034818560208601612aa9565b61203d81612adc565b840191505092915050565b6000612055602683612a3e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120bb601283612a3e565b91507f496e73756666696369656e7420746f6b656e00000000000000000000000000006000830152602082019050919050565b60006120fb601b83612a3e565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600061213b600f83612a3e565b91507f52656465656d6564206265666f726500000000000000000000000000000000006000830152602082019050919050565b600061217b601883612a3e565b91507f53616c652069736e27742066696e616c697a65642079657400000000000000006000830152602082019050919050565b60006121bb601983612a3e565b91507f53656e6465722069736e277420696e2077686974656c697374000000000000006000830152602082019050919050565b60006121fb603a83612a3e565b91507f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008301527f6563697069656e74206d617920686176652072657665727465640000000000006020830152604082019050919050565b6000612261602683612a3e565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006122c7601a83612a3e565b91507f536166654d6174683a206469766973696f6e206279207a65726f0000000000006000830152602082019050919050565b6000612307601683612a3e565b91507f53616c652069736e2774207374617274656420796574000000000000000000006000830152602082019050919050565b6000612347600883612a3e565b91507f4e6f20746f6b656e0000000000000000000000000000000000000000000000006000830152602082019050919050565b6000612387603183612a3e565b91507f596f752063616e27742073656e64206574686572206d6f7265207468616e206d60008301527f61782070617961626c6520616d6f756e740000000000000000000000000000006020830152604082019050919050565b60006123ed602183612a3e565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612453602083612a3e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612493600083612a33565b9150600082019050919050565b60006124ad601d83612a3e565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006124ed602a83612a3e565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612553601783612a3e565b91507f596f75277265206e6f7420696e2077686974656c6973740000000000000000006000830152602082019050919050565b6000612593601083612a3e565b91507f53616c652069732066696e6973686564000000000000000000000000000000006000830152602082019050919050565b6125cf81612a9f565b82525050565b60006125e18284611fde565b915081905092915050565b60006125f782612486565b9150819050919050565b60006020820190506126166000830184611fc0565b92915050565b60006040820190506126316000830185611fc0565b61263e60208301846125c6565b9392505050565b600060c08201905061265a6000830189611fc0565b61266760208301886125c6565b61267460408301876125c6565b6126816060830186611fcf565b61268e6080830185611fcf565b61269b60a08301846125c6565b979650505050505050565b600060c0820190506126bb6000830189611fc0565b6126c860208301886125c6565b6126d560408301876125c6565b6126e260608301866125c6565b6126ef6080830185611fcf565b6126fc60a0830184611fcf565b979650505050505050565b600060208201905061271c6000830184611fcf565b92915050565b6000602082019050818103600083015261273c818461200f565b905092915050565b6000602082019050818103600083015261275d81612048565b9050919050565b6000602082019050818103600083015261277d816120ae565b9050919050565b6000602082019050818103600083015261279d816120ee565b9050919050565b600060208201905081810360008301526127bd8161212e565b9050919050565b600060208201905081810360008301526127dd8161216e565b9050919050565b600060208201905081810360008301526127fd816121ae565b9050919050565b6000602082019050818103600083015261281d816121ee565b9050919050565b6000602082019050818103600083015261283d81612254565b9050919050565b6000602082019050818103600083015261285d816122ba565b9050919050565b6000602082019050818103600083015261287d816122fa565b9050919050565b6000602082019050818103600083015261289d8161233a565b9050919050565b600060208201905081810360008301526128bd8161237a565b9050919050565b600060208201905081810360008301526128dd816123e0565b9050919050565b600060208201905081810360008301526128fd81612446565b9050919050565b6000602082019050818103600083015261291d816124a0565b9050919050565b6000602082019050818103600083015261293d816124e0565b9050919050565b6000602082019050818103600083015261295d81612546565b9050919050565b6000602082019050818103600083015261297d81612586565b9050919050565b600060208201905061299960008301846125c6565b92915050565b60006040820190506129b460008301856125c6565b6129c160208301846125c6565b9392505050565b6000604051905081810181811067ffffffffffffffff821117156129eb57600080fd5b8060405250919050565b600067ffffffffffffffff821115612a0c57600080fd5b602082029050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000612a5a82612a7f565b9050919050565b60008115159050919050565b6000612a7882612a4f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015612ac7578082015181840152602081019050612aac565b83811115612ad6576000848401525b50505050565b6000601f19601f8301169050919050565b612af681612a4f565b8114612b0157600080fd5b50565b612b0d81612a61565b8114612b1857600080fd5b50565b612b2481612a6d565b8114612b2f57600080fd5b50565b612b3b81612a9f565b8114612b4657600080fd5b5056fea2646970667358221220027b3014743a5a03db2764328f487b3450a2695647f697b98dbb497154ebe8a564736f6c634300060b0033
Deployed Bytecode
0x6080604052600436106101445760003560e01c8063715018a6116100b6578063c828371e1161006f578063c828371e14610481578063d0febe4c146104ac578063de6e7959146104b6578063e9a9c50c146104f3578063f2fde38b1461051e578063fa1a5f591461054757610145565b8063715018a61461037c5780637ad2c3b3146103935780638a55d36e146103be5780638d4e4083146103e95780638da5cb5b146104145780639b19251a1461043f57610145565b80633ccfd60b116101085780633ccfd60b1461026a5780633d0673d41461028157806348dc5893146102ac5780634bb278f3146102e9578063645b670114610314578063679aefce1461035157610145565b8063039af9eb1461015757806326a4e8d21461019557806330edc0f5146101d257806332a2c5d0146102145780633996dc8f1461023f57610145565b5b34801561015157600080fd5b50600080fd5b34801561016357600080fd5b5061017e60048036038101906101799190611f6e565b610572565b60405161018c92919061299f565b60405180910390f35b3480156101a157600080fd5b506101bc60048036038101906101b79190611f45565b610596565b6040516101c99190612707565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611e9f565b61065e565b60405161020b96959493929190612645565b60405180910390f35b34801561022057600080fd5b50610229610812565b6040516102369190612601565b60405180910390f35b34801561024b57600080fd5b5061025461081a565b6040516102619190612984565b60405180910390f35b34801561027657600080fd5b5061027f610820565b005b34801561028d57600080fd5b50610296610952565b6040516102a39190612984565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190611f6e565b610a0b565b6040516102e09190612984565b60405180910390f35b3480156102f557600080fd5b506102fe610a66565b60405161030b9190612707565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190611ec8565b610b14565b6040516103489190612707565b60405180910390f35b34801561035d57600080fd5b50610366610d16565b6040516103739190612984565b60405180910390f35b34801561038857600080fd5b50610391610d28565b005b34801561039f57600080fd5b506103a8610e63565b6040516103b59190612707565b60405180910390f35b3480156103ca57600080fd5b506103d3610f82565b6040516103e09190612707565b60405180910390f35b3480156103f557600080fd5b506103fe610f9e565b60405161040b9190612707565b60405180910390f35b34801561042057600080fd5b50610429610fb1565b6040516104369190612601565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190611e9f565b610fda565b604051610478969594939291906126a6565b60405180910390f35b34801561048d57600080fd5b50610496611050565b6040516104a39190612984565b60405180910390f35b6104b461105c565b005b3480156104c257600080fd5b506104dd60048036038101906104d89190611f45565b61136e565b6040516104ea9190612707565b60405180910390f35b3480156104ff57600080fd5b50610508611436565b6040516105159190612707565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190611e9f565b611768565b005b34801561055357600080fd5b5061055c611912565b6040516105699190612984565b60405180910390f35b60026020528060005260406000206000915090508060000154908060010154905082565b60006105a0611918565b73ffffffffffffffffffffffffffffffffffffffff166105be610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b906128e4565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600080600080600080600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff16156107e7576106c4611d63565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505090508060000151816020015182604001518360a001516001856060015196509650965096509650965050610809565b6000806000806000808595508494508393508090509550955095509550955095505b91939550919395565b600030905090565b60065481565b610828611918565b73ffffffffffffffffffffffffffffffffffffffff16610846610fb1565b73ffffffffffffffffffffffffffffffffffffffff161461089c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610893906128e4565b60405180910390fd5b60006108a6611918565b73ffffffffffffffffffffffffffffffffffffffff16476040516108c9906125ec565b60006040518083038185875af1925050503d8060008114610906576040519150601f19603f3d011682016040523d82523d6000602084013e61090b565b606091505b505090508061094f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094690612804565b60405180910390fd5b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a0823161099a610812565b6040518263ffffffff1660e01b81526004016109b69190612601565b60206040518083038186803b1580156109ce57600080fd5b505afa1580156109e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a069190611f97565b905090565b600080610a16610d16565b90506000670de0b6b3a764000090506000600a6003840281610a3457fe5b0490506000610a5862989680610a4a8885611920565b61195490919063ffffffff16565b905080945050505050919050565b6000610a70611918565b73ffffffffffffffffffffffffffffffffffffffff16610a8e610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb906128e4565b60405180910390fd5b6001600460146101000a81548160ff021916908315150217905550600460149054906101000a900460ff16905090565b6000610b1e611918565b73ffffffffffffffffffffffffffffffffffffffff16610b3c610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b89906128e4565b60405180910390fd5b60008351905060008090505b81811015610d0a576000858281518110610bb457fe5b60200260200101519050610bc6611d63565b6040518060c001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200187815260200160011515815260200160001515815250905080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548160ff02191690831515021790555090505050508080600101915050610b9e565b50600191505092915050565b600069240e211aff4d78194000905090565b610d30611918565b73ffffffffffffffffffffffffffffffffffffffff16610d4e610fb1565b73ffffffffffffffffffffffffffffffffffffffff1614610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b906128e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080610e6e611918565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015490506002600082815260200190815260200160002060000154600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610f299190612601565b60206040518083038186803b158015610f4157600080fd5b505afa158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f799190611f97565b10159250505090565b600080610f8d611050565b905060004290508181119250505090565b600460149054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900460ff16908060040160019054906101000a900460ff16905086565b600063606afb84905090565b6000611066611918565b90506000349050611075610f82565b6110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90612864565b60405180910390fd5b600460149054906101000a900460ff1615611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90612964565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff16611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a90612944565b60405180910390fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015490506002600082815260200190815260200160002060010154821115611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a906128a4565b60405180910390fd5b600061123d610952565b9050600061124a84610a0b565b905081611262826005546119aa90919063ffffffff16565b11156112a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129a90612764565b60405180910390fd5b83600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611346816005546119aa90919063ffffffff16565b600581905550611361846006546119aa90919063ffffffff16565b6006819055505050505050565b6000611378611918565b73ffffffffffffffffffffffffffffffffffffffff16611396610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e3906128e4565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600060016000611444611918565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff166114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c5906127e4565b60405180910390fd5b6114d6611d63565b600160006114e2611918565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060c00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250509050600460149054906101000a900460ff16611622576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611619906127c4565b60405180910390fd5b8060a0015115611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e906127a4565b60405180910390fd5b60008160400151116116ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a590612884565b60405180910390fd5b60018060006116bb611918565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160016101000a81548160ff02191690831515021790555061176481600001518260400151600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166119ff9092919063ffffffff16565b5090565b611770611918565b73ffffffffffffffffffffffffffffffffffffffff1661178e610fb1565b73ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db906128e4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90612744565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b600033905090565b600061194c64174876e80061193e8486611a8590919063ffffffff16565b61195490919063ffffffff16565b905092915050565b6000808211611998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198f90612844565b60405180910390fd5b8183816119a157fe5b04905092915050565b6000808284019050838110156119f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ec90612784565b60405180910390fd5b8091505092915050565b611a808363a9059cbb60e01b8484604051602401611a1e92919061261c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611af5565b505050565b600080831415611a985760009050611aef565b6000828402905082848281611aa957fe5b0414611aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae1906128c4565b60405180910390fd5b809150505b92915050565b6060611b57826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611bbc9092919063ffffffff16565b9050600081511115611bb75780806020019051810190611b779190611f1c565b611bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bad90612924565b60405180910390fd5b5b505050565b6060611bcb8484600085611bd4565b90509392505050565b606082471015611c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1090612824565b60405180910390fd5b611c2285611ce9565b611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890612904565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff168587604051611c8b91906125d5565b60006040518083038185875af1925050503d8060008114611cc8576040519150601f19603f3d011682016040523d82523d6000602084013e611ccd565b606091505b5091509150611cdd828286611cfc565b92505050949350505050565b600080823b905060008111915050919050565b60608315611d0c57829050611d5c565b600083511115611d1f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d539190612722565b60405180910390fd5b9392505050565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b600081359050611dc281612aed565b92915050565b600082601f830112611dd957600080fd5b8135611dec611de7826129f5565b6129c8565b91508181835260208401935060208101905083856020840282011115611e1157600080fd5b60005b83811015611e415781611e278882611db3565b845260208401935060208301925050600181019050611e14565b5050505092915050565b600081519050611e5a81612b04565b92915050565b600081359050611e6f81612b1b565b92915050565b600081359050611e8481612b32565b92915050565b600081519050611e9981612b32565b92915050565b600060208284031215611eb157600080fd5b6000611ebf84828501611db3565b91505092915050565b60008060408385031215611edb57600080fd5b600083013567ffffffffffffffff811115611ef557600080fd5b611f0185828601611dc8565b9250506020611f1285828601611e75565b9150509250929050565b600060208284031215611f2e57600080fd5b6000611f3c84828501611e4b565b91505092915050565b600060208284031215611f5757600080fd5b6000611f6584828501611e60565b91505092915050565b600060208284031215611f8057600080fd5b6000611f8e84828501611e75565b91505092915050565b600060208284031215611fa957600080fd5b6000611fb784828501611e8a565b91505092915050565b611fc981612a4f565b82525050565b611fd881612a61565b82525050565b6000611fe982612a1d565b611ff38185612a33565b9350612003818560208601612aa9565b80840191505092915050565b600061201a82612a28565b6120248185612a3e565b9350612034818560208601612aa9565b61203d81612adc565b840191505092915050565b6000612055602683612a3e565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006120bb601283612a3e565b91507f496e73756666696369656e7420746f6b656e00000000000000000000000000006000830152602082019050919050565b60006120fb601b83612a3e565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600061213b600f83612a3e565b91507f52656465656d6564206265666f726500000000000000000000000000000000006000830152602082019050919050565b600061217b601883612a3e565b91507f53616c652069736e27742066696e616c697a65642079657400000000000000006000830152602082019050919050565b60006121bb601983612a3e565b91507f53656e6465722069736e277420696e2077686974656c697374000000000000006000830152602082019050919050565b60006121fb603a83612a3e565b91507f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008301527f6563697069656e74206d617920686176652072657665727465640000000000006020830152604082019050919050565b6000612261602683612a3e565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006122c7601a83612a3e565b91507f536166654d6174683a206469766973696f6e206279207a65726f0000000000006000830152602082019050919050565b6000612307601683612a3e565b91507f53616c652069736e2774207374617274656420796574000000000000000000006000830152602082019050919050565b6000612347600883612a3e565b91507f4e6f20746f6b656e0000000000000000000000000000000000000000000000006000830152602082019050919050565b6000612387603183612a3e565b91507f596f752063616e27742073656e64206574686572206d6f7265207468616e206d60008301527f61782070617961626c6520616d6f756e740000000000000000000000000000006020830152604082019050919050565b60006123ed602183612a3e565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612453602083612a3e565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612493600083612a33565b9150600082019050919050565b60006124ad601d83612a3e565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006124ed602a83612a3e565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000612553601783612a3e565b91507f596f75277265206e6f7420696e2077686974656c6973740000000000000000006000830152602082019050919050565b6000612593601083612a3e565b91507f53616c652069732066696e6973686564000000000000000000000000000000006000830152602082019050919050565b6125cf81612a9f565b82525050565b60006125e18284611fde565b915081905092915050565b60006125f782612486565b9150819050919050565b60006020820190506126166000830184611fc0565b92915050565b60006040820190506126316000830185611fc0565b61263e60208301846125c6565b9392505050565b600060c08201905061265a6000830189611fc0565b61266760208301886125c6565b61267460408301876125c6565b6126816060830186611fcf565b61268e6080830185611fcf565b61269b60a08301846125c6565b979650505050505050565b600060c0820190506126bb6000830189611fc0565b6126c860208301886125c6565b6126d560408301876125c6565b6126e260608301866125c6565b6126ef6080830185611fcf565b6126fc60a0830184611fcf565b979650505050505050565b600060208201905061271c6000830184611fcf565b92915050565b6000602082019050818103600083015261273c818461200f565b905092915050565b6000602082019050818103600083015261275d81612048565b9050919050565b6000602082019050818103600083015261277d816120ae565b9050919050565b6000602082019050818103600083015261279d816120ee565b9050919050565b600060208201905081810360008301526127bd8161212e565b9050919050565b600060208201905081810360008301526127dd8161216e565b9050919050565b600060208201905081810360008301526127fd816121ae565b9050919050565b6000602082019050818103600083015261281d816121ee565b9050919050565b6000602082019050818103600083015261283d81612254565b9050919050565b6000602082019050818103600083015261285d816122ba565b9050919050565b6000602082019050818103600083015261287d816122fa565b9050919050565b6000602082019050818103600083015261289d8161233a565b9050919050565b600060208201905081810360008301526128bd8161237a565b9050919050565b600060208201905081810360008301526128dd816123e0565b9050919050565b600060208201905081810360008301526128fd81612446565b9050919050565b6000602082019050818103600083015261291d816124a0565b9050919050565b6000602082019050818103600083015261293d816124e0565b9050919050565b6000602082019050818103600083015261295d81612546565b9050919050565b6000602082019050818103600083015261297d81612586565b9050919050565b600060208201905061299960008301846125c6565b92915050565b60006040820190506129b460008301856125c6565b6129c160208301846125c6565b9392505050565b6000604051905081810181811067ffffffffffffffff821117156129eb57600080fd5b8060405250919050565b600067ffffffffffffffff821115612a0c57600080fd5b602082029050602081019050919050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000612a5a82612a7f565b9050919050565b60008115159050919050565b6000612a7882612a4f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015612ac7578082015181840152602081019050612aac565b83811115612ad6576000848401525b50505050565b6000601f19601f8301169050919050565b612af681612a4f565b8114612b0157600080fd5b50565b612b0d81612a61565b8114612b1857600080fd5b50565b612b2481612a6d565b8114612b2f57600080fd5b50565b612b3b81612a9f565b8114612b4657600080fd5b5056fea2646970667358221220027b3014743a5a03db2764328f487b3450a2695647f697b98dbb497154ebe8a564736f6c634300060b0033
Deployed Bytecode Sourcemap
25692:6647:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30851:8;;;25849:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;26291:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29776:692;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;27348:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26015:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30875:332;;;;;;;;;;;;;:::i;:::-;;27542:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28578:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28969:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26743:484;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28429:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2752:148;;;;;;;;;;;;;:::i;:::-;;30521:226;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27922:186;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25953:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2101:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25796:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;27754:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31251:1085;;;:::i;:::-;;26469:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29146:575;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3055:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25983:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25849:37;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26291:128::-;26358:4;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26384:5:::1;26375:6;;:14;;;;;;;;;;;;;;;;;;26407:4;26400:11;;26291:128:::0;;;:::o;29776:692::-;29878:7;29900;29922;29944:4;29963;29982:7;30021:9;:19;30031:8;30021:19;;;;;;;;;;;;;;;:29;;;;;;;;;;;;30017:389;;;30067:32;;:::i;:::-;30102:9;:19;30112:8;30102:19;;;;;;;;;;;;;;;30067:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30162:15;:22;;;30203:15;:22;;;30244:15;:30;;;30293:15;:24;;;30336:4;30359:15;:20;;;30136:258;;;;;;;;;;;;;;;30017:389;30434:1;30438;30441;30444:5;30451;30458:1;30418:42;;;;;;;;;;;;;;;;;;;;;;;;29776:692;;;;;;;;:::o;27348:99::-;27399:7;27434:4;27419:20;;27348:99;:::o;26015:25::-;;;;:::o;30875:332::-;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31004:12:::1;31022;:10;:12::i;:::-;:17;;31047:21;31022:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31003:70;;;31106:7;31084:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;2392:1;30875:332::o:0;27542:119::-;27588:7;27615:6;;;;;;;;;;;:16;;;27632:20;:18;:20::i;:::-;27615:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27608:45;;27542:119;:::o;28578:296::-;28640:7;28660:12;28675:9;:7;:9::i;:::-;28660:24;;28695:16;28714:7;28695:26;;28732:20;28766:2;28762:1;28755:4;:8;:13;;;;;;28732:36;;28781:16;28800:38;28833:4;28800:28;28807:6;28815:12;28800:6;:28::i;:::-;:32;;:38;;;;:::i;:::-;28781:57;;28858:8;28851:15;;;;;;28578:296;;;:::o;28969:120::-;29017:4;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29048:4:::1;29034:11;;:18;;;;;;;;;;;;;;;;;;29070:11;;;;;;;;;;;29063:18;;28969:120:::0;:::o;26743:484::-;26862:4;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26884:23:::1;26910:9;:16;26884:42;;26944:9;26956:1:::0;26944:13:::1;;26939:257;26963:15;26959:1;:19;26939:257;;;27000:16;27019:9;27029:1;27019:12;;;;;;;;;;;;;;27000:31;;27046:27;;:::i;:::-;27093:44;;;;;;;;27103:8;27093:44;;;;;;27113:1;27093:44;;;;27116:1;27093:44;;;;27119:4;27093:44;;;;27125:4;27093:44;;;;;;27131:5;27093:44;;;;::::0;27046:91:::1;;27174:10;27152:9;:19;27162:8;27152:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26939:257;;26980:3;;;;;;;26939:257;;;;27215:4;27208:11;;;26743:484:::0;;;;:::o;28429:99::-;28469:7;28496:24;28489:31;;28429:99;:::o;2752:148::-;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2859:1:::1;2822:40;;2843:6;::::0;::::1;;;;;;;;;2822:40;;;;;;;;;;;;2890:1;2873:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2752:148::o:0;30521:226::-;30571:4;30588:14;30605:12;:10;:12::i;:::-;30588:29;;30628:12;30643:9;:17;30653:6;30643:17;;;;;;;;;;;;;;;:22;;;30628:37;;30717:5;:11;30723:4;30717:11;;;;;;;;;;;:22;;;30685:10;;;;;;;;;;;:20;;;30706:6;30685:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;30678:61;;;;30521:226;:::o;27922:186::-;27962:4;27979:17;27999:14;:12;:14::i;:::-;27979:34;;28024:17;28044:15;28024:35;;28091:9;28079;:21;28072:28;;;;27922:186;:::o;25953:23::-;;;;;;;;;;;;;:::o;2101:87::-;2147:7;2174:6;;;;;;;;;;;2167:13;;2101:87;:::o;25796:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27754:120::-;27799:7;27826:10;27819:17;;27754:120;:::o;31251:1085::-;31300:14;31317:12;:10;:12::i;:::-;31300:29;;31340:13;31356:9;31340:25;;31386:9;:7;:9::i;:::-;31378:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;31442:11;;;;;;;;;;;31441:12;31433:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;31493:9;:17;31503:6;31493:17;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31485:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31561:12;31576:9;:17;31586:6;31576:17;;;;;;;;;;;;;;;:22;;;31561:37;;31642:5;:11;31648:4;31642:11;;;;;;;;;;;:28;;;31633:5;:37;;31611:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;31905:18;31926:15;:13;:15::i;:::-;31905:36;;31952:22;31977;31993:5;31977:15;:22::i;:::-;31952:47;;32068:10;32034:30;32049:14;32034:10;;:14;;:30;;;;:::i;:::-;:44;;32012:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;32164:5;32137:9;:17;32147:6;32137:17;;;;;;;;;;;;;;;:24;;:32;;;;32215:14;32180:9;:17;32190:6;32180:17;;;;;;;;;;;;;;;:32;;:49;;;;32253:30;32268:14;32253:10;;:14;;:30;;;;:::i;:::-;32240:10;:43;;;;32307:21;32322:5;32307:10;;:14;;:21;;;;:::i;:::-;32294:10;:34;;;;31251:1085;;;;;:::o;26469:168::-;26567:4;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26602:5:::1;26589:10;;:18;;;;;;;;;;;;;;;;;;26625:4;26618:11;;26469:168:::0;;;:::o;29146:575::-;29188:4;29213:9;:23;29223:12;:10;:12::i;:::-;29213:23;;;;;;;;;;;;;;;:33;;;;;;;;;;;;29205:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29289:32;;:::i;:::-;29324:9;:23;29334:12;:10;:12::i;:::-;29324:23;;;;;;;;;;;;;;;29289:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29368:11;;;;;;;;;;;29360:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29428:15;:24;;;29427:25;29419:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;29524:1;29491:15;:30;;;:34;29483:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29586:4;29551:9;:23;29561:12;:10;:12::i;:::-;29551:23;;;;;;;;;;;;;;;:32;;;:39;;;;;;;;;;;;;;;;;;29601:112;29635:15;:22;;;29672:15;:30;;;29601:6;;;;;;;;;;;:19;;;;:112;;;;;:::i;:::-;29146:575;;:::o;3055:244::-;2332:12;:10;:12::i;:::-;2321:23;;:7;:5;:7::i;:::-;:23;;;2313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3164:1:::1;3144:22;;:8;:22;;;;3136:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3254:8;3225:38;;3246:6;::::0;::::1;;;;;;;;;3225:38;;;;;;;;;;;;3283:8;3274:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3055:244:::0;:::o;25983:25::-;;;;:::o;636:106::-;689:15;724:10;717:17;;636:106;:::o;28116:169::-;28214:9;28248:29;28271:5;28248:18;28254:11;28248:1;:5;;:18;;;;:::i;:::-;:22;;:29;;;;:::i;:::-;28241:36;;28116:169;;;;:::o;7680:153::-;7738:7;7770:1;7766;:5;7758:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;7824:1;7820;:5;;;;;;7813:12;;7680:153;;;;:::o;6103:179::-;6161:7;6181:9;6197:1;6193;:5;6181:17;;6222:1;6217;:6;;6209:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6273:1;6266:8;;;6103:179;;;;:::o;22280:177::-;22363:86;22383:5;22413:23;;;22438:2;22442:5;22390:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22363:19;:86::i;:::-;22280:177;;;:::o;6982:220::-;7040:7;7069:1;7064;:6;7060:20;;;7079:1;7072:8;;;;7060:20;7091:9;7107:1;7103;:5;7091:17;;7136:1;7131;7127;:5;;;;;;:10;7119:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7193:1;7186:8;;;6982:220;;;;;:::o;24585:761::-;25009:23;25035:69;25063:4;25035:69;;;;;;;;;;;;;;;;;25043:5;25035:27;;;;:69;;;;;:::i;:::-;25009:95;;25139:1;25119:10;:17;:21;25115:224;;;25261:10;25250:30;;;;;;;;;;;;:::i;:::-;25242:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;25115:224;24585:761;;;:::o;17273:195::-;17376:12;17408:52;17430:6;17438:4;17444:1;17447:12;17408:21;:52::i;:::-;17401:59;;17273:195;;;;;:::o;18325:530::-;18452:12;18510:5;18485:21;:30;;18477:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;18577:18;18588:6;18577:10;:18::i;:::-;18569:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18703:12;18717:23;18744:6;:11;;18764:5;18772:4;18744:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18702:75;;;;18795:52;18813:7;18822:10;18834:12;18795:17;:52::i;:::-;18788:59;;;;18325:530;;;;;;:::o;14355:422::-;14415:4;14623:12;14734:7;14722:20;14714:28;;14768:1;14761:4;:8;14754:15;;;14355:422;;;:::o;20865:742::-;20980:12;21009:7;21005:595;;;21040:10;21033:17;;;;21005:595;21174:1;21154:10;:17;:21;21150:439;;;21417:10;21411:17;21478:15;21465:10;21461:2;21457:19;21450:44;21365:148;21560:12;21553:20;;;;;;;;;;;:::i;:::-;;;;;;;;20865:742;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;160:707::-;;277:3;270:4;262:6;258:17;254:27;244:2;;295:1;292;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;:::i;:::-;354:80;:::i;:::-;345:89;;451:5;476:6;469:5;462:21;506:4;498:6;494:17;484:27;;528:4;523:3;519:14;512:21;;581:6;628:3;620:4;612:6;608:17;603:3;599:27;596:36;593:2;;;645:1;642;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;738:3;760:37;793:3;781:10;760:37;:::i;:::-;755:3;748:50;821:4;816:3;812:14;805:21;;849:4;844:3;840:14;833:21;;712:149;702:1;699;695:9;690:14;;655:206;;;659:14;237:630;;;;;;;:::o;875:128::-;;956:6;950:13;941:22;;968:30;992:5;968:30;:::i;:::-;935:68;;;;:::o;1010:158::-;;1104:6;1091:20;1082:29;;1116:47;1157:5;1116:47;:::i;:::-;1076:92;;;;:::o;1175:130::-;;1255:6;1242:20;1233:29;;1267:33;1294:5;1267:33;:::i;:::-;1227:78;;;;:::o;1312:134::-;;1396:6;1390:13;1381:22;;1408:33;1435:5;1408:33;:::i;:::-;1375:71;;;;:::o;1453:241::-;;1557:2;1545:9;1536:7;1532:23;1528:32;1525:2;;;1573:1;1570;1563:12;1525:2;1608:1;1625:53;1670:7;1661:6;1650:9;1646:22;1625:53;:::i;:::-;1615:63;;1587:97;1519:175;;;;:::o;1701:502::-;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1926:1;1915:9;1911:17;1898:31;1949:18;1941:6;1938:30;1935:2;;;1981:1;1978;1971:12;1935:2;2001:78;2071:7;2062:6;2051:9;2047:22;2001:78;:::i;:::-;1991:88;;1877:208;2116:2;2134:53;2179:7;2170:6;2159:9;2155:22;2134:53;:::i;:::-;2124:63;;2095:98;1809:394;;;;;:::o;2210:257::-;;2322:2;2310:9;2301:7;2297:23;2293:32;2290:2;;;2338:1;2335;2328:12;2290:2;2373:1;2390:61;2443:7;2434:6;2423:9;2419:22;2390:61;:::i;:::-;2380:71;;2352:105;2284:183;;;;:::o;2474:269::-;;2592:2;2580:9;2571:7;2567:23;2563:32;2560:2;;;2608:1;2605;2598:12;2560:2;2643:1;2660:67;2719:7;2710:6;2699:9;2695:22;2660:67;:::i;:::-;2650:77;;2622:111;2554:189;;;;:::o;2750:241::-;;2854:2;2842:9;2833:7;2829:23;2825:32;2822:2;;;2870:1;2867;2860:12;2822:2;2905:1;2922:53;2967:7;2958:6;2947:9;2943:22;2922:53;:::i;:::-;2912:63;;2884:97;2816:175;;;;:::o;2998:263::-;;3113:2;3101:9;3092:7;3088:23;3084:32;3081:2;;;3129:1;3126;3119:12;3081:2;3164:1;3181:64;3237:7;3228:6;3217:9;3213:22;3181:64;:::i;:::-;3171:74;;3143:108;3075:186;;;;:::o;3268:113::-;3351:24;3369:5;3351:24;:::i;:::-;3346:3;3339:37;3333:48;;:::o;3388:104::-;3465:21;3480:5;3465:21;:::i;:::-;3460:3;3453:34;3447:45;;:::o;3499:356::-;;3627:38;3659:5;3627:38;:::i;:::-;3677:88;3758:6;3753:3;3677:88;:::i;:::-;3670:95;;3770:52;3815:6;3810:3;3803:4;3796:5;3792:16;3770:52;:::i;:::-;3843:6;3838:3;3834:16;3827:23;;3607:248;;;;;:::o;3862:347::-;;3974:39;4007:5;3974:39;:::i;:::-;4025:71;4089:6;4084:3;4025:71;:::i;:::-;4018:78;;4101:52;4146:6;4141:3;4134:4;4127:5;4123:16;4101:52;:::i;:::-;4174:29;4196:6;4174:29;:::i;:::-;4169:3;4165:39;4158:46;;3954:255;;;;;:::o;4217:375::-;;4377:67;4441:2;4436:3;4377:67;:::i;:::-;4370:74;;4477:34;4473:1;4468:3;4464:11;4457:55;4546:8;4541:2;4536:3;4532:12;4525:30;4583:2;4578:3;4574:12;4567:19;;4363:229;;;:::o;4601:318::-;;4761:67;4825:2;4820:3;4761:67;:::i;:::-;4754:74;;4861:20;4857:1;4852:3;4848:11;4841:41;4910:2;4905:3;4901:12;4894:19;;4747:172;;;:::o;4928:327::-;;5088:67;5152:2;5147:3;5088:67;:::i;:::-;5081:74;;5188:29;5184:1;5179:3;5175:11;5168:50;5246:2;5241:3;5237:12;5230:19;;5074:181;;;:::o;5264:315::-;;5424:67;5488:2;5483:3;5424:67;:::i;:::-;5417:74;;5524:17;5520:1;5515:3;5511:11;5504:38;5570:2;5565:3;5561:12;5554:19;;5410:169;;;:::o;5588:324::-;;5748:67;5812:2;5807:3;5748:67;:::i;:::-;5741:74;;5848:26;5844:1;5839:3;5835:11;5828:47;5903:2;5898:3;5894:12;5887:19;;5734:178;;;:::o;5921:325::-;;6081:67;6145:2;6140:3;6081:67;:::i;:::-;6074:74;;6181:27;6177:1;6172:3;6168:11;6161:48;6237:2;6232:3;6228:12;6221:19;;6067:179;;;:::o;6255:395::-;;6415:67;6479:2;6474:3;6415:67;:::i;:::-;6408:74;;6515:34;6511:1;6506:3;6502:11;6495:55;6584:28;6579:2;6574:3;6570:12;6563:50;6641:2;6636:3;6632:12;6625:19;;6401:249;;;:::o;6659:375::-;;6819:67;6883:2;6878:3;6819:67;:::i;:::-;6812:74;;6919:34;6915:1;6910:3;6906:11;6899:55;6988:8;6983:2;6978:3;6974:12;6967:30;7025:2;7020:3;7016:12;7009:19;;6805:229;;;:::o;7043:326::-;;7203:67;7267:2;7262:3;7203:67;:::i;:::-;7196:74;;7303:28;7299:1;7294:3;7290:11;7283:49;7360:2;7355:3;7351:12;7344:19;;7189:180;;;:::o;7378:322::-;;7538:67;7602:2;7597:3;7538:67;:::i;:::-;7531:74;;7638:24;7634:1;7629:3;7625:11;7618:45;7691:2;7686:3;7682:12;7675:19;;7524:176;;;:::o;7709:307::-;;7869:66;7933:1;7928:3;7869:66;:::i;:::-;7862:73;;7968:10;7964:1;7959:3;7955:11;7948:31;8007:2;8002:3;7998:12;7991:19;;7855:161;;;:::o;8025:386::-;;8185:67;8249:2;8244:3;8185:67;:::i;:::-;8178:74;;8285:34;8281:1;8276:3;8272:11;8265:55;8354:19;8349:2;8344:3;8340:12;8333:41;8402:2;8397:3;8393:12;8386:19;;8171:240;;;:::o;8420:370::-;;8580:67;8644:2;8639:3;8580:67;:::i;:::-;8573:74;;8680:34;8676:1;8671:3;8667:11;8660:55;8749:3;8744:2;8739:3;8735:12;8728:25;8781:2;8776:3;8772:12;8765:19;;8566:224;;;:::o;8799:332::-;;8959:67;9023:2;9018:3;8959:67;:::i;:::-;8952:74;;9059:34;9055:1;9050:3;9046:11;9039:55;9122:2;9117:3;9113:12;9106:19;;8945:186;;;:::o;9140:296::-;;9317:83;9398:1;9393:3;9317:83;:::i;:::-;9310:90;;9428:1;9423:3;9419:11;9412:18;;9303:133;;;:::o;9445:329::-;;9605:67;9669:2;9664:3;9605:67;:::i;:::-;9598:74;;9705:31;9701:1;9696:3;9692:11;9685:52;9765:2;9760:3;9756:12;9749:19;;9591:183;;;:::o;9783:379::-;;9943:67;10007:2;10002:3;9943:67;:::i;:::-;9936:74;;10043:34;10039:1;10034:3;10030:11;10023:55;10112:12;10107:2;10102:3;10098:12;10091:34;10153:2;10148:3;10144:12;10137:19;;9929:233;;;:::o;10171:323::-;;10331:67;10395:2;10390:3;10331:67;:::i;:::-;10324:74;;10431:25;10427:1;10422:3;10418:11;10411:46;10485:2;10480:3;10476:12;10469:19;;10317:177;;;:::o;10503:316::-;;10663:67;10727:2;10722:3;10663:67;:::i;:::-;10656:74;;10763:18;10759:1;10754:3;10750:11;10743:39;10810:2;10805:3;10801:12;10794:19;;10649:170;;;:::o;10827:113::-;10910:24;10928:5;10910:24;:::i;:::-;10905:3;10898:37;10892:48;;:::o;10947:271::-;;11100:93;11189:3;11180:6;11100:93;:::i;:::-;11093:100;;11210:3;11203:10;;11081:137;;;;:::o;11225:379::-;;11432:147;11575:3;11432:147;:::i;:::-;11425:154;;11596:3;11589:10;;11413:191;;;:::o;11611:222::-;;11738:2;11727:9;11723:18;11715:26;;11752:71;11820:1;11809:9;11805:17;11796:6;11752:71;:::i;:::-;11709:124;;;;:::o;11840:333::-;;11995:2;11984:9;11980:18;11972:26;;12009:71;12077:1;12066:9;12062:17;12053:6;12009:71;:::i;:::-;12091:72;12159:2;12148:9;12144:18;12135:6;12091:72;:::i;:::-;11966:207;;;;;:::o;12180:756::-;;12435:3;12424:9;12420:19;12412:27;;12450:71;12518:1;12507:9;12503:17;12494:6;12450:71;:::i;:::-;12532:72;12600:2;12589:9;12585:18;12576:6;12532:72;:::i;:::-;12615;12683:2;12672:9;12668:18;12659:6;12615:72;:::i;:::-;12698:66;12760:2;12749:9;12745:18;12736:6;12698:66;:::i;:::-;12775:67;12837:3;12826:9;12822:19;12813:6;12775:67;:::i;:::-;12853:73;12921:3;12910:9;12906:19;12897:6;12853:73;:::i;:::-;12406:530;;;;;;;;;:::o;12943:756::-;;13198:3;13187:9;13183:19;13175:27;;13213:71;13281:1;13270:9;13266:17;13257:6;13213:71;:::i;:::-;13295:72;13363:2;13352:9;13348:18;13339:6;13295:72;:::i;:::-;13378;13446:2;13435:9;13431:18;13422:6;13378:72;:::i;:::-;13461;13529:2;13518:9;13514:18;13505:6;13461:72;:::i;:::-;13544:67;13606:3;13595:9;13591:19;13582:6;13544:67;:::i;:::-;13622;13684:3;13673:9;13669:19;13660:6;13622:67;:::i;:::-;13169:530;;;;;;;;;:::o;13706:210::-;;13827:2;13816:9;13812:18;13804:26;;13841:65;13903:1;13892:9;13888:17;13879:6;13841:65;:::i;:::-;13798:118;;;;:::o;13923:310::-;;14070:2;14059:9;14055:18;14047:26;;14120:9;14114:4;14110:20;14106:1;14095:9;14091:17;14084:47;14145:78;14218:4;14209:6;14145:78;:::i;:::-;14137:86;;14041:192;;;;:::o;14240:416::-;;14440:2;14429:9;14425:18;14417:26;;14490:9;14484:4;14480:20;14476:1;14465:9;14461:17;14454:47;14515:131;14641:4;14515:131;:::i;:::-;14507:139;;14411:245;;;:::o;14663:416::-;;14863:2;14852:9;14848:18;14840:26;;14913:9;14907:4;14903:20;14899:1;14888:9;14884:17;14877:47;14938:131;15064:4;14938:131;:::i;:::-;14930:139;;14834:245;;;:::o;15086:416::-;;15286:2;15275:9;15271:18;15263:26;;15336:9;15330:4;15326:20;15322:1;15311:9;15307:17;15300:47;15361:131;15487:4;15361:131;:::i;:::-;15353:139;;15257:245;;;:::o;15509:416::-;;15709:2;15698:9;15694:18;15686:26;;15759:9;15753:4;15749:20;15745:1;15734:9;15730:17;15723:47;15784:131;15910:4;15784:131;:::i;:::-;15776:139;;15680:245;;;:::o;15932:416::-;;16132:2;16121:9;16117:18;16109:26;;16182:9;16176:4;16172:20;16168:1;16157:9;16153:17;16146:47;16207:131;16333:4;16207:131;:::i;:::-;16199:139;;16103:245;;;:::o;16355:416::-;;16555:2;16544:9;16540:18;16532:26;;16605:9;16599:4;16595:20;16591:1;16580:9;16576:17;16569:47;16630:131;16756:4;16630:131;:::i;:::-;16622:139;;16526:245;;;:::o;16778:416::-;;16978:2;16967:9;16963:18;16955:26;;17028:9;17022:4;17018:20;17014:1;17003:9;16999:17;16992:47;17053:131;17179:4;17053:131;:::i;:::-;17045:139;;16949:245;;;:::o;17201:416::-;;17401:2;17390:9;17386:18;17378:26;;17451:9;17445:4;17441:20;17437:1;17426:9;17422:17;17415:47;17476:131;17602:4;17476:131;:::i;:::-;17468:139;;17372:245;;;:::o;17624:416::-;;17824:2;17813:9;17809:18;17801:26;;17874:9;17868:4;17864:20;17860:1;17849:9;17845:17;17838:47;17899:131;18025:4;17899:131;:::i;:::-;17891:139;;17795:245;;;:::o;18047:416::-;;18247:2;18236:9;18232:18;18224:26;;18297:9;18291:4;18287:20;18283:1;18272:9;18268:17;18261:47;18322:131;18448:4;18322:131;:::i;:::-;18314:139;;18218:245;;;:::o;18470:416::-;;18670:2;18659:9;18655:18;18647:26;;18720:9;18714:4;18710:20;18706:1;18695:9;18691:17;18684:47;18745:131;18871:4;18745:131;:::i;:::-;18737:139;;18641:245;;;:::o;18893:416::-;;19093:2;19082:9;19078:18;19070:26;;19143:9;19137:4;19133:20;19129:1;19118:9;19114:17;19107:47;19168:131;19294:4;19168:131;:::i;:::-;19160:139;;19064:245;;;:::o;19316:416::-;;19516:2;19505:9;19501:18;19493:26;;19566:9;19560:4;19556:20;19552:1;19541:9;19537:17;19530:47;19591:131;19717:4;19591:131;:::i;:::-;19583:139;;19487:245;;;:::o;19739:416::-;;19939:2;19928:9;19924:18;19916:26;;19989:9;19983:4;19979:20;19975:1;19964:9;19960:17;19953:47;20014:131;20140:4;20014:131;:::i;:::-;20006:139;;19910:245;;;:::o;20162:416::-;;20362:2;20351:9;20347:18;20339:26;;20412:9;20406:4;20402:20;20398:1;20387:9;20383:17;20376:47;20437:131;20563:4;20437:131;:::i;:::-;20429:139;;20333:245;;;:::o;20585:416::-;;20785:2;20774:9;20770:18;20762:26;;20835:9;20829:4;20825:20;20821:1;20810:9;20806:17;20799:47;20860:131;20986:4;20860:131;:::i;:::-;20852:139;;20756:245;;;:::o;21008:416::-;;21208:2;21197:9;21193:18;21185:26;;21258:9;21252:4;21248:20;21244:1;21233:9;21229:17;21222:47;21283:131;21409:4;21283:131;:::i;:::-;21275:139;;21179:245;;;:::o;21431:416::-;;21631:2;21620:9;21616:18;21608:26;;21681:9;21675:4;21671:20;21667:1;21656:9;21652:17;21645:47;21706:131;21832:4;21706:131;:::i;:::-;21698:139;;21602:245;;;:::o;21854:222::-;;21981:2;21970:9;21966:18;21958:26;;21995:71;22063:1;22052:9;22048:17;22039:6;21995:71;:::i;:::-;21952:124;;;;:::o;22083:333::-;;22238:2;22227:9;22223:18;22215:26;;22252:71;22320:1;22309:9;22305:17;22296:6;22252:71;:::i;:::-;22334:72;22402:2;22391:9;22387:18;22378:6;22334:72;:::i;:::-;22209:207;;;;;:::o;22423:256::-;;22485:2;22479:9;22469:19;;22523:4;22515:6;22511:17;22622:6;22610:10;22607:22;22586:18;22574:10;22571:34;22568:62;22565:2;;;22643:1;22640;22633:12;22565:2;22663:10;22659:2;22652:22;22463:216;;;;:::o;22686:304::-;;22845:18;22837:6;22834:30;22831:2;;;22877:1;22874;22867:12;22831:2;22912:4;22904:6;22900:17;22892:25;;22975:4;22969;22965:15;22957:23;;22768:222;;;:::o;22997:121::-;;23090:5;23084:12;23074:22;;23055:63;;;:::o;23125:122::-;;23219:5;23213:12;23203:22;;23184:63;;;:::o;23255:144::-;;23390:3;23375:18;;23368:31;;;;:::o;23408:163::-;;23523:6;23518:3;23511:19;23560:4;23555:3;23551:14;23536:29;;23504:67;;;;:::o;23579:91::-;;23641:24;23659:5;23641:24;:::i;:::-;23630:35;;23624:46;;;:::o;23677:85::-;;23750:5;23743:13;23736:21;23725:32;;23719:43;;;:::o;23769:105::-;;23845:24;23863:5;23845:24;:::i;:::-;23834:35;;23828:46;;;:::o;23881:121::-;;23954:42;23947:5;23943:54;23932:65;;23926:76;;;:::o;24009:72::-;;24071:5;24060:16;;24054:27;;;:::o;24089:268::-;24154:1;24161:101;24175:6;24172:1;24169:13;24161:101;;;24251:1;24246:3;24242:11;24236:18;24232:1;24227:3;24223:11;24216:39;24197:2;24194:1;24190:10;24185:15;;24161:101;;;24277:6;24274:1;24271:13;24268:2;;;24342:1;24333:6;24328:3;24324:16;24317:27;24268:2;24138:219;;;;:::o;24365:97::-;;24453:2;24449:7;24444:2;24437:5;24433:14;24429:28;24419:38;;24413:49;;;:::o;24470:117::-;24539:24;24557:5;24539:24;:::i;:::-;24532:5;24529:35;24519:2;;24578:1;24575;24568:12;24519:2;24513:74;:::o;24594:111::-;24660:21;24675:5;24660:21;:::i;:::-;24653:5;24650:32;24640:2;;24696:1;24693;24686:12;24640:2;24634:71;:::o;24712:145::-;24795:38;24827:5;24795:38;:::i;:::-;24788:5;24785:49;24775:2;;24848:1;24845;24838:12;24775:2;24769:88;:::o;24864:117::-;24933:24;24951:5;24933:24;:::i;:::-;24926:5;24923:35;24913:2;;24972:1;24969;24962:12;24913:2;24907:74;:::o
Swarm Source
ipfs://027b3014743a5a03db2764328f487b3450a2695647f697b98dbb497154ebe8a5
Loading...
Loading
Loading...
Loading
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.