Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Write Contract
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- Mint
- Optimization enabled
- false
- Compiler version
- v0.8.17+commit.8df45f5f
- EVM Version
- byzantium
- Verified at
- 2023-10-08T13:08:42.643740Z
Constructor Arguments
0x000000000000000000000000c3ab0d3a47051e871285b73a461a5462e0d40db300000000000000000000000000000000000000000000010f0cf064dd59200000
Arg [0] (address) : 0xc3ab0d3a47051e871285b73a461a5462e0d40db3
Arg [1] (uint256) : 5000000000000000000000
Contract source code
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @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 substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } pragma solidity ^0.8.0; contract Mint is Ownable{ using SafeMath for uint256; address public _token; uint256 public _currentAmount; uint256 public _totalCount; uint256 public _rate; bool public _poolEnabled; struct Person { bool initial; uint256 mintTime; uint256 startTime; uint256 inviteCount; uint256 twitterCount; uint256 telegramCount; uint256 claim; uint256 unclaim; } struct Invite { address addr; uint256 datetime; } mapping (address => Person) public _users; mapping (address => Invite[]) public _invites; mapping (address => address) public _exitsCheck; constructor(address token,uint256 rate){ _token = token; // Mint token address _rate = rate; _poolEnabled = false; } //* 1e18 function startMint(address refer) public { require(_poolEnabled, "Not yet started"); require(block.timestamp >= 1696903200,"Not yet started"); require(msg.sender == tx.origin, "Only external accounts can call this function"); require(!isContract(msg.sender), "Only external accounts can call this function"); require(!_users[msg.sender].initial,"repeat start"); Person memory newPerson; newPerson.initial = true; newPerson.mintTime = block.timestamp; newPerson.startTime = block.timestamp; newPerson.inviteCount = 0; newPerson.twitterCount = 0; newPerson.telegramCount = 0; newPerson.claim = 0; newPerson.unclaim = 0; _users[msg.sender] = newPerson; _totalCount += 1; if(refer == address(0) || refer == msg.sender){ return; } if(_exitsCheck[msg.sender] == address(0)){ if(_users[refer].initial){ uint256 unclaim = _getClaim2(refer); _users[refer].unclaim = unclaim; _users[refer].startTime = block.timestamp; } _users[refer].inviteCount += 1; Invite memory invite = Invite(msg.sender,block.timestamp); _invites[refer].push(invite); _exitsCheck[msg.sender] = refer; } } function withdraw() public { require(_poolEnabled, "Not yet started"); require(block.timestamp >= 1696903200,"Not yet started"); require(msg.sender == tx.origin, "Only external accounts can call this function"); require(!isContract(msg.sender), "Only external accounts can call this function"); require(_users[msg.sender].initial,"initial error"); require((block.timestamp - _users[msg.sender].startTime) > 0, "too fast"); uint256 unclaim = _getClaim2(msg.sender); IERC20(_token).transfer(msg.sender,unclaim); _users[msg.sender].unclaim = 0; _users[msg.sender].claim += unclaim; _users[msg.sender].startTime = block.timestamp; _currentAmount += unclaim; } function getRewards(address addr) public view returns(uint256) { if(!_users[addr].initial){ return 0; } uint256 unclaim = _getClaim2(addr); return unclaim; } function withdrawToken(address token, address recipient,uint amount) onlyOwner external { IERC20(token).transfer(recipient, amount); } function withdrawETH() onlyOwner external { payable(msg.sender).transfer(address(this).balance); } function isContract(address addr) internal view returns (bool) { uint32 size; assembly { size := extcodesize(addr) } return (size > 0); } function _getClaim1(address addr) internal view returns (uint256) { uint256 claim1_ = _users[addr].inviteCount * 6 + _users[addr].twitterCount + _users[addr].telegramCount + 2 ; if(claim1_ > 124 ){ claim1_ = 124; } claim1_ = claim1_ * _rate * (block.timestamp - _users[addr].startTime); return claim1_; } function _getClaim2(address addr) internal view returns (uint256){ uint256 claim2_ = _getClaim1(addr); claim2_ += _users[addr].unclaim; return claim2_; } function updatePoolEnabled(bool enabled) external onlyOwner { _poolEnabled = enabled; } function twitter() public { require(_poolEnabled, "Not yet started"); require(block.timestamp >= 1696903200,"Not yet started"); require(msg.sender == tx.origin, "Only external accounts can call this function"); require(!isContract(msg.sender), "Only external accounts can call this function"); if(_users[msg.sender].initial&&_users[msg.sender].twitterCount == 0) { uint256 unclaim = _getClaim2(msg.sender); _users[msg.sender].unclaim = unclaim; _users[msg.sender].startTime = block.timestamp; _users[msg.sender].twitterCount = 1; } } function telegram() public { require(_poolEnabled, "Not yet started"); require(block.timestamp >= 1696903200,"Not yet started"); require(msg.sender == tx.origin, "Only external accounts can call this function"); require(!isContract(msg.sender), "Only external accounts can call this function"); if(_users[msg.sender].initial&&_users[msg.sender].telegramCount == 0) { uint256 unclaim = _getClaim2(msg.sender); _users[msg.sender].unclaim = unclaim; _users[msg.sender].startTime = block.timestamp; _users[msg.sender].telegramCount = 1; } } }
Contract ABI
[{"type":"constructor","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"rate","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_currentAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_exitsCheck","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"addr","internalType":"address"},{"type":"uint256","name":"datetime","internalType":"uint256"}],"name":"_invites","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"_poolEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_rate","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_token","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalCount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"initial","internalType":"bool"},{"type":"uint256","name":"mintTime","internalType":"uint256"},{"type":"uint256","name":"startTime","internalType":"uint256"},{"type":"uint256","name":"inviteCount","internalType":"uint256"},{"type":"uint256","name":"twitterCount","internalType":"uint256"},{"type":"uint256","name":"telegramCount","internalType":"uint256"},{"type":"uint256","name":"claim","internalType":"uint256"},{"type":"uint256","name":"unclaim","internalType":"uint256"}],"name":"_users","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getRewards","inputs":[{"type":"address","name":"addr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"startMint","inputs":[{"type":"address","name":"refer","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"telegram","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"twitter","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updatePoolEnabled","inputs":[{"type":"bool","name":"enabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawETH","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawToken","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","indexed":true},{"type":"address","name":"newOwner","indexed":true}],"anonymous":false}]
Contract Creation Code
0x60806040523480156200001157600080fd5b506040516200274738038062002747833981810160405281019062000037919062000245565b6200006962000054620000d4640100000000026401000000009004565b620000dc640100000000026401000000009004565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600560006101000a81548160ff02191690831515021790555050506200028c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d282620001a5565b9050919050565b620001e481620001c5565b8114620001f057600080fd5b50565b6000815190506200020481620001d9565b92915050565b6000819050919050565b6200021f816200020a565b81146200022b57600080fd5b50565b6000815190506200023f8162000214565b92915050565b600080604083850312156200025f576200025e620001a0565b5b60006200026f85828601620001f3565b925050602062000282858286016200022e565b9150509250929050565b6124ab806200029c6000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c01000000000000000000000000000000000000000000000000000000009004806383bebced116100bf578063e086e5ec1161008e578063e086e5ec146102a5578063eab26b91146102af578063ecd0c0c3146102cd578063f2fde38b146102eb578063ff4870c41461030757610133565b806383bebced14610245578063abfaeee014610263578063bb54ffe51461026d578063ca1bed751461028957610133565b80633ccfd60b116101065780633ccfd60b146101d957806347ecb665146101e35780634bb80ce6146101ed578063715018a61461020b57806379ee54f71461021557610133565b806301e336671461013857806308889e8d146101545780631b9e3fe9146101725780633cacd7d6146101a2575b600080fd5b610152600480360381019061014d9190611dbf565b610338565b005b61015c61046d565b6040516101699190611e2d565b60405180910390f35b61018c60048036038101906101879190611e48565b610480565b6040516101999190611e84565b60405180910390f35b6101bc60048036038101906101b79190611e48565b6104b3565b6040516101d0989796959493929190611eae565b60405180910390f35b6101e1610508565b005b6101eb610942565b005b6101f5610c19565b6040516102029190611f2c565b60405180910390f35b610213610c1f565b005b61022f600480360381019061022a9190611e48565b610cc0565b60405161023c9190611f2c565b60405180910390f35b61024d610d36565b60405161025a9190611f2c565b60405180910390f35b61026b610d3c565b005b61028760048036038101906102829190611f73565b611013565b005b6102a3600480360381019061029e9190611e48565b6110c5565b005b6102ad611789565b005b6102b761187e565b6040516102c49190611f2c565b60405180910390f35b6102d5611884565b6040516102e29190611e84565b60405180910390f35b61030560048036038101906103009190611e48565b6118aa565b005b610321600480360381019061031c9190611fa0565b6119ba565b60405161032f929190611fe0565b60405180910390f35b610340611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c490612066565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610424929190611fe0565b6020604051808303816000875af1158015610443573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610467919061209b565b50505050565b600560009054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b600560009054906101000a900460ff16610557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054e90612114565b60405180910390fd5b636524b02042101561059e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059590612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906121a6565b60405180910390fd5b61061533611a23565b15610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db90612212565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154426107349190612261565b11610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076b906122e1565b60405180910390fd5b600061077f33611a3c565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016107fa929190611fe0565b6020604051808303816000875af1158015610819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083d919061209b565b506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060160008282546108d89190612301565b9250508190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555080600260008282546109389190612301565b9250508190555050565b600560009054906101000a900460ff16610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890612114565b60405180910390fd5b636524b0204210156109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d906121a6565b60405180910390fd5b610a4f33611a23565b15610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a86906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff168015610b2d57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154145b15610c17576000610b3d33611a3c565b905080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550505b565b60025481565b610c27611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab90612066565b60405180910390fd5b610cbe6000611aa3565b565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16610d1f5760009050610d31565b6000610d2a83611a3c565b9050809150505b919050565b60045481565b600560009054906101000a900460ff16610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290612114565b60405180910390fd5b636524b020421015610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906121a6565b60405180910390fd5b610e4933611a23565b15610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff168015610f2757506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154145b15611011576000610f3733611a3c565b905080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550505b565b61101b611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f90612066565b60405180910390fd5b80600560006101000a81548160ff02191690831515021790555050565b600560009054906101000a900460ff16611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b90612114565b60405180910390fd5b636524b02042101561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c0906121a6565b60405180910390fd5b6111d233611a23565b15611212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611209906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990612381565b60405180910390fd5b6112aa611cdf565b600181600001901515908115158152505042816020018181525050428160400181815250506000816060018181525050600081608001818152505060008160a001818152505060008160c001818152505060008160e001818152505080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506001600360008282546113c29190612301565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061142f57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561143a5750611786565b600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361178457600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156115bf57600061152d83611a3c565b905080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550505b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008282546116129190612301565b92505081905550600060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152509050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505082600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505b50565b611791611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590612066565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801561187b573d6000803e3d6000fd5b50565b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118b2611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690612066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590612413565b60405180910390fd5b6119b781611aa3565b50565b600760205281600052604060002081815481106119d657600080fd5b9060005260206000209060020201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b600033905090565b600080823b905060008163ffffffff1611915050919050565b600080611a4883611b67565b9050600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015481611a989190612301565b905080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806002600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015460068060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611c409190612433565b611c4a9190612301565b611c549190612301565b611c5e9190612301565b9050607c811115611c6e57607c90505b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015442611cbc9190612261565b60045482611cca9190612433565b611cd49190612433565b905080915050919050565b604051806101000160405280600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d5682611d2b565b9050919050565b611d6681611d4b565b8114611d7157600080fd5b50565b600081359050611d8381611d5d565b92915050565b6000819050919050565b611d9c81611d89565b8114611da757600080fd5b50565b600081359050611db981611d93565b92915050565b600080600060608486031215611dd857611dd7611d26565b5b6000611de686828701611d74565b9350506020611df786828701611d74565b9250506040611e0886828701611daa565b9150509250925092565b60008115159050919050565b611e2781611e12565b82525050565b6000602082019050611e426000830184611e1e565b92915050565b600060208284031215611e5e57611e5d611d26565b5b6000611e6c84828501611d74565b91505092915050565b611e7e81611d4b565b82525050565b6000602082019050611e996000830184611e75565b92915050565b611ea881611d89565b82525050565b600061010082019050611ec4600083018b611e1e565b611ed1602083018a611e9f565b611ede6040830189611e9f565b611eeb6060830188611e9f565b611ef86080830187611e9f565b611f0560a0830186611e9f565b611f1260c0830185611e9f565b611f1f60e0830184611e9f565b9998505050505050505050565b6000602082019050611f416000830184611e9f565b92915050565b611f5081611e12565b8114611f5b57600080fd5b50565b600081359050611f6d81611f47565b92915050565b600060208284031215611f8957611f88611d26565b5b6000611f9784828501611f5e565b91505092915050565b60008060408385031215611fb757611fb6611d26565b5b6000611fc585828601611d74565b9250506020611fd685828601611daa565b9150509250929050565b6000604082019050611ff56000830185611e75565b6120026020830184611e9f565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612050602083612009565b915061205b8261201a565b602082019050919050565b6000602082019050818103600083015261207f81612043565b9050919050565b60008151905061209581611f47565b92915050565b6000602082840312156120b1576120b0611d26565b5b60006120bf84828501612086565b91505092915050565b7f4e6f742079657420737461727465640000000000000000000000000000000000600082015250565b60006120fe600f83612009565b9150612109826120c8565b602082019050919050565b6000602082019050818103600083015261212d816120f1565b9050919050565b7f4f6e6c792065787465726e616c206163636f756e74732063616e2063616c6c2060008201527f746869732066756e6374696f6e00000000000000000000000000000000000000602082015250565b6000612190602d83612009565b915061219b82612134565b604082019050919050565b600060208201905081810360008301526121bf81612183565b9050919050565b7f696e697469616c206572726f7200000000000000000000000000000000000000600082015250565b60006121fc600d83612009565b9150612207826121c6565b602082019050919050565b6000602082019050818103600083015261222b816121ef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061226c82611d89565b915061227783611d89565b925082820390508181111561228f5761228e612232565b5b92915050565b7f746f6f2066617374000000000000000000000000000000000000000000000000600082015250565b60006122cb600883612009565b91506122d682612295565b602082019050919050565b600060208201905081810360008301526122fa816122be565b9050919050565b600061230c82611d89565b915061231783611d89565b925082820190508082111561232f5761232e612232565b5b92915050565b7f7265706561742073746172740000000000000000000000000000000000000000600082015250565b600061236b600c83612009565b915061237682612335565b602082019050919050565b6000602082019050818103600083015261239a8161235e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123fd602683612009565b9150612408826123a1565b604082019050919050565b6000602082019050818103600083015261242c816123f0565b9050919050565b600061243e82611d89565b915061244983611d89565b925082820261245781611d89565b9150828204841483151761246e5761246d612232565b5b509291505056fea26469706673582212201714c6e98ca7e5e9ba6cabd3f32cf6dc8ca25965d1f72bb2b35460aa8661db6d64736f6c63430008110033000000000000000000000000c3ab0d3a47051e871285b73a461a5462e0d40db300000000000000000000000000000000000000000000010f0cf064dd59200000
Deployed ByteCode
0x608060405234801561001057600080fd5b5060043610610133576000357c01000000000000000000000000000000000000000000000000000000009004806383bebced116100bf578063e086e5ec1161008e578063e086e5ec146102a5578063eab26b91146102af578063ecd0c0c3146102cd578063f2fde38b146102eb578063ff4870c41461030757610133565b806383bebced14610245578063abfaeee014610263578063bb54ffe51461026d578063ca1bed751461028957610133565b80633ccfd60b116101065780633ccfd60b146101d957806347ecb665146101e35780634bb80ce6146101ed578063715018a61461020b57806379ee54f71461021557610133565b806301e336671461013857806308889e8d146101545780631b9e3fe9146101725780633cacd7d6146101a2575b600080fd5b610152600480360381019061014d9190611dbf565b610338565b005b61015c61046d565b6040516101699190611e2d565b60405180910390f35b61018c60048036038101906101879190611e48565b610480565b6040516101999190611e84565b60405180910390f35b6101bc60048036038101906101b79190611e48565b6104b3565b6040516101d0989796959493929190611eae565b60405180910390f35b6101e1610508565b005b6101eb610942565b005b6101f5610c19565b6040516102029190611f2c565b60405180910390f35b610213610c1f565b005b61022f600480360381019061022a9190611e48565b610cc0565b60405161023c9190611f2c565b60405180910390f35b61024d610d36565b60405161025a9190611f2c565b60405180910390f35b61026b610d3c565b005b61028760048036038101906102829190611f73565b611013565b005b6102a3600480360381019061029e9190611e48565b6110c5565b005b6102ad611789565b005b6102b761187e565b6040516102c49190611f2c565b60405180910390f35b6102d5611884565b6040516102e29190611e84565b60405180910390f35b61030560048036038101906103009190611e48565b6118aa565b005b610321600480360381019061031c9190611fa0565b6119ba565b60405161032f929190611fe0565b60405180910390f35b610340611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c490612066565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610424929190611fe0565b6020604051808303816000875af1158015610443573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610467919061209b565b50505050565b600560009054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b600560009054906101000a900460ff16610557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054e90612114565b60405180910390fd5b636524b02042101561059e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059590612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906121a6565b60405180910390fd5b61061533611a23565b15610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db90612212565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154426107349190612261565b11610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076b906122e1565b60405180910390fd5b600061077f33611a3c565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016107fa929190611fe0565b6020604051808303816000875af1158015610819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083d919061209b565b506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060160008282546108d89190612301565b9250508190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555080600260008282546109389190612301565b9250508190555050565b600560009054906101000a900460ff16610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890612114565b60405180910390fd5b636524b0204210156109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d906121a6565b60405180910390fd5b610a4f33611a23565b15610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a86906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff168015610b2d57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154145b15610c17576000610b3d33611a3c565b905080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550505b565b60025481565b610c27611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab90612066565b60405180910390fd5b610cbe6000611aa3565b565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16610d1f5760009050610d31565b6000610d2a83611a3c565b9050809150505b919050565b60045481565b600560009054906101000a900460ff16610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290612114565b60405180910390fd5b636524b020421015610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906121a6565b60405180910390fd5b610e4933611a23565b15610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff168015610f2757506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154145b15611011576000610f3733611a3c565b905080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550505b565b61101b611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f90612066565b60405180910390fd5b80600560006101000a81548160ff02191690831515021790555050565b600560009054906101000a900460ff16611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b90612114565b60405180910390fd5b636524b02042101561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c0906121a6565b60405180910390fd5b6111d233611a23565b15611212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611209906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990612381565b60405180910390fd5b6112aa611cdf565b600181600001901515908115158152505042816020018181525050428160400181815250506000816060018181525050600081608001818152505060008160a001818152505060008160c001818152505060008160e001818152505080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506001600360008282546113c29190612301565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061142f57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561143a5750611786565b600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361178457600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156115bf57600061152d83611a3c565b905080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550505b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008282546116129190612301565b92505081905550600060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152509050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505082600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505b50565b611791611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590612066565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801561187b573d6000803e3d6000fd5b50565b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118b2611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690612066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590612413565b60405180910390fd5b6119b781611aa3565b50565b600760205281600052604060002081815481106119d657600080fd5b9060005260206000209060020201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b600033905090565b600080823b905060008163ffffffff1611915050919050565b600080611a4883611b67565b9050600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015481611a989190612301565b905080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806002600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015460068060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611c409190612433565b611c4a9190612301565b611c549190612301565b611c5e9190612301565b9050607c811115611c6e57607c90505b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015442611cbc9190612261565b60045482611cca9190612433565b611cd49190612433565b905080915050919050565b604051806101000160405280600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d5682611d2b565b9050919050565b611d6681611d4b565b8114611d7157600080fd5b50565b600081359050611d8381611d5d565b92915050565b6000819050919050565b611d9c81611d89565b8114611da757600080fd5b50565b600081359050611db981611d93565b92915050565b600080600060608486031215611dd857611dd7611d26565b5b6000611de686828701611d74565b9350506020611df786828701611d74565b9250506040611e0886828701611daa565b9150509250925092565b60008115159050919050565b611e2781611e12565b82525050565b6000602082019050611e426000830184611e1e565b92915050565b600060208284031215611e5e57611e5d611d26565b5b6000611e6c84828501611d74565b91505092915050565b611e7e81611d4b565b82525050565b6000602082019050611e996000830184611e75565b92915050565b611ea881611d89565b82525050565b600061010082019050611ec4600083018b611e1e565b611ed1602083018a611e9f565b611ede6040830189611e9f565b611eeb6060830188611e9f565b611ef86080830187611e9f565b611f0560a0830186611e9f565b611f1260c0830185611e9f565b611f1f60e0830184611e9f565b9998505050505050505050565b6000602082019050611f416000830184611e9f565b92915050565b611f5081611e12565b8114611f5b57600080fd5b50565b600081359050611f6d81611f47565b92915050565b600060208284031215611f8957611f88611d26565b5b6000611f9784828501611f5e565b91505092915050565b60008060408385031215611fb757611fb6611d26565b5b6000611fc585828601611d74565b9250506020611fd685828601611daa565b9150509250929050565b6000604082019050611ff56000830185611e75565b6120026020830184611e9f565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612050602083612009565b915061205b8261201a565b602082019050919050565b6000602082019050818103600083015261207f81612043565b9050919050565b60008151905061209581611f47565b92915050565b6000602082840312156120b1576120b0611d26565b5b60006120bf84828501612086565b91505092915050565b7f4e6f742079657420737461727465640000000000000000000000000000000000600082015250565b60006120fe600f83612009565b9150612109826120c8565b602082019050919050565b6000602082019050818103600083015261212d816120f1565b9050919050565b7f4f6e6c792065787465726e616c206163636f756e74732063616e2063616c6c2060008201527f746869732066756e6374696f6e00000000000000000000000000000000000000602082015250565b6000612190602d83612009565b915061219b82612134565b604082019050919050565b600060208201905081810360008301526121bf81612183565b9050919050565b7f696e697469616c206572726f7200000000000000000000000000000000000000600082015250565b60006121fc600d83612009565b9150612207826121c6565b602082019050919050565b6000602082019050818103600083015261222b816121ef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061226c82611d89565b915061227783611d89565b925082820390508181111561228f5761228e612232565b5b92915050565b7f746f6f2066617374000000000000000000000000000000000000000000000000600082015250565b60006122cb600883612009565b91506122d682612295565b602082019050919050565b600060208201905081810360008301526122fa816122be565b9050919050565b600061230c82611d89565b915061231783611d89565b925082820190508082111561232f5761232e612232565b5b92915050565b7f7265706561742073746172740000000000000000000000000000000000000000600082015250565b600061236b600c83612009565b915061237682612335565b602082019050919050565b6000602082019050818103600083015261239a8161235e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123fd602683612009565b9150612408826123a1565b604082019050919050565b6000602082019050818103600083015261242c816123f0565b9050919050565b600061243e82611d89565b915061244983611d89565b925082820261245781611d89565b9150828204841483151761246e5761246d612232565b5b509291505056fea26469706673582212201714c6e98ca7e5e9ba6cabd3f32cf6dc8ca25965d1f72bb2b35460aa8661db6d64736f6c63430008110033