Overview
ETH Balance
0.224 ETH
Eth Value
$742.54 (@ $3,314.92/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 82 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Owner Withdraw | 18268452 | 300 days ago | IN | 0 ETH | 0.00038909 | ||||
Deduct Tickets | 18234762 | 305 days ago | IN | 0 ETH | 0.00188826 | ||||
Deduct Tickets | 18232551 | 305 days ago | IN | 0 ETH | 0.00086128 | ||||
Purchase Tickets | 18232539 | 305 days ago | IN | 0.02 ETH | 0.00046811 | ||||
Purchase Tickets | 18230164 | 305 days ago | IN | 0.02 ETH | 0.00040199 | ||||
Deduct Tickets | 18230137 | 305 days ago | IN | 0 ETH | 0.00090205 | ||||
Purchase Tickets | 18230135 | 305 days ago | IN | 0.02 ETH | 0.00049153 | ||||
Gift Tickets | 18229993 | 305 days ago | IN | 0 ETH | 0.00033154 | ||||
Claim | 18229993 | 305 days ago | IN | 0 ETH | 0.00028893 | ||||
Deduct Tickets | 18229984 | 305 days ago | IN | 0 ETH | 0.00138649 | ||||
Purchase Tickets | 18229982 | 305 days ago | IN | 0.04 ETH | 0.00074474 | ||||
Gift Tickets | 18229166 | 305 days ago | IN | 0 ETH | 0.00050672 | ||||
Gift Tickets | 18229164 | 305 days ago | IN | 0 ETH | 0.00038654 | ||||
Gift Tickets | 18229162 | 305 days ago | IN | 0 ETH | 0.00037393 | ||||
Gift Tickets | 18229161 | 305 days ago | IN | 0 ETH | 0.00038007 | ||||
Deduct Tickets | 18228246 | 306 days ago | IN | 0 ETH | 0.00168635 | ||||
Purchase Tickets | 18228152 | 306 days ago | IN | 0.02 ETH | 0.00118145 | ||||
Deduct Tickets | 18227786 | 306 days ago | IN | 0 ETH | 0.00194533 | ||||
Purchase Tickets | 18227772 | 306 days ago | IN | 0.02 ETH | 0.0010652 | ||||
Deduct Tickets | 18226916 | 306 days ago | IN | 0 ETH | 0.00103063 | ||||
Purchase Tickets | 18226912 | 306 days ago | IN | 0.02 ETH | 0.00052973 | ||||
Purchase Tickets | 18225667 | 306 days ago | IN | 0.02 ETH | 0.00050629 | ||||
Claim | 18225511 | 306 days ago | IN | 0 ETH | 0.00027869 | ||||
Gift Tickets | 18225213 | 306 days ago | IN | 0 ETH | 0.00043398 | ||||
Deduct Tickets | 18225146 | 306 days ago | IN | 0 ETH | 0.00110417 |
Loading...
Loading
Contract Name:
FlappyRoyale
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// OPEN SOURCE LICENSE. RADICAL ACCELERATION. BREAK THINGS RESPONSIBLY. // FLAPPY ROYALE: A TRUSTLESS IMPLEMENTATION FOR EVM BASED BATTLE ROYALE GAMES. // ................................ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@* // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@* // @@@@@@@@@@@.....................(@@@@@ #@@@@@ // @@@@@@@@@@@.....................(@@@@@ #@@@@@ // #@@@@@...........................@@@@@( @@@@@, // #@@@@@...........................@@@@@( @@@@@, // /@@@@@@@@@@@@@@@@@@@@@*.....................@@@@@( #@@@@@ &@@@@@ // /@@@@@@@@@@@@@@@@@@@@@*.....................@@@@@( #@@@@@ &@@@@@ // @@@@@#.....................&@@@@@................@@@@@( #@@@@@ &@@@@@ // @@@@@#.....................&@@@@@................@@@@@( #@@@@@ &@@@@@ // @@@@@#.....................%&&&&&,,,,,...........&&&&&(..... (&&&&& &@@@@@ // @@@@@#...........................@@@@@................(@@@@@ &@@@@@ // @@@@@#...........................@@@@@................(@@@@@ &@@@@@ // @@@@@#...........................@@@@@......................@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@#...........................@@@@@......................@@@@@@@@@@@@@@@@@@@@@@@@@@@ // /@@@@@................&@@@@@.....................(@@@@@***************************@@@@@@ // /@@@@@................&@@@@@.....................(@@@@@***************************@@@@@@ // @@@@@@@@@@@@@@@@*.....................@@@@@%*****@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@*.....................@@@@@%*****@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@*..........................(@@@@@**********************@@@@@ // @@@@@*..........................(@@@@@**********************@@@@@ // &&&&&/**********................/&&&&&/////////////////////(@@@@@ // &@@@@@@@@@@......................@@@@@@@@@@@@@@@@@@@@@@@@@@@ // &@@@@@@@@@@......................@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@ pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; contract FlappyRoyale is Ownable, Pausable, ReentrancyGuard { using SafeMath for uint256; uint256 public price = 0.02 ether; uint256 public highstakePrice = 0.06 ether; bool public highStakesActive = false; uint256 public entrants = 100; uint256 public totalContributions = 0; uint256 public totalPrizes = 0; uint256 public unclaimedPrizes = 0; uint256 public withdrawnFunds = 0; uint256 public prizeEquation = 60; uint256 public gameCounter = 0; uint256 public currentPlayerCount = 0; address[] public currentPlayersList; address public treasuryWallet = msg.sender; uint256 public lastGiveawayMint; uint256 public firstPrize = 40; uint256 public secondPrize = 20; uint256 public thirdPrize = 10; mapping(address => uint256) public tickets; mapping(address => uint256) public highStakeTickets; mapping(address => uint256) public deductedTickets; mapping(address => uint256) public pendingWithdrawals; mapping(address => bool) public currentPlayers; mapping(address => uint256) public winsFirst; mapping(address => uint256) public winsSecond; mapping(address => uint256) public winsThird; event LobbyFull(address[] players); event LobbyFullHighStakes(address[] players); event TicketDeducted(address indexed user, uint256 currentPlayerCount); event HighStakeTicketDeducted(address indexed user, uint256 currentPlayerCount); event TicketsPurchased(address indexed user, uint256 amount); event HighStakeTicketsPurchased(address indexed user, uint256 amount); event TicketsGranted(address indexed user1, address indexed user2); event TicketsGifted(address indexed sender, address indexed receiver, uint256 amount); event WinnersPayoutUpdated(address winner1, address winner2, address winner3, uint256 winner1Amount, uint256 winner2Amount, uint256 winner3Amount); event EntrantsUpdated(uint256 newEntrants); event FundsWithdrawn(uint256 amount); event PrizeEquationUpdated(uint256 newPrizeEquation); event AmountClaimed(address indexed user, uint256 amount); bool public isShutDown = false; bool public contractOpened = false; modifier onlyWhenHighStakesInactive() { require(!highStakesActive, "High Stakes are active"); _; } modifier onlyWhenHighStakesActive() { require(highStakesActive, "High Stakes are not active"); _; } modifier onlyEOA() { require(!isContract(msg.sender), "Caller must be an EOA"); _; } modifier onlyTreasuryWallet() { require(msg.sender == treasuryWallet, "Not authorized"); _; } function isContract(address account) public view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function toggleHighStakes() external onlyTreasuryWallet { require(currentPlayerCount == entrants, "Current players list is not equal to entrants"); highStakesActive = !highStakesActive; } function purchaseTickets(uint256 amount) external payable whenNotPaused { require(!isShutDown, "Ticket purchasing has been shut down"); require(msg.value == amount.mul(price), "Incorrect ETH sent"); totalContributions = totalContributions.add(msg.value); creditTickets(msg.sender, amount); emit TicketsPurchased(msg.sender, amount); } function creditTickets(address user, uint256 amount) internal { tickets[user] = tickets[user].add(amount); } function purchaseHighStakeTickets(uint256 amount) external payable whenNotPaused { require(!isShutDown, "Ticket purchasing has been shut down"); require(msg.value == amount.mul(highstakePrice), "Incorrect ETH sent"); totalContributions = totalContributions.add(msg.value); creditHighStakeTickets(msg.sender, amount); emit HighStakeTicketsPurchased(msg.sender, amount); } function creditHighStakeTickets(address user, uint256 amount) internal { highStakeTickets[user] = highStakeTickets[user].add(amount); } function deductTickets() external onlyEOA onlyWhenHighStakesInactive { require(!isShutDown, "Game is shut down"); require(contractOpened, "Contract not open yet"); require(currentPlayerCount < entrants, "Lobby is full. Wait for payout."); require(tickets[msg.sender] > 0, "Insufficient tickets"); require(gameCounter < 1, "Game is in progress please wait"); require(!currentPlayers[msg.sender], "You've already joined the current lobby"); if(!currentPlayers[msg.sender]) { tickets[msg.sender] = tickets[msg.sender].sub(1); deductedTickets[msg.sender] = deductedTickets[msg.sender].add(1); currentPlayerCount++; emit TicketDeducted(msg.sender, currentPlayerCount); currentPlayersList.push(msg.sender); currentPlayers[msg.sender] = true; if(currentPlayerCount == entrants) { emit LobbyFull(currentPlayersList); gameCounter = gameCounter.add(1); } } } function deductHighStakeTickets() external onlyEOA onlyWhenHighStakesActive { require(!isShutDown, "Game is shut down"); require(contractOpened, "Contract not open yet"); require(currentPlayerCount < entrants, "Lobby is full. Wait for payout."); require(highStakeTickets[msg.sender] > 0, "Insufficient high-stake tickets"); require(!currentPlayers[msg.sender], "You've already joined the current lobby"); if(!currentPlayers[msg.sender]) { highStakeTickets[msg.sender] = highStakeTickets[msg.sender].sub(1); deductedTickets[msg.sender] = deductedTickets[msg.sender].add(1); currentPlayerCount++; emit HighStakeTicketDeducted(msg.sender, currentPlayerCount); currentPlayersList.push(msg.sender); currentPlayers[msg.sender] = true; if(currentPlayerCount == entrants) { emit LobbyFullHighStakes(currentPlayersList); gameCounter = gameCounter.add(1); } } } function giftTickets(address receiver, uint256 amount) external { require(receiver != address(0), "Invalid receiver address"); require(amount > 0, "Amount must be greater than 0"); address sender = msg.sender; require(tickets[sender] >= amount, "Insufficient tickets to gift"); tickets[sender] = tickets[sender].sub(amount); tickets[receiver] = tickets[receiver].add(amount); emit TicketsGifted(sender, receiver, amount); } function mintGiftTickets() external onlyTreasuryWallet { uint256 amountToMint = 10; require(block.timestamp - lastGiveawayMint >= 1 days, "Can only mint 10 tickets per day"); lastGiveawayMint = block.timestamp; tickets[owner()] = tickets[owner()].add(amountToMint); } function setWinnersPayoutStandard(address winner1, address winner2, address winner3) external onlyTreasuryWallet { _setWinnersPayout(winner1, winner2, winner3, price); } function setWinnersPayoutHighStakes(address winner1, address winner2, address winner3) external onlyTreasuryWallet { _setWinnersPayout(winner1, winner2, winner3, highstakePrice); } function _setWinnersPayout(address winner1, address winner2, address winner3, uint256 activePrice) internal { require(gameCounter > 0, "No completed games available for payout"); require(prizeEquation >= 60 && prizeEquation <= 100, "Invalid prize equation percentage"); uint256 totalPrize = activePrice.mul(entrants); uint256 winner1Amount = totalPrize.mul(firstPrize).div(100); uint256 winner2Amount = totalPrize.mul(secondPrize).div(100); uint256 winner3Amount = totalPrize.mul(thirdPrize).div(100); pendingWithdrawals[winner1] = pendingWithdrawals[winner1].add(winner1Amount); pendingWithdrawals[winner2] = pendingWithdrawals[winner2].add(winner2Amount); pendingWithdrawals[winner3] = pendingWithdrawals[winner3].add(winner3Amount); totalPrizes = totalPrizes.add(winner1Amount).add(winner2Amount).add(winner3Amount); unclaimedPrizes = unclaimedPrizes.add(winner1Amount).add(winner2Amount).add(winner3Amount); emit WinnersPayoutUpdated(winner1, winner2, winner3, winner1Amount, winner2Amount, winner3Amount); winsFirst[winner1] = winsFirst[winner1].add(1); winsSecond[winner2] = winsSecond[winner2].add(1); winsThird[winner3] = winsThird[winner3].add(1); gameCounter = 0; currentPlayerCount = 0; delete currentPlayersList; } function setPrizePercentages(uint256 _firstPrize, uint256 _secondPrize, uint256 _thirdPrize) external onlyTreasuryWallet { require(_firstPrize >= 40, "First prize cannot be less than 40%"); require(_secondPrize >= 20, "Second prize cannot be less than 20%"); require(_thirdPrize >= 10, "Third prize cannot be less than 10%"); require(_firstPrize.add(_secondPrize).add(_thirdPrize) <= 100, "Total prize percentages cannot exceed 100%"); firstPrize = _firstPrize; secondPrize = _secondPrize; thirdPrize = _thirdPrize; } function claim() external nonReentrant { uint256 amount = pendingWithdrawals[msg.sender]; require(amount > 0, "No funds to claim."); pendingWithdrawals[msg.sender] = 0; payable(msg.sender).transfer(amount); unclaimedPrizes = unclaimedPrizes.sub(amount); emit AmountClaimed(msg.sender, amount); } function updatePrizeEquation(uint256 newPrizeEquation) external onlyTreasuryWallet { require(newPrizeEquation >= 60 && newPrizeEquation <= 100, "Invalid prize equation percentage"); prizeEquation = newPrizeEquation; emit PrizeEquationUpdated(newPrizeEquation); } function grantTickets(address user1, address user2) external onlyTreasuryWallet { require(user1 != address(0) && user2 != address(0), "Invalid address"); tickets[user1] = tickets[user1].add(1); tickets[user2] = tickets[user2].add(1); emit TicketsGranted(user1, user2); } function updateEntrants(uint256 newEntrants) external onlyTreasuryWallet { if(contractOpened) { require(gameCounter > 0, "No completed games available for payout"); } entrants = newEntrants; emit EntrantsUpdated(newEntrants); } function getCurrentPlayersList() external view returns (address[] memory) { return currentPlayersList; } function ownerWithdraw(uint256 amount) external onlyOwner { uint256 maxAmount = totalContributions.mul(40).div(100); require(withdrawnFunds.add(amount) <= maxAmount, "Exceeding withdrawal limit"); withdrawnFunds = withdrawnFunds.add(amount); payable(msg.sender).transfer(amount); emit FundsWithdrawn(amount); } function delegateTreasuryWallet(address newTreasuryWallet) external onlyOwner { require(newTreasuryWallet != address(0), "Invalid address"); treasuryWallet = newTreasuryWallet; } function renounceOwnership() public view override onlyOwner { revert("Renouncing ownership is not allowed"); } function pauseTicketBuying() external onlyTreasuryWallet { require(!isShutDown, "Contract is already shut down"); isShutDown = true; } function resumeTicketBuying() external onlyTreasuryWallet { require(isShutDown, "Contract is not shut down"); isShutDown = false; } function startContract() external onlyOwner { contractOpened = true; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol) 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 generally not needed starting with Solidity 0.8, since 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 subtraction 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: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) 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() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AmountClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newEntrants","type":"uint256"}],"name":"EntrantsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"currentPlayerCount","type":"uint256"}],"name":"HighStakeTicketDeducted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"HighStakeTicketsPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"players","type":"address[]"}],"name":"LobbyFull","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"players","type":"address[]"}],"name":"LobbyFullHighStakes","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrizeEquation","type":"uint256"}],"name":"PrizeEquationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"currentPlayerCount","type":"uint256"}],"name":"TicketDeducted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TicketsGifted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user1","type":"address"},{"indexed":true,"internalType":"address","name":"user2","type":"address"}],"name":"TicketsGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TicketsPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"winner1","type":"address"},{"indexed":false,"internalType":"address","name":"winner2","type":"address"},{"indexed":false,"internalType":"address","name":"winner3","type":"address"},{"indexed":false,"internalType":"uint256","name":"winner1Amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"winner2Amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"winner3Amount","type":"uint256"}],"name":"WinnersPayoutUpdated","type":"event"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractOpened","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPlayerCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"currentPlayers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"currentPlayersList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deductHighStakeTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deductTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deductedTickets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"delegateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"entrants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPlayersList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"giftTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user1","type":"address"},{"internalType":"address","name":"user2","type":"address"}],"name":"grantTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"highStakeTickets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highStakesActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"highstakePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isShutDown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastGiveawayMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintGiftTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseTicketBuying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pendingWithdrawals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prizeEquation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"purchaseHighStakeTickets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"purchaseTickets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resumeTicketBuying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_firstPrize","type":"uint256"},{"internalType":"uint256","name":"_secondPrize","type":"uint256"},{"internalType":"uint256","name":"_thirdPrize","type":"uint256"}],"name":"setPrizePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"winner1","type":"address"},{"internalType":"address","name":"winner2","type":"address"},{"internalType":"address","name":"winner3","type":"address"}],"name":"setWinnersPayoutHighStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"winner1","type":"address"},{"internalType":"address","name":"winner2","type":"address"},{"internalType":"address","name":"winner3","type":"address"}],"name":"setWinnersPayoutStandard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thirdPrize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tickets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleHighStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalContributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPrizes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unclaimedPrizes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newEntrants","type":"uint256"}],"name":"updateEntrants","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrizeEquation","type":"uint256"}],"name":"updatePrizeEquation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"winsFirst","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"winsSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"winsThird","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawnFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405266470de4df82000060025566d529ae9e8600006003556000600460006101000a81548160ff02191690831515021790555060646005556000600655600060075560006008556000600955603c600a556000600b556000600c5533600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060286010556014601155600a6012556000601b60006101000a81548160ff0219169083151502179055506000601b60016101000a81548160ff021916908315150217905550348015620000f057600080fd5b5062000111620001056200013860201b60201c565b6200014060201b60201c565b60008060146101000a81548160ff0219169083151502179055506001808190555062000204565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614fcc80620002146000396000f3fe6080604052600436106102ff5760003560e01c80636dcbf2a311610190578063bbbf7fb8116100dc578063e872592111610095578063f3f437031161006f578063f3f4370314610ad0578063fb347c5214610b0d578063ff8de5ec14610b38578063ff94752514610b63576102ff565b8063e872592114610a53578063e944079b14610a7e578063f2fde38b14610aa7576102ff565b8063bbbf7fb814610955578063bd5c508a14610992578063c5625ae7146109a9578063d75075fa146109d4578063d8ec3a6f146109ff578063e3d98bd614610a16576102ff565b8063906280c311610149578063a035b1fe11610123578063a035b1fe146108bc578063a11dec9f146108e7578063a127760014610910578063a1d1f10d1461092c576102ff565b8063906280c31461084f5780639220abb11461087a5780639834cda4146108a5576102ff565b80636dcbf2a314610751578063715018a61461078e5780637b8ce08f146107a5578063835a8ed3146107ce5780638da5cb5b146107f957806390581bf414610824576102ff565b806333f707d11161024f578063495caa8d116102085780635c975abb116101e25780635c975abb146106bb5780635ce220c1146106e65780635d02787f146107235780635fb02f4d1461073a576102ff565b8063495caa8d146106505780634b9a714a146106675780634e71d92d146106a4576102ff565b806333f707d11461054057806337c08923146105695780633d70bc52146105945780633e01aaad146105bf5780634626402b146105e85780634755fda114610613576102ff565b80631e7b6938116102bc5780632c12ddd2116102965780632c12ddd2146104915780632e0be39a146104ad5780632e98520c146104d85780632fc8f46714610503576102ff565b80631e7b69381461041257806323c6fce41461043d57806325e6c30414610466576102ff565b80630743fe4e14610304578063090f9e041461032d5780630ab80e331461036a5780630fdf2de81461039557806316279055146103be5780631c46773d146103fb575b600080fd5b34801561031057600080fd5b5061032b600480360381019061032691906139b1565b610b8e565b005b34801561033957600080fd5b50610354600480360381019061034f91906139f1565b610e5b565b6040516103619190613a2d565b60405180910390f35b34801561037657600080fd5b5061037f610e73565b60405161038c9190613a2d565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b791906139f1565b610e79565b005b3480156103ca57600080fd5b506103e560048036038101906103e091906139f1565b610f34565b6040516103f29190613a63565b60405180910390f35b34801561040757600080fd5b50610410610f47565b005b34801561041e57600080fd5b506104276110dd565b6040516104349190613a2d565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613a7e565b6110e3565b005b34801561047257600080fd5b5061047b61120f565b6040516104889190613a2d565b60405180910390f35b6104ab60048036038101906104a69190613a7e565b611215565b005b3480156104b957600080fd5b506104c2611339565b6040516104cf9190613a2d565b60405180910390f35b3480156104e457600080fd5b506104ed61133f565b6040516104fa9190613a2d565b60405180910390f35b34801561050f57600080fd5b5061052a600480360381019061052591906139f1565b611345565b6040516105379190613a2d565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190613a7e565b61135d565b005b34801561057557600080fd5b5061057e611486565b60405161058b9190613a2d565b60405180910390f35b3480156105a057600080fd5b506105a961148c565b6040516105b69190613a2d565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613aab565b611492565b005b3480156105f457600080fd5b506105fd611535565b60405161060a9190613b0d565b60405180910390f35b34801561061f57600080fd5b5061063a600480360381019061063591906139f1565b61155b565b6040516106479190613a2d565b60405180910390f35b34801561065c57600080fd5b50610665611573565b005b34801561067357600080fd5b5061068e600480360381019061068991906139f1565b611670565b60405161069b9190613a2d565b60405180910390f35b3480156106b057600080fd5b506106b9611688565b005b3480156106c757600080fd5b506106d0611817565b6040516106dd9190613a63565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613a7e565b61182d565b60405161071a9190613b0d565b60405180910390f35b34801561072f57600080fd5b5061073861186c565b005b34801561074657600080fd5b5061074f61196e565b005b34801561075d57600080fd5b50610778600480360381019061077391906139f1565b611993565b6040516107859190613a2d565b60405180910390f35b34801561079a57600080fd5b506107a36119ab565b005b3480156107b157600080fd5b506107cc60048036038101906107c79190613a7e565b6119ee565b005b3480156107da57600080fd5b506107e3611b10565b6040516107f09190613a2d565b60405180910390f35b34801561080557600080fd5b5061080e611b16565b60405161081b9190613b0d565b60405180910390f35b34801561083057600080fd5b50610839611b3f565b6040516108469190613a63565b60405180910390f35b34801561085b57600080fd5b50610864611b52565b6040516108719190613a2d565b60405180910390f35b34801561088657600080fd5b5061088f611b58565b60405161089c9190613a2d565b60405180910390f35b3480156108b157600080fd5b506108ba611b5e565b005b3480156108c857600080fd5b506108d1611c5a565b6040516108de9190613a2d565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190613b28565b611c60565b005b61092a60048036038101906109259190613a7e565b611e3e565b005b34801561093857600080fd5b50610953600480360381019061094e9190613b7b565b611f62565b005b34801561096157600080fd5b5061097c600480360381019061097791906139f1565b612225565b6040516109899190613a2d565b60405180910390f35b34801561099e57600080fd5b506109a761223d565b005b3480156109b557600080fd5b506109be612812565b6040516109cb9190613a2d565b60405180910390f35b3480156109e057600080fd5b506109e9612818565b6040516109f69190613a63565b60405180910390f35b348015610a0b57600080fd5b50610a1461282b565b005b348015610a2257600080fd5b50610a3d6004803603810190610a3891906139f1565b612dba565b604051610a4a9190613a63565b60405180910390f35b348015610a5f57600080fd5b50610a68612dda565b604051610a759190613c79565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa09190613aab565b612e68565b005b348015610ab357600080fd5b50610ace6004803603810190610ac991906139f1565b612f0b565b005b348015610adc57600080fd5b50610af76004803603810190610af291906139f1565b612f8e565b604051610b049190613a2d565b60405180910390f35b348015610b1957600080fd5b50610b22612fa6565b604051610b2f9190613a2d565b60405180910390f35b348015610b4457600080fd5b50610b4d612fac565b604051610b5a9190613a2d565b60405180910390f35b348015610b6f57600080fd5b50610b78612fb2565b604051610b859190613a63565b60405180910390f35b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf490613cf8565b60405180910390fd5b60008111610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790613d64565b60405180910390fd5b600033905081601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90613dd0565b60405180910390fd5b610d1982601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc590919063ffffffff16565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610dae82601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f26941c4238c2ab25a144b8fc1eb9162820738d96a3c9be025d650db4e214130084604051610e4e9190613a2d565b60405180910390a3505050565b60156020528060005260406000206000915090505481565b60035481565b610e81612ff1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790613e3c565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080823b905060008111915050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90613ea8565b60405180910390fd5b6000600a905062015180600f5442610fef9190613ef7565b1015611030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102790613f77565b60405180910390fd5b42600f819055506110908160136000611047611b16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b6013600061109c611b16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60055481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90613ea8565b60405180910390fd5b601b60019054906101000a900460ff16156111ce576000600b54116111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614009565b60405180910390fd5b5b806005819055507f1689bcc7e7fd08af4cf38eb983dc287febf0f2b7c105f8a51ea8c7618143531d816040516112049190613a2d565b60405180910390a150565b60075481565b61121d61306f565b601b60009054906101000a900460ff161561126d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112649061409b565b60405180910390fd5b611282600354826130b990919063ffffffff16565b34146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90614107565b60405180910390fd5b6112d834600654612fdb90919063ffffffff16565b6006819055506112e833826130cf565b3373ffffffffffffffffffffffffffffffffffffffff167fce55d51a74c760dc7fd517c6f83701c75762ecc197438f49de28ffe460eeb72c8260405161132e9190613a2d565b60405180910390a250565b600b5481565b60105481565b60186020528060005260406000206000915090505481565b611365612ff1565b6000611390606461138260286006546130b990919063ffffffff16565b61316890919063ffffffff16565b9050806113a883600954612fdb90919063ffffffff16565b11156113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e090614173565b60405180910390fd5b6113fe82600954612fdb90919063ffffffff16565b6009819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561144a573d6000803e3d6000fd5b507f4a37b25aab49761ecf63117fe82b98d750917451133cf797507bc9fb5b96044a8260405161147a9190613a2d565b60405180910390a15050565b60065481565b60115481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990613ea8565b60405180910390fd5b61153083838360035461317e565b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a6020528060005260406000206000915090505481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90613ea8565b60405180910390fd5b601b60009054906101000a900460ff1615611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a906141df565b60405180910390fd5b6001601b60006101000a81548160ff021916908315150217905550565b60146020528060005260406000206000915090505481565b61169061371d565b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e9061424b565b60405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156117a2573d6000803e3d6000fd5b506117b881600854612fc590919063ffffffff16565b6008819055503373ffffffffffffffffffffffffffffffffffffffff167f13dcfa08b5805e689424ccce1892676af568734e1561cc374b73c6c5e5f30400826040516118049190613a2d565b60405180910390a25061181561376c565b565b60008060149054906101000a900460ff16905090565b600d818154811061183d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390613ea8565b60405180910390fd5b600554600c5414611942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611939906142dd565b60405180910390fd5b600460009054906101000a900460ff1615600460006101000a81548160ff021916908315150217905550565b611976612ff1565b6001601b60016101000a81548160ff021916908315150217905550565b60136020528060005260406000206000915090505481565b6119b3612ff1565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e59061436f565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590613ea8565b60405180910390fd5b603c8110158015611a90575060648111155b611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690614401565b60405180910390fd5b80600a819055507fe139cfb188ea120c39fe64d94cd62af3844dcc6af49e390373393f27edc4ab6781604051611b059190613a2d565b60405180910390a150565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900460ff1681565b60095481565b600f5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613ea8565b60405180910390fd5b601b60009054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c349061446d565b60405180910390fd5b6000601b60006101000a81548160ff021916908315150217905550565b60025481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce790613ea8565b60405180910390fd5b6028831015611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b906144ff565b60405180910390fd5b6014821015611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90614591565b60405180910390fd5b600a811015611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390614623565b60405180910390fd5b6064611de382611dd58587612fdb90919063ffffffff16565b612fdb90919063ffffffff16565b1115611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b906146b5565b60405180910390fd5b826010819055508160118190555080601281905550505050565b611e4661306f565b601b60009054906101000a900460ff1615611e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8d9061409b565b60405180910390fd5b611eab600254826130b990919063ffffffff16565b3414611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390614107565b60405180910390fd5b611f0134600654612fdb90919063ffffffff16565b600681905550611f113382613775565b3373ffffffffffffffffffffffffffffffffffffffff167fe11731cb4f1eb3ec3dd09bdc96809bb07365f4c881cda3192b397a4bc0b6da4082604051611f579190613a2d565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990613ea8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561205c5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61209b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209290613e3c565b60405180910390fd5b6120ee6001601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121846001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f2bbaca1354ea4174af015cc6012643e686145d9cfee0414d2c0ed840a1ca04fc60405160405180910390a35050565b60196020528060005260406000206000915090505481565b61224633610f34565b15612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90614721565b60405180910390fd5b600460009054906101000a900460ff16156122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd9061478d565b60405180910390fd5b601b60009054906101000a900460ff1615612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d906147f9565b60405180910390fd5b601b60019054906101000a900460ff16612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c90614865565b60405180910390fd5b600554600c54106123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b2906148d1565b60405180910390fd5b6000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161243d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124349061493d565b60405180910390fd5b6001600b5410612482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612479906149a9565b60405180910390fd5b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250690614a3b565b60405180910390fd5b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612810576125b36001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc590919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126496001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c600081548092919061269f90614a5b565b91905055503373ffffffffffffffffffffffffffffffffffffffff167fc7e8add138e49f46d19677ad306f460739bd3c94f7c2afd303caa90a3b976509600c546040516126ec9190613a2d565b60405180910390a2600d339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600554600c540361280f577fe8cdca242f8202ae412d2a2d900d52ea6aad38bc508d028831bc37a4c570f76e600d6040516127ea9190614b8f565b60405180910390a16128086001600b54612fdb90919063ffffffff16565b600b819055505b5b565b600c5481565b601b60019054906101000a900460ff1681565b61283433610f34565b15612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90614721565b60405180910390fd5b600460009054906101000a900460ff166128c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ba90614bfd565b60405180910390fd5b601b60009054906101000a900460ff1615612913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290a906147f9565b60405180910390fd5b601b60019054906101000a900460ff16612962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295990614865565b60405180910390fd5b600554600c54106129a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299f906148d1565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2190614c69565b60405180910390fd5b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90614a3b565b60405180910390fd5b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612db857612b5b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc590919063ffffffff16565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bf16001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c6000815480929190612c4790614a5b565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f4cbabd28f8f38a9ad71eb794f4b769c609bbc2dd913cdbff777ad6c55282df37600c54604051612c949190613a2d565b60405180910390a2600d339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600554600c5403612db7577f606f95d7d280a6f49d9ddfef59b05d181894bf69ba014ad62507ecceed38c687600d604051612d929190614b8f565b60405180910390a1612db06001600b54612fdb90919063ffffffff16565b600b819055505b5b565b60176020528060005260406000206000915054906101000a900460ff1681565b6060600d805480602002602001604051908101604052809291908181526020018280548015612e5e57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612e14575b5050505050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef90613ea8565b60405180910390fd5b612f0683838360025461317e565b505050565b612f13612ff1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7990614cfb565b60405180910390fd5b612f8b8161380e565b50565b60166020528060005260406000206000915090505481565b600a5481565b60085481565b601b60009054906101000a900460ff1681565b60008183612fd39190613ef7565b905092915050565b60008183612fe99190614d1b565b905092915050565b612ff96138d2565b73ffffffffffffffffffffffffffffffffffffffff16613017611b16565b73ffffffffffffffffffffffffffffffffffffffff161461306d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306490614d9b565b60405180910390fd5b565b613077611817565b156130b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ae90614e07565b60405180910390fd5b565b600081836130c79190614e27565b905092915050565b61312181601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081836131769190614e98565b905092915050565b6000600b54116131c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ba90614009565b60405180910390fd5b603c600a54101580156131d957506064600a5411155b613218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320f90614401565b60405180910390fd5b600061322f600554836130b990919063ffffffff16565b9050600061325b606461324d601054856130b990919063ffffffff16565b61316890919063ffffffff16565b905060006132876064613279601154866130b990919063ffffffff16565b61316890919063ffffffff16565b905060006132b360646132a5601254876130b990919063ffffffff16565b61316890919063ffffffff16565b905061330783601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061339c82601660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061343181601660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134ad8161349f8461349187600754612fdb90919063ffffffff16565b612fdb90919063ffffffff16565b612fdb90919063ffffffff16565b6007819055506134ec816134de846134d087600854612fdb90919063ffffffff16565b612fdb90919063ffffffff16565b612fdb90919063ffffffff16565b6008819055507f5b5e25cf98229fed07be659b639d9b41f7904a15ae24a73580c5fac99c5d650788888886868660405161352b96959493929190614ec9565b60405180910390a16135866001601860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061361c6001601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136b26001601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b819055506000600c81905550600d600061371391906138da565b5050505050505050565b600260015403613762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375990614f76565b60405180910390fd5b6002600181905550565b60018081905550565b6137c781601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b50805460008255906000526020600020908101906138f891906138fb565b50565b5b808211156139145760008160009055506001016138fc565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139488261391d565b9050919050565b6139588161393d565b811461396357600080fd5b50565b6000813590506139758161394f565b92915050565b6000819050919050565b61398e8161397b565b811461399957600080fd5b50565b6000813590506139ab81613985565b92915050565b600080604083850312156139c8576139c7613918565b5b60006139d685828601613966565b92505060206139e78582860161399c565b9150509250929050565b600060208284031215613a0757613a06613918565b5b6000613a1584828501613966565b91505092915050565b613a278161397b565b82525050565b6000602082019050613a426000830184613a1e565b92915050565b60008115159050919050565b613a5d81613a48565b82525050565b6000602082019050613a786000830184613a54565b92915050565b600060208284031215613a9457613a93613918565b5b6000613aa28482850161399c565b91505092915050565b600080600060608486031215613ac457613ac3613918565b5b6000613ad286828701613966565b9350506020613ae386828701613966565b9250506040613af486828701613966565b9150509250925092565b613b078161393d565b82525050565b6000602082019050613b226000830184613afe565b92915050565b600080600060608486031215613b4157613b40613918565b5b6000613b4f8682870161399c565b9350506020613b608682870161399c565b9250506040613b718682870161399c565b9150509250925092565b60008060408385031215613b9257613b91613918565b5b6000613ba085828601613966565b9250506020613bb185828601613966565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bf08161393d565b82525050565b6000613c028383613be7565b60208301905092915050565b6000602082019050919050565b6000613c2682613bbb565b613c308185613bc6565b9350613c3b83613bd7565b8060005b83811015613c6c578151613c538882613bf6565b9750613c5e83613c0e565b925050600181019050613c3f565b5085935050505092915050565b60006020820190508181036000830152613c938184613c1b565b905092915050565b600082825260208201905092915050565b7f496e76616c696420726563656976657220616464726573730000000000000000600082015250565b6000613ce2601883613c9b565b9150613ced82613cac565b602082019050919050565b60006020820190508181036000830152613d1181613cd5565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000613d4e601d83613c9b565b9150613d5982613d18565b602082019050919050565b60006020820190508181036000830152613d7d81613d41565b9050919050565b7f496e73756666696369656e74207469636b65747320746f206769667400000000600082015250565b6000613dba601c83613c9b565b9150613dc582613d84565b602082019050919050565b60006020820190508181036000830152613de981613dad565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000613e26600f83613c9b565b9150613e3182613df0565b602082019050919050565b60006020820190508181036000830152613e5581613e19565b9050919050565b7f4e6f7420617574686f72697a6564000000000000000000000000000000000000600082015250565b6000613e92600e83613c9b565b9150613e9d82613e5c565b602082019050919050565b60006020820190508181036000830152613ec181613e85565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f028261397b565b9150613f0d8361397b565b9250828203905081811115613f2557613f24613ec8565b5b92915050565b7f43616e206f6e6c79206d696e74203130207469636b6574732070657220646179600082015250565b6000613f61602083613c9b565b9150613f6c82613f2b565b602082019050919050565b60006020820190508181036000830152613f9081613f54565b9050919050565b7f4e6f20636f6d706c657465642067616d657320617661696c61626c6520666f7260008201527f207061796f757400000000000000000000000000000000000000000000000000602082015250565b6000613ff3602783613c9b565b9150613ffe82613f97565b604082019050919050565b6000602082019050818103600083015261402281613fe6565b9050919050565b7f5469636b65742070757263686173696e6720686173206265656e20736875742060008201527f646f776e00000000000000000000000000000000000000000000000000000000602082015250565b6000614085602483613c9b565b915061409082614029565b604082019050919050565b600060208201905081810360008301526140b481614078565b9050919050565b7f496e636f7272656374204554482073656e740000000000000000000000000000600082015250565b60006140f1601283613c9b565b91506140fc826140bb565b602082019050919050565b60006020820190508181036000830152614120816140e4565b9050919050565b7f457863656564696e67207769746864726177616c206c696d6974000000000000600082015250565b600061415d601a83613c9b565b915061416882614127565b602082019050919050565b6000602082019050818103600083015261418c81614150565b9050919050565b7f436f6e747261637420697320616c7265616479207368757420646f776e000000600082015250565b60006141c9601d83613c9b565b91506141d482614193565b602082019050919050565b600060208201905081810360008301526141f8816141bc565b9050919050565b7f4e6f2066756e647320746f20636c61696d2e0000000000000000000000000000600082015250565b6000614235601283613c9b565b9150614240826141ff565b602082019050919050565b6000602082019050818103600083015261426481614228565b9050919050565b7f43757272656e7420706c6179657273206c697374206973206e6f74206571756160008201527f6c20746f20656e7472616e747300000000000000000000000000000000000000602082015250565b60006142c7602d83613c9b565b91506142d28261426b565b604082019050919050565b600060208201905081810360008301526142f6816142ba565b9050919050565b7f52656e6f756e63696e67206f776e657273686970206973206e6f7420616c6c6f60008201527f7765640000000000000000000000000000000000000000000000000000000000602082015250565b6000614359602383613c9b565b9150614364826142fd565b604082019050919050565b600060208201905081810360008301526143888161434c565b9050919050565b7f496e76616c6964207072697a65206571756174696f6e2070657263656e74616760008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006143eb602183613c9b565b91506143f68261438f565b604082019050919050565b6000602082019050818103600083015261441a816143de565b9050919050565b7f436f6e7472616374206973206e6f74207368757420646f776e00000000000000600082015250565b6000614457601983613c9b565b915061446282614421565b602082019050919050565b600060208201905081810360008301526144868161444a565b9050919050565b7f4669727374207072697a652063616e6e6f74206265206c657373207468616e2060008201527f3430250000000000000000000000000000000000000000000000000000000000602082015250565b60006144e9602383613c9b565b91506144f48261448d565b604082019050919050565b60006020820190508181036000830152614518816144dc565b9050919050565b7f5365636f6e64207072697a652063616e6e6f74206265206c657373207468616e60008201527f2032302500000000000000000000000000000000000000000000000000000000602082015250565b600061457b602483613c9b565b91506145868261451f565b604082019050919050565b600060208201905081810360008301526145aa8161456e565b9050919050565b7f5468697264207072697a652063616e6e6f74206265206c657373207468616e2060008201527f3130250000000000000000000000000000000000000000000000000000000000602082015250565b600061460d602383613c9b565b9150614618826145b1565b604082019050919050565b6000602082019050818103600083015261463c81614600565b9050919050565b7f546f74616c207072697a652070657263656e74616765732063616e6e6f74206560008201527f7863656564203130302500000000000000000000000000000000000000000000602082015250565b600061469f602a83613c9b565b91506146aa82614643565b604082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f43616c6c6572206d75737420626520616e20454f410000000000000000000000600082015250565b600061470b601583613c9b565b9150614716826146d5565b602082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f48696768205374616b6573206172652061637469766500000000000000000000600082015250565b6000614777601683613c9b565b915061478282614741565b602082019050919050565b600060208201905081810360008301526147a68161476a565b9050919050565b7f47616d65206973207368757420646f776e000000000000000000000000000000600082015250565b60006147e3601183613c9b565b91506147ee826147ad565b602082019050919050565b60006020820190508181036000830152614812816147d6565b9050919050565b7f436f6e7472616374206e6f74206f70656e207965740000000000000000000000600082015250565b600061484f601583613c9b565b915061485a82614819565b602082019050919050565b6000602082019050818103600083015261487e81614842565b9050919050565b7f4c6f6262792069732066756c6c2e205761697420666f72207061796f75742e00600082015250565b60006148bb601f83613c9b565b91506148c682614885565b602082019050919050565b600060208201905081810360008301526148ea816148ae565b9050919050565b7f496e73756666696369656e74207469636b657473000000000000000000000000600082015250565b6000614927601483613c9b565b9150614932826148f1565b602082019050919050565b600060208201905081810360008301526149568161491a565b9050919050565b7f47616d6520697320696e2070726f677265737320706c65617365207761697400600082015250565b6000614993601f83613c9b565b915061499e8261495d565b602082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b7f596f7527766520616c7265616479206a6f696e6564207468652063757272656e60008201527f74206c6f62627900000000000000000000000000000000000000000000000000602082015250565b6000614a25602783613c9b565b9150614a30826149c9565b604082019050919050565b60006020820190508181036000830152614a5481614a18565b9050919050565b6000614a668261397b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a9857614a97613ec8565b5b600182019050919050565b600081549050919050565b60008190508160005260206000209050919050565b60008160001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614b03614afe83614ac3565b614ad0565b9050919050565b6000614b168254614af0565b9050919050565b6000600182019050919050565b6000614b3582614aa3565b614b3f8185613bc6565b9350614b4a83614aae565b8060005b83811015614b8257614b5f82614b0a565b614b698882613bf6565b9750614b7483614b1d565b925050600181019050614b4e565b5085935050505092915050565b60006020820190508181036000830152614ba98184614b2a565b905092915050565b7f48696768205374616b657320617265206e6f7420616374697665000000000000600082015250565b6000614be7601a83613c9b565b9150614bf282614bb1565b602082019050919050565b60006020820190508181036000830152614c1681614bda565b9050919050565b7f496e73756666696369656e7420686967682d7374616b65207469636b65747300600082015250565b6000614c53601f83613c9b565b9150614c5e82614c1d565b602082019050919050565b60006020820190508181036000830152614c8281614c46565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ce5602683613c9b565b9150614cf082614c89565b604082019050919050565b60006020820190508181036000830152614d1481614cd8565b9050919050565b6000614d268261397b565b9150614d318361397b565b9250828201905080821115614d4957614d48613ec8565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d85602083613c9b565b9150614d9082614d4f565b602082019050919050565b60006020820190508181036000830152614db481614d78565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614df1601083613c9b565b9150614dfc82614dbb565b602082019050919050565b60006020820190508181036000830152614e2081614de4565b9050919050565b6000614e328261397b565b9150614e3d8361397b565b9250828202614e4b8161397b565b91508282048414831517614e6257614e61613ec8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ea38261397b565b9150614eae8361397b565b925082614ebe57614ebd614e69565b5b828204905092915050565b600060c082019050614ede6000830189613afe565b614eeb6020830188613afe565b614ef86040830187613afe565b614f056060830186613a1e565b614f126080830185613a1e565b614f1f60a0830184613a1e565b979650505050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614f60601f83613c9b565b9150614f6b82614f2a565b602082019050919050565b60006020820190508181036000830152614f8f81614f53565b905091905056fea264697066735822122068c94b24120ad349302146823b60dbbf3f50b30927153549c5d9ebc2b4447f5e64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c80636dcbf2a311610190578063bbbf7fb8116100dc578063e872592111610095578063f3f437031161006f578063f3f4370314610ad0578063fb347c5214610b0d578063ff8de5ec14610b38578063ff94752514610b63576102ff565b8063e872592114610a53578063e944079b14610a7e578063f2fde38b14610aa7576102ff565b8063bbbf7fb814610955578063bd5c508a14610992578063c5625ae7146109a9578063d75075fa146109d4578063d8ec3a6f146109ff578063e3d98bd614610a16576102ff565b8063906280c311610149578063a035b1fe11610123578063a035b1fe146108bc578063a11dec9f146108e7578063a127760014610910578063a1d1f10d1461092c576102ff565b8063906280c31461084f5780639220abb11461087a5780639834cda4146108a5576102ff565b80636dcbf2a314610751578063715018a61461078e5780637b8ce08f146107a5578063835a8ed3146107ce5780638da5cb5b146107f957806390581bf414610824576102ff565b806333f707d11161024f578063495caa8d116102085780635c975abb116101e25780635c975abb146106bb5780635ce220c1146106e65780635d02787f146107235780635fb02f4d1461073a576102ff565b8063495caa8d146106505780634b9a714a146106675780634e71d92d146106a4576102ff565b806333f707d11461054057806337c08923146105695780633d70bc52146105945780633e01aaad146105bf5780634626402b146105e85780634755fda114610613576102ff565b80631e7b6938116102bc5780632c12ddd2116102965780632c12ddd2146104915780632e0be39a146104ad5780632e98520c146104d85780632fc8f46714610503576102ff565b80631e7b69381461041257806323c6fce41461043d57806325e6c30414610466576102ff565b80630743fe4e14610304578063090f9e041461032d5780630ab80e331461036a5780630fdf2de81461039557806316279055146103be5780631c46773d146103fb575b600080fd5b34801561031057600080fd5b5061032b600480360381019061032691906139b1565b610b8e565b005b34801561033957600080fd5b50610354600480360381019061034f91906139f1565b610e5b565b6040516103619190613a2d565b60405180910390f35b34801561037657600080fd5b5061037f610e73565b60405161038c9190613a2d565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b791906139f1565b610e79565b005b3480156103ca57600080fd5b506103e560048036038101906103e091906139f1565b610f34565b6040516103f29190613a63565b60405180910390f35b34801561040757600080fd5b50610410610f47565b005b34801561041e57600080fd5b506104276110dd565b6040516104349190613a2d565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613a7e565b6110e3565b005b34801561047257600080fd5b5061047b61120f565b6040516104889190613a2d565b60405180910390f35b6104ab60048036038101906104a69190613a7e565b611215565b005b3480156104b957600080fd5b506104c2611339565b6040516104cf9190613a2d565b60405180910390f35b3480156104e457600080fd5b506104ed61133f565b6040516104fa9190613a2d565b60405180910390f35b34801561050f57600080fd5b5061052a600480360381019061052591906139f1565b611345565b6040516105379190613a2d565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190613a7e565b61135d565b005b34801561057557600080fd5b5061057e611486565b60405161058b9190613a2d565b60405180910390f35b3480156105a057600080fd5b506105a961148c565b6040516105b69190613a2d565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613aab565b611492565b005b3480156105f457600080fd5b506105fd611535565b60405161060a9190613b0d565b60405180910390f35b34801561061f57600080fd5b5061063a600480360381019061063591906139f1565b61155b565b6040516106479190613a2d565b60405180910390f35b34801561065c57600080fd5b50610665611573565b005b34801561067357600080fd5b5061068e600480360381019061068991906139f1565b611670565b60405161069b9190613a2d565b60405180910390f35b3480156106b057600080fd5b506106b9611688565b005b3480156106c757600080fd5b506106d0611817565b6040516106dd9190613a63565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190613a7e565b61182d565b60405161071a9190613b0d565b60405180910390f35b34801561072f57600080fd5b5061073861186c565b005b34801561074657600080fd5b5061074f61196e565b005b34801561075d57600080fd5b50610778600480360381019061077391906139f1565b611993565b6040516107859190613a2d565b60405180910390f35b34801561079a57600080fd5b506107a36119ab565b005b3480156107b157600080fd5b506107cc60048036038101906107c79190613a7e565b6119ee565b005b3480156107da57600080fd5b506107e3611b10565b6040516107f09190613a2d565b60405180910390f35b34801561080557600080fd5b5061080e611b16565b60405161081b9190613b0d565b60405180910390f35b34801561083057600080fd5b50610839611b3f565b6040516108469190613a63565b60405180910390f35b34801561085b57600080fd5b50610864611b52565b6040516108719190613a2d565b60405180910390f35b34801561088657600080fd5b5061088f611b58565b60405161089c9190613a2d565b60405180910390f35b3480156108b157600080fd5b506108ba611b5e565b005b3480156108c857600080fd5b506108d1611c5a565b6040516108de9190613a2d565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190613b28565b611c60565b005b61092a60048036038101906109259190613a7e565b611e3e565b005b34801561093857600080fd5b50610953600480360381019061094e9190613b7b565b611f62565b005b34801561096157600080fd5b5061097c600480360381019061097791906139f1565b612225565b6040516109899190613a2d565b60405180910390f35b34801561099e57600080fd5b506109a761223d565b005b3480156109b557600080fd5b506109be612812565b6040516109cb9190613a2d565b60405180910390f35b3480156109e057600080fd5b506109e9612818565b6040516109f69190613a63565b60405180910390f35b348015610a0b57600080fd5b50610a1461282b565b005b348015610a2257600080fd5b50610a3d6004803603810190610a3891906139f1565b612dba565b604051610a4a9190613a63565b60405180910390f35b348015610a5f57600080fd5b50610a68612dda565b604051610a759190613c79565b60405180910390f35b348015610a8a57600080fd5b50610aa56004803603810190610aa09190613aab565b612e68565b005b348015610ab357600080fd5b50610ace6004803603810190610ac991906139f1565b612f0b565b005b348015610adc57600080fd5b50610af76004803603810190610af291906139f1565b612f8e565b604051610b049190613a2d565b60405180910390f35b348015610b1957600080fd5b50610b22612fa6565b604051610b2f9190613a2d565b60405180910390f35b348015610b4457600080fd5b50610b4d612fac565b604051610b5a9190613a2d565b60405180910390f35b348015610b6f57600080fd5b50610b78612fb2565b604051610b859190613a63565b60405180910390f35b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf490613cf8565b60405180910390fd5b60008111610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790613d64565b60405180910390fd5b600033905081601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe90613dd0565b60405180910390fd5b610d1982601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc590919063ffffffff16565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610dae82601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f26941c4238c2ab25a144b8fc1eb9162820738d96a3c9be025d650db4e214130084604051610e4e9190613a2d565b60405180910390a3505050565b60156020528060005260406000206000915090505481565b60035481565b610e81612ff1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790613e3c565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080823b905060008111915050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fce90613ea8565b60405180910390fd5b6000600a905062015180600f5442610fef9190613ef7565b1015611030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102790613f77565b60405180910390fd5b42600f819055506110908160136000611047611b16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b6013600061109c611b16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b60055481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a90613ea8565b60405180910390fd5b601b60019054906101000a900460ff16156111ce576000600b54116111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614009565b60405180910390fd5b5b806005819055507f1689bcc7e7fd08af4cf38eb983dc287febf0f2b7c105f8a51ea8c7618143531d816040516112049190613a2d565b60405180910390a150565b60075481565b61121d61306f565b601b60009054906101000a900460ff161561126d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112649061409b565b60405180910390fd5b611282600354826130b990919063ffffffff16565b34146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90614107565b60405180910390fd5b6112d834600654612fdb90919063ffffffff16565b6006819055506112e833826130cf565b3373ffffffffffffffffffffffffffffffffffffffff167fce55d51a74c760dc7fd517c6f83701c75762ecc197438f49de28ffe460eeb72c8260405161132e9190613a2d565b60405180910390a250565b600b5481565b60105481565b60186020528060005260406000206000915090505481565b611365612ff1565b6000611390606461138260286006546130b990919063ffffffff16565b61316890919063ffffffff16565b9050806113a883600954612fdb90919063ffffffff16565b11156113e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e090614173565b60405180910390fd5b6113fe82600954612fdb90919063ffffffff16565b6009819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561144a573d6000803e3d6000fd5b507f4a37b25aab49761ecf63117fe82b98d750917451133cf797507bc9fb5b96044a8260405161147a9190613a2d565b60405180910390a15050565b60065481565b60115481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990613ea8565b60405180910390fd5b61153083838360035461317e565b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a6020528060005260406000206000915090505481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fa90613ea8565b60405180910390fd5b601b60009054906101000a900460ff1615611653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164a906141df565b60405180910390fd5b6001601b60006101000a81548160ff021916908315150217905550565b60146020528060005260406000206000915090505481565b61169061371d565b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e9061424b565b60405180910390fd5b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156117a2573d6000803e3d6000fd5b506117b881600854612fc590919063ffffffff16565b6008819055503373ffffffffffffffffffffffffffffffffffffffff167f13dcfa08b5805e689424ccce1892676af568734e1561cc374b73c6c5e5f30400826040516118049190613a2d565b60405180910390a25061181561376c565b565b60008060149054906101000a900460ff16905090565b600d818154811061183d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390613ea8565b60405180910390fd5b600554600c5414611942576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611939906142dd565b60405180910390fd5b600460009054906101000a900460ff1615600460006101000a81548160ff021916908315150217905550565b611976612ff1565b6001601b60016101000a81548160ff021916908315150217905550565b60136020528060005260406000206000915090505481565b6119b3612ff1565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e59061436f565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7590613ea8565b60405180910390fd5b603c8110158015611a90575060648111155b611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac690614401565b60405180910390fd5b80600a819055507fe139cfb188ea120c39fe64d94cd62af3844dcc6af49e390373393f27edc4ab6781604051611b059190613a2d565b60405180910390a150565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900460ff1681565b60095481565b600f5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613ea8565b60405180910390fd5b601b60009054906101000a900460ff16611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c349061446d565b60405180910390fd5b6000601b60006101000a81548160ff021916908315150217905550565b60025481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce790613ea8565b60405180910390fd5b6028831015611d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2b906144ff565b60405180910390fd5b6014821015611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90614591565b60405180910390fd5b600a811015611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390614623565b60405180910390fd5b6064611de382611dd58587612fdb90919063ffffffff16565b612fdb90919063ffffffff16565b1115611e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1b906146b5565b60405180910390fd5b826010819055508160118190555080601281905550505050565b611e4661306f565b601b60009054906101000a900460ff1615611e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8d9061409b565b60405180910390fd5b611eab600254826130b990919063ffffffff16565b3414611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee390614107565b60405180910390fd5b611f0134600654612fdb90919063ffffffff16565b600681905550611f113382613775565b3373ffffffffffffffffffffffffffffffffffffffff167fe11731cb4f1eb3ec3dd09bdc96809bb07365f4c881cda3192b397a4bc0b6da4082604051611f579190613a2d565b60405180910390a250565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe990613ea8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561205c5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61209b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209290613e3c565b60405180910390fd5b6120ee6001601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121846001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f2bbaca1354ea4174af015cc6012643e686145d9cfee0414d2c0ed840a1ca04fc60405160405180910390a35050565b60196020528060005260406000206000915090505481565b61224633610f34565b15612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90614721565b60405180910390fd5b600460009054906101000a900460ff16156122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd9061478d565b60405180910390fd5b601b60009054906101000a900460ff1615612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d906147f9565b60405180910390fd5b601b60019054906101000a900460ff16612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c90614865565b60405180910390fd5b600554600c54106123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b2906148d1565b60405180910390fd5b6000601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161243d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124349061493d565b60405180910390fd5b6001600b5410612482576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612479906149a9565b60405180910390fd5b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250690614a3b565b60405180910390fd5b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612810576125b36001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc590919063ffffffff16565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126496001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c600081548092919061269f90614a5b565b91905055503373ffffffffffffffffffffffffffffffffffffffff167fc7e8add138e49f46d19677ad306f460739bd3c94f7c2afd303caa90a3b976509600c546040516126ec9190613a2d565b60405180910390a2600d339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600554600c540361280f577fe8cdca242f8202ae412d2a2d900d52ea6aad38bc508d028831bc37a4c570f76e600d6040516127ea9190614b8f565b60405180910390a16128086001600b54612fdb90919063ffffffff16565b600b819055505b5b565b600c5481565b601b60019054906101000a900460ff1681565b61283433610f34565b15612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90614721565b60405180910390fd5b600460009054906101000a900460ff166128c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ba90614bfd565b60405180910390fd5b601b60009054906101000a900460ff1615612913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290a906147f9565b60405180910390fd5b601b60019054906101000a900460ff16612962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295990614865565b60405180910390fd5b600554600c54106129a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299f906148d1565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2190614c69565b60405180910390fd5b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae90614a3b565b60405180910390fd5b601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612db857612b5b6001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fc590919063ffffffff16565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bf16001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c6000815480929190612c4790614a5b565b91905055503373ffffffffffffffffffffffffffffffffffffffff167f4cbabd28f8f38a9ad71eb794f4b769c609bbc2dd913cdbff777ad6c55282df37600c54604051612c949190613a2d565b60405180910390a2600d339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600554600c5403612db7577f606f95d7d280a6f49d9ddfef59b05d181894bf69ba014ad62507ecceed38c687600d604051612d929190614b8f565b60405180910390a1612db06001600b54612fdb90919063ffffffff16565b600b819055505b5b565b60176020528060005260406000206000915054906101000a900460ff1681565b6060600d805480602002602001604051908101604052809291908181526020018280548015612e5e57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612e14575b5050505050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef90613ea8565b60405180910390fd5b612f0683838360025461317e565b505050565b612f13612ff1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7990614cfb565b60405180910390fd5b612f8b8161380e565b50565b60166020528060005260406000206000915090505481565b600a5481565b60085481565b601b60009054906101000a900460ff1681565b60008183612fd39190613ef7565b905092915050565b60008183612fe99190614d1b565b905092915050565b612ff96138d2565b73ffffffffffffffffffffffffffffffffffffffff16613017611b16565b73ffffffffffffffffffffffffffffffffffffffff161461306d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306490614d9b565b60405180910390fd5b565b613077611817565b156130b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ae90614e07565b60405180910390fd5b565b600081836130c79190614e27565b905092915050565b61312181601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081836131769190614e98565b905092915050565b6000600b54116131c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ba90614009565b60405180910390fd5b603c600a54101580156131d957506064600a5411155b613218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320f90614401565b60405180910390fd5b600061322f600554836130b990919063ffffffff16565b9050600061325b606461324d601054856130b990919063ffffffff16565b61316890919063ffffffff16565b905060006132876064613279601154866130b990919063ffffffff16565b61316890919063ffffffff16565b905060006132b360646132a5601254876130b990919063ffffffff16565b61316890919063ffffffff16565b905061330783601660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061339c82601660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061343181601660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134ad8161349f8461349187600754612fdb90919063ffffffff16565b612fdb90919063ffffffff16565b612fdb90919063ffffffff16565b6007819055506134ec816134de846134d087600854612fdb90919063ffffffff16565b612fdb90919063ffffffff16565b612fdb90919063ffffffff16565b6008819055507f5b5e25cf98229fed07be659b639d9b41f7904a15ae24a73580c5fac99c5d650788888886868660405161352b96959493929190614ec9565b60405180910390a16135866001601860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061361c6001601960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136b26001601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b819055506000600c81905550600d600061371391906138da565b5050505050505050565b600260015403613762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161375990614f76565b60405180910390fd5b6002600181905550565b60018081905550565b6137c781601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fdb90919063ffffffff16565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b50805460008255906000526020600020908101906138f891906138fb565b50565b5b808211156139145760008160009055506001016138fc565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139488261391d565b9050919050565b6139588161393d565b811461396357600080fd5b50565b6000813590506139758161394f565b92915050565b6000819050919050565b61398e8161397b565b811461399957600080fd5b50565b6000813590506139ab81613985565b92915050565b600080604083850312156139c8576139c7613918565b5b60006139d685828601613966565b92505060206139e78582860161399c565b9150509250929050565b600060208284031215613a0757613a06613918565b5b6000613a1584828501613966565b91505092915050565b613a278161397b565b82525050565b6000602082019050613a426000830184613a1e565b92915050565b60008115159050919050565b613a5d81613a48565b82525050565b6000602082019050613a786000830184613a54565b92915050565b600060208284031215613a9457613a93613918565b5b6000613aa28482850161399c565b91505092915050565b600080600060608486031215613ac457613ac3613918565b5b6000613ad286828701613966565b9350506020613ae386828701613966565b9250506040613af486828701613966565b9150509250925092565b613b078161393d565b82525050565b6000602082019050613b226000830184613afe565b92915050565b600080600060608486031215613b4157613b40613918565b5b6000613b4f8682870161399c565b9350506020613b608682870161399c565b9250506040613b718682870161399c565b9150509250925092565b60008060408385031215613b9257613b91613918565b5b6000613ba085828601613966565b9250506020613bb185828601613966565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bf08161393d565b82525050565b6000613c028383613be7565b60208301905092915050565b6000602082019050919050565b6000613c2682613bbb565b613c308185613bc6565b9350613c3b83613bd7565b8060005b83811015613c6c578151613c538882613bf6565b9750613c5e83613c0e565b925050600181019050613c3f565b5085935050505092915050565b60006020820190508181036000830152613c938184613c1b565b905092915050565b600082825260208201905092915050565b7f496e76616c696420726563656976657220616464726573730000000000000000600082015250565b6000613ce2601883613c9b565b9150613ced82613cac565b602082019050919050565b60006020820190508181036000830152613d1181613cd5565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e2030000000600082015250565b6000613d4e601d83613c9b565b9150613d5982613d18565b602082019050919050565b60006020820190508181036000830152613d7d81613d41565b9050919050565b7f496e73756666696369656e74207469636b65747320746f206769667400000000600082015250565b6000613dba601c83613c9b565b9150613dc582613d84565b602082019050919050565b60006020820190508181036000830152613de981613dad565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000613e26600f83613c9b565b9150613e3182613df0565b602082019050919050565b60006020820190508181036000830152613e5581613e19565b9050919050565b7f4e6f7420617574686f72697a6564000000000000000000000000000000000000600082015250565b6000613e92600e83613c9b565b9150613e9d82613e5c565b602082019050919050565b60006020820190508181036000830152613ec181613e85565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f028261397b565b9150613f0d8361397b565b9250828203905081811115613f2557613f24613ec8565b5b92915050565b7f43616e206f6e6c79206d696e74203130207469636b6574732070657220646179600082015250565b6000613f61602083613c9b565b9150613f6c82613f2b565b602082019050919050565b60006020820190508181036000830152613f9081613f54565b9050919050565b7f4e6f20636f6d706c657465642067616d657320617661696c61626c6520666f7260008201527f207061796f757400000000000000000000000000000000000000000000000000602082015250565b6000613ff3602783613c9b565b9150613ffe82613f97565b604082019050919050565b6000602082019050818103600083015261402281613fe6565b9050919050565b7f5469636b65742070757263686173696e6720686173206265656e20736875742060008201527f646f776e00000000000000000000000000000000000000000000000000000000602082015250565b6000614085602483613c9b565b915061409082614029565b604082019050919050565b600060208201905081810360008301526140b481614078565b9050919050565b7f496e636f7272656374204554482073656e740000000000000000000000000000600082015250565b60006140f1601283613c9b565b91506140fc826140bb565b602082019050919050565b60006020820190508181036000830152614120816140e4565b9050919050565b7f457863656564696e67207769746864726177616c206c696d6974000000000000600082015250565b600061415d601a83613c9b565b915061416882614127565b602082019050919050565b6000602082019050818103600083015261418c81614150565b9050919050565b7f436f6e747261637420697320616c7265616479207368757420646f776e000000600082015250565b60006141c9601d83613c9b565b91506141d482614193565b602082019050919050565b600060208201905081810360008301526141f8816141bc565b9050919050565b7f4e6f2066756e647320746f20636c61696d2e0000000000000000000000000000600082015250565b6000614235601283613c9b565b9150614240826141ff565b602082019050919050565b6000602082019050818103600083015261426481614228565b9050919050565b7f43757272656e7420706c6179657273206c697374206973206e6f74206571756160008201527f6c20746f20656e7472616e747300000000000000000000000000000000000000602082015250565b60006142c7602d83613c9b565b91506142d28261426b565b604082019050919050565b600060208201905081810360008301526142f6816142ba565b9050919050565b7f52656e6f756e63696e67206f776e657273686970206973206e6f7420616c6c6f60008201527f7765640000000000000000000000000000000000000000000000000000000000602082015250565b6000614359602383613c9b565b9150614364826142fd565b604082019050919050565b600060208201905081810360008301526143888161434c565b9050919050565b7f496e76616c6964207072697a65206571756174696f6e2070657263656e74616760008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006143eb602183613c9b565b91506143f68261438f565b604082019050919050565b6000602082019050818103600083015261441a816143de565b9050919050565b7f436f6e7472616374206973206e6f74207368757420646f776e00000000000000600082015250565b6000614457601983613c9b565b915061446282614421565b602082019050919050565b600060208201905081810360008301526144868161444a565b9050919050565b7f4669727374207072697a652063616e6e6f74206265206c657373207468616e2060008201527f3430250000000000000000000000000000000000000000000000000000000000602082015250565b60006144e9602383613c9b565b91506144f48261448d565b604082019050919050565b60006020820190508181036000830152614518816144dc565b9050919050565b7f5365636f6e64207072697a652063616e6e6f74206265206c657373207468616e60008201527f2032302500000000000000000000000000000000000000000000000000000000602082015250565b600061457b602483613c9b565b91506145868261451f565b604082019050919050565b600060208201905081810360008301526145aa8161456e565b9050919050565b7f5468697264207072697a652063616e6e6f74206265206c657373207468616e2060008201527f3130250000000000000000000000000000000000000000000000000000000000602082015250565b600061460d602383613c9b565b9150614618826145b1565b604082019050919050565b6000602082019050818103600083015261463c81614600565b9050919050565b7f546f74616c207072697a652070657263656e74616765732063616e6e6f74206560008201527f7863656564203130302500000000000000000000000000000000000000000000602082015250565b600061469f602a83613c9b565b91506146aa82614643565b604082019050919050565b600060208201905081810360008301526146ce81614692565b9050919050565b7f43616c6c6572206d75737420626520616e20454f410000000000000000000000600082015250565b600061470b601583613c9b565b9150614716826146d5565b602082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f48696768205374616b6573206172652061637469766500000000000000000000600082015250565b6000614777601683613c9b565b915061478282614741565b602082019050919050565b600060208201905081810360008301526147a68161476a565b9050919050565b7f47616d65206973207368757420646f776e000000000000000000000000000000600082015250565b60006147e3601183613c9b565b91506147ee826147ad565b602082019050919050565b60006020820190508181036000830152614812816147d6565b9050919050565b7f436f6e7472616374206e6f74206f70656e207965740000000000000000000000600082015250565b600061484f601583613c9b565b915061485a82614819565b602082019050919050565b6000602082019050818103600083015261487e81614842565b9050919050565b7f4c6f6262792069732066756c6c2e205761697420666f72207061796f75742e00600082015250565b60006148bb601f83613c9b565b91506148c682614885565b602082019050919050565b600060208201905081810360008301526148ea816148ae565b9050919050565b7f496e73756666696369656e74207469636b657473000000000000000000000000600082015250565b6000614927601483613c9b565b9150614932826148f1565b602082019050919050565b600060208201905081810360008301526149568161491a565b9050919050565b7f47616d6520697320696e2070726f677265737320706c65617365207761697400600082015250565b6000614993601f83613c9b565b915061499e8261495d565b602082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b7f596f7527766520616c7265616479206a6f696e6564207468652063757272656e60008201527f74206c6f62627900000000000000000000000000000000000000000000000000602082015250565b6000614a25602783613c9b565b9150614a30826149c9565b604082019050919050565b60006020820190508181036000830152614a5481614a18565b9050919050565b6000614a668261397b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a9857614a97613ec8565b5b600182019050919050565b600081549050919050565b60008190508160005260206000209050919050565b60008160001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614b03614afe83614ac3565b614ad0565b9050919050565b6000614b168254614af0565b9050919050565b6000600182019050919050565b6000614b3582614aa3565b614b3f8185613bc6565b9350614b4a83614aae565b8060005b83811015614b8257614b5f82614b0a565b614b698882613bf6565b9750614b7483614b1d565b925050600181019050614b4e565b5085935050505092915050565b60006020820190508181036000830152614ba98184614b2a565b905092915050565b7f48696768205374616b657320617265206e6f7420616374697665000000000000600082015250565b6000614be7601a83613c9b565b9150614bf282614bb1565b602082019050919050565b60006020820190508181036000830152614c1681614bda565b9050919050565b7f496e73756666696369656e7420686967682d7374616b65207469636b65747300600082015250565b6000614c53601f83613c9b565b9150614c5e82614c1d565b602082019050919050565b60006020820190508181036000830152614c8281614c46565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ce5602683613c9b565b9150614cf082614c89565b604082019050919050565b60006020820190508181036000830152614d1481614cd8565b9050919050565b6000614d268261397b565b9150614d318361397b565b9250828201905080821115614d4957614d48613ec8565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d85602083613c9b565b9150614d9082614d4f565b602082019050919050565b60006020820190508181036000830152614db481614d78565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614df1601083613c9b565b9150614dfc82614dbb565b602082019050919050565b60006020820190508181036000830152614e2081614de4565b9050919050565b6000614e328261397b565b9150614e3d8361397b565b9250828202614e4b8161397b565b91508282048414831517614e6257614e61613ec8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ea38261397b565b9150614eae8361397b565b925082614ebe57614ebd614e69565b5b828204905092915050565b600060c082019050614ede6000830189613afe565b614eeb6020830188613afe565b614ef86040830187613afe565b614f056060830186613a1e565b614f126080830185613a1e565b614f1f60a0830184613a1e565b979650505050505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614f60601f83613c9b565b9150614f6b82614f2a565b602082019050919050565b60006020820190508181036000830152614f8f81614f53565b905091905056fea264697066735822122068c94b24120ad349302146823b60dbbf3f50b30927153549c5d9ebc2b4447f5e64736f6c63430008120033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $3,314.92 | 0.224 | $742.54 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.