Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,473,130 CHIPS
Holders
281
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
YoloChips
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "./YoloInterfaces.sol"; /** ERC20 utility token. */ contract YoloChips is ERC20, ERC20Burnable, Ownable { using SafeMath for uint256; struct LandDeed { uint256 tokenId; uint256 yield; } event ChipsCashed(address indexed account, uint256 amount); bool public airdropped = false; uint256 public airdropOffset = 0; mapping (address => uint256) public accountRewards; mapping (address => uint256) public lastAccountUpdate; mapping (uint256 => uint256) public lastPropertyUpdate; mapping (address => bool) public marketplaces; uint256 public airdropAmount = 1000; uint256 public startTime = 1638316800; // Dec 01, 2021. uint256 public endTime = 1893456000; // Jan 01, 2030. IYoloDice public diceV1; IYoloBoardDeed public landDeeds; constructor(address _diceV1) ERC20("Yolo Chips", "CHIPS") { diceV1 = IYoloDice(_diceV1); } // Setters. function setAirdropAmount(uint256 _amount) external onlyOwner { airdropAmount = _amount; } function setStartTime(uint256 _startTime) external onlyOwner { startTime = _startTime; } function setEndTime(uint256 _endTime) external onlyOwner { endTime = _endTime; } function setDiceV1(address _diceV1) external onlyOwner { diceV1 = IYoloDice(_diceV1); } function setLandDeeds(address _deeds) external onlyOwner { landDeeds = IYoloBoardDeed(_deeds); } function setMarketplace(address _address, bool _allowed) external onlyOwner { marketplaces[_address] = _allowed; } // Core functionality. /// @notice This issues initial rewards to V1 dice holders. /// It will reward holders from token _start (inclusive) to token _end (exclusive) function performAirdrop(uint256 _start, uint256 _end) external onlyOwner { require(!airdropped, "Yolo Chips: Airdrop already done"); require(_start == airdropOffset, "Yolo Chips: Incorrect airdrop start index"); // Iterate through all V1 dice. uint max = Math.min(_end, diceV1.totalSupply()); for (uint256 tokenId = _start; tokenId < max; tokenId++) { address diceOwner = diceV1.ownerOf(tokenId); if (diceOwner != address(0x0)) { accountRewards[diceOwner] = accountRewards[diceOwner].add(airdropAmount); } } airdropOffset = max; // If we hit the end, mark the airdrop completed. if (max == diceV1.totalSupply()) { airdropped = true; } } /// @notice Called when property deed tokens are transferred. function updateOwnership(address _from, address _to) external { require(msg.sender == address(landDeeds), "Yolo Chips: Not allowed"); // Update old and new owners before the transfer takes place. _updateRewards(_from); _updateRewards(_to); } /// @notice Shows current (including pending) rewards for an account. function getEarnedRewards(address _address) external view returns (uint256) { if (block.timestamp < startTime) { return accountRewards[_address]; } LandDeed[] memory properties = _getProperties(_address); uint256 earned = 0; uint256 time = Math.min(block.timestamp, endTime); for (uint256 idx = 0; idx < properties.length; idx++) { uint256 lastUpdate = Math.max(lastPropertyUpdate[properties[idx].tokenId], startTime); if (lastUpdate > 0) { uint256 yield = (properties[idx].yield).mul((time.sub(lastUpdate))).div(86400); earned = earned.add(yield); } } return accountRewards[_address].add(earned); } function spend(address account, uint256 amount) external { require(marketplaces[msg.sender], "Yolo Chips: Not allowed to spend $CHIPS"); _burn(account, amount); } /// @notice Withdraws balance and resets rewards. function cashOut() external { // First, ensure we're up to date. _updateRewards(msg.sender); uint256 reward = accountRewards[msg.sender]; if (reward > 0) { accountRewards[msg.sender] = 0; _mint(msg.sender, reward.mul(1 ether)); emit ChipsCashed(msg.sender, reward); } } // Helpers. /// @notice Updates a user's reward balance based on owned properties. function _updateRewards(address _address) internal { if (block.timestamp < startTime) { return; } LandDeed[] memory properties = _getProperties(_address); uint256 earned = 0; uint256 time = Math.min(block.timestamp, endTime); for (uint256 idx = 0; idx < properties.length; idx++) { uint256 lastUpdate = Math.max(lastPropertyUpdate[properties[idx].tokenId], startTime); if (lastUpdate > 0) { uint256 yield = (properties[idx].yield).mul((time.sub(lastUpdate))).div(86400); earned = earned.add(yield); } if (lastUpdate != endTime) { lastPropertyUpdate[properties[idx].tokenId] = time; } } accountRewards[_address] = accountRewards[_address].add(earned); lastAccountUpdate[_address] = time; } /// @notice Returns Land Deeds owned by the address. function _getProperties(address _address) internal view returns (LandDeed[] memory) { uint balance = landDeeds.balanceOf(_address); LandDeed[] memory properties = new LandDeed[](balance); for (uint256 idx = 0; idx < balance; idx++) { uint256 tokenId = landDeeds.tokenOfOwnerByIndex(_address, idx); uint256 yield = landDeeds.yieldRate(tokenId); properties[idx] = LandDeed(tokenId, yield); } return properties; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../ERC20.sol"; import "../../../utils/Context.sol"; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); unchecked { _approve(account, _msgSender(), currentAllowance - amount); } _burn(account, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ 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) { unchecked { 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) { unchecked { 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) { unchecked { // 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) { unchecked { 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) { unchecked { 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) { return a + b; } /** * @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) { 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) { return a * b; } /** * @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. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { 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) { 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) { unchecked { 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. * * 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) { unchecked { 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) { unchecked { require(b > 0, errorMessage); return a % b; } } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; interface IYoloDice { /// @notice IERC721, returns owner of token. function ownerOf(uint256 tokenId) external view returns (address); /// @notice IERC721, returns number of tokens owned. function balanceOf(address owner) external view returns (uint256); /// @notice IERC721, returns total number of tokens created. function totalSupply() external view returns (uint256); /// @notice IERC721Enumerable, returns token ID. function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); } interface IYoloChips { /// @notice IERC20, returns number of tokens owned. function balanceOf(address account) external view returns (uint256); /// @notice Burns chips from whitelisted contracts. function spend(address account, uint256 amount) external; /// @notice Performs accounting before properties are transferred. function updateOwnership(address _from, address _to) external; } interface IYoloBoardDeed { /// @notice IERC721, returns number of tokens owned. function balanceOf(address owner) external view returns (uint256); /// @notice IERC721Enumerable, returns token ID. function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /// @notice Returns yield of the given token. function yieldRate(uint256 tokenId) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_diceV1","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ChipsCashed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accountRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cashOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"diceV1","outputs":[{"internalType":"contract IYoloDice","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getEarnedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"landDeeds","outputs":[{"internalType":"contract IYoloBoardDeed","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastAccountUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastPropertyUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketplaces","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_end","type":"uint256"}],"name":"performAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setAirdropAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_diceV1","type":"address"}],"name":"setDiceV1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"setEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_deeds","type":"address"}],"name":"setLandDeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_allowed","type":"bool"}],"name":"setMarketplace","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"spend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"updateOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600560146101000a81548160ff02191690831515021790555060006006556103e8600b556361a6bb00600c556370dbd880600d553480156200004757600080fd5b5060405162003eac38038062003eac83398181016040528101906200006d91906200030a565b6040518060400160405280600a81526020017f596f6c6f204368697073000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f43484950530000000000000000000000000000000000000000000000000000008152508160039080519060200190620000f192919062000243565b5080600490805190602001906200010a92919062000243565b5050506200012d620001216200017560201b60201c565b6200017d60201b60201c565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620003e9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000251906200036a565b90600052602060002090601f016020900481019282620002755760008555620002c1565b82601f106200029057805160ff1916838001178555620002c1565b82800160010185558215620002c1579182015b82811115620002c0578251825591602001919060010190620002a3565b5b509050620002d09190620002d4565b5090565b5b80821115620002ef576000816000905550600101620002d5565b5090565b6000815190506200030481620003cf565b92915050565b6000602082840312156200031d57600080fd5b60006200032d84828501620002f3565b91505092915050565b600062000343826200034a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200038357607f821691505b602082108114156200039a5762000399620003a0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620003da8162000336565b8114620003e657600080fd5b50565b613ab380620003f96000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063715018a611610130578063a457c2d7116100b8578063dd62ed3e1161007c578063dd62ed3e1461068b578063f2fde38b146106bb578063facfd078146106d7578063fc2ea8a514610707578063ffd64f7f1461072557610232565b8063a457c2d7146105d7578063a5500c3014610607578063a9059cbb14610623578063af7d6ca314610653578063ccb98ffc1461066f57610232565b806379cc6790116100ff57806379cc6790146105475780638878d2ae146105635780638da5cb5b1461057f57806395d89b411461059d578063a2579505146105bb57610232565b8063715018a6146104f95780637419e77a1461050357806378e979251461051f578063793cd71e1461053d57610232565b80633e0a322d116101be5780635de54da5116101825780635de54da5146104415780636161a07d1461045f57806367da898e1461047b5780636a56b3591461049957806370a08231146104c957610232565b80633e0a322d1461038d57806342966c68146103a95780634612bd4f146103c55780635390f98e146103f5578063559a4db31461042557610232565b806323b872dd1161020557806323b872dd146102c15780632acca794146102f1578063313ce567146103215780633197cbb61461033f578063395093511461035d57610232565b806306fdde0314610237578063095ea7b31461025557806318160ddd1461028557806319cc02aa146102a3575b600080fd5b61023f610743565b60405161024c9190612fff565b60405180910390f35b61026f600480360381019061026a9190612bba565b6107d5565b60405161027c9190612fae565b60405180910390f35b61028d6107f3565b60405161029a9190613241565b60405180910390f35b6102ab6107fd565b6040516102b89190612fae565b60405180910390f35b6102db60048036038101906102d69190612b2f565b610810565b6040516102e89190612fae565b60405180910390f35b61030b60048036038101906103069190612aa1565b610908565b6040516103189190613241565b60405180910390f35b610329610920565b604051610336919061325c565b60405180910390f35b610347610929565b6040516103549190613241565b60405180910390f35b61037760048036038101906103729190612bba565b61092f565b6040516103849190612fae565b60405180910390f35b6103a760048036038101906103a29190612bf6565b6109db565b005b6103c360048036038101906103be9190612bf6565b610a61565b005b6103df60048036038101906103da9190612aa1565b610a75565b6040516103ec9190613241565b60405180910390f35b61040f600480360381019061040a9190612bf6565b610c6d565b60405161041c9190613241565b60405180910390f35b61043f600480360381019061043a9190612c48565b610c85565b005b6104496110af565b6040516104569190613241565b60405180910390f35b61047960048036038101906104749190612af3565b6110b5565b005b61048361115b565b6040516104909190612fe4565b60405180910390f35b6104b360048036038101906104ae9190612aa1565b611181565b6040516104c09190612fae565b60405180910390f35b6104e360048036038101906104de9190612aa1565b6111a1565b6040516104f09190613241565b60405180910390f35b6105016111e9565b005b61051d60048036038101906105189190612b7e565b611271565b005b610527611348565b6040516105349190613241565b60405180910390f35b61054561134e565b005b610561600480360381019061055c9190612bba565b61145f565b005b61057d60048036038101906105789190612aa1565b6114da565b005b61058761159a565b6040516105949190612f6a565b60405180910390f35b6105a56115c4565b6040516105b29190612fff565b60405180910390f35b6105d560048036038101906105d09190612aa1565b611656565b005b6105f160048036038101906105ec9190612bba565b611716565b6040516105fe9190612fae565b60405180910390f35b610621600480360381019061061c9190612bf6565b611801565b005b61063d60048036038101906106389190612bba565b611887565b60405161064a9190612fae565b60405180910390f35b61066d60048036038101906106689190612bba565b6118a5565b005b61068960048036038101906106849190612bf6565b61193f565b005b6106a560048036038101906106a09190612af3565b6119c5565b6040516106b29190613241565b60405180910390f35b6106d560048036038101906106d09190612aa1565b611a4c565b005b6106f160048036038101906106ec9190612aa1565b611b44565b6040516106fe9190613241565b60405180910390f35b61070f611b5c565b60405161071c9190613241565b60405180910390f35b61072d611b62565b60405161073a9190612fc9565b60405180910390f35b60606003805461075290613478565b80601f016020809104026020016040519081016040528092919081815260200182805461077e90613478565b80156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b5050505050905090565b60006107e96107e2611b88565b8484611b90565b6001905092915050565b6000600254905090565b600560149054906101000a900460ff1681565b600061081d848484611d5b565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610868611b88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df90613121565b60405180910390fd5b6108fc856108f4611b88565b858403611b90565b60019150509392505050565b60086020528060005260406000206000915090505481565b60006012905090565b600d5481565b60006109d161093c611b88565b84846001600061094a611b88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109cc9190613293565b611b90565b6001905092915050565b6109e3611b88565b73ffffffffffffffffffffffffffffffffffffffff16610a0161159a565b73ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e90613141565b60405180910390fd5b80600c8190555050565b610a72610a6c611b88565b82611fdc565b50565b6000600c54421015610ac857600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610c68565b6000610ad3836121b3565b9050600080610ae442600d546124c6565b905060005b8351811015610c0f576000610b5760096000878581518110610b34577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160000151815260200190815260200160002054600c546124df565b90506000811115610bfb576000610be262015180610bd4610b8185886124f990919063ffffffff16565b898781518110610bba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516020015161250f90919063ffffffff16565b61252590919063ffffffff16565b9050610bf7818661253b90919063ffffffff16565b9450505b508080610c07906134aa565b915050610ae9565b50610c6282600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253b90919063ffffffff16565b93505050505b919050565b60096020528060005260406000206000915090505481565b610c8d611b88565b73ffffffffffffffffffffffffffffffffffffffff16610cab61159a565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890613141565b60405180910390fd5b600560149054906101000a900460ff1615610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d48906130a1565b60405180910390fd5b6006548214610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c906131e1565b60405180910390fd5b6000610e4082600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e0357600080fd5b505afa158015610e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3b9190612c1f565b6124c6565b905060008390505b81811015610fdf576000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610ead9190613241565b60206040518083038186803b158015610ec557600080fd5b505afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190612aca565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fcb57610f87600b54600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253b90919063ffffffff16565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b508080610fd7906134aa565b915050610e48565b5080600681905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561104f57600080fd5b505afa158015611063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110879190612c1f565b8114156110aa576001600560146101000a81548160ff0219169083151502179055505b505050565b60065481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c906130e1565b60405180910390fd5b61114e82612551565b61115781612551565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111f1611b88565b73ffffffffffffffffffffffffffffffffffffffff1661120f61159a565b73ffffffffffffffffffffffffffffffffffffffff1614611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90613141565b60405180910390fd5b61126f60006127ee565b565b611279611b88565b73ffffffffffffffffffffffffffffffffffffffff1661129761159a565b73ffffffffffffffffffffffffffffffffffffffff16146112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490613141565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b61135733612551565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561145c576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061140d33611408670de0b6b3a76400008461250f90919063ffffffff16565b6128b4565b3373ffffffffffffffffffffffffffffffffffffffff167f650a3e335a58a5ffe2ecc0f229faffb8af6149cc75b22210b6d2b9401f98c7b4826040516114539190613241565b60405180910390a25b50565b60006114728361146d611b88565b6119c5565b9050818110156114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90613161565b60405180910390fd5b6114cb836114c3611b88565b848403611b90565b6114d58383611fdc565b505050565b6114e2611b88565b73ffffffffffffffffffffffffffffffffffffffff1661150061159a565b73ffffffffffffffffffffffffffffffffffffffff1614611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90613141565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115d390613478565b80601f01602080910402602001604051908101604052809291908181526020018280546115ff90613478565b801561164c5780601f106116215761010080835404028352916020019161164c565b820191906000526020600020905b81548152906001019060200180831161162f57829003601f168201915b5050505050905090565b61165e611b88565b73ffffffffffffffffffffffffffffffffffffffff1661167c61159a565b73ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990613141565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060016000611725611b88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d990613201565b60405180910390fd5b6117f66117ed611b88565b85858403611b90565b600191505092915050565b611809611b88565b73ffffffffffffffffffffffffffffffffffffffff1661182761159a565b73ffffffffffffffffffffffffffffffffffffffff161461187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187490613141565b60405180910390fd5b80600b8190555050565b600061189b611894611b88565b8484611d5b565b6001905092915050565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890613101565b60405180910390fd5b61193b8282611fdc565b5050565b611947611b88565b73ffffffffffffffffffffffffffffffffffffffff1661196561159a565b73ffffffffffffffffffffffffffffffffffffffff16146119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290613141565b60405180910390fd5b80600d8190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a54611b88565b73ffffffffffffffffffffffffffffffffffffffff16611a7261159a565b73ffffffffffffffffffffffffffffffffffffffff1614611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90613141565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f90613061565b60405180910390fd5b611b41816127ee565b50565b60076020528060005260406000206000915090505481565b600b5481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf7906131c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790613081565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d4e9190613241565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc2906131a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3290613021565b60405180910390fd5b611e46838383612a14565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec3906130c1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f5f9190613293565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fc39190613241565b60405180910390a3611fd6848484612a19565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561204c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204390613181565b60405180910390fd5b61205882600083612a14565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590613041565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546121359190613374565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161219a9190613241565b60405180910390a36121ae83600084612a19565b505050565b60606000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016122129190612f6a565b60206040518083038186803b15801561222a57600080fd5b505afa15801561223e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122629190612c1f565b905060008167ffffffffffffffff8111156122a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156122df57816020015b6122cc612a1e565b8152602001906001900390816122c45790505b50905060005b828110156124bb576000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b815260040161234c929190612f85565b60206040518083038186803b15801561236457600080fd5b505afa158015612378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239c9190612c1f565b90506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361328074836040518263ffffffff1660e01b81526004016123fb9190613241565b60206040518083038186803b15801561241357600080fd5b505afa158015612427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244b9190612c1f565b905060405180604001604052808381526020018281525084848151811061249b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181905250505080806124b3906134aa565b9150506122e5565b508092505050919050565b60008183106124d557816124d7565b825b905092915050565b6000818310156124ef57816124f1565b825b905092915050565b600081836125079190613374565b905092915050565b6000818361251d919061331a565b905092915050565b6000818361253391906132e9565b905092915050565b600081836125499190613293565b905092915050565b600c54421015612560576127eb565b600061256b826121b3565b905060008061257c42600d546124c6565b905060005b835181101561270d5760006125ef600960008785815181106125cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160000151815260200190815260200160002054600c546124df565b9050600081111561269357600061267a6201518061266c61261985886124f990919063ffffffff16565b898781518110612652577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516020015161250f90919063ffffffff16565b61252590919063ffffffff16565b905061268f818661253b90919063ffffffff16565b9450505b600d5481146126f95782600960008785815181106126da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600001518152602001908152602001600020819055505b508080612705906134aa565b915050612581565b5061276082600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253b90919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90613221565b60405180910390fd5b61293060008383612a14565b80600260008282546129429190613293565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129979190613293565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129fc9190613241565b60405180910390a3612a1060008383612a19565b5050565b505050565b505050565b604051806040016040528060008152602001600081525090565b600081359050612a4781613a38565b92915050565b600081519050612a5c81613a38565b92915050565b600081359050612a7181613a4f565b92915050565b600081359050612a8681613a66565b92915050565b600081519050612a9b81613a66565b92915050565b600060208284031215612ab357600080fd5b6000612ac184828501612a38565b91505092915050565b600060208284031215612adc57600080fd5b6000612aea84828501612a4d565b91505092915050565b60008060408385031215612b0657600080fd5b6000612b1485828601612a38565b9250506020612b2585828601612a38565b9150509250929050565b600080600060608486031215612b4457600080fd5b6000612b5286828701612a38565b9350506020612b6386828701612a38565b9250506040612b7486828701612a77565b9150509250925092565b60008060408385031215612b9157600080fd5b6000612b9f85828601612a38565b9250506020612bb085828601612a62565b9150509250929050565b60008060408385031215612bcd57600080fd5b6000612bdb85828601612a38565b9250506020612bec85828601612a77565b9150509250929050565b600060208284031215612c0857600080fd5b6000612c1684828501612a77565b91505092915050565b600060208284031215612c3157600080fd5b6000612c3f84828501612a8c565b91505092915050565b60008060408385031215612c5b57600080fd5b6000612c6985828601612a77565b9250506020612c7a85828601612a77565b9150509250929050565b612c8d816133a8565b82525050565b612c9c816133ba565b82525050565b612cab816133fd565b82525050565b612cba81613421565b82525050565b6000612ccb82613277565b612cd58185613282565b9350612ce5818560208601613445565b612cee81613580565b840191505092915050565b6000612d06602383613282565b9150612d1182613591565b604082019050919050565b6000612d29602283613282565b9150612d34826135e0565b604082019050919050565b6000612d4c602683613282565b9150612d578261362f565b604082019050919050565b6000612d6f602283613282565b9150612d7a8261367e565b604082019050919050565b6000612d92602083613282565b9150612d9d826136cd565b602082019050919050565b6000612db5602683613282565b9150612dc0826136f6565b604082019050919050565b6000612dd8601783613282565b9150612de382613745565b602082019050919050565b6000612dfb602783613282565b9150612e068261376e565b604082019050919050565b6000612e1e602883613282565b9150612e29826137bd565b604082019050919050565b6000612e41602083613282565b9150612e4c8261380c565b602082019050919050565b6000612e64602483613282565b9150612e6f82613835565b604082019050919050565b6000612e87602183613282565b9150612e9282613884565b604082019050919050565b6000612eaa602583613282565b9150612eb5826138d3565b604082019050919050565b6000612ecd602483613282565b9150612ed882613922565b604082019050919050565b6000612ef0602983613282565b9150612efb82613971565b604082019050919050565b6000612f13602583613282565b9150612f1e826139c0565b604082019050919050565b6000612f36601f83613282565b9150612f4182613a0f565b602082019050919050565b612f55816133e6565b82525050565b612f64816133f0565b82525050565b6000602082019050612f7f6000830184612c84565b92915050565b6000604082019050612f9a6000830185612c84565b612fa76020830184612f4c565b9392505050565b6000602082019050612fc36000830184612c93565b92915050565b6000602082019050612fde6000830184612ca2565b92915050565b6000602082019050612ff96000830184612cb1565b92915050565b600060208201905081810360008301526130198184612cc0565b905092915050565b6000602082019050818103600083015261303a81612cf9565b9050919050565b6000602082019050818103600083015261305a81612d1c565b9050919050565b6000602082019050818103600083015261307a81612d3f565b9050919050565b6000602082019050818103600083015261309a81612d62565b9050919050565b600060208201905081810360008301526130ba81612d85565b9050919050565b600060208201905081810360008301526130da81612da8565b9050919050565b600060208201905081810360008301526130fa81612dcb565b9050919050565b6000602082019050818103600083015261311a81612dee565b9050919050565b6000602082019050818103600083015261313a81612e11565b9050919050565b6000602082019050818103600083015261315a81612e34565b9050919050565b6000602082019050818103600083015261317a81612e57565b9050919050565b6000602082019050818103600083015261319a81612e7a565b9050919050565b600060208201905081810360008301526131ba81612e9d565b9050919050565b600060208201905081810360008301526131da81612ec0565b9050919050565b600060208201905081810360008301526131fa81612ee3565b9050919050565b6000602082019050818103600083015261321a81612f06565b9050919050565b6000602082019050818103600083015261323a81612f29565b9050919050565b60006020820190506132566000830184612f4c565b92915050565b60006020820190506132716000830184612f5b565b92915050565b600081519050919050565b600082825260208201905092915050565b600061329e826133e6565b91506132a9836133e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132de576132dd6134f3565b5b828201905092915050565b60006132f4826133e6565b91506132ff836133e6565b92508261330f5761330e613522565b5b828204905092915050565b6000613325826133e6565b9150613330836133e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613369576133686134f3565b5b828202905092915050565b600061337f826133e6565b915061338a836133e6565b92508282101561339d5761339c6134f3565b5b828203905092915050565b60006133b3826133c6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006134088261340f565b9050919050565b600061341a826133c6565b9050919050565b600061342c82613433565b9050919050565b600061343e826133c6565b9050919050565b60005b83811015613463578082015181840152602081019050613448565b83811115613472576000848401525b50505050565b6000600282049050600182168061349057607f821691505b602082108114156134a4576134a3613551565b5b50919050565b60006134b5826133e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134e8576134e76134f3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f6c6f2043686970733a2041697264726f7020616c726561647920646f6e65600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f596f6c6f2043686970733a204e6f7420616c6c6f776564000000000000000000600082015250565b7f596f6c6f2043686970733a204e6f7420616c6c6f77656420746f207370656e6460008201527f2024434849505300000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f596f6c6f2043686970733a20496e636f72726563742061697264726f7020737460008201527f61727420696e6465780000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613a41816133a8565b8114613a4c57600080fd5b50565b613a58816133ba565b8114613a6357600080fd5b50565b613a6f816133e6565b8114613a7a57600080fd5b5056fea2646970667358221220e1433c9e227657f791a19732aa60ea25ba54636d9b816ff9e0bb458f92d2147d64736f6c6343000804003300000000000000000000000061e6494d934b594d0634f292e13846639b6f1927
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063715018a611610130578063a457c2d7116100b8578063dd62ed3e1161007c578063dd62ed3e1461068b578063f2fde38b146106bb578063facfd078146106d7578063fc2ea8a514610707578063ffd64f7f1461072557610232565b8063a457c2d7146105d7578063a5500c3014610607578063a9059cbb14610623578063af7d6ca314610653578063ccb98ffc1461066f57610232565b806379cc6790116100ff57806379cc6790146105475780638878d2ae146105635780638da5cb5b1461057f57806395d89b411461059d578063a2579505146105bb57610232565b8063715018a6146104f95780637419e77a1461050357806378e979251461051f578063793cd71e1461053d57610232565b80633e0a322d116101be5780635de54da5116101825780635de54da5146104415780636161a07d1461045f57806367da898e1461047b5780636a56b3591461049957806370a08231146104c957610232565b80633e0a322d1461038d57806342966c68146103a95780634612bd4f146103c55780635390f98e146103f5578063559a4db31461042557610232565b806323b872dd1161020557806323b872dd146102c15780632acca794146102f1578063313ce567146103215780633197cbb61461033f578063395093511461035d57610232565b806306fdde0314610237578063095ea7b31461025557806318160ddd1461028557806319cc02aa146102a3575b600080fd5b61023f610743565b60405161024c9190612fff565b60405180910390f35b61026f600480360381019061026a9190612bba565b6107d5565b60405161027c9190612fae565b60405180910390f35b61028d6107f3565b60405161029a9190613241565b60405180910390f35b6102ab6107fd565b6040516102b89190612fae565b60405180910390f35b6102db60048036038101906102d69190612b2f565b610810565b6040516102e89190612fae565b60405180910390f35b61030b60048036038101906103069190612aa1565b610908565b6040516103189190613241565b60405180910390f35b610329610920565b604051610336919061325c565b60405180910390f35b610347610929565b6040516103549190613241565b60405180910390f35b61037760048036038101906103729190612bba565b61092f565b6040516103849190612fae565b60405180910390f35b6103a760048036038101906103a29190612bf6565b6109db565b005b6103c360048036038101906103be9190612bf6565b610a61565b005b6103df60048036038101906103da9190612aa1565b610a75565b6040516103ec9190613241565b60405180910390f35b61040f600480360381019061040a9190612bf6565b610c6d565b60405161041c9190613241565b60405180910390f35b61043f600480360381019061043a9190612c48565b610c85565b005b6104496110af565b6040516104569190613241565b60405180910390f35b61047960048036038101906104749190612af3565b6110b5565b005b61048361115b565b6040516104909190612fe4565b60405180910390f35b6104b360048036038101906104ae9190612aa1565b611181565b6040516104c09190612fae565b60405180910390f35b6104e360048036038101906104de9190612aa1565b6111a1565b6040516104f09190613241565b60405180910390f35b6105016111e9565b005b61051d60048036038101906105189190612b7e565b611271565b005b610527611348565b6040516105349190613241565b60405180910390f35b61054561134e565b005b610561600480360381019061055c9190612bba565b61145f565b005b61057d60048036038101906105789190612aa1565b6114da565b005b61058761159a565b6040516105949190612f6a565b60405180910390f35b6105a56115c4565b6040516105b29190612fff565b60405180910390f35b6105d560048036038101906105d09190612aa1565b611656565b005b6105f160048036038101906105ec9190612bba565b611716565b6040516105fe9190612fae565b60405180910390f35b610621600480360381019061061c9190612bf6565b611801565b005b61063d60048036038101906106389190612bba565b611887565b60405161064a9190612fae565b60405180910390f35b61066d60048036038101906106689190612bba565b6118a5565b005b61068960048036038101906106849190612bf6565b61193f565b005b6106a560048036038101906106a09190612af3565b6119c5565b6040516106b29190613241565b60405180910390f35b6106d560048036038101906106d09190612aa1565b611a4c565b005b6106f160048036038101906106ec9190612aa1565b611b44565b6040516106fe9190613241565b60405180910390f35b61070f611b5c565b60405161071c9190613241565b60405180910390f35b61072d611b62565b60405161073a9190612fc9565b60405180910390f35b60606003805461075290613478565b80601f016020809104026020016040519081016040528092919081815260200182805461077e90613478565b80156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b5050505050905090565b60006107e96107e2611b88565b8484611b90565b6001905092915050565b6000600254905090565b600560149054906101000a900460ff1681565b600061081d848484611d5b565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610868611b88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df90613121565b60405180910390fd5b6108fc856108f4611b88565b858403611b90565b60019150509392505050565b60086020528060005260406000206000915090505481565b60006012905090565b600d5481565b60006109d161093c611b88565b84846001600061094a611b88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109cc9190613293565b611b90565b6001905092915050565b6109e3611b88565b73ffffffffffffffffffffffffffffffffffffffff16610a0161159a565b73ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e90613141565b60405180910390fd5b80600c8190555050565b610a72610a6c611b88565b82611fdc565b50565b6000600c54421015610ac857600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610c68565b6000610ad3836121b3565b9050600080610ae442600d546124c6565b905060005b8351811015610c0f576000610b5760096000878581518110610b34577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160000151815260200190815260200160002054600c546124df565b90506000811115610bfb576000610be262015180610bd4610b8185886124f990919063ffffffff16565b898781518110610bba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516020015161250f90919063ffffffff16565b61252590919063ffffffff16565b9050610bf7818661253b90919063ffffffff16565b9450505b508080610c07906134aa565b915050610ae9565b50610c6282600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253b90919063ffffffff16565b93505050505b919050565b60096020528060005260406000206000915090505481565b610c8d611b88565b73ffffffffffffffffffffffffffffffffffffffff16610cab61159a565b73ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890613141565b60405180910390fd5b600560149054906101000a900460ff1615610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d48906130a1565b60405180910390fd5b6006548214610d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8c906131e1565b60405180910390fd5b6000610e4082600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e0357600080fd5b505afa158015610e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3b9190612c1f565b6124c6565b905060008390505b81811015610fdf576000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610ead9190613241565b60206040518083038186803b158015610ec557600080fd5b505afa158015610ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efd9190612aca565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fcb57610f87600b54600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253b90919063ffffffff16565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b508080610fd7906134aa565b915050610e48565b5080600681905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561104f57600080fd5b505afa158015611063573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110879190612c1f565b8114156110aa576001600560146101000a81548160ff0219169083151502179055505b505050565b60065481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c906130e1565b60405180910390fd5b61114e82612551565b61115781612551565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111f1611b88565b73ffffffffffffffffffffffffffffffffffffffff1661120f61159a565b73ffffffffffffffffffffffffffffffffffffffff1614611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90613141565b60405180910390fd5b61126f60006127ee565b565b611279611b88565b73ffffffffffffffffffffffffffffffffffffffff1661129761159a565b73ffffffffffffffffffffffffffffffffffffffff16146112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490613141565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b61135733612551565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081111561145c576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061140d33611408670de0b6b3a76400008461250f90919063ffffffff16565b6128b4565b3373ffffffffffffffffffffffffffffffffffffffff167f650a3e335a58a5ffe2ecc0f229faffb8af6149cc75b22210b6d2b9401f98c7b4826040516114539190613241565b60405180910390a25b50565b60006114728361146d611b88565b6119c5565b9050818110156114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90613161565b60405180910390fd5b6114cb836114c3611b88565b848403611b90565b6114d58383611fdc565b505050565b6114e2611b88565b73ffffffffffffffffffffffffffffffffffffffff1661150061159a565b73ffffffffffffffffffffffffffffffffffffffff1614611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90613141565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115d390613478565b80601f01602080910402602001604051908101604052809291908181526020018280546115ff90613478565b801561164c5780601f106116215761010080835404028352916020019161164c565b820191906000526020600020905b81548152906001019060200180831161162f57829003601f168201915b5050505050905090565b61165e611b88565b73ffffffffffffffffffffffffffffffffffffffff1661167c61159a565b73ffffffffffffffffffffffffffffffffffffffff16146116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c990613141565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060016000611725611b88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d990613201565b60405180910390fd5b6117f66117ed611b88565b85858403611b90565b600191505092915050565b611809611b88565b73ffffffffffffffffffffffffffffffffffffffff1661182761159a565b73ffffffffffffffffffffffffffffffffffffffff161461187d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187490613141565b60405180910390fd5b80600b8190555050565b600061189b611894611b88565b8484611d5b565b6001905092915050565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890613101565b60405180910390fd5b61193b8282611fdc565b5050565b611947611b88565b73ffffffffffffffffffffffffffffffffffffffff1661196561159a565b73ffffffffffffffffffffffffffffffffffffffff16146119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290613141565b60405180910390fd5b80600d8190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a54611b88565b73ffffffffffffffffffffffffffffffffffffffff16611a7261159a565b73ffffffffffffffffffffffffffffffffffffffff1614611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90613141565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2f90613061565b60405180910390fd5b611b41816127ee565b50565b60076020528060005260406000206000915090505481565b600b5481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf7906131c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790613081565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d4e9190613241565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc2906131a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3290613021565b60405180910390fd5b611e46838383612a14565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec3906130c1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f5f9190613293565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fc39190613241565b60405180910390a3611fd6848484612a19565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561204c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204390613181565b60405180910390fd5b61205882600083612a14565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d590613041565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546121359190613374565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161219a9190613241565b60405180910390a36121ae83600084612a19565b505050565b60606000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016122129190612f6a565b60206040518083038186803b15801561222a57600080fd5b505afa15801561223e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122629190612c1f565b905060008167ffffffffffffffff8111156122a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156122df57816020015b6122cc612a1e565b8152602001906001900390816122c45790505b50905060005b828110156124bb576000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b815260040161234c929190612f85565b60206040518083038186803b15801561236457600080fd5b505afa158015612378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239c9190612c1f565b90506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361328074836040518263ffffffff1660e01b81526004016123fb9190613241565b60206040518083038186803b15801561241357600080fd5b505afa158015612427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244b9190612c1f565b905060405180604001604052808381526020018281525084848151811061249b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181905250505080806124b3906134aa565b9150506122e5565b508092505050919050565b60008183106124d557816124d7565b825b905092915050565b6000818310156124ef57816124f1565b825b905092915050565b600081836125079190613374565b905092915050565b6000818361251d919061331a565b905092915050565b6000818361253391906132e9565b905092915050565b600081836125499190613293565b905092915050565b600c54421015612560576127eb565b600061256b826121b3565b905060008061257c42600d546124c6565b905060005b835181101561270d5760006125ef600960008785815181106125cc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160000151815260200190815260200160002054600c546124df565b9050600081111561269357600061267a6201518061266c61261985886124f990919063ffffffff16565b898781518110612652577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516020015161250f90919063ffffffff16565b61252590919063ffffffff16565b905061268f818661253b90919063ffffffff16565b9450505b600d5481146126f95782600960008785815181106126da577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600001518152602001908152602001600020819055505b508080612705906134aa565b915050612581565b5061276082600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253b90919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b90613221565b60405180910390fd5b61293060008383612a14565b80600260008282546129429190613293565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129979190613293565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129fc9190613241565b60405180910390a3612a1060008383612a19565b5050565b505050565b505050565b604051806040016040528060008152602001600081525090565b600081359050612a4781613a38565b92915050565b600081519050612a5c81613a38565b92915050565b600081359050612a7181613a4f565b92915050565b600081359050612a8681613a66565b92915050565b600081519050612a9b81613a66565b92915050565b600060208284031215612ab357600080fd5b6000612ac184828501612a38565b91505092915050565b600060208284031215612adc57600080fd5b6000612aea84828501612a4d565b91505092915050565b60008060408385031215612b0657600080fd5b6000612b1485828601612a38565b9250506020612b2585828601612a38565b9150509250929050565b600080600060608486031215612b4457600080fd5b6000612b5286828701612a38565b9350506020612b6386828701612a38565b9250506040612b7486828701612a77565b9150509250925092565b60008060408385031215612b9157600080fd5b6000612b9f85828601612a38565b9250506020612bb085828601612a62565b9150509250929050565b60008060408385031215612bcd57600080fd5b6000612bdb85828601612a38565b9250506020612bec85828601612a77565b9150509250929050565b600060208284031215612c0857600080fd5b6000612c1684828501612a77565b91505092915050565b600060208284031215612c3157600080fd5b6000612c3f84828501612a8c565b91505092915050565b60008060408385031215612c5b57600080fd5b6000612c6985828601612a77565b9250506020612c7a85828601612a77565b9150509250929050565b612c8d816133a8565b82525050565b612c9c816133ba565b82525050565b612cab816133fd565b82525050565b612cba81613421565b82525050565b6000612ccb82613277565b612cd58185613282565b9350612ce5818560208601613445565b612cee81613580565b840191505092915050565b6000612d06602383613282565b9150612d1182613591565b604082019050919050565b6000612d29602283613282565b9150612d34826135e0565b604082019050919050565b6000612d4c602683613282565b9150612d578261362f565b604082019050919050565b6000612d6f602283613282565b9150612d7a8261367e565b604082019050919050565b6000612d92602083613282565b9150612d9d826136cd565b602082019050919050565b6000612db5602683613282565b9150612dc0826136f6565b604082019050919050565b6000612dd8601783613282565b9150612de382613745565b602082019050919050565b6000612dfb602783613282565b9150612e068261376e565b604082019050919050565b6000612e1e602883613282565b9150612e29826137bd565b604082019050919050565b6000612e41602083613282565b9150612e4c8261380c565b602082019050919050565b6000612e64602483613282565b9150612e6f82613835565b604082019050919050565b6000612e87602183613282565b9150612e9282613884565b604082019050919050565b6000612eaa602583613282565b9150612eb5826138d3565b604082019050919050565b6000612ecd602483613282565b9150612ed882613922565b604082019050919050565b6000612ef0602983613282565b9150612efb82613971565b604082019050919050565b6000612f13602583613282565b9150612f1e826139c0565b604082019050919050565b6000612f36601f83613282565b9150612f4182613a0f565b602082019050919050565b612f55816133e6565b82525050565b612f64816133f0565b82525050565b6000602082019050612f7f6000830184612c84565b92915050565b6000604082019050612f9a6000830185612c84565b612fa76020830184612f4c565b9392505050565b6000602082019050612fc36000830184612c93565b92915050565b6000602082019050612fde6000830184612ca2565b92915050565b6000602082019050612ff96000830184612cb1565b92915050565b600060208201905081810360008301526130198184612cc0565b905092915050565b6000602082019050818103600083015261303a81612cf9565b9050919050565b6000602082019050818103600083015261305a81612d1c565b9050919050565b6000602082019050818103600083015261307a81612d3f565b9050919050565b6000602082019050818103600083015261309a81612d62565b9050919050565b600060208201905081810360008301526130ba81612d85565b9050919050565b600060208201905081810360008301526130da81612da8565b9050919050565b600060208201905081810360008301526130fa81612dcb565b9050919050565b6000602082019050818103600083015261311a81612dee565b9050919050565b6000602082019050818103600083015261313a81612e11565b9050919050565b6000602082019050818103600083015261315a81612e34565b9050919050565b6000602082019050818103600083015261317a81612e57565b9050919050565b6000602082019050818103600083015261319a81612e7a565b9050919050565b600060208201905081810360008301526131ba81612e9d565b9050919050565b600060208201905081810360008301526131da81612ec0565b9050919050565b600060208201905081810360008301526131fa81612ee3565b9050919050565b6000602082019050818103600083015261321a81612f06565b9050919050565b6000602082019050818103600083015261323a81612f29565b9050919050565b60006020820190506132566000830184612f4c565b92915050565b60006020820190506132716000830184612f5b565b92915050565b600081519050919050565b600082825260208201905092915050565b600061329e826133e6565b91506132a9836133e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132de576132dd6134f3565b5b828201905092915050565b60006132f4826133e6565b91506132ff836133e6565b92508261330f5761330e613522565b5b828204905092915050565b6000613325826133e6565b9150613330836133e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613369576133686134f3565b5b828202905092915050565b600061337f826133e6565b915061338a836133e6565b92508282101561339d5761339c6134f3565b5b828203905092915050565b60006133b3826133c6565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006134088261340f565b9050919050565b600061341a826133c6565b9050919050565b600061342c82613433565b9050919050565b600061343e826133c6565b9050919050565b60005b83811015613463578082015181840152602081019050613448565b83811115613472576000848401525b50505050565b6000600282049050600182168061349057607f821691505b602082108114156134a4576134a3613551565b5b50919050565b60006134b5826133e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134e8576134e76134f3565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f6c6f2043686970733a2041697264726f7020616c726561647920646f6e65600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f596f6c6f2043686970733a204e6f7420616c6c6f776564000000000000000000600082015250565b7f596f6c6f2043686970733a204e6f7420616c6c6f77656420746f207370656e6460008201527f2024434849505300000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f596f6c6f2043686970733a20496e636f72726563742061697264726f7020737460008201527f61727420696e6465780000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613a41816133a8565b8114613a4c57600080fd5b50565b613a58816133ba565b8114613a6357600080fd5b50565b613a6f816133e6565b8114613a7a57600080fd5b5056fea2646970667358221220e1433c9e227657f791a19732aa60ea25ba54636d9b816ff9e0bb458f92d2147d64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000061e6494d934b594d0634f292e13846639b6f1927
-----Decoded View---------------
Arg [0] : _diceV1 (address): 0x61e6494d934B594d0634F292e13846639B6f1927
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000061e6494d934b594d0634f292e13846639b6f1927
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.