Overview
ETH Balance
0.46505 ETH
Eth Value
$1,543.05 (@ $3,318.03/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 33 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Make Payment | 17526930 | 580 days ago | IN | 0.165 ETH | 0.00034318 | ||||
Execute | 17241238 | 620 days ago | IN | 0 ETH | 0.00517995 | ||||
Approve | 17241185 | 620 days ago | IN | 0 ETH | 0.0037468 | ||||
Approve | 17241185 | 620 days ago | IN | 0 ETH | 0.0037468 | ||||
Request Withdraw... | 17235458 | 621 days ago | IN | 0 ETH | 0.00897218 | ||||
Make Payment | 17093566 | 641 days ago | IN | 0.165 ETH | 0.00107983 | ||||
Execute | 17080636 | 643 days ago | IN | 0 ETH | 0.00505011 | ||||
Approve | 17078962 | 643 days ago | IN | 0 ETH | 0.00311167 | ||||
Approve | 17078928 | 643 days ago | IN | 0 ETH | 0.00171942 | ||||
Approve | 17078927 | 643 days ago | IN | 0 ETH | 0.00317005 | ||||
Request Withdraw... | 17073848 | 644 days ago | IN | 0 ETH | 0.00582623 | ||||
Make Payment | 17073571 | 644 days ago | IN | 0.1 ETH | 0.00122546 | ||||
Make Payment | 16783174 | 685 days ago | IN | 0.1 ETH | 0.00053064 | ||||
Make Payment | 16260413 | 758 days ago | IN | 0.1 ETH | 0.00032058 | ||||
Make Payment | 16145229 | 774 days ago | IN | 0.1 ETH | 0.00041385 | ||||
Make Payment | 16026731 | 791 days ago | IN | 0.1 ETH | 0.00044553 | ||||
Make Payment | 15782590 | 825 days ago | IN | 0.1 ETH | 0.00062701 | ||||
Make Payment | 15688706 | 838 days ago | IN | 0.1 ETH | 0.00015167 | ||||
Make Payment | 15687577 | 838 days ago | IN | 0.1 ETH | 0.00015116 | ||||
Make Payment | 15537738 | 859 days ago | IN | 0.165 ETH | 0.00052824 | ||||
Make Payment | 15502306 | 865 days ago | IN | 0.1 ETH | 0.00037483 | ||||
Make Payment | 15251123 | 905 days ago | IN | 0.1 ETH | 0.00036825 | ||||
Make Payment | 15139470 | 922 days ago | IN | 0.165 ETH | 0.00060482 | ||||
Make Payment | 15090002 | 930 days ago | IN | 0.1 ETH | 0.00116642 | ||||
Execute | 15074900 | 932 days ago | IN | 0 ETH | 0.00191849 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
17597436 | 570 days ago | 0.0005 ETH | ||||
17503768 | 583 days ago | 0.0005 ETH | ||||
17503560 | 583 days ago | 0.0005 ETH | ||||
17241238 | 620 days ago | 0.5 ETH | ||||
17087297 | 642 days ago | 0.0015 ETH | ||||
17080636 | 643 days ago | 5 ETH | ||||
16762402 | 688 days ago | 0.0015 ETH | ||||
16759613 | 688 days ago | 0.002 ETH | ||||
16755270 | 689 days ago | 0.0005 ETH | ||||
16754495 | 689 days ago | 0.0005 ETH | ||||
16598964 | 711 days ago | 0.0025 ETH | ||||
16598962 | 711 days ago | 0.0025 ETH | ||||
16597422 | 711 days ago | 0.001 ETH | ||||
16596985 | 711 days ago | 0.0045 ETH | ||||
16596710 | 711 days ago | 0.0005 ETH | ||||
16577818 | 714 days ago | 0.0005 ETH | ||||
16577742 | 714 days ago | 0.001 ETH | ||||
16539640 | 719 days ago | 0.0025 ETH | ||||
16526605 | 721 days ago | 0.002 ETH | ||||
16517780 | 722 days ago | 0.0015 ETH | ||||
16512397 | 723 days ago | 0.005 ETH | ||||
16503284 | 724 days ago | 0.0005 ETH | ||||
16503282 | 724 days ago | 0.0005 ETH | ||||
16497936 | 725 days ago | 0.002 ETH | ||||
16490140 | 726 days ago | 0.0005 ETH |
Loading...
Loading
Contract Name:
OmnuumWallet
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.10; /// @title OmnuumWallet Allows multiple owners to agree to withdraw money, add/remove/change owners before execution /// @notice This contract is not managed by Omnuum admin, but for owners /// @author Omnuum Dev Team <[email protected]> import '@openzeppelin/contracts/utils/math/Math.sol'; contract OmnuumWallet { /// @notice consensusRatio Ratio of votes to reach consensus as a percentage of total votes uint256 public immutable consensusRatio; /// @notice Minimum limit of required number of votes for consensus uint8 public immutable minLimitForConsensus; /// @notice Withdraw = 0 /// @notice Add = 1 /// @notice Remove = 2 /// @notice Change = 3 /// @notice Cancel = 4 enum RequestTypes { Withdraw, Add, Remove, Change, Cancel } /// @notice F = 0 (F-Level Not owner) /// @notice D = 1 (D-Level own 1 vote) /// @notice C = 2 (C-Level own 2 votes) enum OwnerVotes { F, D, C } struct OwnerAccount { address addr; OwnerVotes vote; } struct Request { address requester; RequestTypes requestType; OwnerAccount currentOwner; OwnerAccount newOwner; uint256 withdrawalAmount; mapping(address => bool) voters; uint256 votes; bool isExecute; } Request[] public requests; mapping(OwnerVotes => uint8) public ownerCounter; mapping(address => OwnerVotes) public ownerVote; constructor( uint256 _consensusRatio, uint8 _minLimitForConsensus, OwnerAccount[] memory _initialOwnerAccounts ) { consensusRatio = _consensusRatio; minLimitForConsensus = _minLimitForConsensus; for (uint256 i; i < _initialOwnerAccounts.length; i++) { OwnerVotes vote = _initialOwnerAccounts[i].vote; ownerVote[_initialOwnerAccounts[i].addr] = vote; ownerCounter[vote]++; } _checkMinConsensus(); } event PaymentReceived(address indexed sender, address indexed target, string topic, string description, uint256 value); event MintFeeReceived(address indexed nftContract, uint256 value); event EtherReceived(address indexed sender, uint256 value); event Requested(address indexed owner, uint256 indexed requestId, RequestTypes indexed requestType); event Approved(address indexed owner, uint256 indexed requestId, OwnerVotes votes); event Revoked(address indexed owner, uint256 indexed requestId, OwnerVotes votes); event Canceled(address indexed owner, uint256 indexed requestId); event Executed(address indexed owner, uint256 indexed requestId, RequestTypes indexed requestType); modifier onlyOwner(address _address) { /// @custom:error (004) - Only the owner of the wallet is allowed require(isOwner(_address), 'OO4'); _; } modifier notOwner(address _address) { /// @custom:error (005) - Already the owner of the wallet require(!isOwner(_address), 'OO5'); _; } modifier isOwnerAccount(OwnerAccount memory _ownerAccount) { /// @custom:error (NX2) - Non-existent wallet account address _addr = _ownerAccount.addr; require(isOwner(_addr) && uint8(ownerVote[_addr]) == uint8(_ownerAccount.vote), 'NX2'); _; } modifier onlyRequester(uint256 _reqId) { /// @custom:error (OO6) - Only the requester is allowed require(requests[_reqId].requester == msg.sender, 'OO6'); _; } modifier reachConsensus(uint256 _reqId) { /// @custom:error (NE2) - Not reach consensus require(requests[_reqId].votes >= requiredVotesForConsensus(), 'NE2'); _; } modifier reqExists(uint256 _reqId) { /// @custom:error (NX3) - Non-existent owner request require(_reqId < requests.length, 'NX3'); _; } modifier notExecutedOrCanceled(uint256 _reqId) { /// @custom:error (SE1) - Already executed require(!requests[_reqId].isExecute, 'SE1'); /// @custom:error (SE2) - Request canceled require(requests[_reqId].requestType != RequestTypes.Cancel, 'SE2'); _; } modifier notVoted(address _owner, uint256 _reqId) { /// @custom:error (SE3) - Already voted require(!isOwnerVoted(_owner, _reqId), 'SE3'); _; } modifier voted(address _owner, uint256 _reqId) { /// @custom:error (SE4) - Not voted require(isOwnerVoted(_owner, _reqId), 'SE4'); _; } modifier isValidAddress(address _address) { /// @custom:error (AE1) - Zero address not acceptable require(_address != address(0), 'AE1'); uint256 codeSize; assembly { codeSize := extcodesize(_address) } /// @notice It's not perfect filtering against CA, but the owners can handle it cautiously. /// @custom:error (AE2) - Contract address not acceptable require(codeSize == 0, 'AE2'); _; } function mintFeePayment(address _nftContract) external payable { /// @custom:error (NE3) - A zero payment is not acceptable require(msg.value > 0, 'NE3'); emit MintFeeReceived(_nftContract, msg.value); } function makePayment( address _target, string calldata _topic, string calldata _description ) external payable { /// @custom:error (NE3) - A zero payment is not acceptable require(msg.value > 0, 'NE3'); emit PaymentReceived(msg.sender, _target, _topic, _description, msg.value); } receive() external payable { emit EtherReceived(msg.sender, msg.value); } /// @notice requestOwnerManage /// @dev Allows an owner to request for an agenda that wants to proceed /// @dev The owner can make multiple requests even if the previous one is unresolved /// @dev The requester is automatically voted for the request /// @param _requestType Withdraw(0) / Add(1) / Remove(2) / Change(3) / Cancel(4) /// @param _currentAccount Tuple[address, OwnerVotes] for current exist owner account (use for Request Type as Remove or Change) /// @param _newAccount Tuple[address, OwnerVotes] for new owner account (use for Request Type as Add or Change) function requestOwnerManagement( RequestTypes _requestType, OwnerAccount calldata _currentAccount, OwnerAccount calldata _newAccount ) external onlyOwner(msg.sender) { address requester = msg.sender; Request storage request_ = requests.push(); request_.requester = requester; request_.requestType = _requestType; request_.currentOwner = OwnerAccount({ addr: _currentAccount.addr, vote: _currentAccount.vote }); request_.newOwner = OwnerAccount({ addr: _newAccount.addr, vote: _newAccount.vote }); request_.voters[requester] = true; request_.votes = uint8(ownerVote[requester]); emit Requested(msg.sender, requests.length - 1, _requestType); } /// @notice requestWithdrawal /// @dev Allows an owner to request withdrawal /// @dev The owner can make multiple requests even if the previous one is unresolved /// @dev The requester is automatically voted for the request /// @param _withdrawalAmount Amount of Ether to be withdrawal (use for Request Type as Withdrawal) function requestWithdrawal(uint256 _withdrawalAmount) external onlyOwner(msg.sender) { address requester = msg.sender; Request storage request_ = requests.push(); request_.withdrawalAmount = _withdrawalAmount; request_.requester = requester; request_.requestType = RequestTypes.Withdraw; request_.voters[requester] = true; request_.votes = uint8(ownerVote[requester]); emit Requested(msg.sender, requests.length - 1, RequestTypes.Withdraw); } /// @notice approve /// @dev Allows owners to approve the request /// @dev The owner can revoke the approval whenever the request is still in progress (not executed or canceled) /// @param _reqId Request id that the owner wants to approve function approve(uint256 _reqId) external onlyOwner(msg.sender) reqExists(_reqId) notExecutedOrCanceled(_reqId) notVoted(msg.sender, _reqId) { OwnerVotes _vote = ownerVote[msg.sender]; Request storage request_ = requests[_reqId]; request_.voters[msg.sender] = true; request_.votes += uint8(_vote); emit Approved(msg.sender, _reqId, _vote); } /// @notice revoke /// @dev Allow an approver(owner) to revoke the approval /// @param _reqId Request id that the owner wants to revoke function revoke(uint256 _reqId) external onlyOwner(msg.sender) reqExists(_reqId) notExecutedOrCanceled(_reqId) voted(msg.sender, _reqId) { OwnerVotes vote = ownerVote[msg.sender]; Request storage request_ = requests[_reqId]; delete request_.voters[msg.sender]; request_.votes -= uint8(vote); emit Revoked(msg.sender, _reqId, vote); } /// @notice cancel /// @dev Allows a requester(owner) to cancel the own request /// @dev After proceeding, it cannot revert the cancellation. Be cautious /// @param _reqId Request id requested by the requester function cancel(uint256 _reqId) external reqExists(_reqId) notExecutedOrCanceled(_reqId) onlyRequester(_reqId) { requests[_reqId].requestType = RequestTypes.Cancel; emit Canceled(msg.sender, _reqId); } /// @notice execute /// @dev Allow an requester(owner) to execute the request /// @dev After proceeding, it cannot revert the execution. Be cautious /// @param _reqId Request id that the requester wants to execute function execute(uint256 _reqId) external reqExists(_reqId) notExecutedOrCanceled(_reqId) onlyRequester(_reqId) reachConsensus(_reqId) { Request storage request_ = requests[_reqId]; uint8 type_ = uint8(request_.requestType); request_.isExecute = true; if (type_ == uint8(RequestTypes.Withdraw)) { _withdraw(request_.withdrawalAmount, request_.requester); } else if (type_ == uint8(RequestTypes.Add)) { _addOwner(request_.newOwner); } else if (type_ == uint8(RequestTypes.Remove)) { _removeOwner(request_.currentOwner); } else if (type_ == uint8(RequestTypes.Change)) { _changeOwner(request_.currentOwner, request_.newOwner); } emit Executed(msg.sender, _reqId, request_.requestType); } /// @notice totalVotes /// @dev Allows users to see how many total votes the wallet currently have /// @return votes The total number of voting rights the owners have function totalVotes() public view returns (uint256 votes) { return ownerCounter[OwnerVotes.D] + 2 * ownerCounter[OwnerVotes.C]; } /// @notice isOwner /// @dev Allows users to verify registered owners in the wallet /// @param _owner Address of the owner that you want to verify /// @return isVerified Verification result of whether the owner is correct function isOwner(address _owner) public view returns (bool isVerified) { return uint8(ownerVote[_owner]) > 0; } /// @notice isOwnerVoted /// @dev Allows users to check which owner voted /// @param _owner Address of the owner /// @param _reqId Request id that you want to check /// @return isVoted Whether the owner voted function isOwnerVoted(address _owner, uint256 _reqId) public view returns (bool isVoted) { return requests[_reqId].voters[_owner]; } /// @notice requiredVotesForConsensus /// @dev Allows users to see how many votes are needed to reach consensus. /// @return votesForConsensus The number of votes required to reach a consensus function requiredVotesForConsensus() public view returns (uint256 votesForConsensus) { return Math.ceilDiv((totalVotes() * consensusRatio), 100); } /// @notice getRequestIdsByExecution /// @dev Allows users to see the array of request ids filtered by execution /// @param _isExecuted Whether the request was executed or not /// @param _cursorIndex A pointer to a specific request ID that starts in the data list /// @param _length The amount of request ids you want to query from the _cursorIndex (not always mean the amount of data you can retrieve) /// @return requestIds Array of request ids (if the boundary of search pointer exceeds the length of requests list, it always checks the last request id only, then returns the result) function getRequestIdsByExecution( bool _isExecuted, uint256 _cursorIndex, uint256 _length ) public view returns (uint256[] memory requestIds) { uint256[] memory filteredArray = new uint256[](requests.length); uint256 counter = 0; uint256 lastReqIdx = getLastRequestNo(); for (uint256 i = Math.min(_cursorIndex, lastReqIdx); i < Math.min(_cursorIndex + _length, lastReqIdx + 1); i++) { if (_isExecuted) { if (requests[i].isExecute) { filteredArray[counter] = i; counter++; } } else { if (!requests[i].isExecute) { filteredArray[counter] = i; counter++; } } } return _compactUintArray(filteredArray, counter); } /// @notice getRequestIdsByOwner /// @dev Allows users to see the array of request ids filtered by owner address /// @param _owner The address of owner /// @param _isExecuted If you want to see only for that have not been executed, input this argument into true /// @param _cursorIndex A pointer to a specific request ID that starts in the data list /// @param _length The amount of request ids you want to query from the _cursorIndex (not always mean the amount of data you can retrieve) /// @return requestIds Array of request ids (if the boundary of search pointer exceeds the length of requests list, it always checks the last request id only, then returns the result) function getRequestIdsByOwner( address _owner, bool _isExecuted, uint256 _cursorIndex, uint256 _length ) public view returns (uint256[] memory requestIds) { uint256[] memory filteredArray = new uint256[](requests.length); uint256 counter = 0; uint256 lastReqIdx = getLastRequestNo(); for (uint256 i = Math.min(_cursorIndex, lastReqIdx); i < Math.min(_cursorIndex + _length, lastReqIdx + 1); i++) { if (_isExecuted) { if ((requests[i].requester == _owner) && (requests[i].isExecute)) { filteredArray[counter] = i; counter++; } } else { if ((requests[i].requester == _owner) && (!requests[i].isExecute)) { filteredArray[counter] = i; counter++; } } } return _compactUintArray(filteredArray, counter); } /// @notice getRequestIdsByType /// @dev Allows users to see the array of request ids filtered by request type /// @param _requestType Withdraw(0) / Add(1) / Remove(2) / Change(3) / Cancel(4) /// @param _cursorIndex A pointer to a specific request ID that starts in the data list /// @param _length The amount of request ids you want to query from the _cursorIndex (not always mean the amount of data you can retrieve) /// @return requestIds Array of request ids (if the boundary of search pointer exceeds the length of requests list, it always checks the last request id only, then returns the result) function getRequestIdsByType( RequestTypes _requestType, bool _isExecuted, uint256 _cursorIndex, uint256 _length ) public view returns (uint256[] memory requestIds) { uint256[] memory filteredArray = new uint256[](requests.length); uint256 counter = 0; uint256 lastReqIdx = getLastRequestNo(); for (uint256 i = Math.min(_cursorIndex, lastReqIdx); i < Math.min(_cursorIndex + _length, lastReqIdx + 1); i++) { if (_isExecuted) { if ((requests[i].requestType == _requestType) && (requests[i].isExecute)) { filteredArray[counter] = i; counter++; } } else { if ((requests[i].requestType == _requestType) && (!requests[i].isExecute)) { filteredArray[counter] = i; counter++; } } } return _compactUintArray(filteredArray, counter); } /// @notice getLastRequestNo /// @dev Allows users to get the last request number /// @return requestNo The last request number function getLastRequestNo() public view returns (uint256 requestNo) { return requests.length - 1; } /// @notice _withdraw /// @dev Withdraw Ethers from the wallet /// @param _value Withdraw amount /// @param _to Withdrawal recipient function _withdraw(uint256 _value, address _to) private { /// @custom:error (NE4) - Insufficient balance require(_value <= address(this).balance, 'NE4'); (bool withdrawn, ) = payable(_to).call{ value: _value }(''); /// @custom:error (SE5) - Address: unable to send value, recipient may have reverted require(withdrawn, 'SE5'); } /// @notice _addOwner /// @dev Add a new Owner to the wallet /// @param _newAccount New owner account to be added function _addOwner(OwnerAccount memory _newAccount) private notOwner(_newAccount.addr) isValidAddress(_newAccount.addr) { OwnerVotes vote = _newAccount.vote; ownerVote[_newAccount.addr] = vote; ownerCounter[vote]++; } /// @notice _removeOwner /// @dev Remove existing owner form the wallet /// @param _removalAccount Current owner account to be removed function _removeOwner(OwnerAccount memory _removalAccount) private isOwnerAccount(_removalAccount) { ownerCounter[_removalAccount.vote]--; _checkMinConsensus(); delete ownerVote[_removalAccount.addr]; } /// @notice _changeOwner /// @dev Allows changing the existing owner to the new one. It also includes the functionality to change the existing owner's level /// @param _currentAccount Current owner account to be changed /// @param _newAccount New owner account to be applied function _changeOwner(OwnerAccount memory _currentAccount, OwnerAccount memory _newAccount) private { OwnerVotes _currentVote = _currentAccount.vote; OwnerVotes _newVote = _newAccount.vote; ownerCounter[_currentVote]--; ownerCounter[_newVote]++; _checkMinConsensus(); if (_currentAccount.addr != _newAccount.addr) { delete ownerVote[_currentAccount.addr]; } ownerVote[_newAccount.addr] = _newVote; } /// @notice _checkMinConsensus /// @dev It is the verification function to prevent a dangerous situation in which the number of votes that an owner has /// @dev is equal to or greater than the number of votes required for reaching consensus so that the owner achieves consensus by himself or herself. function _checkMinConsensus() private view { /// @custom:error (NE5) - Violate min limit for consensus require(requiredVotesForConsensus() >= minLimitForConsensus, 'NE5'); } function _compactUintArray(uint256[] memory targetArray, uint256 length) internal pure returns (uint256[] memory array) { uint256[] memory compactArray = new uint256[](length); for (uint256 i = 0; i < length; i++) { compactArray[i] = targetArray[i]; } return compactArray; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_consensusRatio","type":"uint256"},{"internalType":"uint8","name":"_minLimitForConsensus","type":"uint8"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"enum OmnuumWallet.OwnerVotes","name":"vote","type":"uint8"}],"internalType":"struct OmnuumWallet.OwnerAccount[]","name":"_initialOwnerAccounts","type":"tuple[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"enum OmnuumWallet.OwnerVotes","name":"votes","type":"uint8"}],"name":"Approved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"Canceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"EtherReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":true,"internalType":"enum OmnuumWallet.RequestTypes","name":"requestType","type":"uint8"}],"name":"Executed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"nftContract","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"MintFeeReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"string","name":"topic","type":"string"},{"indexed":false,"internalType":"string","name":"description","type":"string"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":true,"internalType":"enum OmnuumWallet.RequestTypes","name":"requestType","type":"uint8"}],"name":"Requested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"enum OmnuumWallet.OwnerVotes","name":"votes","type":"uint8"}],"name":"Revoked","type":"event"},{"inputs":[{"internalType":"uint256","name":"_reqId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reqId","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"consensusRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reqId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLastRequestNo","outputs":[{"internalType":"uint256","name":"requestNo","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_isExecuted","type":"bool"},{"internalType":"uint256","name":"_cursorIndex","type":"uint256"},{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"getRequestIdsByExecution","outputs":[{"internalType":"uint256[]","name":"requestIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"bool","name":"_isExecuted","type":"bool"},{"internalType":"uint256","name":"_cursorIndex","type":"uint256"},{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"getRequestIdsByOwner","outputs":[{"internalType":"uint256[]","name":"requestIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum OmnuumWallet.RequestTypes","name":"_requestType","type":"uint8"},{"internalType":"bool","name":"_isExecuted","type":"bool"},{"internalType":"uint256","name":"_cursorIndex","type":"uint256"},{"internalType":"uint256","name":"_length","type":"uint256"}],"name":"getRequestIdsByType","outputs":[{"internalType":"uint256[]","name":"requestIds","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"isVerified","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_reqId","type":"uint256"}],"name":"isOwnerVoted","outputs":[{"internalType":"bool","name":"isVoted","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"string","name":"_topic","type":"string"},{"internalType":"string","name":"_description","type":"string"}],"name":"makePayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"minLimitForConsensus","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_nftContract","type":"address"}],"name":"mintFeePayment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"enum OmnuumWallet.OwnerVotes","name":"","type":"uint8"}],"name":"ownerCounter","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ownerVote","outputs":[{"internalType":"enum OmnuumWallet.OwnerVotes","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum OmnuumWallet.RequestTypes","name":"_requestType","type":"uint8"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"enum OmnuumWallet.OwnerVotes","name":"vote","type":"uint8"}],"internalType":"struct OmnuumWallet.OwnerAccount","name":"_currentAccount","type":"tuple"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"enum OmnuumWallet.OwnerVotes","name":"vote","type":"uint8"}],"internalType":"struct OmnuumWallet.OwnerAccount","name":"_newAccount","type":"tuple"}],"name":"requestOwnerManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalAmount","type":"uint256"}],"name":"requestWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requests","outputs":[{"internalType":"address","name":"requester","type":"address"},{"internalType":"enum OmnuumWallet.RequestTypes","name":"requestType","type":"uint8"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"enum OmnuumWallet.OwnerVotes","name":"vote","type":"uint8"}],"internalType":"struct OmnuumWallet.OwnerAccount","name":"currentOwner","type":"tuple"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"enum OmnuumWallet.OwnerVotes","name":"vote","type":"uint8"}],"internalType":"struct OmnuumWallet.OwnerAccount","name":"newOwner","type":"tuple"},{"internalType":"uint256","name":"withdrawalAmount","type":"uint256"},{"internalType":"uint256","name":"votes","type":"uint256"},{"internalType":"bool","name":"isExecute","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requiredVotesForConsensus","outputs":[{"internalType":"uint256","name":"votesForConsensus","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reqId","type":"uint256"}],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalVotes","outputs":[{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162004c1b38038062004c1b833981810160405281019062000037919062000639565b82608081815250508160ff1660a08160ff168152505060005b815181101562000197576000828281518110620000725762000071620006b4565b5b602002602001015160200151905080600260008585815181106200009b576200009a620006b4565b5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836002811115620001065762000105620006e3565b5b021790555060016000826002811115620001255762000124620006e3565b5b60028111156200013a5762000139620006e3565b5b8152602001908152602001600020600081819054906101000a900460ff1680929190620001679062000741565b91906101000a81548160ff021916908360ff160217905550505080806200018e9062000770565b91505062000050565b50620001a8620001b160201b60201c565b50505062000a1e565b60a05160ff16620001c76200020d60201b60201c565b10156200020b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000202906200081f565b60405180910390fd5b565b600062000245608051620002266200024a60201b60201c565b62000232919062000841565b60646200030560201b6200274d1760201c565b905090565b600060016000600280811115620002665762000265620006e3565b5b60028111156200027b576200027a620006e3565b5b815260200190815260200160002060009054906101000a900460ff166002620002a59190620008a2565b6001600060016002811115620002c057620002bf620006e3565b5b6002811115620002d557620002d4620006e3565b5b815260200190815260200160002060009054906101000a900460ff16620002fd9190620008e4565b60ff16905090565b600080828462000316919062000951565b146200032457600162000327565b60005b60ff16828462000338919062000989565b620003449190620009c1565b905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620003758162000360565b81146200038157600080fd5b50565b60008151905062000395816200036a565b92915050565b600060ff82169050919050565b620003b3816200039b565b8114620003bf57600080fd5b50565b600081519050620003d381620003a8565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200042982620003de565b810181811067ffffffffffffffff821117156200044b576200044a620003ef565b5b80604052505050565b6000620004606200034c565b90506200046e82826200041e565b919050565b600067ffffffffffffffff821115620004915762000490620003ef565b5b602082029050602081019050919050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004d982620004ac565b9050919050565b620004eb81620004cc565b8114620004f757600080fd5b50565b6000815190506200050b81620004e0565b92915050565b600381106200051f57600080fd5b50565b600081519050620005338162000511565b92915050565b600060408284031215620005525762000551620004a7565b5b6200055e604062000454565b905060006200057084828501620004fa565b6000830152506020620005868482850162000522565b60208301525092915050565b6000620005a9620005a38462000473565b62000454565b90508083825260208201905060408402830185811115620005cf57620005ce620004a2565b5b835b81811015620005fc5780620005e7888262000539565b845260208401935050604081019050620005d1565b5050509392505050565b600082601f8301126200061e576200061d620003d9565b5b81516200063084826020860162000592565b91505092915050565b60008060006060848603121562000655576200065462000356565b5b6000620006658682870162000384565b93505060206200067886828701620003c2565b925050604084015167ffffffffffffffff8111156200069c576200069b6200035b565b5b620006aa8682870162000606565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200074e826200039b565b915060ff82141562000765576200076462000712565b5b600182019050919050565b60006200077d8262000360565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620007b357620007b262000712565b5b600182019050919050565b600082825260208201905092915050565b7f4e45350000000000000000000000000000000000000000000000000000000000600082015250565b600062000807600383620007be565b91506200081482620007cf565b602082019050919050565b600060208201905081810360008301526200083a81620007f8565b9050919050565b60006200084e8262000360565b91506200085b8362000360565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000897576200089662000712565b5b828202905092915050565b6000620008af826200039b565b9150620008bc836200039b565b92508160ff0483118215151615620008d957620008d862000712565b5b828202905092915050565b6000620008f1826200039b565b9150620008fe836200039b565b92508260ff0382111562000917576200091662000712565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200095e8262000360565b91506200096b8362000360565b9250826200097e576200097d62000922565b5b828206905092915050565b6000620009968262000360565b9150620009a38362000360565b925082620009b657620009b562000922565b5b828204905092915050565b6000620009ce8262000360565b9150620009db8362000360565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000a135762000a1262000712565b5b828201905092915050565b60805160a0516141c962000a52600039600081816120760152612edd015260008181610e7c015261115c01526141c96000f3fe60806040526004361061012e5760003560e01c806397fc84c6116100ab578063cd700f6c1161006f578063cd700f6c14610466578063ddb9fde1146104a3578063e597c510146104e0578063f14cf2b11461050b578063f27a2e4d14610527578063fe0d94c11461055257610183565b806397fc84c61461035d5780639ee679e81461039a578063a48d938d146103c3578063b759f95414610400578063c5a66c1c1461042957610183565b80632f54bf6e116100f25780632f54bf6e1461025e57806333e6e13d1461029b57806340e58ee5146102c65780634c83f9e4146102ef57806381d12c581461031a57610183565b806307dac117146101885780630d15fd77146101b157806318e43345146101dc57806320c5429b146101f857806323d29b731461022157610183565b36610183573373ffffffffffffffffffffffffffffffffffffffff167f1e57e3bb474320be3d2c77138f75b7c3941292d647f5f9634e33a8e94e0e069b346040516101799190612f63565b60405180910390a2005b600080fd5b34801561019457600080fd5b506101af60048036038101906101aa9190612fd1565b61057b565b005b3480156101bd57600080fd5b506101c661094d565b6040516101d39190612f63565b60405180910390f35b6101f660048036038101906101f191906130e7565b6109f8565b005b34801561020457600080fd5b5061021f600480360381019061021a91906131a8565b610aaf565b005b34801561022d57600080fd5b50610248600480360381019061024391906131fa565b610de8565b6040516102559190613243565b60405180910390f35b34801561026a57600080fd5b506102856004803603810190610280919061325e565b610e08565b60405161029291906132a6565b60405180910390f35b3480156102a757600080fd5b506102b0610e75565b6040516102bd9190612f63565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906131a8565b610eb9565b005b3480156102fb57600080fd5b5061030461115a565b6040516103119190612f63565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c91906131a8565b61117e565b60405161035497969594939291906133cd565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f919061343e565b611340565b60405161039191906132a6565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc91906131a8565b6113b9565b005b3480156103cf57600080fd5b506103ea60048036038101906103e5919061325e565b6115d6565b6040516103f7919061348d565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906131a8565b6115f6565b005b34801561043557600080fd5b50610450600480360381019061044b91906134d4565b611939565b60405161045d91906135f9565b60405180910390f35b34801561047257600080fd5b5061048d6004803603810190610488919061361b565b611b98565b60405161049a91906135f9565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613682565b611e2d565b6040516104d791906135f9565b60405180910390f35b3480156104ec57600080fd5b506104f5611fc7565b6040516105029190612f63565b60405180910390f35b6105256004803603810190610520919061325e565b611fe0565b005b34801561053357600080fd5b5061053c612074565b6040516105499190613243565b60405180910390f35b34801561055e57600080fd5b50610579600480360381019061057491906131a8565b612098565b005b3361058581610e08565b6105c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bb90613732565b60405180910390fd5b60003390506000806001816001815401808255809150500390600052602060002090600702019050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858160000160146101000a81548160ff02191690836004811115610656576106556132d0565b5b02179055506040518060400160405280866000016020810190610679919061325e565b73ffffffffffffffffffffffffffffffffffffffff1681526020018660200160208101906106a791906131fa565b60028111156106b9576106b86132d0565b5b8152508160010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690836002811115610732576107316132d0565b5b02179055509050506040518060400160405280856000016020810190610758919061325e565b73ffffffffffffffffffffffffffffffffffffffff16815260200185602001602081019061078691906131fa565b6002811115610798576107976132d0565b5b8152508160020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690836002811115610811576108106132d0565b5b021790555090505060018160040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660028111156108d2576108d16132d0565b5b60ff1681600501819055508560048111156108f0576108ef6132d0565b5b60016000805490506109029190613781565b3373ffffffffffffffffffffffffffffffffffffffff167fe385fdb04af0282a704a6c5d5ec8414a7b883dfcc11a5fa082db2ae46125398160405160405180910390a4505050505050565b600060016000600280811115610966576109656132d0565b5b6002811115610978576109776132d0565b5b815260200190815260200160002060009054906101000a900460ff1660026109a091906137b5565b60016000600160028111156109b8576109b76132d0565b5b60028111156109ca576109c96132d0565b5b815260200190815260200160002060009054906101000a900460ff166109f091906137f0565b60ff16905090565b60003411610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290613873565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c69ba65ac630960f1d90c9a12eb143096fa71019450181b7fb5c299f03a63578686868634604051610aa09594939291906138e0565b60405180910390a35050505050565b33610ab981610e08565b610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90613732565b60405180910390fd5b816000805490508110610b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3790613975565b60405180910390fd5b8260008181548110610b5557610b54613995565b5b906000526020600020906007020160060160009054906101000a900460ff1615610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab90613a10565b60405180910390fd5b600480811115610bc757610bc66132d0565b5b60008281548110610bdb57610bda613995565b5b906000526020600020906007020160000160149054906101000a900460ff166004811115610c0c57610c0b6132d0565b5b1415610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490613a7c565b60405180910390fd5b3384610c598282611340565b610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90613ae8565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000808881548110610cfe57610cfd613995565b5b906000526020600020906007020190508060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055816002811115610d7257610d716132d0565b5b60ff16816005016000828254610d889190613781565b92505081905550873373ffffffffffffffffffffffffffffffffffffffff167f8ed50e04800878b4f45dbcced5ce55bfbde633af37ddd2a2f837479dd7f5ca3584604051610dd6919061348d565b60405180910390a35050505050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115610e6a57610e696132d0565b5b60ff16119050919050565b6000610eb47f0000000000000000000000000000000000000000000000000000000000000000610ea361094d565b610ead9190613b08565b606461274d565b905090565b806000805490508110610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890613975565b60405180910390fd5b8160008181548110610f1657610f15613995565b5b906000526020600020906007020160060160009054906101000a900460ff1615610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90613a10565b60405180910390fd5b600480811115610f8857610f876132d0565b5b60008281548110610f9c57610f9b613995565b5b906000526020600020906007020160000160149054906101000a900460ff166004811115610fcd57610fcc6132d0565b5b141561100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590613a7c565b60405180910390fd5b823373ffffffffffffffffffffffffffffffffffffffff166000828154811061103a57611039613995565b5b906000526020600020906007020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990613bae565b60405180910390fd5b6004600085815481106110d8576110d7613995565b5b906000526020600020906007020160000160146101000a81548160ff0219169083600481111561110b5761110a6132d0565b5b0217905550833373ffffffffffffffffffffffffffffffffffffffff167ff3a6ef5718c05d9183af076f5753197b68b04552a763c34796637d6134bdd0f260405160405180910390a350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000818154811061118e57600080fd5b90600052602060002090600702016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff1690806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff166002811115611265576112646132d0565b5b6002811115611277576112766132d0565b5b8152505090806002016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff166002811115611306576113056132d0565b5b6002811115611318576113176132d0565b5b81525050908060030154908060050154908060060160009054906101000a900460ff16905087565b600080828154811061135557611354613995565b5b906000526020600020906007020160040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b336113c381610e08565b611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f990613732565b60405180910390fd5b60003390506000806001816001815401808255809150500390600052602060002090600702019050838160030181905550818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008160000160146101000a81548160ff0219169083600481111561149e5761149d6132d0565b5b021790555060018160040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600281111561155c5761155b6132d0565b5b60ff1681600501819055506000600481111561157b5761157a6132d0565b5b600160008054905061158d9190613781565b3373ffffffffffffffffffffffffffffffffffffffff167fe385fdb04af0282a704a6c5d5ec8414a7b883dfcc11a5fa082db2ae46125398160405160405180910390a450505050565b60026020528060005260406000206000915054906101000a900460ff1681565b3361160081610e08565b61163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690613732565b60405180910390fd5b816000805490508110611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613975565b60405180910390fd5b826000818154811061169c5761169b613995565b5b906000526020600020906007020160060160009054906101000a900460ff16156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613a10565b60405180910390fd5b60048081111561170e5761170d6132d0565b5b6000828154811061172257611721613995565b5b906000526020600020906007020160000160149054906101000a900460ff166004811115611753576117526132d0565b5b1415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613a7c565b60405180910390fd5b33846117a08282611340565b156117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790613c1a565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600080888154811061184657611845613995565b5b9060005260206000209060070201905060018160040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508160028111156118c3576118c26132d0565b5b60ff168160050160008282546118d99190613c3a565b92505081905550873373ffffffffffffffffffffffffffffffffffffffff167fb70d97bfb81912068fbb0d3ef0e849a0b5b5e822ddc9cd0d56e52b6b09ab11a784604051611927919061348d565b60405180910390a35050505050505050565b60606000808054905067ffffffffffffffff81111561195b5761195a613c90565b5b6040519080825280602002602001820160405280156119895781602001602082028036833780820191505090505b509050600080611997611fc7565b905060006119a5878361278c565b90505b6119c986886119b79190613c3a565b6001846119c49190613c3a565b61278c565b811015611b80578715611aa3578860048111156119e9576119e86132d0565b5b600082815481106119fd576119fc613995565b5b906000526020600020906007020160000160149054906101000a900460ff166004811115611a2e57611a2d6132d0565b5b148015611a6a575060008181548110611a4a57611a49613995565b5b906000526020600020906007020160060160009054906101000a900460ff165b15611a9e5780848481518110611a8357611a82613995565b5b6020026020010181815250508280611a9a90613cbf565b9350505b611b6d565b886004811115611ab657611ab56132d0565b5b60008281548110611aca57611ac9613995565b5b906000526020600020906007020160000160149054906101000a900460ff166004811115611afb57611afa6132d0565b5b148015611b38575060008181548110611b1757611b16613995565b5b906000526020600020906007020160060160009054906101000a900460ff16155b15611b6c5780848481518110611b5157611b50613995565b5b6020026020010181815250508280611b6890613cbf565b9350505b5b8080611b7890613cbf565b9150506119a8565b50611b8b83836127a5565b9350505050949350505050565b60606000808054905067ffffffffffffffff811115611bba57611bb9613c90565b5b604051908082528060200260200182016040528015611be85781602001602082028036833780820191505090505b509050600080611bf6611fc7565b90506000611c04878361278c565b90505b611c288688611c169190613c3a565b600184611c239190613c3a565b61278c565b811015611e15578715611d1d578873ffffffffffffffffffffffffffffffffffffffff1660008281548110611c6057611c5f613995565b5b906000526020600020906007020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611ce4575060008181548110611cc457611cc3613995565b5b906000526020600020906007020160060160009054906101000a900460ff165b15611d185780848481518110611cfd57611cfc613995565b5b6020026020010181815250508280611d1490613cbf565b9350505b611e02565b8873ffffffffffffffffffffffffffffffffffffffff1660008281548110611d4857611d47613995565b5b906000526020600020906007020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611dcd575060008181548110611dac57611dab613995565b5b906000526020600020906007020160060160009054906101000a900460ff16155b15611e015780848481518110611de657611de5613995565b5b6020026020010181815250508280611dfd90613cbf565b9350505b5b8080611e0d90613cbf565b915050611c07565b50611e2083836127a5565b9350505050949350505050565b60606000808054905067ffffffffffffffff811115611e4f57611e4e613c90565b5b604051908082528060200260200182016040528015611e7d5781602001602082028036833780820191505090505b509050600080611e8b611fc7565b90506000611e99878361278c565b90505b611ebd8688611eab9190613c3a565b600184611eb89190613c3a565b61278c565b811015611fb0578715611f365760008181548110611ede57611edd613995565b5b906000526020600020906007020160060160009054906101000a900460ff1615611f315780848481518110611f1657611f15613995565b5b6020026020010181815250508280611f2d90613cbf565b9350505b611f9d565b60008181548110611f4a57611f49613995565b5b906000526020600020906007020160060160009054906101000a900460ff16611f9c5780848481518110611f8157611f80613995565b5b6020026020010181815250508280611f9890613cbf565b9350505b5b8080611fa890613cbf565b915050611e9c565b50611fbb83836127a5565b93505050509392505050565b60006001600080549050611fdb9190613781565b905090565b60003411612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201a90613873565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fa9bf9e71178d4c9a31c71731d67f63b087430417881b55bda1db42bc22f700ee346040516120699190612f63565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b8060008054905081106120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d790613975565b60405180910390fd5b81600081815481106120f5576120f4613995565b5b906000526020600020906007020160060160009054906101000a900460ff1615612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b90613a10565b60405180910390fd5b600480811115612167576121666132d0565b5b6000828154811061217b5761217a613995565b5b906000526020600020906007020160000160149054906101000a900460ff1660048111156121ac576121ab6132d0565b5b14156121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490613a7c565b60405180910390fd5b823373ffffffffffffffffffffffffffffffffffffffff166000828154811061221957612218613995565b5b906000526020600020906007020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890613bae565b60405180910390fd5b836122aa610e75565b600082815481106122be576122bd613995565b5b9060005260206000209060070201600501541015612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890613d54565b60405180910390fd5b600080868154811061232657612325613995565b5b9060005260206000209060070201905060008160000160149054906101000a900460ff16600481111561235c5761235b6132d0565b5b905060018260060160006101000a81548160ff0219169083151502179055506000600481111561238f5761238e6132d0565b5b60ff168160ff1614156123d3576123ce82600301548360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612857565b6126dc565b600160048111156123e7576123e66132d0565b5b60ff168160ff1614156124a15761249c826002016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff166002811115612481576124806132d0565b5b6002811115612493576124926132d0565b5b8152505061294b565b6126db565b600260048111156124b5576124b46132d0565b5b60ff168160ff16141561256f5761256a826001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff16600281111561254f5761254e6132d0565b5b6002811115612561576125606132d0565b5b81525050612b3f565b6126da565b60036004811115612583576125826132d0565b5b60ff168160ff1614156126d9576126d8826001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff16600281111561261d5761261c6132d0565b5b600281111561262f5761262e6132d0565b5b81525050836002016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff1660028111156126bd576126bc6132d0565b5b60028111156126cf576126ce6132d0565b5b81525050612ce7565b5b5b5b5b8160000160149054906101000a900460ff166004811115612700576126ff6132d0565b5b873373ffffffffffffffffffffffffffffffffffffffff167f5732b45b4bf13341d749e465ed724d2b147b95fee2e3578c2d62865a8d417bf760405160405180910390a450505050505050565b600080828461275c9190613da3565b1461276857600161276b565b60005b60ff16828461277a9190613dd4565b6127849190613c3a565b905092915050565b600081831061279b578161279d565b825b905092915050565b606060008267ffffffffffffffff8111156127c3576127c2613c90565b5b6040519080825280602002602001820160405280156127f15781602001602082028036833780820191505090505b50905060005b8381101561284c5784818151811061281257612811613995565b5b602002602001015182828151811061282d5761282c613995565b5b602002602001018181525050808061284490613cbf565b9150506127f7565b508091505092915050565b4782111561289a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289190613e51565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff16836040516128c090613ea2565b60006040518083038185875af1925050503d80600081146128fd576040519150601f19603f3d011682016040523d82523d6000602084013e612902565b606091505b5050905080612946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293d90613f03565b60405180910390fd5b505050565b806000015161295981610e08565b15612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090613f6f565b60405180910390fd5b8160000151600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0590613fdb565b60405180910390fd5b6000813b905060008114612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e90614047565b60405180910390fd5b6000846020015190508060026000876000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836002811115612ac657612ac56132d0565b5b021790555060016000826002811115612ae257612ae16132d0565b5b6002811115612af457612af36132d0565b5b8152602001908152602001600020600081819054906101000a900460ff1680929190612b1f90614067565b91906101000a81548160ff021916908360ff160217905550505050505050565b80600081600001519050612b5281610e08565b8015612bd7575081602001516002811115612b7057612b6f6132d0565b5b60ff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115612bd257612bd16132d0565b5b60ff16145b612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0d906140dd565b60405180910390fd5b6001600084602001516002811115612c3157612c306132d0565b5b6002811115612c4357612c426132d0565b5b8152602001908152602001600020600081819054906101000a900460ff1680929190612c6e906140fd565b91906101000a81548160ff021916908360ff16021790555050612c8f612edb565b60026000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055505050565b60008260200151905060008260200151905060016000836002811115612d1057612d0f6132d0565b5b6002811115612d2257612d216132d0565b5b8152602001908152602001600020600081819054906101000a900460ff1680929190612d4d906140fd565b91906101000a81548160ff021916908360ff1602179055505060016000826002811115612d7d57612d7c6132d0565b5b6002811115612d8f57612d8e6132d0565b5b8152602001908152602001600020600081819054906101000a900460ff1680929190612dba90614067565b91906101000a81548160ff021916908360ff16021790555050612ddb612edb565b826000015173ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614612e6a5760026000856000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b8060026000856000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836002811115612ed057612ecf6132d0565b5b021790555050505050565b7f000000000000000000000000000000000000000000000000000000000000000060ff16612f07610e75565b1015612f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3f90614173565b60405180910390fd5b565b6000819050919050565b612f5d81612f4a565b82525050565b6000602082019050612f786000830184612f54565b92915050565b600080fd5b600080fd5b60058110612f9557600080fd5b50565b600081359050612fa781612f88565b92915050565b600080fd5b600060408284031215612fc857612fc7612fad565b5b81905092915050565b600080600060a08486031215612fea57612fe9612f7e565b5b6000612ff886828701612f98565b935050602061300986828701612fb2565b925050606061301a86828701612fb2565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061304f82613024565b9050919050565b61305f81613044565b811461306a57600080fd5b50565b60008135905061307c81613056565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130a7576130a6613082565b5b8235905067ffffffffffffffff8111156130c4576130c3613087565b5b6020830191508360018202830111156130e0576130df61308c565b5b9250929050565b60008060008060006060868803121561310357613102612f7e565b5b60006131118882890161306d565b955050602086013567ffffffffffffffff81111561313257613131612f83565b5b61313e88828901613091565b9450945050604086013567ffffffffffffffff81111561316157613160612f83565b5b61316d88828901613091565b92509250509295509295909350565b61318581612f4a565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000602082840312156131be576131bd612f7e565b5b60006131cc84828501613193565b91505092915050565b600381106131e257600080fd5b50565b6000813590506131f4816131d5565b92915050565b6000602082840312156132105761320f612f7e565b5b600061321e848285016131e5565b91505092915050565b600060ff82169050919050565b61323d81613227565b82525050565b60006020820190506132586000830184613234565b92915050565b60006020828403121561327457613273612f7e565b5b60006132828482850161306d565b91505092915050565b60008115159050919050565b6132a08161328b565b82525050565b60006020820190506132bb6000830184613297565b92915050565b6132ca81613044565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581106133105761330f6132d0565b5b50565b6000819050613321826132ff565b919050565b600061333182613313565b9050919050565b61334181613326565b82525050565b61335081613044565b82525050565b60038110613367576133666132d0565b5b50565b600081905061337882613356565b919050565b60006133888261336a565b9050919050565b6133988161337d565b82525050565b6040820160008201516133b46000850182613347565b5060208201516133c7602085018261338f565b50505050565b6000610120820190506133e3600083018a6132c1565b6133f06020830189613338565b6133fd604083018861339e565b61340a608083018761339e565b61341760c0830186612f54565b61342460e0830185612f54565b613432610100830184613297565b98975050505050505050565b6000806040838503121561345557613454612f7e565b5b60006134638582860161306d565b925050602061347485828601613193565b9150509250929050565b6134878161337d565b82525050565b60006020820190506134a2600083018461347e565b92915050565b6134b18161328b565b81146134bc57600080fd5b50565b6000813590506134ce816134a8565b92915050565b600080600080608085870312156134ee576134ed612f7e565b5b60006134fc87828801612f98565b945050602061350d878288016134bf565b935050604061351e87828801613193565b925050606061352f87828801613193565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61357081612f4a565b82525050565b60006135828383613567565b60208301905092915050565b6000602082019050919050565b60006135a68261353b565b6135b08185613546565b93506135bb83613557565b8060005b838110156135ec5781516135d38882613576565b97506135de8361358e565b9250506001810190506135bf565b5085935050505092915050565b60006020820190508181036000830152613613818461359b565b905092915050565b6000806000806080858703121561363557613634612f7e565b5b60006136438782880161306d565b9450506020613654878288016134bf565b935050604061366587828801613193565b925050606061367687828801613193565b91505092959194509250565b60008060006060848603121561369b5761369a612f7e565b5b60006136a9868287016134bf565b93505060206136ba86828701613193565b92505060406136cb86828701613193565b9150509250925092565b600082825260208201905092915050565b7f4f4f340000000000000000000000000000000000000000000000000000000000600082015250565b600061371c6003836136d5565b9150613727826136e6565b602082019050919050565b6000602082019050818103600083015261374b8161370f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061378c82612f4a565b915061379783612f4a565b9250828210156137aa576137a9613752565b5b828203905092915050565b60006137c082613227565b91506137cb83613227565b92508160ff04831182151516156137e5576137e4613752565b5b828202905092915050565b60006137fb82613227565b915061380683613227565b92508260ff0382111561381c5761381b613752565b5b828201905092915050565b7f4e45330000000000000000000000000000000000000000000000000000000000600082015250565b600061385d6003836136d5565b915061386882613827565b602082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006138bf83856136d5565b93506138cc838584613893565b6138d5836138a2565b840190509392505050565b600060608201905081810360008301526138fb8187896138b3565b905081810360208301526139108185876138b3565b905061391f6040830184612f54565b9695505050505050565b7f4e58330000000000000000000000000000000000000000000000000000000000600082015250565b600061395f6003836136d5565b915061396a82613929565b602082019050919050565b6000602082019050818103600083015261398e81613952565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5345310000000000000000000000000000000000000000000000000000000000600082015250565b60006139fa6003836136d5565b9150613a05826139c4565b602082019050919050565b60006020820190508181036000830152613a29816139ed565b9050919050565b7f5345320000000000000000000000000000000000000000000000000000000000600082015250565b6000613a666003836136d5565b9150613a7182613a30565b602082019050919050565b60006020820190508181036000830152613a9581613a59565b9050919050565b7f5345340000000000000000000000000000000000000000000000000000000000600082015250565b6000613ad26003836136d5565b9150613add82613a9c565b602082019050919050565b60006020820190508181036000830152613b0181613ac5565b9050919050565b6000613b1382612f4a565b9150613b1e83612f4a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b5757613b56613752565b5b828202905092915050565b7f4f4f360000000000000000000000000000000000000000000000000000000000600082015250565b6000613b986003836136d5565b9150613ba382613b62565b602082019050919050565b60006020820190508181036000830152613bc781613b8b565b9050919050565b7f5345330000000000000000000000000000000000000000000000000000000000600082015250565b6000613c046003836136d5565b9150613c0f82613bce565b602082019050919050565b60006020820190508181036000830152613c3381613bf7565b9050919050565b6000613c4582612f4a565b9150613c5083612f4a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c8557613c84613752565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000613cca82612f4a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cfd57613cfc613752565b5b600182019050919050565b7f4e45320000000000000000000000000000000000000000000000000000000000600082015250565b6000613d3e6003836136d5565b9150613d4982613d08565b602082019050919050565b60006020820190508181036000830152613d6d81613d31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613dae82612f4a565b9150613db983612f4a565b925082613dc957613dc8613d74565b5b828206905092915050565b6000613ddf82612f4a565b9150613dea83612f4a565b925082613dfa57613df9613d74565b5b828204905092915050565b7f4e45340000000000000000000000000000000000000000000000000000000000600082015250565b6000613e3b6003836136d5565b9150613e4682613e05565b602082019050919050565b60006020820190508181036000830152613e6a81613e2e565b9050919050565b600081905092915050565b50565b6000613e8c600083613e71565b9150613e9782613e7c565b600082019050919050565b6000613ead82613e7f565b9150819050919050565b7f5345350000000000000000000000000000000000000000000000000000000000600082015250565b6000613eed6003836136d5565b9150613ef882613eb7565b602082019050919050565b60006020820190508181036000830152613f1c81613ee0565b9050919050565b7f4f4f350000000000000000000000000000000000000000000000000000000000600082015250565b6000613f596003836136d5565b9150613f6482613f23565b602082019050919050565b60006020820190508181036000830152613f8881613f4c565b9050919050565b7f4145310000000000000000000000000000000000000000000000000000000000600082015250565b6000613fc56003836136d5565b9150613fd082613f8f565b602082019050919050565b60006020820190508181036000830152613ff481613fb8565b9050919050565b7f4145320000000000000000000000000000000000000000000000000000000000600082015250565b60006140316003836136d5565b915061403c82613ffb565b602082019050919050565b6000602082019050818103600083015261406081614024565b9050919050565b600061407282613227565b915060ff82141561408657614085613752565b5b600182019050919050565b7f4e58320000000000000000000000000000000000000000000000000000000000600082015250565b60006140c76003836136d5565b91506140d282614091565b602082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b600061410882613227565b9150600082141561411c5761411b613752565b5b600182039050919050565b7f4e45350000000000000000000000000000000000000000000000000000000000600082015250565b600061415d6003836136d5565b915061416882614127565b602082019050919050565b6000602082019050818103600083015261418c81614150565b905091905056fea264697066735822122095fffb4290e6ea681eae660cd58b76e3b7def6848fde8766220a13252625696f64736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000500000000000000000000000095254b0f9efc20295ae423373cd105ee8b5a717f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000bb5708c4f71439db00027f85d87f0232acdeefa0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000734724b6baaf3c407298d24d98ece1e0fa077ffd0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dfe2efa72e86397728c885d91a8786aa9fde7a2400000000000000000000000000000000000000000000000000000000000000010000000000000000000000004e2d208c5f7db881ee871f5df4a23dfdb0e77b580000000000000000000000000000000000000000000000000000000000000001
Deployed Bytecode
0x60806040526004361061012e5760003560e01c806397fc84c6116100ab578063cd700f6c1161006f578063cd700f6c14610466578063ddb9fde1146104a3578063e597c510146104e0578063f14cf2b11461050b578063f27a2e4d14610527578063fe0d94c11461055257610183565b806397fc84c61461035d5780639ee679e81461039a578063a48d938d146103c3578063b759f95414610400578063c5a66c1c1461042957610183565b80632f54bf6e116100f25780632f54bf6e1461025e57806333e6e13d1461029b57806340e58ee5146102c65780634c83f9e4146102ef57806381d12c581461031a57610183565b806307dac117146101885780630d15fd77146101b157806318e43345146101dc57806320c5429b146101f857806323d29b731461022157610183565b36610183573373ffffffffffffffffffffffffffffffffffffffff167f1e57e3bb474320be3d2c77138f75b7c3941292d647f5f9634e33a8e94e0e069b346040516101799190612f63565b60405180910390a2005b600080fd5b34801561019457600080fd5b506101af60048036038101906101aa9190612fd1565b61057b565b005b3480156101bd57600080fd5b506101c661094d565b6040516101d39190612f63565b60405180910390f35b6101f660048036038101906101f191906130e7565b6109f8565b005b34801561020457600080fd5b5061021f600480360381019061021a91906131a8565b610aaf565b005b34801561022d57600080fd5b50610248600480360381019061024391906131fa565b610de8565b6040516102559190613243565b60405180910390f35b34801561026a57600080fd5b506102856004803603810190610280919061325e565b610e08565b60405161029291906132a6565b60405180910390f35b3480156102a757600080fd5b506102b0610e75565b6040516102bd9190612f63565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906131a8565b610eb9565b005b3480156102fb57600080fd5b5061030461115a565b6040516103119190612f63565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c91906131a8565b61117e565b60405161035497969594939291906133cd565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f919061343e565b611340565b60405161039191906132a6565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc91906131a8565b6113b9565b005b3480156103cf57600080fd5b506103ea60048036038101906103e5919061325e565b6115d6565b6040516103f7919061348d565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906131a8565b6115f6565b005b34801561043557600080fd5b50610450600480360381019061044b91906134d4565b611939565b60405161045d91906135f9565b60405180910390f35b34801561047257600080fd5b5061048d6004803603810190610488919061361b565b611b98565b60405161049a91906135f9565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613682565b611e2d565b6040516104d791906135f9565b60405180910390f35b3480156104ec57600080fd5b506104f5611fc7565b6040516105029190612f63565b60405180910390f35b6105256004803603810190610520919061325e565b611fe0565b005b34801561053357600080fd5b5061053c612074565b6040516105499190613243565b60405180910390f35b34801561055e57600080fd5b50610579600480360381019061057491906131a8565b612098565b005b3361058581610e08565b6105c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bb90613732565b60405180910390fd5b60003390506000806001816001815401808255809150500390600052602060002090600702019050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550858160000160146101000a81548160ff02191690836004811115610656576106556132d0565b5b02179055506040518060400160405280866000016020810190610679919061325e565b73ffffffffffffffffffffffffffffffffffffffff1681526020018660200160208101906106a791906131fa565b60028111156106b9576106b86132d0565b5b8152508160010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690836002811115610732576107316132d0565b5b02179055509050506040518060400160405280856000016020810190610758919061325e565b73ffffffffffffffffffffffffffffffffffffffff16815260200185602001602081019061078691906131fa565b6002811115610798576107976132d0565b5b8152508160020160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690836002811115610811576108106132d0565b5b021790555090505060018160040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660028111156108d2576108d16132d0565b5b60ff1681600501819055508560048111156108f0576108ef6132d0565b5b60016000805490506109029190613781565b3373ffffffffffffffffffffffffffffffffffffffff167fe385fdb04af0282a704a6c5d5ec8414a7b883dfcc11a5fa082db2ae46125398160405160405180910390a4505050505050565b600060016000600280811115610966576109656132d0565b5b6002811115610978576109776132d0565b5b815260200190815260200160002060009054906101000a900460ff1660026109a091906137b5565b60016000600160028111156109b8576109b76132d0565b5b60028111156109ca576109c96132d0565b5b815260200190815260200160002060009054906101000a900460ff166109f091906137f0565b60ff16905090565b60003411610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290613873565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c69ba65ac630960f1d90c9a12eb143096fa71019450181b7fb5c299f03a63578686868634604051610aa09594939291906138e0565b60405180910390a35050505050565b33610ab981610e08565b610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90613732565b60405180910390fd5b816000805490508110610b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3790613975565b60405180910390fd5b8260008181548110610b5557610b54613995565b5b906000526020600020906007020160060160009054906101000a900460ff1615610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab90613a10565b60405180910390fd5b600480811115610bc757610bc66132d0565b5b60008281548110610bdb57610bda613995565b5b906000526020600020906007020160000160149054906101000a900460ff166004811115610c0c57610c0b6132d0565b5b1415610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490613a7c565b60405180910390fd5b3384610c598282611340565b610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90613ae8565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000808881548110610cfe57610cfd613995565b5b906000526020600020906007020190508060040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055816002811115610d7257610d716132d0565b5b60ff16816005016000828254610d889190613781565b92505081905550873373ffffffffffffffffffffffffffffffffffffffff167f8ed50e04800878b4f45dbcced5ce55bfbde633af37ddd2a2f837479dd7f5ca3584604051610dd6919061348d565b60405180910390a35050505050505050565b60016020528060005260406000206000915054906101000a900460ff1681565b600080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115610e6a57610e696132d0565b5b60ff16119050919050565b6000610eb47f0000000000000000000000000000000000000000000000000000000000000037610ea361094d565b610ead9190613b08565b606461274d565b905090565b806000805490508110610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890613975565b60405180910390fd5b8160008181548110610f1657610f15613995565b5b906000526020600020906007020160060160009054906101000a900460ff1615610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c90613a10565b60405180910390fd5b600480811115610f8857610f876132d0565b5b60008281548110610f9c57610f9b613995565b5b906000526020600020906007020160000160149054906101000a900460ff166004811115610fcd57610fcc6132d0565b5b141561100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590613a7c565b60405180910390fd5b823373ffffffffffffffffffffffffffffffffffffffff166000828154811061103a57611039613995565b5b906000526020600020906007020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b990613bae565b60405180910390fd5b6004600085815481106110d8576110d7613995565b5b906000526020600020906007020160000160146101000a81548160ff0219169083600481111561110b5761110a6132d0565b5b0217905550833373ffffffffffffffffffffffffffffffffffffffff167ff3a6ef5718c05d9183af076f5753197b68b04552a763c34796637d6134bdd0f260405160405180910390a350505050565b7f000000000000000000000000000000000000000000000000000000000000003781565b6000818154811061118e57600080fd5b90600052602060002090600702016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff1690806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff166002811115611265576112646132d0565b5b6002811115611277576112766132d0565b5b8152505090806002016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff166002811115611306576113056132d0565b5b6002811115611318576113176132d0565b5b81525050908060030154908060050154908060060160009054906101000a900460ff16905087565b600080828154811061135557611354613995565b5b906000526020600020906007020160040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b336113c381610e08565b611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f990613732565b60405180910390fd5b60003390506000806001816001815401808255809150500390600052602060002090600702019050838160030181905550818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008160000160146101000a81548160ff0219169083600481111561149e5761149d6132d0565b5b021790555060018160040160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600281111561155c5761155b6132d0565b5b60ff1681600501819055506000600481111561157b5761157a6132d0565b5b600160008054905061158d9190613781565b3373ffffffffffffffffffffffffffffffffffffffff167fe385fdb04af0282a704a6c5d5ec8414a7b883dfcc11a5fa082db2ae46125398160405160405180910390a450505050565b60026020528060005260406000206000915054906101000a900460ff1681565b3361160081610e08565b61163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690613732565b60405180910390fd5b816000805490508110611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e90613975565b60405180910390fd5b826000818154811061169c5761169b613995565b5b906000526020600020906007020160060160009054906101000a900460ff16156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613a10565b60405180910390fd5b60048081111561170e5761170d6132d0565b5b6000828154811061172257611721613995565b5b906000526020600020906007020160000160149054906101000a900460ff166004811115611753576117526132d0565b5b1415611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90613a7c565b60405180910390fd5b33846117a08282611340565b156117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790613c1a565b60405180910390fd5b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600080888154811061184657611845613995565b5b9060005260206000209060070201905060018160040160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508160028111156118c3576118c26132d0565b5b60ff168160050160008282546118d99190613c3a565b92505081905550873373ffffffffffffffffffffffffffffffffffffffff167fb70d97bfb81912068fbb0d3ef0e849a0b5b5e822ddc9cd0d56e52b6b09ab11a784604051611927919061348d565b60405180910390a35050505050505050565b60606000808054905067ffffffffffffffff81111561195b5761195a613c90565b5b6040519080825280602002602001820160405280156119895781602001602082028036833780820191505090505b509050600080611997611fc7565b905060006119a5878361278c565b90505b6119c986886119b79190613c3a565b6001846119c49190613c3a565b61278c565b811015611b80578715611aa3578860048111156119e9576119e86132d0565b5b600082815481106119fd576119fc613995565b5b906000526020600020906007020160000160149054906101000a900460ff166004811115611a2e57611a2d6132d0565b5b148015611a6a575060008181548110611a4a57611a49613995565b5b906000526020600020906007020160060160009054906101000a900460ff165b15611a9e5780848481518110611a8357611a82613995565b5b6020026020010181815250508280611a9a90613cbf565b9350505b611b6d565b886004811115611ab657611ab56132d0565b5b60008281548110611aca57611ac9613995565b5b906000526020600020906007020160000160149054906101000a900460ff166004811115611afb57611afa6132d0565b5b148015611b38575060008181548110611b1757611b16613995565b5b906000526020600020906007020160060160009054906101000a900460ff16155b15611b6c5780848481518110611b5157611b50613995565b5b6020026020010181815250508280611b6890613cbf565b9350505b5b8080611b7890613cbf565b9150506119a8565b50611b8b83836127a5565b9350505050949350505050565b60606000808054905067ffffffffffffffff811115611bba57611bb9613c90565b5b604051908082528060200260200182016040528015611be85781602001602082028036833780820191505090505b509050600080611bf6611fc7565b90506000611c04878361278c565b90505b611c288688611c169190613c3a565b600184611c239190613c3a565b61278c565b811015611e15578715611d1d578873ffffffffffffffffffffffffffffffffffffffff1660008281548110611c6057611c5f613995565b5b906000526020600020906007020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611ce4575060008181548110611cc457611cc3613995565b5b906000526020600020906007020160060160009054906101000a900460ff165b15611d185780848481518110611cfd57611cfc613995565b5b6020026020010181815250508280611d1490613cbf565b9350505b611e02565b8873ffffffffffffffffffffffffffffffffffffffff1660008281548110611d4857611d47613995565b5b906000526020600020906007020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611dcd575060008181548110611dac57611dab613995565b5b906000526020600020906007020160060160009054906101000a900460ff16155b15611e015780848481518110611de657611de5613995565b5b6020026020010181815250508280611dfd90613cbf565b9350505b5b8080611e0d90613cbf565b915050611c07565b50611e2083836127a5565b9350505050949350505050565b60606000808054905067ffffffffffffffff811115611e4f57611e4e613c90565b5b604051908082528060200260200182016040528015611e7d5781602001602082028036833780820191505090505b509050600080611e8b611fc7565b90506000611e99878361278c565b90505b611ebd8688611eab9190613c3a565b600184611eb89190613c3a565b61278c565b811015611fb0578715611f365760008181548110611ede57611edd613995565b5b906000526020600020906007020160060160009054906101000a900460ff1615611f315780848481518110611f1657611f15613995565b5b6020026020010181815250508280611f2d90613cbf565b9350505b611f9d565b60008181548110611f4a57611f49613995565b5b906000526020600020906007020160060160009054906101000a900460ff16611f9c5780848481518110611f8157611f80613995565b5b6020026020010181815250508280611f9890613cbf565b9350505b5b8080611fa890613cbf565b915050611e9c565b50611fbb83836127a5565b93505050509392505050565b60006001600080549050611fdb9190613781565b905090565b60003411612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201a90613873565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff167fa9bf9e71178d4c9a31c71731d67f63b087430417881b55bda1db42bc22f700ee346040516120699190612f63565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000381565b8060008054905081106120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d790613975565b60405180910390fd5b81600081815481106120f5576120f4613995565b5b906000526020600020906007020160060160009054906101000a900460ff1615612154576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214b90613a10565b60405180910390fd5b600480811115612167576121666132d0565b5b6000828154811061217b5761217a613995565b5b906000526020600020906007020160000160149054906101000a900460ff1660048111156121ac576121ab6132d0565b5b14156121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490613a7c565b60405180910390fd5b823373ffffffffffffffffffffffffffffffffffffffff166000828154811061221957612218613995565b5b906000526020600020906007020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890613bae565b60405180910390fd5b836122aa610e75565b600082815481106122be576122bd613995565b5b9060005260206000209060070201600501541015612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890613d54565b60405180910390fd5b600080868154811061232657612325613995565b5b9060005260206000209060070201905060008160000160149054906101000a900460ff16600481111561235c5761235b6132d0565b5b905060018260060160006101000a81548160ff0219169083151502179055506000600481111561238f5761238e6132d0565b5b60ff168160ff1614156123d3576123ce82600301548360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612857565b6126dc565b600160048111156123e7576123e66132d0565b5b60ff168160ff1614156124a15761249c826002016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff166002811115612481576124806132d0565b5b6002811115612493576124926132d0565b5b8152505061294b565b6126db565b600260048111156124b5576124b46132d0565b5b60ff168160ff16141561256f5761256a826001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff16600281111561254f5761254e6132d0565b5b6002811115612561576125606132d0565b5b81525050612b3f565b6126da565b60036004811115612583576125826132d0565b5b60ff168160ff1614156126d9576126d8826001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff16600281111561261d5761261c6132d0565b5b600281111561262f5761262e6132d0565b5b81525050836002016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff1660028111156126bd576126bc6132d0565b5b60028111156126cf576126ce6132d0565b5b81525050612ce7565b5b5b5b5b8160000160149054906101000a900460ff166004811115612700576126ff6132d0565b5b873373ffffffffffffffffffffffffffffffffffffffff167f5732b45b4bf13341d749e465ed724d2b147b95fee2e3578c2d62865a8d417bf760405160405180910390a450505050505050565b600080828461275c9190613da3565b1461276857600161276b565b60005b60ff16828461277a9190613dd4565b6127849190613c3a565b905092915050565b600081831061279b578161279d565b825b905092915050565b606060008267ffffffffffffffff8111156127c3576127c2613c90565b5b6040519080825280602002602001820160405280156127f15781602001602082028036833780820191505090505b50905060005b8381101561284c5784818151811061281257612811613995565b5b602002602001015182828151811061282d5761282c613995565b5b602002602001018181525050808061284490613cbf565b9150506127f7565b508091505092915050565b4782111561289a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289190613e51565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff16836040516128c090613ea2565b60006040518083038185875af1925050503d80600081146128fd576040519150601f19603f3d011682016040523d82523d6000602084013e612902565b606091505b5050905080612946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293d90613f03565b60405180910390fd5b505050565b806000015161295981610e08565b15612999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299090613f6f565b60405180910390fd5b8160000151600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0590613fdb565b60405180910390fd5b6000813b905060008114612a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4e90614047565b60405180910390fd5b6000846020015190508060026000876000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836002811115612ac657612ac56132d0565b5b021790555060016000826002811115612ae257612ae16132d0565b5b6002811115612af457612af36132d0565b5b8152602001908152602001600020600081819054906101000a900460ff1680929190612b1f90614067565b91906101000a81548160ff021916908360ff160217905550505050505050565b80600081600001519050612b5281610e08565b8015612bd7575081602001516002811115612b7057612b6f6132d0565b5b60ff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166002811115612bd257612bd16132d0565b5b60ff16145b612c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0d906140dd565b60405180910390fd5b6001600084602001516002811115612c3157612c306132d0565b5b6002811115612c4357612c426132d0565b5b8152602001908152602001600020600081819054906101000a900460ff1680929190612c6e906140fd565b91906101000a81548160ff021916908360ff16021790555050612c8f612edb565b60026000846000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055505050565b60008260200151905060008260200151905060016000836002811115612d1057612d0f6132d0565b5b6002811115612d2257612d216132d0565b5b8152602001908152602001600020600081819054906101000a900460ff1680929190612d4d906140fd565b91906101000a81548160ff021916908360ff1602179055505060016000826002811115612d7d57612d7c6132d0565b5b6002811115612d8f57612d8e6132d0565b5b8152602001908152602001600020600081819054906101000a900460ff1680929190612dba90614067565b91906101000a81548160ff021916908360ff16021790555050612ddb612edb565b826000015173ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614612e6a5760026000856000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b8060026000856000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836002811115612ed057612ecf6132d0565b5b021790555050505050565b7f000000000000000000000000000000000000000000000000000000000000000360ff16612f07610e75565b1015612f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3f90614173565b60405180910390fd5b565b6000819050919050565b612f5d81612f4a565b82525050565b6000602082019050612f786000830184612f54565b92915050565b600080fd5b600080fd5b60058110612f9557600080fd5b50565b600081359050612fa781612f88565b92915050565b600080fd5b600060408284031215612fc857612fc7612fad565b5b81905092915050565b600080600060a08486031215612fea57612fe9612f7e565b5b6000612ff886828701612f98565b935050602061300986828701612fb2565b925050606061301a86828701612fb2565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061304f82613024565b9050919050565b61305f81613044565b811461306a57600080fd5b50565b60008135905061307c81613056565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130a7576130a6613082565b5b8235905067ffffffffffffffff8111156130c4576130c3613087565b5b6020830191508360018202830111156130e0576130df61308c565b5b9250929050565b60008060008060006060868803121561310357613102612f7e565b5b60006131118882890161306d565b955050602086013567ffffffffffffffff81111561313257613131612f83565b5b61313e88828901613091565b9450945050604086013567ffffffffffffffff81111561316157613160612f83565b5b61316d88828901613091565b92509250509295509295909350565b61318581612f4a565b811461319057600080fd5b50565b6000813590506131a28161317c565b92915050565b6000602082840312156131be576131bd612f7e565b5b60006131cc84828501613193565b91505092915050565b600381106131e257600080fd5b50565b6000813590506131f4816131d5565b92915050565b6000602082840312156132105761320f612f7e565b5b600061321e848285016131e5565b91505092915050565b600060ff82169050919050565b61323d81613227565b82525050565b60006020820190506132586000830184613234565b92915050565b60006020828403121561327457613273612f7e565b5b60006132828482850161306d565b91505092915050565b60008115159050919050565b6132a08161328b565b82525050565b60006020820190506132bb6000830184613297565b92915050565b6132ca81613044565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581106133105761330f6132d0565b5b50565b6000819050613321826132ff565b919050565b600061333182613313565b9050919050565b61334181613326565b82525050565b61335081613044565b82525050565b60038110613367576133666132d0565b5b50565b600081905061337882613356565b919050565b60006133888261336a565b9050919050565b6133988161337d565b82525050565b6040820160008201516133b46000850182613347565b5060208201516133c7602085018261338f565b50505050565b6000610120820190506133e3600083018a6132c1565b6133f06020830189613338565b6133fd604083018861339e565b61340a608083018761339e565b61341760c0830186612f54565b61342460e0830185612f54565b613432610100830184613297565b98975050505050505050565b6000806040838503121561345557613454612f7e565b5b60006134638582860161306d565b925050602061347485828601613193565b9150509250929050565b6134878161337d565b82525050565b60006020820190506134a2600083018461347e565b92915050565b6134b18161328b565b81146134bc57600080fd5b50565b6000813590506134ce816134a8565b92915050565b600080600080608085870312156134ee576134ed612f7e565b5b60006134fc87828801612f98565b945050602061350d878288016134bf565b935050604061351e87828801613193565b925050606061352f87828801613193565b91505092959194509250565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61357081612f4a565b82525050565b60006135828383613567565b60208301905092915050565b6000602082019050919050565b60006135a68261353b565b6135b08185613546565b93506135bb83613557565b8060005b838110156135ec5781516135d38882613576565b97506135de8361358e565b9250506001810190506135bf565b5085935050505092915050565b60006020820190508181036000830152613613818461359b565b905092915050565b6000806000806080858703121561363557613634612f7e565b5b60006136438782880161306d565b9450506020613654878288016134bf565b935050604061366587828801613193565b925050606061367687828801613193565b91505092959194509250565b60008060006060848603121561369b5761369a612f7e565b5b60006136a9868287016134bf565b93505060206136ba86828701613193565b92505060406136cb86828701613193565b9150509250925092565b600082825260208201905092915050565b7f4f4f340000000000000000000000000000000000000000000000000000000000600082015250565b600061371c6003836136d5565b9150613727826136e6565b602082019050919050565b6000602082019050818103600083015261374b8161370f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061378c82612f4a565b915061379783612f4a565b9250828210156137aa576137a9613752565b5b828203905092915050565b60006137c082613227565b91506137cb83613227565b92508160ff04831182151516156137e5576137e4613752565b5b828202905092915050565b60006137fb82613227565b915061380683613227565b92508260ff0382111561381c5761381b613752565b5b828201905092915050565b7f4e45330000000000000000000000000000000000000000000000000000000000600082015250565b600061385d6003836136d5565b915061386882613827565b602082019050919050565b6000602082019050818103600083015261388c81613850565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b60006138bf83856136d5565b93506138cc838584613893565b6138d5836138a2565b840190509392505050565b600060608201905081810360008301526138fb8187896138b3565b905081810360208301526139108185876138b3565b905061391f6040830184612f54565b9695505050505050565b7f4e58330000000000000000000000000000000000000000000000000000000000600082015250565b600061395f6003836136d5565b915061396a82613929565b602082019050919050565b6000602082019050818103600083015261398e81613952565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5345310000000000000000000000000000000000000000000000000000000000600082015250565b60006139fa6003836136d5565b9150613a05826139c4565b602082019050919050565b60006020820190508181036000830152613a29816139ed565b9050919050565b7f5345320000000000000000000000000000000000000000000000000000000000600082015250565b6000613a666003836136d5565b9150613a7182613a30565b602082019050919050565b60006020820190508181036000830152613a9581613a59565b9050919050565b7f5345340000000000000000000000000000000000000000000000000000000000600082015250565b6000613ad26003836136d5565b9150613add82613a9c565b602082019050919050565b60006020820190508181036000830152613b0181613ac5565b9050919050565b6000613b1382612f4a565b9150613b1e83612f4a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b5757613b56613752565b5b828202905092915050565b7f4f4f360000000000000000000000000000000000000000000000000000000000600082015250565b6000613b986003836136d5565b9150613ba382613b62565b602082019050919050565b60006020820190508181036000830152613bc781613b8b565b9050919050565b7f5345330000000000000000000000000000000000000000000000000000000000600082015250565b6000613c046003836136d5565b9150613c0f82613bce565b602082019050919050565b60006020820190508181036000830152613c3381613bf7565b9050919050565b6000613c4582612f4a565b9150613c5083612f4a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c8557613c84613752565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000613cca82612f4a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cfd57613cfc613752565b5b600182019050919050565b7f4e45320000000000000000000000000000000000000000000000000000000000600082015250565b6000613d3e6003836136d5565b9150613d4982613d08565b602082019050919050565b60006020820190508181036000830152613d6d81613d31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613dae82612f4a565b9150613db983612f4a565b925082613dc957613dc8613d74565b5b828206905092915050565b6000613ddf82612f4a565b9150613dea83612f4a565b925082613dfa57613df9613d74565b5b828204905092915050565b7f4e45340000000000000000000000000000000000000000000000000000000000600082015250565b6000613e3b6003836136d5565b9150613e4682613e05565b602082019050919050565b60006020820190508181036000830152613e6a81613e2e565b9050919050565b600081905092915050565b50565b6000613e8c600083613e71565b9150613e9782613e7c565b600082019050919050565b6000613ead82613e7f565b9150819050919050565b7f5345350000000000000000000000000000000000000000000000000000000000600082015250565b6000613eed6003836136d5565b9150613ef882613eb7565b602082019050919050565b60006020820190508181036000830152613f1c81613ee0565b9050919050565b7f4f4f350000000000000000000000000000000000000000000000000000000000600082015250565b6000613f596003836136d5565b9150613f6482613f23565b602082019050919050565b60006020820190508181036000830152613f8881613f4c565b9050919050565b7f4145310000000000000000000000000000000000000000000000000000000000600082015250565b6000613fc56003836136d5565b9150613fd082613f8f565b602082019050919050565b60006020820190508181036000830152613ff481613fb8565b9050919050565b7f4145320000000000000000000000000000000000000000000000000000000000600082015250565b60006140316003836136d5565b915061403c82613ffb565b602082019050919050565b6000602082019050818103600083015261406081614024565b9050919050565b600061407282613227565b915060ff82141561408657614085613752565b5b600182019050919050565b7f4e58320000000000000000000000000000000000000000000000000000000000600082015250565b60006140c76003836136d5565b91506140d282614091565b602082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b600061410882613227565b9150600082141561411c5761411b613752565b5b600182039050919050565b7f4e45350000000000000000000000000000000000000000000000000000000000600082015250565b600061415d6003836136d5565b915061416882614127565b602082019050919050565b6000602082019050818103600083015261418c81614150565b905091905056fea264697066735822122095fffb4290e6ea681eae660cd58b76e3b7def6848fde8766220a13252625696f64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000003700000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000500000000000000000000000095254b0f9efc20295ae423373cd105ee8b5a717f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000bb5708c4f71439db00027f85d87f0232acdeefa0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000734724b6baaf3c407298d24d98ece1e0fa077ffd0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dfe2efa72e86397728c885d91a8786aa9fde7a2400000000000000000000000000000000000000000000000000000000000000010000000000000000000000004e2d208c5f7db881ee871f5df4a23dfdb0e77b580000000000000000000000000000000000000000000000000000000000000001
-----Decoded View---------------
Arg [0] : _consensusRatio (uint256): 55
Arg [1] : _minLimitForConsensus (uint8): 3
Arg [2] : _initialOwnerAccounts (tuple[]): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000037
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 00000000000000000000000095254b0f9efc20295ae423373cd105ee8b5a717f
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 0000000000000000000000000bb5708c4f71439db00027f85d87f0232acdeefa
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [8] : 000000000000000000000000734724b6baaf3c407298d24d98ece1e0fa077ffd
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [10] : 000000000000000000000000dfe2efa72e86397728c885d91a8786aa9fde7a24
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [12] : 0000000000000000000000004e2d208c5f7db881ee871f5df4a23dfdb0e77b58
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000001
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,317.02 | 0.4651 | $1,542.58 |
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.