Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
DAOAgendaManager
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; pragma abicoder v2; import { SafeMath } from "SafeMath.sol"; import { IERC20 } from "IERC20.sol"; import { IDAOAgendaManager } from "IDAOAgendaManager.sol"; import { IDAOCommittee } from "IDAOCommittee.sol"; import { ICandidate } from "ICandidate.sol"; import { LibAgenda } from "LibAgenda.sol"; import "Ownable.sol"; contract DAOAgendaManager is Ownable, IDAOAgendaManager { using SafeMath for uint256; using LibAgenda for *; enum VoteChoice { ABSTAIN, YES, NO, MAX } IDAOCommittee public override committee; uint256 public override createAgendaFees; uint256 public override minimumNoticePeriodSeconds; uint256 public override minimumVotingPeriodSeconds; uint256 public override executingPeriodSeconds; LibAgenda.Agenda[] internal _agendas; mapping(uint256 => mapping(address => LibAgenda.Voter)) internal _voterInfos; mapping(uint256 => LibAgenda.AgendaExecutionInfo) internal _executionInfos; event AgendaStatusChanged( uint256 indexed agendaID, uint256 prevStatus, uint256 newStatus ); event AgendaResultChanged( uint256 indexed agendaID, uint256 result ); event CreatingAgendaFeeChanged( uint256 newFee ); event MinimumNoticePeriodChanged( uint256 newPeriod ); event MinimumVotingPeriodChanged( uint256 newPeriod ); event ExecutingPeriodChanged( uint256 newPeriod ); modifier validAgenda(uint256 _agendaID) { require(_agendaID < _agendas.length, "DAOAgendaManager: invalid agenda id"); _; } constructor() { minimumNoticePeriodSeconds = 16 days; minimumVotingPeriodSeconds = 2 days; executingPeriodSeconds = 7 days; createAgendaFees = 100000000000000000000; // 100 TON } function getStatus(uint256 _status) public pure override returns (LibAgenda.AgendaStatus emnustatus) { require(_status < 6, "DAOAgendaManager: invalid status value"); if (_status == uint256(LibAgenda.AgendaStatus.NOTICE)) return LibAgenda.AgendaStatus.NOTICE; else if (_status == uint256(LibAgenda.AgendaStatus.VOTING)) return LibAgenda.AgendaStatus.VOTING; else if (_status == uint256(LibAgenda.AgendaStatus.EXECUTED)) return LibAgenda.AgendaStatus.EXECUTED; else if (_status == uint256(LibAgenda.AgendaStatus.ENDED)) return LibAgenda.AgendaStatus.ENDED; else return LibAgenda.AgendaStatus.NONE; } /// @notice Set DAOCommitteeProxy contract address /// @param _committee New DAOCommitteeProxy contract address function setCommittee(address _committee) external override onlyOwner { require(_committee != address(0), "DAOAgendaManager: address is zero"); committee = IDAOCommittee(_committee); } /// @notice Set the fee(TON) of creating an agenda /// @param _createAgendaFees New fee(TON) function setCreateAgendaFees(uint256 _createAgendaFees) external override onlyOwner { createAgendaFees = _createAgendaFees; emit CreatingAgendaFeeChanged(_createAgendaFees); } /// @notice Set the minimum notice period in seconds /// @param _minimumNoticePeriodSeconds New minimum notice period in seconds function setMinimumNoticePeriodSeconds(uint256 _minimumNoticePeriodSeconds) external override onlyOwner { minimumNoticePeriodSeconds = _minimumNoticePeriodSeconds; emit MinimumNoticePeriodChanged(_minimumNoticePeriodSeconds); } /// @notice Set the executing period in seconds /// @param _executingPeriodSeconds New executing period in seconds function setExecutingPeriodSeconds(uint256 _executingPeriodSeconds) external override onlyOwner { executingPeriodSeconds = _executingPeriodSeconds; emit ExecutingPeriodChanged(_executingPeriodSeconds); } /// @notice Set the minimum voting period in seconds /// @param _minimumVotingPeriodSeconds New minimum voting period in seconds function setMinimumVotingPeriodSeconds(uint256 _minimumVotingPeriodSeconds) external override onlyOwner { minimumVotingPeriodSeconds = _minimumVotingPeriodSeconds; emit MinimumVotingPeriodChanged(_minimumVotingPeriodSeconds); } /// @notice Creates an agenda /// @param _targets Target addresses for executions of the agenda /// @param _noticePeriodSeconds Notice period in seconds /// @param _votingPeriodSeconds Voting period in seconds /// @param _functionBytecodes RLP-Encoded parameters for executions of the agenda /// @return agendaID Created agenda ID function newAgenda( address[] calldata _targets, uint256 _noticePeriodSeconds, uint256 _votingPeriodSeconds, bool _atomicExecute, bytes[] calldata _functionBytecodes ) external override onlyOwner returns (uint256 agendaID) { require( _noticePeriodSeconds >= minimumNoticePeriodSeconds, "DAOAgendaManager: minimumNoticePeriod is short" ); agendaID = _agendas.length; address[] memory emptyArray; _agendas.push(LibAgenda.Agenda({ status: LibAgenda.AgendaStatus.NOTICE, result: LibAgenda.AgendaResult.PENDING, executed: false, createdTimestamp: block.timestamp, noticeEndTimestamp: block.timestamp + _noticePeriodSeconds, votingPeriodInSeconds: _votingPeriodSeconds, votingStartedTimestamp: 0, votingEndTimestamp: 0, executableLimitTimestamp: 0, executedTimestamp: 0, countingYes: 0, countingNo: 0, countingAbstain: 0, voters: emptyArray })); LibAgenda.AgendaExecutionInfo storage executionInfo = _executionInfos[agendaID]; executionInfo.atomicExecute = _atomicExecute; executionInfo.executeStartFrom = 0; for (uint256 i = 0; i < _targets.length; i++) { executionInfo.targets.push(_targets[i]); executionInfo.functionBytecodes.push(_functionBytecodes[i]); } } /// @notice Casts vote for an agenda /// @param _agendaID Agenda ID /// @param _voter Voter /// @param _vote Voting type /// @return Whether or not the execution succeeded function castVote( uint256 _agendaID, address _voter, uint256 _vote ) external override onlyOwner validAgenda(_agendaID) returns (bool) { require(_vote < uint256(VoteChoice.MAX), "DAOAgendaManager: invalid vote"); require( isVotableStatus(_agendaID), "DAOAgendaManager: invalid status" ); LibAgenda.Agenda storage agenda = _agendas[_agendaID]; if (agenda.status == LibAgenda.AgendaStatus.NOTICE) { _startVoting(_agendaID); } require(isVoter(_agendaID, _voter), "DAOAgendaManager: not a voter"); require(!hasVoted(_agendaID, _voter), "DAOAgendaManager: already voted"); require( block.timestamp <= agenda.votingEndTimestamp, "DAOAgendaManager: for this agenda, the voting time expired" ); LibAgenda.Voter storage voter = _voterInfos[_agendaID][_voter]; voter.hasVoted = true; voter.vote = _vote; // counting 0:abstainVotes 1:yesVotes 2:noVotes if (_vote == uint256(VoteChoice.ABSTAIN)) agenda.countingAbstain = agenda.countingAbstain.add(1); else if (_vote == uint256(VoteChoice.YES)) agenda.countingYes = agenda.countingYes.add(1); else if (_vote == uint256(VoteChoice.NO)) agenda.countingNo = agenda.countingNo.add(1); else revert("DAOAgendaManager: invalid voting"); return true; } /// @notice Set the agenda status as executed /// @param _agendaID Agenda ID function setExecutedAgenda(uint256 _agendaID) external override onlyOwner validAgenda(_agendaID) { LibAgenda.Agenda storage agenda = _agendas[_agendaID]; agenda.executed = true; agenda.executedTimestamp = block.timestamp; uint256 prevStatus = uint256(agenda.status); agenda.status = LibAgenda.AgendaStatus.EXECUTED; emit AgendaStatusChanged(_agendaID, prevStatus, uint256(LibAgenda.AgendaStatus.EXECUTED)); } /// @notice Set the agenda result /// @param _agendaID Agenda ID /// @param _result New result function setResult(uint256 _agendaID, LibAgenda.AgendaResult _result) public override onlyOwner validAgenda(_agendaID) { LibAgenda.Agenda storage agenda = _agendas[_agendaID]; agenda.result = _result; emit AgendaResultChanged(_agendaID, uint256(_result)); } /// @notice Set the agenda status /// @param _agendaID Agenda ID /// @param _status New status function setStatus(uint256 _agendaID, LibAgenda.AgendaStatus _status) public override onlyOwner validAgenda(_agendaID) { LibAgenda.Agenda storage agenda = _agendas[_agendaID]; uint256 prevStatus = uint256(agenda.status); agenda.status = _status; emit AgendaStatusChanged(_agendaID, prevStatus, uint256(_status)); } /// @notice Set the agenda status as ended(denied or dismissed) /// @param _agendaID Agenda ID function endAgendaVoting(uint256 _agendaID) external override onlyOwner validAgenda(_agendaID) { LibAgenda.Agenda storage agenda = _agendas[_agendaID]; require( agenda.status == LibAgenda.AgendaStatus.VOTING, "DAOAgendaManager: agenda status is not changable" ); require( agenda.votingEndTimestamp <= block.timestamp, "DAOAgendaManager: voting is not ended yet" ); setStatus(_agendaID, LibAgenda.AgendaStatus.ENDED); setResult(_agendaID, LibAgenda.AgendaResult.DISMISS); } function _startVoting(uint256 _agendaID) internal validAgenda(_agendaID) { LibAgenda.Agenda storage agenda = _agendas[_agendaID]; agenda.votingStartedTimestamp = block.timestamp; agenda.votingEndTimestamp = block.timestamp.add(agenda.votingPeriodInSeconds); agenda.executableLimitTimestamp = agenda.votingEndTimestamp.add(executingPeriodSeconds); agenda.status = LibAgenda.AgendaStatus.VOTING; uint256 memberCount = committee.maxMember(); for (uint256 i = 0; i < memberCount; i++) { address voter = committee.members(i); agenda.voters.push(voter); _voterInfos[_agendaID][voter].isVoter = true; } emit AgendaStatusChanged(_agendaID, uint256(LibAgenda.AgendaStatus.NOTICE), uint256(LibAgenda.AgendaStatus.VOTING)); } function isVoter(uint256 _agendaID, address _candidate) public view override validAgenda(_agendaID) returns (bool) { require(_candidate != address(0), "DAOAgendaManager: user address is zero"); return _voterInfos[_agendaID][_candidate].isVoter; } function hasVoted(uint256 _agendaID, address _user) public view override validAgenda(_agendaID) returns (bool) { return _voterInfos[_agendaID][_user].hasVoted; } function getVoteStatus(uint256 _agendaID, address _user) external view override validAgenda(_agendaID) returns (bool, uint256) { LibAgenda.Voter storage voter = _voterInfos[_agendaID][_user]; return ( voter.hasVoted, voter.vote ); } function getAgendaNoticeEndTimeSeconds(uint256 _agendaID) external view override validAgenda(_agendaID) returns (uint256) { return _agendas[_agendaID].noticeEndTimestamp; } function getAgendaVotingStartTimeSeconds(uint256 _agendaID) external view override validAgenda(_agendaID) returns (uint256) { return _agendas[_agendaID].votingStartedTimestamp; } function getAgendaVotingEndTimeSeconds(uint256 _agendaID) external view override validAgenda(_agendaID) returns (uint256) { return _agendas[_agendaID].votingEndTimestamp; } function canExecuteAgenda(uint256 _agendaID) external view override validAgenda(_agendaID) returns (bool) { LibAgenda.Agenda storage agenda = _agendas[_agendaID]; return agenda.status == LibAgenda.AgendaStatus.WAITING_EXEC && block.timestamp <= agenda.executableLimitTimestamp && agenda.result == LibAgenda.AgendaResult.ACCEPT && agenda.votingEndTimestamp <= block.timestamp && agenda.executed == false; } function getAgendaStatus(uint256 _agendaID) external view override validAgenda(_agendaID) returns (uint256 status) { return uint256(_agendas[_agendaID].status); } function totalAgendas() external view override returns (uint256) { return _agendas.length; } function getAgendaResult(uint256 _agendaID) external view override validAgenda(_agendaID) returns (uint256 result, bool executed) { return (uint256(_agendas[_agendaID].result), _agendas[_agendaID].executed); } function getExecutionInfo(uint256 _agendaID) external view override validAgenda(_agendaID) returns( address[] memory target, bytes[] memory functionBytecode, bool atomicExecute, uint256 executeStartFrom ) { LibAgenda.AgendaExecutionInfo storage agenda = _executionInfos[_agendaID]; return ( agenda.targets, agenda.functionBytecodes, agenda.atomicExecute, agenda.executeStartFrom ); } function setExecutedCount(uint256 _agendaID, uint256 _count) external override { LibAgenda.AgendaExecutionInfo storage agenda = _executionInfos[_agendaID]; agenda.executeStartFrom = agenda.executeStartFrom.add(_count); } function isVotableStatus(uint256 _agendaID) public view override validAgenda(_agendaID) returns (bool) { LibAgenda.Agenda storage agenda = _agendas[_agendaID]; return block.timestamp <= agenda.votingEndTimestamp || (agenda.status == LibAgenda.AgendaStatus.NOTICE && agenda.noticeEndTimestamp <= block.timestamp); } function getVotingCount(uint256 _agendaID) external view override returns ( uint256 countingYes, uint256 countingNo, uint256 countingAbstain ) { LibAgenda.Agenda storage agenda = _agendas[_agendaID]; return ( agenda.countingYes, agenda.countingNo, agenda.countingAbstain ); } function getAgendaTimestamps(uint256 _agendaID) external view override validAgenda(_agendaID) returns ( uint256 createdTimestamp, uint256 noticeEndTimestamp, uint256 votingStartedTimestamp, uint256 votingEndTimestamp, uint256 executedTimestamp ) { LibAgenda.Agenda storage agenda = _agendas[_agendaID]; return ( agenda.createdTimestamp, agenda.noticeEndTimestamp, agenda.votingStartedTimestamp, agenda.votingEndTimestamp, agenda.executedTimestamp ); } function numAgendas() external view override returns (uint256) { return _agendas.length; } function getVoters(uint256 _agendaID) external view override validAgenda(_agendaID) returns (address[] memory) { return _agendas[_agendaID].voters; } function agendas(uint256 _index) external view override validAgenda(_index) returns (LibAgenda.Agenda memory) { return _agendas[_index]; } function voterInfos(uint256 _agendaID, address _voter) external view override validAgenda(_agendaID) returns (LibAgenda.Voter memory) { return _voterInfos[_agendaID][_voter]; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; pragma abicoder v2; import { IStorageStateCommittee } from "IStorageStateCommittee.sol"; interface IDAOCommittee is IStorageStateCommittee { //--owner function setSeigManager(address _seigManager) external; function setCandidatesSeigManager(address[] calldata _candidateContracts, address _seigManager) external; function setCandidatesCommittee(address[] calldata _candidateContracts, address _committee) external; function setLayer2Registry(address _layer2Registry) external; function setAgendaManager(address _agendaManager) external; function setCandidateFactory(address _candidateFactory) external; function setTon(address _ton) external; function setActivityRewardPerSecond(uint256 _value) external; function setDaoVault(address _daoVault) external; function increaseMaxMember(uint256 _newMaxMember, uint256 _quorum) external; function decreaseMaxMember(uint256 _reducingMemberIndex, uint256 _quorum) external; function createCandidate(string calldata _memo) external; function registerLayer2Candidate(address _layer2, string memory _memo) external; function registerLayer2CandidateByOwner(address _operator, address _layer2, string memory _memo) external; function changeMember(uint256 _memberIndex) external returns (bool); function retireMember() external returns (bool); function setMemoOnCandidate(address _candidate, string calldata _memo) external; function setMemoOnCandidateContract(address _candidate, string calldata _memo) external; function onApprove( address owner, address spender, uint256 tonAmount, bytes calldata data ) external returns (bool); function setQuorum(uint256 _quorum) external; function setCreateAgendaFees(uint256 _fees) external; function setMinimumNoticePeriodSeconds(uint256 _minimumNoticePeriod) external; function setMinimumVotingPeriodSeconds(uint256 _minimumVotingPeriod) external; function setExecutingPeriodSeconds(uint256 _executingPeriodSeconds) external; function castVote(uint256 _AgendaID, uint256 _vote, string calldata _comment) external; function endAgendaVoting(uint256 _agendaID) external; function executeAgenda(uint256 _AgendaID) external; function setAgendaStatus(uint256 _agendaID, uint256 _status, uint256 _result) external; function updateSeigniorage(address _candidate) external returns (bool); function updateSeigniorages(address[] calldata _candidates) external returns (bool); function claimActivityReward(address _receiver) external; function isCandidate(address _candidate) external view returns (bool); function totalSupplyOnCandidate(address _candidate) external view returns (uint256); function balanceOfOnCandidate(address _candidate, address _account) external view returns (uint256); function totalSupplyOnCandidateContract(address _candidateContract) external view returns (uint256); function balanceOfOnCandidateContract(address _candidateContract, address _account) external view returns (uint256); function candidatesLength() external view returns (uint256); function isExistCandidate(address _candidate) external view returns (bool); function getClaimableActivityReward(address _candidate) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; pragma abicoder v2; library LibAgenda { //using LibAgenda for Agenda; enum AgendaStatus { NONE, NOTICE, VOTING, WAITING_EXEC, EXECUTED, ENDED } enum AgendaResult { PENDING, ACCEPT, REJECT, DISMISS } //votor : based operator struct Voter { bool isVoter; bool hasVoted; uint256 vote; } // counting abstainVotes yesVotes noVotes struct Agenda { uint256 createdTimestamp; uint256 noticeEndTimestamp; uint256 votingPeriodInSeconds; uint256 votingStartedTimestamp; uint256 votingEndTimestamp; uint256 executableLimitTimestamp; uint256 executedTimestamp; uint256 countingYes; uint256 countingNo; uint256 countingAbstain; AgendaStatus status; AgendaResult result; address[] voters; bool executed; } struct AgendaExecutionInfo { address[] targets; bytes[] functionBytecodes; bool atomicExecute; uint256 executeStartFrom; } /*function getAgenda(Agenda[] storage agendas, uint256 index) public view returns (Agenda storage agenda) { return agendas[index]; }*/ }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; import { IDAOCommittee } from "IDAOCommittee.sol"; import { ISeigManager } from "ISeigManager.sol"; interface ICandidate { function setSeigManager(address _seigMan) external; function setCommittee(address _committee) external; function updateSeigniorage() external returns (bool); function changeMember(uint256 _memberIndex) external returns (bool); function retireMember() external returns (bool); function castVote(uint256 _agendaID, uint256 _vote, string calldata _comment) external; function isCandidateContract() external view returns (bool); function totalStaked() external view returns (uint256 totalsupply); function stakedOf(address _account) external view returns (uint256 amount); function setMemo(string calldata _memo) external; function claimActivityReward() external; // getter function candidate() external view returns (address); function isLayer2Candidate() external view returns (bool); function memo() external view returns (string memory); function committee() external view returns (IDAOCommittee); function seigManager() external view returns (ISeigManager); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; interface ISeigManager { function registry() external view returns (address); function depositManager() external view returns (address); function ton() external view returns (address); function wton() external view returns (address); function powerton() external view returns (address); function tot() external view returns (address); function coinages(address layer2) external view returns (address); function commissionRates(address layer2) external view returns (uint256); function lastCommitBlock(address layer2) external view returns (uint256); function seigPerBlock() external view returns (uint256); function lastSeigBlock() external view returns (uint256); function pausedBlock() external view returns (uint256); function unpausedBlock() external view returns (uint256); function DEFAULT_FACTOR() external view returns (uint256); function deployCoinage(address layer2) external returns (bool); function setCommissionRate(address layer2, uint256 commission, bool isCommissionRateNegative) external returns (bool); function uncomittedStakeOf(address layer2, address account) external view returns (uint256); function stakeOf(address layer2, address account) external view returns (uint256); function additionalTotBurnAmount(address layer2, address account, uint256 amount) external view returns (uint256 totAmount); function onTransfer(address sender, address recipient, uint256 amount) external returns (bool); function updateSeigniorage() external returns (bool); function onDeposit(address layer2, address account, uint256 amount) external returns (bool); function onWithdraw(address layer2, address account, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; pragma abicoder v2; import { ICandidateFactory } from "ICandidateFactory.sol"; import { ILayer2Registry } from "ILayer2Registry.sol"; import { ISeigManager } from "ISeigManager.sol"; import { IDAOAgendaManager } from "IDAOAgendaManager.sol"; import { IDAOVault } from "IDAOVault.sol"; interface IStorageStateCommittee { struct CandidateInfo { address candidateContract; uint256 indexMembers; uint128 memberJoinedTime; uint128 rewardPeriod; uint128 claimedTimestamp; } function ton() external returns (address); function daoVault() external returns (IDAOVault); function agendaManager() external returns (IDAOAgendaManager); function candidateFactory() external returns (ICandidateFactory); function layer2Registry() external returns (ILayer2Registry); function seigManager() external returns (ISeigManager); function candidates(uint256 _index) external returns (address); function members(uint256 _index) external returns (address); function maxMember() external returns (uint256); function candidateInfos(address _candidate) external returns (CandidateInfo memory); function quorum() external returns (uint256); function activityRewardPerSecond() external returns (uint256); function isMember(address _candidate) external returns (bool); function candidateContract(address _candidate) external returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; interface ICandidateFactory { function deploy( address _candidate, bool _isLayer2Candidate, string memory _name, address _committee, address _seigManager ) external returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; interface ILayer2Registry { function layer2s(address layer2) external view returns (bool); function register(address layer2) external returns (bool); function numLayer2s() external view returns (uint256); function layer2ByIndex(uint256 index) external view returns (address); function deployCoinage(address layer2, address seigManager) external returns (bool); function registerAndDeployCoinage(address layer2, address seigManager) external returns (bool); function unregister(address layer2) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; interface IDAOVault { function setTON(address _ton) external; function setWTON(address _wton) external; function approveTON(address _to, uint256 _amount) external; function approveWTON(address _to, uint256 _amount) external; function approveERC20(address _token, address _to, uint256 _amount) external; function claimTON(address _to, uint256 _amount) external; function claimWTON(address _to, uint256 _amount) external; function claimERC20(address _token, address _to, uint256 _amount) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.6; pragma abicoder v2; import { LibAgenda } from "LibAgenda.sol"; import { IDAOCommittee } from "IDAOCommittee.sol"; interface IDAOAgendaManager { struct Ratio { uint256 numerator; uint256 denominator; } function setCommittee(address _committee) external; function setCreateAgendaFees(uint256 _createAgendaFees) external; function setMinimumNoticePeriodSeconds(uint256 _minimumNoticePeriodSeconds) external; function setMinimumVotingPeriodSeconds(uint256 _minimumVotingPeriodSeconds) external; function setExecutingPeriodSeconds(uint256 _executingPeriodSeconds) external; function newAgenda( address[] memory _targets, uint256 _noticePeriodSeconds, uint256 _votingPeriodSeconds, bool _atomicExecute, bytes[] calldata _functionBytecodes ) external returns (uint256 agendaID); function castVote(uint256 _agendaID, address voter, uint256 _vote) external returns (bool); function setExecutedAgenda(uint256 _agendaID) external; function setResult(uint256 _agendaID, LibAgenda.AgendaResult _result) external; function setStatus(uint256 _agendaID, LibAgenda.AgendaStatus _status) external; function endAgendaVoting(uint256 _agendaID) external; function setExecutedCount(uint256 _agendaID, uint256 _count) external; // -- view functions function isVoter(uint256 _agendaID, address _user) external view returns (bool); function hasVoted(uint256 _agendaID, address _user) external view returns (bool); function getVoteStatus(uint256 _agendaID, address _user) external view returns (bool, uint256); function getAgendaNoticeEndTimeSeconds(uint256 _agendaID) external view returns (uint256); function getAgendaVotingStartTimeSeconds(uint256 _agendaID) external view returns (uint256); function getAgendaVotingEndTimeSeconds(uint256 _agendaID) external view returns (uint256) ; function canExecuteAgenda(uint256 _agendaID) external view returns (bool); function getAgendaStatus(uint256 _agendaID) external view returns (uint256 status); function totalAgendas() external view returns (uint256); function getAgendaResult(uint256 _agendaID) external view returns (uint256 result, bool executed); function getExecutionInfo(uint256 _agendaID) external view returns( address[] memory target, bytes[] memory functionBytecode, bool atomicExecute, uint256 executeStartFrom ); function isVotableStatus(uint256 _agendaID) external view returns (bool); function getVotingCount(uint256 _agendaID) external view returns ( uint256 countingYes, uint256 countingNo, uint256 countingAbstain ); function getAgendaTimestamps(uint256 _agendaID) external view returns ( uint256 createdTimestamp, uint256 noticeEndTimestamp, uint256 votingStartedTimestamp, uint256 votingEndTimestamp, uint256 executedTimestamp ); function numAgendas() external view returns (uint256); function getVoters(uint256 _agendaID) external view returns (address[] memory); function getStatus(uint256 _createAgendaFees) external pure returns (LibAgenda.AgendaStatus); // getter function committee() external view returns (IDAOCommittee); function createAgendaFees() external view returns (uint256); function minimumNoticePeriodSeconds() external view returns (uint256); function minimumVotingPeriodSeconds() external view returns (uint256); function executingPeriodSeconds() external view returns (uint256); function agendas(uint256 _index) external view returns (LibAgenda.Agenda memory); function voterInfos(uint256 _index1, address _index2) external view returns (LibAgenda.Voter memory); }
{ "remappings": [ ":g=/dir" ], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "istanbul", "metadata": { "useLiteralContent": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agendaID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"result","type":"uint256"}],"name":"AgendaResultChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"agendaID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prevStatus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newStatus","type":"uint256"}],"name":"AgendaStatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"CreatingAgendaFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"ExecutingPeriodChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"MinimumNoticePeriodChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"MinimumVotingPeriodChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"agendas","outputs":[{"components":[{"internalType":"uint256","name":"createdTimestamp","type":"uint256"},{"internalType":"uint256","name":"noticeEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"votingPeriodInSeconds","type":"uint256"},{"internalType":"uint256","name":"votingStartedTimestamp","type":"uint256"},{"internalType":"uint256","name":"votingEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"executableLimitTimestamp","type":"uint256"},{"internalType":"uint256","name":"executedTimestamp","type":"uint256"},{"internalType":"uint256","name":"countingYes","type":"uint256"},{"internalType":"uint256","name":"countingNo","type":"uint256"},{"internalType":"uint256","name":"countingAbstain","type":"uint256"},{"internalType":"enum LibAgenda.AgendaStatus","name":"status","type":"uint8"},{"internalType":"enum LibAgenda.AgendaResult","name":"result","type":"uint8"},{"internalType":"address[]","name":"voters","type":"address[]"},{"internalType":"bool","name":"executed","type":"bool"}],"internalType":"struct LibAgenda.Agenda","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"canExecuteAgenda","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"},{"internalType":"address","name":"_voter","type":"address"},{"internalType":"uint256","name":"_vote","type":"uint256"}],"name":"castVote","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"committee","outputs":[{"internalType":"contract IDAOCommittee","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createAgendaFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"endAgendaVoting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executingPeriodSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"getAgendaNoticeEndTimeSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"getAgendaResult","outputs":[{"internalType":"uint256","name":"result","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"getAgendaStatus","outputs":[{"internalType":"uint256","name":"status","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"getAgendaTimestamps","outputs":[{"internalType":"uint256","name":"createdTimestamp","type":"uint256"},{"internalType":"uint256","name":"noticeEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"votingStartedTimestamp","type":"uint256"},{"internalType":"uint256","name":"votingEndTimestamp","type":"uint256"},{"internalType":"uint256","name":"executedTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"getAgendaVotingEndTimeSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"getAgendaVotingStartTimeSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"getExecutionInfo","outputs":[{"internalType":"address[]","name":"target","type":"address[]"},{"internalType":"bytes[]","name":"functionBytecode","type":"bytes[]"},{"internalType":"bool","name":"atomicExecute","type":"bool"},{"internalType":"uint256","name":"executeStartFrom","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_status","type":"uint256"}],"name":"getStatus","outputs":[{"internalType":"enum LibAgenda.AgendaStatus","name":"emnustatus","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getVoteStatus","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"getVoters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"getVotingCount","outputs":[{"internalType":"uint256","name":"countingYes","type":"uint256"},{"internalType":"uint256","name":"countingNo","type":"uint256"},{"internalType":"uint256","name":"countingAbstain","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"hasVoted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"isVotableStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"},{"internalType":"address","name":"_candidate","type":"address"}],"name":"isVoter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumNoticePeriodSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumVotingPeriodSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_targets","type":"address[]"},{"internalType":"uint256","name":"_noticePeriodSeconds","type":"uint256"},{"internalType":"uint256","name":"_votingPeriodSeconds","type":"uint256"},{"internalType":"bool","name":"_atomicExecute","type":"bool"},{"internalType":"bytes[]","name":"_functionBytecodes","type":"bytes[]"}],"name":"newAgenda","outputs":[{"internalType":"uint256","name":"agendaID","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numAgendas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_committee","type":"address"}],"name":"setCommittee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_createAgendaFees","type":"uint256"}],"name":"setCreateAgendaFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"}],"name":"setExecutedAgenda","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"setExecutedCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_executingPeriodSeconds","type":"uint256"}],"name":"setExecutingPeriodSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumNoticePeriodSeconds","type":"uint256"}],"name":"setMinimumNoticePeriodSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumVotingPeriodSeconds","type":"uint256"}],"name":"setMinimumVotingPeriodSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"},{"internalType":"enum LibAgenda.AgendaResult","name":"_result","type":"uint8"}],"name":"setResult","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"},{"internalType":"enum LibAgenda.AgendaStatus","name":"_status","type":"uint8"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAgendas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_agendaID","type":"uint256"},{"internalType":"address","name":"_voter","type":"address"}],"name":"voterInfos","outputs":[{"components":[{"internalType":"bool","name":"isVoter","type":"bool"},{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"uint256","name":"vote","type":"uint256"}],"internalType":"struct LibAgenda.Voter","name":"","type":"tuple"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600061001b61008c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350621518006003556202a30060045562093a8060055568056bc75e2d63100000600255610090565b3390565b612a8e8061009f6000396000f3fe608060405234801561001057600080fd5b506004361061023c5760003560e01c806377f28d5b1161013b578063bddae40e116100b8578063de6bd3861161007c578063de6bd38614610537578063e3bc145f14610381578063e3c361561461054a578063e7015fef14610552578063f2fde38b1461055a5761023c565b8063bddae40e146104d5578063c0bc5304146104e8578063cdeed605146104fb578063d864e7401461051c578063d896dd64146105245761023c565b80638da5cb5b116100ff5780638da5cb5b146104545780638e3f5f8314610469578063a0cc81e41461048d578063aee4a42a146104a0578063b4f69b6a146104c25761023c565b806377f28d5b146103e85780637e77eb23146103fb5780638425a46d1461040e57806386b646f214610421578063885b4696146104415761023c565b80633da2371f116101c9578063699cc3581161018d578063699cc3581461038157806369b1227a146103895780636bcaab5e1461039c578063715018a6146103bd57806373ba3745146103c55761023c565b80633da2371f14610308578063438596321461031b5780634a47f59b1461032e57806356150a361461034e5780635c622a0e146103615761023c565b80632522a32f116102105780632522a32f146102a7578063284d776e146102af578063334bbf35146102c257806337184a32146102d55780633c4a819c146102e85761023c565b8062b74c45146102415780630af5aa3c1461026a57806323d09fdf1461027f57806325048db814610294575b600080fd5b61025461024f3660046122ae565b61056d565b60405161026191906124c9565b60405180910390f35b6102726105ef565b6040516102619190612955565b61029261028d36600461227e565b6105f5565b005b6102726102a23660046121e5565b61068d565b610272610967565b6102726102bd36600461227e565b61096d565b6102726102d036600461227e565b6109c9565b6102926102e336600461227e565b610a16565b6102fb6102f636600461227e565b610b35565b6040516102619190612855565b61027261031636600461227e565b610cbf565b6102546103293660046122ae565b610d0c565b61034161033c3660046122ae565b610d64565b6040516102619190612930565b61029261035c366004612314565b610de5565b61037461036f36600461227e565b610edf565b60405161026191906124e4565b610272610f4e565b61029261039736600461227e565b610f54565b6103af6103aa36600461227e565b610fe1565b60405161026192919061295e565b61029261106f565b6103d86103d336600461227e565b611111565b604051610261949392919061240b565b6102546103f636600461227e565b61129d565b6102546104093660046122dd565b611356565b61025461041c36600461227e565b611591565b61043461042f36600461227e565b61160f565b60405161026191906123f8565b61029261044f36600461227e565b6116b4565b61045c6117c1565b60405161026191906123e4565b61047c61047736600461227e565b6117d0565b604051610261959493929190612992565b61029261049b366004612362565b611846565b6104b36104ae36600461227e565b61186d565b6040516102619392919061297c565b6102926104d036600461227e565b6118ad565b6102926104e33660046121ad565b61193a565b6102926104f636600461227e565b6119da565b61050e6105093660046122ae565b611a67565b6040516102619291906124d4565b61045c611aca565b61029261053236600461233b565b611ad9565b61027261054536600461227e565b611bf7565b610272611c44565b610272611c4a565b6102926105683660046121ad565b611c50565b6006546000908390811061059c5760405162461bcd60e51b815260040161059390612758565b60405180910390fd5b6001600160a01b0383166105c25760405162461bcd60e51b815260040161059390612529565b505060009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60035481565b6105fd611d48565b6000546001600160a01b0390811691161461064d576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60038190556040517f1a41511e33a8fb5e37fa982cb8a3c07a04ec3d0a89d5551e6781bd5d03ab819790610682908390612955565b60405180910390a150565b6000610697611d48565b6000546001600160a01b039081169116146106e7576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b6003548610156107095760405162461bcd60e51b8152600401610593906127d2565b600680549050905060606006604051806101c001604052804281526020018942018152602001888152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016001600581111561077357fe5b815260200160008152602080820185905260006040928301819052845460018181018755958252908290208451600d909202019081559083015181850155908201516002820155606082015160038201556080820151600482015560a082015160058083019190915560c0830151600683015560e0830151600783015561010083015160088301556101208301516009830155610140830151600a83018054949593949193909260ff1990921691849081111561082c57fe5b0217905550610160820151600a8201805461ff00191661010083600381111561085157fe5b0217905550610180820151805161087291600b840191602090910190611fd4565b506101a09190910151600c909101805491151560ff199283161790556000838152600860205260408120600281018054891515941693909317909255600382018190555b8981101561095957818b8b838181106108cb57fe5b90506020020160208101906108e091906121ad565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b0392909216919091179055820186868381811061092057fe5b905060200281019061093291906129b5565b82546001810184556000938452602090932061095093019190612039565b506001016108b6565b505050979650505050505050565b60025481565b600654600090829081106109935760405162461bcd60e51b815260040161059390612758565b600683815481106109a057fe5b60009182526020909120600a600d90920201015460ff1660058111156109c257fe5b9392505050565b600654600090829081106109ef5760405162461bcd60e51b815260040161059390612758565b600683815481106109fc57fe5b90600052602060002090600d020160040154915050919050565b610a1e611d48565b6000546001600160a01b03908116911614610a6e576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60065481908110610a915760405162461bcd60e51b815260040161059390612758565b600060068381548110610aa057fe5b600091825260208220600c600d90920201908101805460ff19166001179055426006820155600a81015490925060ff166005811115610adb57fe5b600a8301805491925060049160ff19166001830217905550837f27e1508d1d92ba0e1e406fad0138e0f3dd44688f5018dbe7f5718da02931eb7c8260045b604051610b2792919061296e565b60405180910390a250505050565b610b3d6120b5565b60065482908110610b605760405162461bcd60e51b815260040161059390612758565b60068381548110610b6d57fe5b90600052602060002090600d0201604051806101c001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff166005811115610c0957fe5b6005811115610c1457fe5b8152602001600a820160019054906101000a900460ff166003811115610c3657fe5b6003811115610c4157fe5b8152602001600b8201805480602002602001604051908101604052809291908181526020018280548015610c9e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c80575b5050509183525050600c919091015460ff1615156020909101529392505050565b60065460009082908110610ce55760405162461bcd60e51b815260040161059390612758565b60068381548110610cf257fe5b90600052602060002090600d020160030154915050919050565b60065460009083908110610d325760405162461bcd60e51b815260040161059390612758565b505060009182526007602090815260408084206001600160a01b03939093168452919052902054610100900460ff1690565b610d6c61212f565b60065483908110610d8f5760405162461bcd60e51b815260040161059390612758565b505060009182526007602090815260408084206001600160a01b03939093168452918152918190208151606081018352815460ff8082161515835261010090910416151593810193909352600101549082015290565b610ded611d48565b6000546001600160a01b03908116911614610e3d576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60065482908110610e605760405162461bcd60e51b815260040161059390612758565b600060068481548110610e6f57fe5b90600052602060002090600d020190508281600a0160016101000a81548160ff02191690836003811115610e9f57fe5b0217905550837ff874b3fe678e8c9f4bd9dd7051e2bd81708e378e98526f16586e7bf60b77effc846003811115610ed257fe5b604051610b279190612955565b600060068210610f015760405162461bcd60e51b815260040161059390612712565b6001821415610f1257506001610f49565b6002821415610f2357506002610f49565b6004821415610f3457506004610f49565b6005821415610f4557506005610f49565b5060005b919050565b60065490565b610f5c611d48565b6000546001600160a01b03908116911614610fac576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60058190556040517f393533387dd66192af0de6529ab3f15d1a5cef6f112a7b1d620232f7211982a590610682908390612955565b6000808260068054905081106110095760405162461bcd60e51b815260040161059390612758565b6006848154811061101657fe5b90600052602060002090600d0201600a0160019054906101000a900460ff16600381111561104057fe5b6006858154811061104d57fe5b60009182526020909120600c600d90920201015490935060ff16915050915091565b611077611d48565b6000546001600160a01b039081169116146110c7576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60608060008084600680549050811061113c5760405162461bcd60e51b815260040161059390612758565b60008681526008602090815260409182902060028101546003820154825485518186028101860190965280865292948594600186019460ff9094169386918301828280156111b357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611195575b5050505050935082805480602002602001604051908101604052809291908181526020016000905b828210156112865760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156112725780601f1061124757610100808354040283529160200191611272565b820191906000526020600020905b81548152906001019060200180831161125557829003601f168201915b5050505050815260200190600101906111db565b505050509250955095509550955050509193509193565b600654600090829081106112c35760405162461bcd60e51b815260040161059390612758565b6000600684815481106112d257fe5b60009182526020909120600d9091020190506003600a82015460ff1660058111156112f957fe5b14801561130a575080600501544211155b801561132d57506001600a820154610100900460ff16600381111561132b57fe5b145b801561133d575042816004015411155b801561134e5750600c81015460ff16155b949350505050565b6000611360611d48565b6000546001600160a01b039081169116146113b0576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b600654849081106113d35760405162461bcd60e51b815260040161059390612758565b600383106113f35760405162461bcd60e51b8152600401610593906124f2565b6113fc85611591565b6114185760405162461bcd60e51b815260040161059390612820565b60006006868154811061142757fe5b60009182526020909120600d9091020190506001600a82015460ff16600581111561144e57fe5b141561145d5761145d86611d4c565b611467868661056d565b6114835760405162461bcd60e51b81526004016105939061256f565b61148d8686610d0c565b156114aa5760405162461bcd60e51b81526004016105939061279b565b80600401544211156114ce5760405162461bcd60e51b81526004016105939061262b565b60008681526007602090815260408083206001600160a01b03891684529091528120805461ff001916610100178155600181018690559085141561152657600982015461151c906001611f71565b6009830155611584565b600185141561154957600782015461153f906001611f71565b6007830155611584565b600285141561156c576008820154611562906001611f71565b6008830155611584565b60405162461bcd60e51b8152600401610593906125f6565b5060019695505050505050565b600654600090829081106115b75760405162461bcd60e51b815260040161059390612758565b6000600684815481106115c657fe5b90600052602060002090600d0201905080600401544211158061134e57506001600a82015460ff1660058111156115f957fe5b14801561134e5750600101544210159392505050565b600654606090829081106116355760405162461bcd60e51b815260040161059390612758565b6006838154811061164257fe5b90600052602060002090600d0201600b018054806020026020016040519081016040528092919081815260200182805480156116a757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611689575b5050505050915050919050565b6116bc611d48565b6000546001600160a01b0390811691161461170c576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b6006548190811061172f5760405162461bcd60e51b815260040161059390612758565b60006006838154811061173e57fe5b60009182526020909120600d9091020190506002600a82015460ff16600581111561176557fe5b146117825760405162461bcd60e51b8152600401610593906125a6565b42816004015411156117a65760405162461bcd60e51b8152600401610593906126c9565b6117b1836005611ad9565b6117bc836003610de5565b505050565b6000546001600160a01b031690565b60008060008060008560068054905081106117fd5760405162461bcd60e51b815260040161059390612758565b60006006888154811061180c57fe5b60009182526020909120600d909102018054600182015460038301546004840154600690940154929c919b50995091975095509350505050565b600082815260086020526040902060038101546118639083611f71565b6003909101555050565b6000806000806006858154811061188057fe5b90600052602060002090600d02019050806007015481600801548260090154935093509350509193909250565b6118b5611d48565b6000546001600160a01b03908116911614611905576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60028190556040517f72ac0dabe78e5050799cf8c3092f5eb1ff83204f83c2a62ac0e4d9cafae0837790610682908390612955565b611942611d48565b6000546001600160a01b03908116911614611992576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b6001600160a01b0381166119b85760405162461bcd60e51b815260040161059390612688565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6119e2611d48565b6000546001600160a01b03908116911614611a32576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60048190556040517ff4f36c6d71e6dce23fde1248bfb40024041297ac1665de2840339f8a6b32e54590610682908390612955565b600080836006805490508110611a8f5760405162461bcd60e51b815260040161059390612758565b50505060009182526007602090815260408084206001600160a01b039390931684529190529020805460019091015461010090910460ff1691565b6001546001600160a01b031681565b611ae1611d48565b6000546001600160a01b03908116911614611b31576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60065482908110611b545760405162461bcd60e51b815260040161059390612758565b600060068481548110611b6357fe5b600091825260208220600a600d909202019081015490925060ff166005811115611b8957fe5b600a83018054919250859160ff19166001836005811115611ba657fe5b0217905550847f27e1508d1d92ba0e1e406fad0138e0f3dd44688f5018dbe7f5718da02931eb7c82866005811115611bda57fe5b604051611be892919061296e565b60405180910390a25050505050565b60065460009082908110611c1d5760405162461bcd60e51b815260040161059390612758565b60068381548110611c2a57fe5b90600052602060002090600d020160010154915050919050565b60045481565b60055481565b611c58611d48565b6000546001600160a01b03908116911614611ca8576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b6001600160a01b038116611ced5760405162461bcd60e51b8152600401808060200182810382526026815260200180612a136026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b60065481908110611d6f5760405162461bcd60e51b815260040161059390612758565b600060068381548110611d7e57fe5b90600052602060002090600d02019050428160030181905550611dae816002015442611f7190919063ffffffff16565b60048201819055600554611dc29190611f71565b6005820155600a8101805460ff191660021790556001546040805162f8f26b60e21b815290516000926001600160a01b0316916303e3c9ac91600480830192602092919082900301818787803b158015611e1b57600080fd5b505af1158015611e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e539190612296565b905060005b81811015611f4557600154604051632ed7846560e11b81526000916001600160a01b031690635daf08ca90611e91908590600401612955565b602060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee391906121c9565b600b85018054600181810183556000928352602080842090920180546001600160a01b039095166001600160a01b03199095168517905589835260078252604080842094845293909152919020805460ff191682179055919091019050611e58565b50837f27e1508d1d92ba0e1e406fad0138e0f3dd44688f5018dbe7f5718da02931eb7c60016002610b19565b600082820183811015611fcb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b828054828255906000526020600020908101928215612029579160200282015b8281111561202957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611ff4565b5061203592915061214f565b5090565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261206f5760008555612029565b82601f106120885782800160ff19823516178555612029565b82800160010185558215612029579182015b8281111561202957823582559160200191906001019061209a565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000600581111561211457fe5b81526020016000815260606020820152600060409091015290565b604080516060810182526000808252602082018190529181019190915290565b5b808211156120355760008155600101612150565b60008083601f840112612175578182fd5b50813567ffffffffffffffff81111561218c578182fd5b60208301915083602080830285010111156121a657600080fd5b9250929050565b6000602082840312156121be578081fd5b8135611fcb816129fa565b6000602082840312156121da578081fd5b8151611fcb816129fa565b600080600080600080600060a0888a0312156121ff578283fd5b873567ffffffffffffffff80821115612216578485fd5b6122228b838c01612164565b909950975060208a0135965060408a0135955060608a013591508115158214612249578485fd5b9093506080890135908082111561225e578384fd5b5061226b8a828b01612164565b989b979a50959850939692959293505050565b60006020828403121561228f578081fd5b5035919050565b6000602082840312156122a7578081fd5b5051919050565b600080604083850312156122c0578182fd5b8235915060208301356122d2816129fa565b809150509250929050565b6000806000606084860312156122f1578283fd5b833592506020840135612303816129fa565b929592945050506040919091013590565b60008060408385031215612326578182fd5b823591506020830135600481106122d2578182fd5b6000806040838503121561234d578182fd5b823591506020830135600681106122d2578182fd5b60008060408385031215612374578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156123bb5781516001600160a01b031687529582019590820190600101612396565b509495945050505050565b15159052565b600481106123d657fe5b9052565b600681106123d657fe5b6001600160a01b0391909116815260200190565b6000602082526109c26020830184612383565b60006080825261241e6080830187612383565b602083820381850152818751808452828401915082838202850101838a01865b838110156124a357601f1980888503018652825180518086528a5b81811015612474578281018a01518782018b01528901612459565b81811115612484578b8a83890101525b5096880196601f0190911693909301860192509085019060010161243e565b505080955050505050506124ba60408301856123c6565b82606083015295945050505050565b901515815260200190565b9115158252602082015260400190565b60208101611fce82846123da565b6020808252601e908201527f44414f4167656e64614d616e616765723a20696e76616c696420766f74650000604082015260600190565b60208082526026908201527f44414f4167656e64614d616e616765723a20757365722061646472657373206960408201526573207a65726f60d01b606082015260800190565b6020808252601d908201527f44414f4167656e64614d616e616765723a206e6f74206120766f746572000000604082015260600190565b60208082526030908201527f44414f4167656e64614d616e616765723a206167656e6461207374617475732060408201526f6973206e6f74206368616e6761626c6560801b606082015260800190565b6020808252818101527f44414f4167656e64614d616e616765723a20696e76616c696420766f74696e67604082015260600190565b6020808252603a908201527f44414f4167656e64614d616e616765723a20666f722074686973206167656e6460408201527f612c2074686520766f74696e672074696d652065787069726564000000000000606082015260800190565b60208082526021908201527f44414f4167656e64614d616e616765723a2061646472657373206973207a65726040820152606f60f81b606082015260800190565b60208082526029908201527f44414f4167656e64614d616e616765723a20766f74696e67206973206e6f7420604082015268195b991959081e595d60ba1b606082015260800190565b60208082526026908201527f44414f4167656e64614d616e616765723a20696e76616c6964207374617475736040820152652076616c756560d01b606082015260800190565b60208082526023908201527f44414f4167656e64614d616e616765723a20696e76616c6964206167656e6461604082015262081a5960ea1b606082015260800190565b6020808252601f908201527f44414f4167656e64614d616e616765723a20616c726561647920766f74656400604082015260600190565b6020808252602e908201527f44414f4167656e64614d616e616765723a206d696e696d756d4e6f746963655060408201526d195c9a5bd9081a5cc81cda1bdc9d60921b606082015260800190565b6020808252818101527f44414f4167656e64614d616e616765723a20696e76616c696420737461747573604082015260600190565b60006020825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e08301516101008181850152808501519150506101208181850152808501519150506101408181850152808501519150506101606128df818501836123da565b84015190506101806128f3848201836123cc565b808501519150506101c06101a081818601526129136101e0860184612383565b90860151909250612926858301826123c6565b5090949350505050565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b6000808335601e198436030181126129cb578283fd5b83018035915067ffffffffffffffff8211156129e5578283fd5b6020019150368190038213156121a657600080fd5b6001600160a01b0381168114612a0f57600080fd5b5056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220bcf3bccd8e9211c81d5dd0bb64b3a104614ef587e171598cdaeb456912fc16a264736f6c63430007060033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061023c5760003560e01c806377f28d5b1161013b578063bddae40e116100b8578063de6bd3861161007c578063de6bd38614610537578063e3bc145f14610381578063e3c361561461054a578063e7015fef14610552578063f2fde38b1461055a5761023c565b8063bddae40e146104d5578063c0bc5304146104e8578063cdeed605146104fb578063d864e7401461051c578063d896dd64146105245761023c565b80638da5cb5b116100ff5780638da5cb5b146104545780638e3f5f8314610469578063a0cc81e41461048d578063aee4a42a146104a0578063b4f69b6a146104c25761023c565b806377f28d5b146103e85780637e77eb23146103fb5780638425a46d1461040e57806386b646f214610421578063885b4696146104415761023c565b80633da2371f116101c9578063699cc3581161018d578063699cc3581461038157806369b1227a146103895780636bcaab5e1461039c578063715018a6146103bd57806373ba3745146103c55761023c565b80633da2371f14610308578063438596321461031b5780634a47f59b1461032e57806356150a361461034e5780635c622a0e146103615761023c565b80632522a32f116102105780632522a32f146102a7578063284d776e146102af578063334bbf35146102c257806337184a32146102d55780633c4a819c146102e85761023c565b8062b74c45146102415780630af5aa3c1461026a57806323d09fdf1461027f57806325048db814610294575b600080fd5b61025461024f3660046122ae565b61056d565b60405161026191906124c9565b60405180910390f35b6102726105ef565b6040516102619190612955565b61029261028d36600461227e565b6105f5565b005b6102726102a23660046121e5565b61068d565b610272610967565b6102726102bd36600461227e565b61096d565b6102726102d036600461227e565b6109c9565b6102926102e336600461227e565b610a16565b6102fb6102f636600461227e565b610b35565b6040516102619190612855565b61027261031636600461227e565b610cbf565b6102546103293660046122ae565b610d0c565b61034161033c3660046122ae565b610d64565b6040516102619190612930565b61029261035c366004612314565b610de5565b61037461036f36600461227e565b610edf565b60405161026191906124e4565b610272610f4e565b61029261039736600461227e565b610f54565b6103af6103aa36600461227e565b610fe1565b60405161026192919061295e565b61029261106f565b6103d86103d336600461227e565b611111565b604051610261949392919061240b565b6102546103f636600461227e565b61129d565b6102546104093660046122dd565b611356565b61025461041c36600461227e565b611591565b61043461042f36600461227e565b61160f565b60405161026191906123f8565b61029261044f36600461227e565b6116b4565b61045c6117c1565b60405161026191906123e4565b61047c61047736600461227e565b6117d0565b604051610261959493929190612992565b61029261049b366004612362565b611846565b6104b36104ae36600461227e565b61186d565b6040516102619392919061297c565b6102926104d036600461227e565b6118ad565b6102926104e33660046121ad565b61193a565b6102926104f636600461227e565b6119da565b61050e6105093660046122ae565b611a67565b6040516102619291906124d4565b61045c611aca565b61029261053236600461233b565b611ad9565b61027261054536600461227e565b611bf7565b610272611c44565b610272611c4a565b6102926105683660046121ad565b611c50565b6006546000908390811061059c5760405162461bcd60e51b815260040161059390612758565b60405180910390fd5b6001600160a01b0383166105c25760405162461bcd60e51b815260040161059390612529565b505060009182526007602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60035481565b6105fd611d48565b6000546001600160a01b0390811691161461064d576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60038190556040517f1a41511e33a8fb5e37fa982cb8a3c07a04ec3d0a89d5551e6781bd5d03ab819790610682908390612955565b60405180910390a150565b6000610697611d48565b6000546001600160a01b039081169116146106e7576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b6003548610156107095760405162461bcd60e51b8152600401610593906127d2565b600680549050905060606006604051806101c001604052804281526020018942018152602001888152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016001600581111561077357fe5b815260200160008152602080820185905260006040928301819052845460018181018755958252908290208451600d909202019081559083015181850155908201516002820155606082015160038201556080820151600482015560a082015160058083019190915560c0830151600683015560e0830151600783015561010083015160088301556101208301516009830155610140830151600a83018054949593949193909260ff1990921691849081111561082c57fe5b0217905550610160820151600a8201805461ff00191661010083600381111561085157fe5b0217905550610180820151805161087291600b840191602090910190611fd4565b506101a09190910151600c909101805491151560ff199283161790556000838152600860205260408120600281018054891515941693909317909255600382018190555b8981101561095957818b8b838181106108cb57fe5b90506020020160208101906108e091906121ad565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b0392909216919091179055820186868381811061092057fe5b905060200281019061093291906129b5565b82546001810184556000938452602090932061095093019190612039565b506001016108b6565b505050979650505050505050565b60025481565b600654600090829081106109935760405162461bcd60e51b815260040161059390612758565b600683815481106109a057fe5b60009182526020909120600a600d90920201015460ff1660058111156109c257fe5b9392505050565b600654600090829081106109ef5760405162461bcd60e51b815260040161059390612758565b600683815481106109fc57fe5b90600052602060002090600d020160040154915050919050565b610a1e611d48565b6000546001600160a01b03908116911614610a6e576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60065481908110610a915760405162461bcd60e51b815260040161059390612758565b600060068381548110610aa057fe5b600091825260208220600c600d90920201908101805460ff19166001179055426006820155600a81015490925060ff166005811115610adb57fe5b600a8301805491925060049160ff19166001830217905550837f27e1508d1d92ba0e1e406fad0138e0f3dd44688f5018dbe7f5718da02931eb7c8260045b604051610b2792919061296e565b60405180910390a250505050565b610b3d6120b5565b60065482908110610b605760405162461bcd60e51b815260040161059390612758565b60068381548110610b6d57fe5b90600052602060002090600d0201604051806101c001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff166005811115610c0957fe5b6005811115610c1457fe5b8152602001600a820160019054906101000a900460ff166003811115610c3657fe5b6003811115610c4157fe5b8152602001600b8201805480602002602001604051908101604052809291908181526020018280548015610c9e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c80575b5050509183525050600c919091015460ff1615156020909101529392505050565b60065460009082908110610ce55760405162461bcd60e51b815260040161059390612758565b60068381548110610cf257fe5b90600052602060002090600d020160030154915050919050565b60065460009083908110610d325760405162461bcd60e51b815260040161059390612758565b505060009182526007602090815260408084206001600160a01b03939093168452919052902054610100900460ff1690565b610d6c61212f565b60065483908110610d8f5760405162461bcd60e51b815260040161059390612758565b505060009182526007602090815260408084206001600160a01b03939093168452918152918190208151606081018352815460ff8082161515835261010090910416151593810193909352600101549082015290565b610ded611d48565b6000546001600160a01b03908116911614610e3d576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60065482908110610e605760405162461bcd60e51b815260040161059390612758565b600060068481548110610e6f57fe5b90600052602060002090600d020190508281600a0160016101000a81548160ff02191690836003811115610e9f57fe5b0217905550837ff874b3fe678e8c9f4bd9dd7051e2bd81708e378e98526f16586e7bf60b77effc846003811115610ed257fe5b604051610b279190612955565b600060068210610f015760405162461bcd60e51b815260040161059390612712565b6001821415610f1257506001610f49565b6002821415610f2357506002610f49565b6004821415610f3457506004610f49565b6005821415610f4557506005610f49565b5060005b919050565b60065490565b610f5c611d48565b6000546001600160a01b03908116911614610fac576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60058190556040517f393533387dd66192af0de6529ab3f15d1a5cef6f112a7b1d620232f7211982a590610682908390612955565b6000808260068054905081106110095760405162461bcd60e51b815260040161059390612758565b6006848154811061101657fe5b90600052602060002090600d0201600a0160019054906101000a900460ff16600381111561104057fe5b6006858154811061104d57fe5b60009182526020909120600c600d90920201015490935060ff16915050915091565b611077611d48565b6000546001600160a01b039081169116146110c7576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60608060008084600680549050811061113c5760405162461bcd60e51b815260040161059390612758565b60008681526008602090815260409182902060028101546003820154825485518186028101860190965280865292948594600186019460ff9094169386918301828280156111b357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611195575b5050505050935082805480602002602001604051908101604052809291908181526020016000905b828210156112865760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156112725780601f1061124757610100808354040283529160200191611272565b820191906000526020600020905b81548152906001019060200180831161125557829003601f168201915b5050505050815260200190600101906111db565b505050509250955095509550955050509193509193565b600654600090829081106112c35760405162461bcd60e51b815260040161059390612758565b6000600684815481106112d257fe5b60009182526020909120600d9091020190506003600a82015460ff1660058111156112f957fe5b14801561130a575080600501544211155b801561132d57506001600a820154610100900460ff16600381111561132b57fe5b145b801561133d575042816004015411155b801561134e5750600c81015460ff16155b949350505050565b6000611360611d48565b6000546001600160a01b039081169116146113b0576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b600654849081106113d35760405162461bcd60e51b815260040161059390612758565b600383106113f35760405162461bcd60e51b8152600401610593906124f2565b6113fc85611591565b6114185760405162461bcd60e51b815260040161059390612820565b60006006868154811061142757fe5b60009182526020909120600d9091020190506001600a82015460ff16600581111561144e57fe5b141561145d5761145d86611d4c565b611467868661056d565b6114835760405162461bcd60e51b81526004016105939061256f565b61148d8686610d0c565b156114aa5760405162461bcd60e51b81526004016105939061279b565b80600401544211156114ce5760405162461bcd60e51b81526004016105939061262b565b60008681526007602090815260408083206001600160a01b03891684529091528120805461ff001916610100178155600181018690559085141561152657600982015461151c906001611f71565b6009830155611584565b600185141561154957600782015461153f906001611f71565b6007830155611584565b600285141561156c576008820154611562906001611f71565b6008830155611584565b60405162461bcd60e51b8152600401610593906125f6565b5060019695505050505050565b600654600090829081106115b75760405162461bcd60e51b815260040161059390612758565b6000600684815481106115c657fe5b90600052602060002090600d0201905080600401544211158061134e57506001600a82015460ff1660058111156115f957fe5b14801561134e5750600101544210159392505050565b600654606090829081106116355760405162461bcd60e51b815260040161059390612758565b6006838154811061164257fe5b90600052602060002090600d0201600b018054806020026020016040519081016040528092919081815260200182805480156116a757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611689575b5050505050915050919050565b6116bc611d48565b6000546001600160a01b0390811691161461170c576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b6006548190811061172f5760405162461bcd60e51b815260040161059390612758565b60006006838154811061173e57fe5b60009182526020909120600d9091020190506002600a82015460ff16600581111561176557fe5b146117825760405162461bcd60e51b8152600401610593906125a6565b42816004015411156117a65760405162461bcd60e51b8152600401610593906126c9565b6117b1836005611ad9565b6117bc836003610de5565b505050565b6000546001600160a01b031690565b60008060008060008560068054905081106117fd5760405162461bcd60e51b815260040161059390612758565b60006006888154811061180c57fe5b60009182526020909120600d909102018054600182015460038301546004840154600690940154929c919b50995091975095509350505050565b600082815260086020526040902060038101546118639083611f71565b6003909101555050565b6000806000806006858154811061188057fe5b90600052602060002090600d02019050806007015481600801548260090154935093509350509193909250565b6118b5611d48565b6000546001600160a01b03908116911614611905576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60028190556040517f72ac0dabe78e5050799cf8c3092f5eb1ff83204f83c2a62ac0e4d9cafae0837790610682908390612955565b611942611d48565b6000546001600160a01b03908116911614611992576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b6001600160a01b0381166119b85760405162461bcd60e51b815260040161059390612688565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6119e2611d48565b6000546001600160a01b03908116911614611a32576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60048190556040517ff4f36c6d71e6dce23fde1248bfb40024041297ac1665de2840339f8a6b32e54590610682908390612955565b600080836006805490508110611a8f5760405162461bcd60e51b815260040161059390612758565b50505060009182526007602090815260408084206001600160a01b039390931684529190529020805460019091015461010090910460ff1691565b6001546001600160a01b031681565b611ae1611d48565b6000546001600160a01b03908116911614611b31576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b60065482908110611b545760405162461bcd60e51b815260040161059390612758565b600060068481548110611b6357fe5b600091825260208220600a600d909202019081015490925060ff166005811115611b8957fe5b600a83018054919250859160ff19166001836005811115611ba657fe5b0217905550847f27e1508d1d92ba0e1e406fad0138e0f3dd44688f5018dbe7f5718da02931eb7c82866005811115611bda57fe5b604051611be892919061296e565b60405180910390a25050505050565b60065460009082908110611c1d5760405162461bcd60e51b815260040161059390612758565b60068381548110611c2a57fe5b90600052602060002090600d020160010154915050919050565b60045481565b60055481565b611c58611d48565b6000546001600160a01b03908116911614611ca8576040805162461bcd60e51b81526020600482018190526024820152600080516020612a39833981519152604482015290519081900360640190fd5b6001600160a01b038116611ced5760405162461bcd60e51b8152600401808060200182810382526026815260200180612a136026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b60065481908110611d6f5760405162461bcd60e51b815260040161059390612758565b600060068381548110611d7e57fe5b90600052602060002090600d02019050428160030181905550611dae816002015442611f7190919063ffffffff16565b60048201819055600554611dc29190611f71565b6005820155600a8101805460ff191660021790556001546040805162f8f26b60e21b815290516000926001600160a01b0316916303e3c9ac91600480830192602092919082900301818787803b158015611e1b57600080fd5b505af1158015611e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e539190612296565b905060005b81811015611f4557600154604051632ed7846560e11b81526000916001600160a01b031690635daf08ca90611e91908590600401612955565b602060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee391906121c9565b600b85018054600181810183556000928352602080842090920180546001600160a01b039095166001600160a01b03199095168517905589835260078252604080842094845293909152919020805460ff191682179055919091019050611e58565b50837f27e1508d1d92ba0e1e406fad0138e0f3dd44688f5018dbe7f5718da02931eb7c60016002610b19565b600082820183811015611fcb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b828054828255906000526020600020908101928215612029579160200282015b8281111561202957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611ff4565b5061203592915061214f565b5090565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261206f5760008555612029565b82601f106120885782800160ff19823516178555612029565b82800160010185558215612029579182015b8281111561202957823582559160200191906001019061209a565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000600581111561211457fe5b81526020016000815260606020820152600060409091015290565b604080516060810182526000808252602082018190529181019190915290565b5b808211156120355760008155600101612150565b60008083601f840112612175578182fd5b50813567ffffffffffffffff81111561218c578182fd5b60208301915083602080830285010111156121a657600080fd5b9250929050565b6000602082840312156121be578081fd5b8135611fcb816129fa565b6000602082840312156121da578081fd5b8151611fcb816129fa565b600080600080600080600060a0888a0312156121ff578283fd5b873567ffffffffffffffff80821115612216578485fd5b6122228b838c01612164565b909950975060208a0135965060408a0135955060608a013591508115158214612249578485fd5b9093506080890135908082111561225e578384fd5b5061226b8a828b01612164565b989b979a50959850939692959293505050565b60006020828403121561228f578081fd5b5035919050565b6000602082840312156122a7578081fd5b5051919050565b600080604083850312156122c0578182fd5b8235915060208301356122d2816129fa565b809150509250929050565b6000806000606084860312156122f1578283fd5b833592506020840135612303816129fa565b929592945050506040919091013590565b60008060408385031215612326578182fd5b823591506020830135600481106122d2578182fd5b6000806040838503121561234d578182fd5b823591506020830135600681106122d2578182fd5b60008060408385031215612374578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156123bb5781516001600160a01b031687529582019590820190600101612396565b509495945050505050565b15159052565b600481106123d657fe5b9052565b600681106123d657fe5b6001600160a01b0391909116815260200190565b6000602082526109c26020830184612383565b60006080825261241e6080830187612383565b602083820381850152818751808452828401915082838202850101838a01865b838110156124a357601f1980888503018652825180518086528a5b81811015612474578281018a01518782018b01528901612459565b81811115612484578b8a83890101525b5096880196601f0190911693909301860192509085019060010161243e565b505080955050505050506124ba60408301856123c6565b82606083015295945050505050565b901515815260200190565b9115158252602082015260400190565b60208101611fce82846123da565b6020808252601e908201527f44414f4167656e64614d616e616765723a20696e76616c696420766f74650000604082015260600190565b60208082526026908201527f44414f4167656e64614d616e616765723a20757365722061646472657373206960408201526573207a65726f60d01b606082015260800190565b6020808252601d908201527f44414f4167656e64614d616e616765723a206e6f74206120766f746572000000604082015260600190565b60208082526030908201527f44414f4167656e64614d616e616765723a206167656e6461207374617475732060408201526f6973206e6f74206368616e6761626c6560801b606082015260800190565b6020808252818101527f44414f4167656e64614d616e616765723a20696e76616c696420766f74696e67604082015260600190565b6020808252603a908201527f44414f4167656e64614d616e616765723a20666f722074686973206167656e6460408201527f612c2074686520766f74696e672074696d652065787069726564000000000000606082015260800190565b60208082526021908201527f44414f4167656e64614d616e616765723a2061646472657373206973207a65726040820152606f60f81b606082015260800190565b60208082526029908201527f44414f4167656e64614d616e616765723a20766f74696e67206973206e6f7420604082015268195b991959081e595d60ba1b606082015260800190565b60208082526026908201527f44414f4167656e64614d616e616765723a20696e76616c6964207374617475736040820152652076616c756560d01b606082015260800190565b60208082526023908201527f44414f4167656e64614d616e616765723a20696e76616c6964206167656e6461604082015262081a5960ea1b606082015260800190565b6020808252601f908201527f44414f4167656e64614d616e616765723a20616c726561647920766f74656400604082015260600190565b6020808252602e908201527f44414f4167656e64614d616e616765723a206d696e696d756d4e6f746963655060408201526d195c9a5bd9081a5cc81cda1bdc9d60921b606082015260800190565b6020808252818101527f44414f4167656e64614d616e616765723a20696e76616c696420737461747573604082015260600190565b60006020825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e08301516101008181850152808501519150506101208181850152808501519150506101408181850152808501519150506101606128df818501836123da565b84015190506101806128f3848201836123cc565b808501519150506101c06101a081818601526129136101e0860184612383565b90860151909250612926858301826123c6565b5090949350505050565b8151151581526020808301511515908201526040918201519181019190915260600190565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b6000808335601e198436030181126129cb578283fd5b83018035915067ffffffffffffffff8211156129e5578283fd5b6020019150368190038213156121a657600080fd5b6001600160a01b0381168114612a0f57600080fd5b5056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220bcf3bccd8e9211c81d5dd0bb64b3a104614ef587e171598cdaeb456912fc16a264736f6c63430007060033
Deployed Bytecode Sourcemap
377:16010:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11170:266;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;647:50;;;:::i;:::-;;;;;;;:::i;3394:247::-;;;;;;:::i;:::-;;:::i;:::-;;4750:1556;;;;;;:::i;:::-;;:::i;596:40::-;;;:::i;12984:174::-;;;;;;:::i;:::-;;:::i;12310:184::-;;;;;;:::i;:::-;;:::i;8155:497::-;;;;;;:::i;:::-;;:::i;16041:150::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12114:190::-;;;;;;:::i;:::-;;:::i;11446:173::-;;;;;;:::i;:::-;;:::i;16197:188::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8765:322::-;;;;;;:::i;:::-;;:::i;1909:710::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13164:104::-;;;:::i;3770:223::-;;;;;;:::i;:::-;;:::i;13274:221::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1699:145:12:-;;;:::i;13504:559:1:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;12500:474::-;;;;;;:::i;:::-;;:::i;6504:1556::-;;;;;;:::i;:::-;;:::i;14315:363::-;;;;;;:::i;:::-;;:::i;15874:161::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;9701:619::-;;;;;;:::i;:::-;;:::i;1076:77:12:-;;;:::i;:::-;;;;;;;:::i;15109:651:1:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;14069:240::-;;;;;;:::i;:::-;;:::i;14684:419::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;3056:195::-;;;;;;:::i;:::-;;:::i;2745:204::-;;;;;;:::i;:::-;;:::i;4136:247::-;;;;;;:::i;:::-;;:::i;11625:285::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;546:39::-;;;:::i;9205:387::-;;;;;;:::i;:::-;;:::i;11920:184::-;;;;;;:::i;:::-;;:::i;703:50::-;;;:::i;759:46::-;;;:::i;1993:240:12:-;;;;;;:::i;:::-;;:::i;11170:266:1:-;1597:8;:15;11279:4;;11259:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;11303:24:1;::::1;11295:75;;;;-1:-1:-1::0;;;11295:75:1::1;;;;;;;:::i;:::-;-1:-1:-1::0;;11387:22:1::1;::::0;;;:11:::1;:22;::::0;;;;;;;-1:-1:-1;;;;;11387:34:1;;;::::1;::::0;;;;;;;:42;::::1;;::::0;11170:266::o;647:50::-;;;;:::o;3394:247::-;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;3508:26:1::1;:56:::0;;;3579:55:::1;::::0;::::1;::::0;::::1;::::0;3537:27;;3579:55:::1;:::i;:::-;;;;;;;;3394:247:::0;:::o;4750:1556::-;5031:16;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;5108:26:1::1;;5084:20;:50;;5063:143;;;;-1:-1:-1::0;;;5063:143:1::1;;;;;;;:::i;:::-;5228:8;:15;;;;5217:26;;5263:27;5300:8;5314:604;;;;;;;;5495:15;5314:604;;;;5562:20;5544:15;:38;5314:604;;;;5619:20;5314:604;;;;5677:1;5314:604;;;;5712:1;5314:604;;;;5753:1;5314:604;;;;5787:1;5314:604;;;;5815:1;5314:604;;;;5842:1;5314:604;;;;5874:1;5314:604;;;;5353:29;5314:604;;;;;;;;::::0;;::::1;;5404:30;5314:604:::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;5314:604:1;;;;;;;5300:619;;5314:604;5300:619;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;;;;-1:-1:-1;;5300:619:1;;::::1;::::0;;;;::::1;;;;;;;;::::0;;-1:-1:-1;5300:619:1::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;5300:619:1::1;;::::0;::::1;::::0;::::1;;;;;;;;::::0;;-1:-1:-1;5300:619:1::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;5300:619:1::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;5300:619:1;;::::1;;::::0;;::::1;5984:25:::0;;;:15:::1;:25;::::0;;;;6019:27:::1;::::0;::::1;:44:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;6073:30:::1;::::0;::::1;:34:::0;;;6117:183:::1;6137:19:::0;;::::1;6117:183;;;6177:13:::0;6204:8;;6213:1;6204:11;;::::1;;;;;;;;;;;;;;;;;;:::i;:::-;6177:39:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;6177:39:1;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;6177:39:1::1;-1:-1:-1::0;;;;;6177:39:1;;;::::1;::::0;;;::::1;::::0;;6230:31;::::1;6267:18:::0;;6286:1;6267:21;;::::1;;;;;;;;;;;;;;;;:::i;:::-;6230:59:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;6230:59:1;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;6158:3:1::1;;6117:183;;;;1349:1:12;;4750:1556:1::0;;;;;;;;;:::o;596:40::-;;;;:::o;12984:174::-;1597:8;:15;13083:14;;13063:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;13124:8:::1;13133:9;13124:19;;;;;;;;;::::0;;;::::1;::::0;;;:26:::1;:19;::::0;;::::1;;:26;::::0;::::1;;13116:35;::::0;::::1;;;;;;13109:42:::0;12984:174;-1:-1:-1;;;12984:174:1:o;12310:184::-;1597:8;:15;12423:7;;12403:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;12449:8:::1;12458:9;12449:19;;;;;;;;;;;;;;;;;;:38;;;12442:45;;12310:184:::0;;;;:::o;8155:497::-;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;1597:8:1::1;:15:::0;8273:9;;1585:27;::::1;1577:75;;;;-1:-1:-1::0;;;1577:75:1::1;;;;;;;:::i;:::-;8298:31:::2;8332:8;8341:9;8332:19;;;;;;;;;::::0;;;::::2;::::0;;8361:15:::2;8332:19;::::0;;::::2;;8361:15:::0;;::::2;:22:::0;;-1:-1:-1;;8361:22:1::2;8379:4;8361:22;::::0;;8420:15:::2;8393:24;::::0;::::2;:42:::0;8475:13:::2;::::0;::::2;::::0;8332:19;;-1:-1:-1;8361:22:1::2;8475:13;8467:22;::::0;::::2;;;;;;8499:13;::::0;::::2;:47:::0;;8446:43;;-1:-1:-1;8515:31:1::2;::::0;-1:-1:-1;;8499:47:1::2;::::0;8515:31;8499:47:::2;;::::0;;-1:-1:-1;8581:9:1;8561:84:::2;8592:10:::0;8612:31:::2;8604:40;8561:84;;;;;;;:::i;:::-;;;;;;;;1662:1;;1349::12::1;8155:497:1::0;:::o;16041:150::-;16126:23;;:::i;:::-;1597:8;:15;16109:6;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;16168:8:::1;16177:6;16168:16;;;;;;;;;;;;;;;;;;16161:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;16161:23:1::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;-1:-1:-1::0;;;16161:23:1;;;-1:-1:-1;;16161:23:1::1;::::0;;;::::1;::::0;::::1;;;;;::::0;;::::1;::::0;;16041:150;-1:-1:-1;;;16041:150:1:o;12114:190::-;1597:8;:15;12229:7;;12209:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;12255:8:::1;12264:9;12255:19;;;;;;;;;;;;;;;;;;:42;;;12248:49;;12114:190:::0;;;;:::o;11446:173::-;1597:8;:15;11551:4;;11531:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;-1:-1:-1;;11574:22:1::1;::::0;;;:11:::1;:22;::::0;;;;;;;-1:-1:-1;;;;;11574:29:1;;;::::1;::::0;;;;;;;:38;::::1;::::0;::::1;;;::::0;11446:173::o;16197:188::-;16307:22;;:::i;:::-;1597:8;:15;16287:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;-1:-1:-1;;16348:22:1::1;::::0;;;:11:::1;:22;::::0;;;;;;;-1:-1:-1;;;;;16348:30:1;;;::::1;::::0;;;;;;;;;16341:37;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;;;::::0;;::::1;::::0;;::::1;;;;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;16197:188::o;8765:322::-;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;1597:8:1::1;:15:::0;8905:9;;1585:27;::::1;1577:75;;;;-1:-1:-1::0;;;1577:75:1::1;;;;;;;:::i;:::-;8930:31:::2;8964:8;8973:9;8964:19;;;;;;;;;;;;;;;;;;8930:53;;9009:7;8993:6;:13;;;:23;;;;;;;;;;;;;;;;;;;;;;;;9052:9;9032:48;9071:7;9063:16;;;;;;;;9032:48;;;;;;:::i;1909:710::-:0;1975:33;2038:1;2028:7;:11;2020:62;;;;-1:-1:-1;;;2020:62:1;;;;;;;:::i;:::-;2115:29;2096:7;:49;2092:520;;;-1:-1:-1;2166:29:1;2159:36;;2092:520;2233:29;2214:7;:49;2210:402;;;-1:-1:-1;2284:29:1;2277:36;;2210:402;2351:31;2332:7;:51;2328:284;;;-1:-1:-1;2404:31:1;2397:38;;2328:284;2473:28;2454:7;:48;2450:162;;;-1:-1:-1;2523:28:1;2516:35;;2450:162;-1:-1:-1;2585:27:1;2450:162;1909:710;;;:::o;13164:104::-;13246:8;:15;13164:104;:::o;3770:223::-;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;3876:22:1::1;:48:::0;;;3939:47:::1;::::0;::::1;::::0;::::1;::::0;3901:23;;3939:47:::1;:::i;13274:221::-:0;13373:14;13389:13;13353:9;1597:8;:15;;;;1585:9;:27;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;13430:8:::1;13439:9;13430:19;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;13422:35;;;;;;;;13459:8;13468:9;13459:19;;;;;;;;;::::0;;;::::1;::::0;;;:28:::1;:19;::::0;;::::1;;:28;::::0;13414:74;;-1:-1:-1;13459:28:1::1;;::::0;-1:-1:-1;13274:221:1;;;;:::o;1699:145:12:-;1290:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;1805:1:::1;1789:6:::0;;1768:40:::1;::::0;-1:-1:-1;;;;;1789:6:12;;::::1;::::0;1768:40:::1;::::0;1805:1;;1768:40:::1;1835:1;1818:19:::0;;-1:-1:-1;;;;;;1818:19:12::1;::::0;;1699:145::o;13504:559:1:-;13656:23;13693:31;13738:18;13770:24;13616:9;1597:8;:15;;;;1585:9;:27;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;13819:44:::1;13866:26:::0;;;:15:::1;:26;::::0;;;;;;;;13989:20:::1;::::0;::::1;::::0;14023:23:::1;::::0;::::1;::::0;13902:154;;;;;;::::1;::::0;;;;;;;;;;13866:26;;;;13951:24:::1;::::0;::::1;::::0;13989:20:::1;::::0;;::::1;::::0;13866:26;;13902:154;::::1;13866:26:::0;13902:154;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;13902:154:1::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;::::1;;-1:-1:-1::0;;13902:154:1::1;;::::0;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;::::1;::::0;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13504:559:::0;;;;;;:::o;12500:474::-;1597:8;:15;12600:4;;12580:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;12616:31:::1;12650:8;12659:9;12650:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;-1:-1:-1;12704:35:1::1;12687:13;::::0;::::1;::::0;::::1;;:52;::::0;::::1;;;;;;;:118;;;;;12774:6;:31;;;12755:15;:50;;12687:118;:180;;;;-1:-1:-1::0;12838:29:1::1;12821:13;::::0;::::1;::::0;::::1;::::0;::::1;;;:46;::::0;::::1;;;;;;;12687:180;:240;;;;;12912:15;12883:6;:25;;;:44;;12687:240;:280;;;;-1:-1:-1::0;12943:15:1::1;::::0;::::1;::::0;::::1;;:24;12687:280;12680:287:::0;12500:474;-1:-1:-1;;;;12500:474:1:o;6504:1556::-;6702:4;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;1597:8:1::1;:15:::0;6674:9;;1585:27;::::1;1577:75;;;;-1:-1:-1::0;;;1577:75:1::1;;;;;;;:::i;:::-;6746:14:::2;6730:5;:31;6722:74;;;;-1:-1:-1::0;;;6722:74:1::2;;;;;;;:::i;:::-;6828:26;6844:9;6828:15;:26::i;:::-;6807:105;;;;-1:-1:-1::0;;;6807:105:1::2;;;;;;;:::i;:::-;6923:31;6957:8;6966:9;6957:19;;;;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;::::0;-1:-1:-1;7008:29:1::2;6991:13;::::0;::::2;::::0;::::2;;:46;::::0;::::2;;;;;;;6987:100;;;7053:23;7066:9;7053:12;:23::i;:::-;7105:26;7113:9;7124:6;7105:7;:26::i;:::-;7097:68;;;;-1:-1:-1::0;;;7097:68:1::2;;;;;;;:::i;:::-;7184:27;7193:9;7204:6;7184:8;:27::i;:::-;7183:28;7175:72;;;;-1:-1:-1::0;;;7175:72:1::2;;;;;;;:::i;:::-;7298:6;:25;;;7279:15;:44;;7258:149;;;;-1:-1:-1::0;;;7258:149:1::2;;;;;;;:::i;:::-;7426:29;7458:22:::0;;;:11:::2;:22;::::0;;;;;;;-1:-1:-1;;;;;7458:30:1;::::2;::::0;;;;;;;7498:21;;-1:-1:-1;;7498:21:1::2;;;::::0;;7515:4:::2;7529:10:::0;::::2;:18:::0;;;7458:30;7631:5:::2;:36;7627:396;;;7706:22;::::0;::::2;::::0;:29:::2;::::0;7733:1:::2;7706:26;:29::i;:::-;7681:22;::::0;::::2;:54:::0;7627:396:::2;;;7771:14;7754:5;:32;7750:273;;;7821:18;::::0;::::2;::::0;:25:::2;::::0;7844:1:::2;7821:22;:25::i;:::-;7800:18;::::0;::::2;:46:::0;7750:273:::2;;;7882:13;7865:5;:31;7861:162;;;7930:17;::::0;::::2;::::0;:24:::2;::::0;7952:1:::2;7930:21;:24::i;:::-;7910:17;::::0;::::2;:44:::0;7861:162:::2;;;7981:42;;-1:-1:-1::0;;;7981:42:1::2;;;;;;;:::i;7861:162::-;-1:-1:-1::0;8049:4:1::2;::::0;6504:1556;-1:-1:-1;;;;;;6504:1556:1:o;14315:363::-;1597:8;:15;14412:4;;14392:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;14428:31:::1;14462:8;14471:9;14462:19;;;;;;;;;;;;;;;;;;14428:53;;14518:6;:25;;;14499:15;:44;;:172;;;-1:-1:-1::0;14577:29:1::1;14560:13;::::0;::::1;::::0;::::1;;:46;::::0;::::1;;;;;;;:110;;;;-1:-1:-1::0;14626:25:1::1;;::::0;14655:15:::1;-1:-1:-1::0;14626:44:1::1;::::0;14315:363;-1:-1:-1;;;14315:363:1:o;15874:161::-;1597:8;:15;15967:16;;15947:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;16002:8:::1;16011:9;16002:19;;;;;;;;;;;;;;;;;;:26;;15995:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;15995:33:1::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;15874:161:::0;;;;:::o;9701:619::-;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;1597:8:1::1;:15:::0;9817:9;;1585:27;::::1;1577:75;;;;-1:-1:-1::0;;;1577:75:1::1;;;;;;;:::i;:::-;9842:31:::2;9876:8;9885:9;9876:19;;;;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;;::::2;;::::0;-1:-1:-1;9944:29:1::2;9927:13;::::0;::::2;::::0;::::2;;:46;::::0;::::2;;;;;;;9906:141;;;;-1:-1:-1::0;;;9906:141:1::2;;;;;;;:::i;:::-;10108:15;10079:6;:25;;;:44;;10058:132;;;;-1:-1:-1::0;;;10058:132:1::2;;;;;;;:::i;:::-;10201:50;10211:9;10222:28;10201:9;:50::i;:::-;10261:52;10271:9;10282:30;10261:9;:52::i;:::-;1662:1;1349::12::1;9701:619:1::0;:::o;1076:77:12:-;1114:7;1140:6;-1:-1:-1;;;;;1140:6:12;1076:77;:::o;15109:651:1:-;15265:24;15303:26;15343:30;15387:26;15427:25;15224:9;1597:8;:15;;;;1585:9;:27;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;15477:31:::1;15511:8;15520:9;15511:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;15561:23:::0;;15598:25:::1;::::0;::::1;::::0;15637:29:::1;::::0;::::1;::::0;15680:25:::1;::::0;::::1;::::0;15719:24:::1;::::0;;::::1;::::0;15561:23;;15598:25;;-1:-1:-1;15637:29:1;-1:-1:-1;15680:25:1;;-1:-1:-1;15719:24:1;-1:-1:-1;15109:651:1;-1:-1:-1;;;;15109:651:1:o;14069:240::-;14158:44;14205:26;;;:15;:26;;;;;14267:23;;;;:35;;14295:6;14267:27;:35::i;:::-;14241:23;;;;:61;-1:-1:-1;;14069:240:1:o;14684:419::-;14804:19;14837:18;14869:23;14917:31;14951:8;14960:9;14951:19;;;;;;;;;;;;;;;;;;14917:53;;15001:6;:18;;;15033:6;:17;;;15064:6;:22;;;14980:116;;;;;;;14684:419;;;;;:::o;3056:195::-;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;3150:16:1::1;:36:::0;;;3201:43:::1;::::0;::::1;::::0;::::1;::::0;3169:17;;3201:43:::1;:::i;2745:204::-:0;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;-1:-1:-1;;;;;2833:24:1;::::1;2825:70;;;;-1:-1:-1::0;;;2825:70:1::1;;;;;;;:::i;:::-;2905:9;:37:::0;;-1:-1:-1;;;;;;2905:37:1::1;-1:-1:-1::0;;;;;2905:37:1;;;::::1;::::0;;;::::1;::::0;;2745:204::o;4136:247::-;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;4250:26:1::1;:56:::0;;;4321:55:::1;::::0;::::1;::::0;::::1;::::0;4279:27;;4321:55:::1;:::i;11625:285::-:0;11737:4;11743:7;11717:9;1597:8;:15;;;;1585:9;:27;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;-1:-1:-1;;;11762:29:1::1;11794:22:::0;;;:11:::1;:22;::::0;;;;;;;-1:-1:-1;;;;;11794:29:1;;;::::1;::::0;;;;;;;11855:14;;::::1;11883:10:::0;;::::1;::::0;11855:14:::1;::::0;;::::1;;;::::0;11625:285::o;546:39::-;;;-1:-1:-1;;;;;546:39:1;;:::o;9205:387::-;1290:12:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;1597:8:1::1;:15:::0;9345:9;;1585:27;::::1;1577:75;;;;-1:-1:-1::0;;;1577:75:1::1;;;;;;;:::i;:::-;9370:31:::2;9404:8;9413:9;9404:19;;;;;;;;;::::0;;;::::2;::::0;;9463:13:::2;9404:19;::::0;;::::2;;9463:13:::0;;::::2;::::0;9404:19;;-1:-1:-1;9463:13:1::2;;9455:22;::::0;::::2;;;;;;9487:13;::::0;::::2;:23:::0;;9434:43;;-1:-1:-1;9503:7:1;;-1:-1:-1;;9487:23:1::2;::::0;9503:7;9487:23:::2;::::0;::::2;;;;;;;;;;;9545:9;9525:60;9556:10;9576:7;9568:16;;;;;;;;9525:60;;;;;;;:::i;:::-;;;;;;;;1662:1;;1349::12::1;9205:387:1::0;;:::o;11920:184::-;1597:8;:15;12033:7;;12013:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;12059:8:::1;12068:9;12059:19;;;;;;;;;;;;;;;;;;:38;;;12052:45;;11920:184:::0;;;;:::o;703:50::-;;;;:::o;759:46::-;;;;:::o;1993:240:12:-;1290:12;:10;:12::i;:::-;1280:6;;-1:-1:-1;;;;;1280:6:12;;;:22;;;1272:67;;;;;-1:-1:-1;;;1272:67:12;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1272:67:12;;;;;;;;;;;;;;;-1:-1:-1;;;;;2081:22:12;::::1;2073:73;;;;-1:-1:-1::0;;;2073:73:12::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2182:6;::::0;;2161:38:::1;::::0;-1:-1:-1;;;;;2161:38:12;;::::1;::::0;2182:6;::::1;::::0;2161:38:::1;::::0;::::1;2209:6;:17:::0;;-1:-1:-1;;;;;;2209:17:12::1;-1:-1:-1::0;;;;;2209:17:12;;;::::1;::::0;;;::::1;::::0;;1993:240::o;598:104:0:-;685:10;598:104;:::o;10331:829:1:-;1597:8;:15;10393:9;;1585:27;;1577:75;;;;-1:-1:-1;;;1577:75:1;;;;;;;:::i;:::-;10414:31:::1;10448:8;10457:9;10448:19;;;;;;;;;;;;;;;;;;10414:53;;10510:15;10478:6;:29;;:47;;;;10563:49;10583:6;:28;;;10563:15;:19;;:49;;;;:::i;:::-;10535:25;::::0;::::1;:77:::0;;;10686:22:::1;::::0;10656:53:::1;::::0;10535:77;10656:29:::1;:53::i;:::-;10622:31;::::0;::::1;:87:::0;10719:13:::1;::::0;::::1;:45:::0;;-1:-1:-1;;10719:45:1::1;10735:29;10719:45;::::0;;;10797:9;:21:::1;::::0;;-1:-1:-1;;;10797:21:1;;;;-1:-1:-1;;;;;;;10797:9:1::1;::::0;:19:::1;::::0;:21:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;-1:-1:-1;10797:9:1;:21;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10775:43;;10833:9;10828:200;10852:11;10848:1;:15;10828:200;;;10900:9;::::0;:20:::1;::::0;-1:-1:-1;;;10900:20:1;;10884:13:::1;::::0;-1:-1:-1;;;;;10900:9:1::1;::::0;:17:::1;::::0;:20:::1;::::0;10918:1;;10900:20:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10934:13;::::0;::::1;:25:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;10934:25:1;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;10934:25:1;;::::1;-1:-1:-1::0;;;;;;10934:25:1;;::::1;::::0;::::1;::::0;;10973:22;;;:11:::1;:22:::0;;;;;;:29;;;;;;;;;;:44;;-1:-1:-1;;10973:44:1::1;::::0;::::1;::::0;;10865:3;;;::::1;::::0;-1:-1:-1;10828:200:1::1;;;-1:-1:-1::0;11063:9:1;11043:110:::1;11082:29;11122;11114:38;::::0;882:176:13;940:7;971:5;;;994:6;;;;986:46;;;;;-1:-1:-1;;;986:46:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;1050:1;-1:-1:-1;882:176:13;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:404:14;;;147:3;140:4;132:6;128:17;124:27;114:2;;172:8;162;155:26;114:2;-1:-1:-1;202:20:14;;245:18;234:30;;231:2;;;284:8;274;267:26;231:2;328:4;320:6;316:17;304:29;;391:3;384:4;376;368:6;364:17;356:6;352:30;348:41;345:50;342:2;;;408:1;405;398:12;342:2;104:314;;;;;:::o;423:259::-;;535:2;523:9;514:7;510:23;506:32;503:2;;;556:6;548;541:22;503:2;600:9;587:23;619:33;646:5;619:33;:::i;687:263::-;;810:2;798:9;789:7;785:23;781:32;778:2;;;831:6;823;816:22;778:2;868:9;862:16;887:33;914:5;887:33;:::i;955:1135::-;;;;;;;;1213:3;1201:9;1192:7;1188:23;1184:33;1181:2;;;1235:6;1227;1220:22;1181:2;1280:9;1267:23;1309:18;1350:2;1342:6;1339:14;1336:2;;;1371:6;1363;1356:22;1336:2;1415:76;1483:7;1474:6;1463:9;1459:22;1415:76;:::i;:::-;1510:8;;-1:-1:-1;1389:102:14;-1:-1:-1;1592:2:14;1577:18;;1564:32;;-1:-1:-1;1643:2:14;1628:18;;1615:32;;-1:-1:-1;1697:2:14;1682:18;;1669:32;;-1:-1:-1;1737:13:14;;1730:21;1720:32;;1710:2;;1771:6;1763;1756:22;1710:2;1799:5;;-1:-1:-1;1857:3:14;1842:19;;1829:33;;1874:16;;;1871:2;;;1908:6;1900;1893:22;1871:2;;1952:78;2022:7;2011:8;2000:9;1996:24;1952:78;:::i;:::-;1171:919;;;;-1:-1:-1;1171:919:14;;-1:-1:-1;1171:919:14;;;;1926:104;;-1:-1:-1;;;1171:919:14:o;2095:190::-;;2207:2;2195:9;2186:7;2182:23;2178:32;2175:2;;;2228:6;2220;2213:22;2175:2;-1:-1:-1;2256:23:14;;2165:120;-1:-1:-1;2165:120:14:o;2290:194::-;;2413:2;2401:9;2392:7;2388:23;2384:32;2381:2;;;2434:6;2426;2419:22;2381:2;-1:-1:-1;2462:16:14;;2371:113;-1:-1:-1;2371:113:14:o;2489:327::-;;;2618:2;2606:9;2597:7;2593:23;2589:32;2586:2;;;2639:6;2631;2624:22;2586:2;2680:9;2667:23;2657:33;;2740:2;2729:9;2725:18;2712:32;2753:33;2780:5;2753:33;:::i;:::-;2805:5;2795:15;;;2576:240;;;;;:::o;2821:395::-;;;;2967:2;2955:9;2946:7;2942:23;2938:32;2935:2;;;2988:6;2980;2973:22;2935:2;3029:9;3016:23;3006:33;;3089:2;3078:9;3074:18;3061:32;3102:33;3129:5;3102:33;:::i;:::-;2925:291;;3154:5;;-1:-1:-1;;;3206:2:14;3191:18;;;;3178:32;;2925:291::o;3221:361::-;;;3367:2;3355:9;3346:7;3342:23;3338:32;3335:2;;;3388:6;3380;3373:22;3335:2;3429:9;3416:23;3406:33;;3489:2;3478:9;3474:18;3461:32;3522:1;3515:5;3512:12;3502:2;;3543:6;3535;3528:22;3587:361;;;3733:2;3721:9;3712:7;3708:23;3704:32;3701:2;;;3754:6;3746;3739:22;3701:2;3795:9;3782:23;3772:33;;3855:2;3844:9;3840:18;3827:32;3888:1;3881:5;3878:12;3868:2;;3909:6;3901;3894:22;3953:258;;;4082:2;4070:9;4061:7;4057:23;4053:32;4050:2;;;4103:6;4095;4088:22;4050:2;-1:-1:-1;;4131:23:14;;;4201:2;4186:18;;;4173:32;;-1:-1:-1;4040:171:14:o;4216:480::-;;4324:5;4318:12;4351:6;4346:3;4339:19;4377:4;4406:2;4401:3;4397:12;4390:19;;4443:2;4436:5;4432:14;4464:3;4476:195;4490:6;4487:1;4484:13;4476:195;;;4555:13;;-1:-1:-1;;;;;4551:39:14;4539:52;;4611:12;;;;4646:15;;;;4587:1;4505:9;4476:195;;;-1:-1:-1;4687:3:14;;4294:402;-1:-1:-1;;;;;4294:402:14:o;5175:93::-;5247:13;5240:21;5228:34;;5218:50::o;5273:137::-;5360:1;5353:5;5350:12;5340:2;;5366:9;5340:2;5386:18;;5330:80::o;5415:137::-;5502:1;5495:5;5492:12;5482:2;;5508:9;5557:203;-1:-1:-1;;;;;5721:32:14;;;;5703:51;;5691:2;5676:18;;5658:102::o;5765:267::-;;5944:2;5933:9;5926:21;5964:62;6022:2;6011:9;6007:18;5999:6;5964:62;:::i;6037:1590::-;;6362:3;6351:9;6344:22;6389:63;6447:3;6436:9;6432:19;6424:6;6389:63;:::i;:::-;6471:2;6521:9;6513:6;6509:22;6504:2;6493:9;6489:18;6482:50;6552:6;6587;6581:13;6618:6;6610;6603:22;6653:2;6645:6;6641:15;6634:22;;6713:2;6707;6699:6;6695:15;6687:6;6683:28;6679:37;6751:2;6743:6;6739:15;6772:4;6785:716;6799:6;6796:1;6793:13;6785:716;;;6862:2;6858:7;6915:2;6906:6;6898;6894:19;6890:28;6885:3;6878:41;6948:6;6942:13;6990:2;6984:9;7021:8;7013:6;7006:24;7054:4;7071:157;7087:8;7082:3;7079:17;7071:157;;;7195:12;;;7191:21;;7185:28;7162:16;;;7158:25;;7151:63;7106:12;;7071:157;;;7252:8;7247:3;7244:17;7241:2;;;7331:4;7326:2;7315:8;7307:6;7303:21;7299:30;7292:44;7241:2;-1:-1:-1;7479:12:14;;;;7407:2;7393:17;7389:26;;;7377:39;;;;7373:48;;;-1:-1:-1;7444:15:14;;;;6821:1;6814:9;6785:716;;;6789:3;;7518:6;7510:14;;;;;;;7533:45;7574:2;7563:9;7559:18;7551:6;7533:45;:::i;:::-;7614:6;7609:2;7598:9;7594:18;7587:34;6334:1293;;;;;;;:::o;7632:187::-;7797:14;;7790:22;7772:41;;7760:2;7745:18;;7727:92::o;7824:258::-;8017:14;;8010:22;7992:41;;8064:2;8049:18;;8042:34;7980:2;7965:18;;7947:135::o;8317:217::-;8466:2;8451:18;;8478:50;8455:9;8510:6;8478:50;:::i;8539:354::-;8741:2;8723:21;;;8780:2;8760:18;;;8753:30;8819:32;8814:2;8799:18;;8792:60;8884:2;8869:18;;8713:180::o;8898:402::-;9100:2;9082:21;;;9139:2;9119:18;;;9112:30;9178:34;9173:2;9158:18;;9151:62;-1:-1:-1;;;9244:2:14;9229:18;;9222:36;9290:3;9275:19;;9072:228::o;9305:353::-;9507:2;9489:21;;;9546:2;9526:18;;;9519:30;9585:31;9580:2;9565:18;;9558:59;9649:2;9634:18;;9479:179::o;9663:412::-;9865:2;9847:21;;;9904:2;9884:18;;;9877:30;9943:34;9938:2;9923:18;;9916:62;-1:-1:-1;;;10009:2:14;9994:18;;9987:46;10065:3;10050:19;;9837:238::o;10080:356::-;10282:2;10264:21;;;10301:18;;;10294:30;10360:34;10355:2;10340:18;;10333:62;10427:2;10412:18;;10254:182::o;10441:422::-;10643:2;10625:21;;;10682:2;10662:18;;;10655:30;10721:34;10716:2;10701:18;;10694:62;10792:28;10787:2;10772:18;;10765:56;10853:3;10838:19;;10615:248::o;10868:397::-;11070:2;11052:21;;;11109:2;11089:18;;;11082:30;11148:34;11143:2;11128:18;;11121:62;-1:-1:-1;;;11214:2:14;11199:18;;11192:31;11255:3;11240:19;;11042:223::o;11270:405::-;11472:2;11454:21;;;11511:2;11491:18;;;11484:30;11550:34;11545:2;11530:18;;11523:62;-1:-1:-1;;;11616:2:14;11601:18;;11594:39;11665:3;11650:19;;11444:231::o;11680:402::-;11882:2;11864:21;;;11921:2;11901:18;;;11894:30;11960:34;11955:2;11940:18;;11933:62;-1:-1:-1;;;12026:2:14;12011:18;;12004:36;12072:3;12057:19;;11854:228::o;12087:399::-;12289:2;12271:21;;;12328:2;12308:18;;;12301:30;12367:34;12362:2;12347:18;;12340:62;-1:-1:-1;;;12433:2:14;12418:18;;12411:33;12476:3;12461:19;;12261:225::o;12491:355::-;12693:2;12675:21;;;12732:2;12712:18;;;12705:30;12771:33;12766:2;12751:18;;12744:61;12837:2;12822:18;;12665:181::o;12851:410::-;13053:2;13035:21;;;13092:2;13072:18;;;13065:30;13131:34;13126:2;13111:18;;13104:62;-1:-1:-1;;;13197:2:14;13182:18;;13175:44;13251:3;13236:19;;13025:236::o;13266:356::-;13468:2;13450:21;;;13487:18;;;13480:30;13546:34;13541:2;13526:18;;13519:62;13613:2;13598:18;;13440:182::o;13627:1587::-;;13804:2;13793:9;13786:21;13849:6;13843:13;13838:2;13827:9;13823:18;13816:41;13911:2;13903:6;13899:15;13893:22;13888:2;13877:9;13873:18;13866:50;13970:2;13962:6;13958:15;13952:22;13947:2;13936:9;13932:18;13925:50;14030:2;14022:6;14018:15;14012:22;14006:3;13995:9;13991:19;13984:51;14090:3;14082:6;14078:16;14072:23;14066:3;14055:9;14051:19;14044:52;14151:3;14143:6;14139:16;14133:23;14127:3;14116:9;14112:19;14105:52;14212:3;14204:6;14200:16;14194:23;14188:3;14177:9;14173:19;14166:52;14255:3;14247:6;14243:16;14237:23;14279:3;14318:2;14313;14302:9;14298:18;14291:30;14358:2;14350:6;14346:15;14340:22;14330:32;;;14381:3;14420:2;14415;14404:9;14400:18;14393:30;14460:2;14452:6;14448:15;14442:22;14432:32;;;14483:3;14522:2;14517;14506:9;14502:18;14495:30;14572:2;14564:6;14560:15;14554:22;14534:42;;;14595:3;14607:65;14668:2;14657:9;14653:18;14639:12;14607:65;:::i;:::-;14709:15;;14703:22;;-1:-1:-1;14744:3:14;14756:67;14804:18;;;14703:22;14756:67;:::i;:::-;14872:2;14864:6;14860:15;14854:22;14832:44;;;14895:6;14921:3;14961:2;14955:3;14944:9;14940:19;14933:31;14987:82;15064:3;15053:9;15049:19;15033:14;14987:82;:::i;:::-;15106:16;;;15100:23;14973:96;;-1:-1:-1;15132:53:14;15166:18;;;15100:23;15132:53;:::i;:::-;-1:-1:-1;15202:6:14;;13776:1438;-1:-1:-1;;;;13776:1438:14:o;15219:388::-;15443:13;;15436:21;15429:29;15411:48;;15529:4;15517:17;;;15511:24;15504:32;15497:40;15475:20;;;15468:70;15594:4;15582:17;;;15576:24;15554:20;;;15547:54;;;;15399:2;15384:18;;15366:241::o;15612:177::-;15758:25;;;15746:2;15731:18;;15713:76::o;15794:258::-;15962:25;;;16030:14;16023:22;16018:2;16003:18;;15996:50;15950:2;15935:18;;15917:135::o;16057:248::-;16231:25;;;16287:2;16272:18;;16265:34;16219:2;16204:18;;16186:119::o;16310:319::-;16512:25;;;16568:2;16553:18;;16546:34;;;;16611:2;16596:18;;16589:34;16500:2;16485:18;;16467:162::o;16634:463::-;16893:25;;;16949:2;16934:18;;16927:34;;;;16992:2;16977:18;;16970:34;;;;17035:2;17020:18;;17013:34;17078:3;17063:19;;17056:35;16880:3;16865:19;;16847:250::o;17102:533::-;;;17245:11;17232:25;17339:2;17335:7;17324:8;17308:14;17304:29;17300:43;17280:18;17276:68;17266:2;;17361:4;17355;17348:18;17266:2;17391:33;;17443:20;;;-1:-1:-1;17486:18:14;17475:30;;17472:2;;;17521:4;17515;17508:18;17472:2;17557:4;17545:17;;-1:-1:-1;17588:14:14;17584:27;;;17574:38;;17571:2;;;17625:1;17622;17615:12;17640:133;-1:-1:-1;;;;;17717:31:14;;17707:42;;17697:2;;17763:1;17760;17753:12;17697:2;17687:86;:::o
Swarm Source
ipfs://bcf3bccd8e9211c81d5dd0bb64b3a104614ef587e171598cdaeb456912fc16a2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.