Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xb0eed795b341b53346c51232cc8ddf19adcd19e60b305a0bf3f52009aefa9b02 | Update Pools | 29274904 | 25 days 11 hrs ago | 0x9c36bc6b8c107014b6e86536d809b74c6fdb8ce9 | IN | 0xddd4982e3e9e5c5c489321d2143b8a027f535112 | 0 MATIC | 0.004953180002 | |
0xb37c695e9f19ed33d431c25dfa498ae79a386de9f34460914360c168e2a56408 | Change Governor | 29274867 | 25 days 11 hrs ago | 0x9c36bc6b8c107014b6e86536d809b74c6fdb8ce9 | IN | 0xddd4982e3e9e5c5c489321d2143b8a027f535112 | 0 MATIC | 0.00116502 | |
0xe3348bbc1afb4282dd5b49c062823429eb65a06ef80e52157bf87bae7c22412d | 0x60c06040 | 29212408 | 27 days 1 hr ago | 0x77447f2ca205d6405206d1af316f1f5954bc2bb5 | IN | Create: XVMCconsensus | 0 MATIC | 0.185587512 |
[ Download CSV Export ]
Contract Name:
XVMCconsensus
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-06-05 */ // File: xvmc-contracts/libs/standard/Address.sol pragma solidity >=0.6.12 <=0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: xvmc-contracts/libs/custom/IERC20.sol pragma solidity >=0.6.12 <=0.8.0; //original: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol //added functions for mint, burn, burnXVMC, transferXVMC and transferOwnership /** * @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); function mint(address to, uint256 amount) external; function burn(uint256 amount) external; function burnXVMC(address account, uint256 amount) external returns (bool); function transferXVMC(address _sender, address _recipient, uint256 _amount) external returns (bool); function transferOwnership(address newOwner) external; /** * @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); } // File: xvmc-contracts/libs/custom/SafeERC20.sol pragma solidity >=0.6.12 <=0.8.0; //original: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol //using transferXVMC instead of transferFrom for safeTransferFrom /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferXVMC.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: xvmc-contracts/consensus.sol pragma solidity 0.8.0; interface IXVMCgovernor { function costToVote() external view returns (uint256); function maximumVoteTokens() external view returns (uint256); function delayBeforeEnforce() external view returns (uint256); function eventFibonacceningActive() external view returns (bool); function fibonacciDelayed() external returns (bool); function delayFibonacci(bool _arg) external; function eligibleNewGovernor() external returns (address); function changeGovernorActivated() external returns (bool); function setNewGovernor(address beneficiary) external; function executeWithdraw(uint256 withdrawID) external; function treasuryRequest(address _tokenAddr, address _recipient, uint256 _amountToSend) external; function newGovernorRequestBlock() external returns (uint256); function enforceGovernor() external; function acPool1() external view returns (address); function acPool2() external view returns (address); function acPool3() external view returns (address); function acPool4() external view returns (address); function acPool5() external view returns (address); function acPool6() external view returns (address); function governorRejected() external; } interface IacPool { function totalShares() external view returns (uint256); function totalVotesForID(uint256 proposalID) external view returns (uint256); function getPricePerFullShare() external view returns (uint256); } interface IToken { function governor() external view returns (address); } contract XVMCconsensus is Ownable { using SafeERC20 for IERC20; struct HaltFibonacci { bool valid; bool enforced; uint256 consensusVoteID; uint256 startTimestamp; uint256 delayInSeconds; } struct TreasuryTransfer { bool valid; uint256 firstCallTimestamp; uint256 valueSacrificedForVote; uint256 valueSacrificedAgainst; uint256 delay; address tokenAddress; address beneficiary; uint256 amountToSend; uint256 consensusProposalID; } struct ConsensusVote { uint16 typeOfChange; // 0 == governor change, 1 == treasury transfer, 2 == halt fibonaccening address beneficiaryAddress; uint256 timestamp; } struct GovernorInvalidated { bool isInvalidated; bool hasPassed; } HaltFibonacci[] public haltProposal; TreasuryTransfer[] public treasuryProposal; ConsensusVote[] public consensusProposal; uint256 public immutable goldenRatio = 1618; //1.618 is the golden ratio address public immutable token; //XVMC token (address) uint256 public governorCount; //count number of proposals //addresses for time-locked deposits(autocompounding pools) address public acPool1; address public acPool2; address public acPool3; address public acPool4; address public acPool5; address public acPool6; mapping(address => GovernorInvalidated) public isGovInvalidated; mapping(uint256 => uint256) public highestConsensusVotes; // *kinda* allows voting for multiple proposals constructor(address _XVMC) { consensusProposal.push(ConsensusVote(0, address(this), block.timestamp)); //0 is an invalid proposal(is default / neutral position) token = _XVMC; } event ProposalAgainstCommonEnemy(uint256 HaltID, uint256 consensusProposalID, uint256 startTimestamp, uint256 delayInSeconds, address indexed enforcer); event EnforceDelay(uint256 consensusProposalID, address indexed enforcer); event RemoveDelay(uint256 consensusProposalID, address indexed enforcer); event TreasuryProposal(uint256 proposalID, uint256 sacrificedTokens, address tokenAddress, address recipient, uint256 amount, uint256 consensusVoteID, address indexed enforcer, uint256 delay); event TreasuryEnforce(uint256 proposalID, address indexed enforcer, bool isSuccess); event ProposeGovernor(uint256 proposalID, address newGovernor, address indexed enforcer); event ChangeGovernor(uint256 proposalID, address indexed enforcer, bool status); event AddVotes(uint256 _type, uint256 proposalID, address indexed voter, uint256 tokensSacrificed, bool _for); /* * If XVMC is to be listed on margin trading exchanges * As a lot of supply is printed during Fibonaccening events * It could provide "free revenue" for traders shorting XVMC * This is a mechanism meant to give XVMC holders an opportunity * to unite against the common enemy(shorters). * The function effectively delays the fibonaccening event * Requires atleast 15% votes, with less than 50% voting against */ function uniteAgainstTheCommonEnemy(uint256 startTimestamp, uint256 delayInSeconds) external { require(startTimestamp >= (block.timestamp + 3600) && delayInSeconds <= 72 * 3600); //no less than an hour before the event and can't last more than 3 days IERC20(token).safeTransferFrom(msg.sender, owner(), 50 * IXVMCgovernor(owner()).costToVote()); uint256 _consensusID = consensusProposal.length; //need to create consensus proposal because the voting is done by voting for a proposal ID(inside pool contracts) consensusProposal.push( ConsensusVote(2, address(this), block.timestamp) ); // vote for consensusProposal.push( ConsensusVote(2, address(this), block.timestamp) ); // vote against haltProposal.push( HaltFibonacci(true, false, _consensusID, startTimestamp, delayInSeconds) ); emit ProposalAgainstCommonEnemy(haltProposal.length - 1, _consensusID, startTimestamp, delayInSeconds, msg.sender); } function enforceDelay(uint256 fibonacciHaltID) external { require(haltProposal[fibonacciHaltID].valid && !haltProposal[fibonacciHaltID].enforced && haltProposal[fibonacciHaltID].startTimestamp <= block.timestamp && block.timestamp < haltProposal[fibonacciHaltID].startTimestamp + haltProposal[fibonacciHaltID].delayInSeconds); uint256 consensusID = haltProposal[fibonacciHaltID].consensusVoteID; uint256 _tokensCasted = tokensCastedPerVote(consensusID); require( _tokensCasted >= totalXVMCStaked() * 15 / 100, "Atleast 15% of staked(weighted) tokens required" ); require( tokensCastedPerVote(consensusID + 1) <= _tokensCasted / 2, "More than 50% are voting against!" ); haltProposal[fibonacciHaltID].enforced = true; IXVMCgovernor(owner()).delayFibonacci(true); emit EnforceDelay(consensusID, msg.sender); } function removeDelay(uint256 haltProposalID) external { require(IXVMCgovernor(owner()).fibonacciDelayed() && haltProposal[haltProposalID].enforced && haltProposal[haltProposalID].valid); require(block.timestamp >= haltProposal[haltProposalID].startTimestamp + haltProposal[haltProposalID].delayInSeconds, "not yet expired"); haltProposal[haltProposalID].valid = false; IXVMCgovernor(owner()).delayFibonacci(false); emit RemoveDelay(haltProposalID, msg.sender); } /** * Initiates a request to transfer tokens from the treasury wallet * Can be voted against during the "delay before enforce" period * For extra safety * Requires vote from long term stakers to enforce the transfer * Requires 25% of votes to pass * If only 5% of voters disagree, the proposal is rejected * * The possibilities here are endless * * Could act as a NFT marketplace too, could act as a treasury that pays "contractors",.. * Since it's upgradeable, this can be added later on anyways.... * Should probably make universal private function for Consensus Votes */ function initiateTreasuryTransferProposal(uint256 depositingTokens, address tokenAddress, address recipient, uint256 amountToSend, uint256 delay) external { require(depositingTokens >= IXVMCgovernor(owner()).costToVote() * 10, "atleast x10minCostToVote" ); require(delay <= IXVMCgovernor(owner()).delayBeforeEnforce(), "must be shorter than Delay before enforce"); IERC20(token).safeTransferFrom(msg.sender, owner(), depositingTokens); uint256 _consensusID = consensusProposal.length + 1; consensusProposal.push( ConsensusVote(1, address(this), block.timestamp) ); // vote for consensusProposal.push( ConsensusVote(1, address(this), block.timestamp) ); // vote against treasuryProposal.push( TreasuryTransfer(true, block.timestamp, depositingTokens, 0, delay, tokenAddress, recipient, amountToSend, _consensusID) ); emit TreasuryProposal( treasuryProposal.length - 1, depositingTokens, tokenAddress, recipient, amountToSend, _consensusID, msg.sender, delay ); } //can only vote with tokens during the delay+delaybeforeenforce period(then this period ends, and to approve the transfer, must be voted through voting with locked shares) function voteTreasuryTransferProposalY(uint256 proposalID, uint256 withTokens) external { require(treasuryProposal[proposalID].valid, "invalid"); require( treasuryProposal[proposalID].firstCallTimestamp + treasuryProposal[proposalID].delay + IXVMCgovernor(owner()).delayBeforeEnforce() > block.timestamp, "can already be enforced" ); IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens); treasuryProposal[proposalID].valueSacrificedForVote+= withTokens; emit AddVotes(0, proposalID, msg.sender, withTokens, true); } function voteTreasuryTransferProposalN(uint256 proposalID, uint256 withTokens, bool withAction) external { require(treasuryProposal[proposalID].valid, "invalid"); require( treasuryProposal[proposalID].firstCallTimestamp + treasuryProposal[proposalID].delay + IXVMCgovernor(owner()).delayBeforeEnforce() > block.timestamp, "can already be enforced" ); IERC20(token).safeTransferFrom(msg.sender, owner(), withTokens); treasuryProposal[proposalID].valueSacrificedAgainst+= withTokens; if(withAction) { vetoTreasuryTransferProposal(proposalID); } emit AddVotes(0, proposalID, msg.sender, withTokens, false); } function vetoTreasuryTransferProposal(uint256 proposalID) public { require(proposalID != 0, "Invalid proposal ID"); require(treasuryProposal[proposalID].valid == true, "Proposal already invalid"); require( treasuryProposal[proposalID].firstCallTimestamp + treasuryProposal[proposalID].delay + IXVMCgovernor(owner()).delayBeforeEnforce() >= block.timestamp, "past the point of no return" ); require(treasuryProposal[proposalID].valueSacrificedForVote < treasuryProposal[proposalID].valueSacrificedAgainst, "needs more votes"); treasuryProposal[proposalID].valid = false; emit TreasuryEnforce(proposalID, msg.sender, false); } /* * After delay+delayBeforeEnforce , the proposal effectively passes to be voted through consensus (token voting stops, voting with locked shares starts) * Another delayBeforeEnforce period during which users can vote with locked shares */ function approveTreasuryTransfer(uint256 proposalID) public { require(treasuryProposal[proposalID].valid, "Proposal already invalid"); uint256 consensusID = treasuryProposal[proposalID].consensusProposalID; updateHighestConsensusVotes(consensusID); updateHighestConsensusVotes(consensusID+1); require( treasuryProposal[proposalID].firstCallTimestamp + treasuryProposal[proposalID].delay + 2 * IXVMCgovernor(owner()).delayBeforeEnforce() <= block.timestamp, "Enough time must pass before enforcing" ); uint256 _totalStaked = totalXVMCStaked(); uint256 _castedInFavor = highestConsensusVotes[consensusID]; if(treasuryProposal[proposalID].valueSacrificedForVote >= treasuryProposal[proposalID].valueSacrificedAgainst && _castedInFavor >= _totalStaked * 15 / 100 ) { if(highestConsensusVotes[consensusID+1] >= _castedInFavor * 33 / 100) { //just third of votes voting against kills the treasury withdrawal treasuryProposal[proposalID].valid = false; emit TreasuryEnforce(proposalID, msg.sender, false); } else { IXVMCgovernor(owner()).treasuryRequest( treasuryProposal[proposalID].tokenAddress, treasuryProposal[proposalID].beneficiary, treasuryProposal[proposalID].amountToSend ); treasuryProposal[proposalID].valid = false; emit TreasuryEnforce(proposalID, msg.sender, true); } } else { treasuryProposal[proposalID].valid = false; emit TreasuryEnforce(proposalID, msg.sender, false); } } /** * Kills treasury transfer proposal if more than 15% of weighted vote(of total staked) */ function killTreasuryTransferProposal(uint256 proposalID) external { require(treasuryProposal[proposalID].valid, "Proposal already invalid"); uint256 consensusID = treasuryProposal[proposalID].consensusProposalID; require( tokensCastedPerVote(consensusID+1) >= totalXVMCStaked() * 15 / 100, "15% weigted vote (voting against) required to kill the proposal" ); treasuryProposal[proposalID].valid = false; emit TreasuryEnforce(proposalID, msg.sender, false); } //updates highest votes collected function updateHighestConsensusVotes(uint256 consensusID) public { uint256 _current = tokensCastedPerVote(consensusID); if(_current > highestConsensusVotes[consensusID]) { highestConsensusVotes[consensusID] = _current; } } function proposeGovernor(address _newGovernor) external { governorCount++; IERC20(token).safeTransferFrom(msg.sender, owner(), IXVMCgovernor(owner()).costToVote() * 100); consensusProposal.push( ConsensusVote(0, _newGovernor, block.timestamp) ); consensusProposal.push( ConsensusVote(0, _newGovernor, block.timestamp) ); //even numbers are basically VETO (for voting against) emit ProposeGovernor(consensusProposal.length - 2, _newGovernor, msg.sender); } /** * Atleast 33% of voters required * with 75% agreement required to reach consensus * After proposing Governor, a period of time(delayBeforeEnforce) must pass * During this time, the users can vote in favor(proposalID) or against(proposalID+1) * If voting succesfull, it can be submitted * And then there is a period of roughly 6 days(specified in governing contract) before the change can be enforced * During this time, users can still vote and reject change * Unless rejected, governing contract can be updated and changes enforced */ function changeGovernor(uint256 proposalID) external { require(block.timestamp >= (consensusProposal[proposalID].timestamp + IXVMCgovernor(owner()).delayBeforeEnforce()), "Must wait delay before enforce"); require(!(isGovInvalidated[consensusProposal[proposalID].beneficiaryAddress].isInvalidated), " alreadyinvalidated"); require(!(isGovInvalidated[consensusProposal[proposalID].beneficiaryAddress].hasPassed), " already passed"); require(consensusProposal.length > proposalID && proposalID % 2 == 1, "invalid proposal ID"); //can't be 0 either, but %2 solves that require(!(IXVMCgovernor(owner()).changeGovernorActivated())); require(consensusProposal[proposalID].typeOfChange == 0); require( tokensCastedPerVote(proposalID) >= totalXVMCStaked() * 33 / 100, "Requires atleast 33% of staked(weighted) tokens" ); //requires 80% agreement if(tokensCastedPerVote(proposalID+1) >= tokensCastedPerVote(proposalID) / 5) { isGovInvalidated[consensusProposal[proposalID].beneficiaryAddress].isInvalidated = true; emit ChangeGovernor(proposalID, msg.sender, false); } else { IXVMCgovernor(owner()).setNewGovernor(consensusProposal[proposalID].beneficiaryAddress); isGovInvalidated[consensusProposal[proposalID].beneficiaryAddress].hasPassed = true; emit ChangeGovernor(proposalID, msg.sender, true); } } /** * After approved, still roughly 6 days to cancle the new governor, if less than 80% votes agree * 6 days at beginning in case we need to make changes on the fly, and later on the period should be increased * Note: The proposal IDs here are for the consensus ID * After rejecting, call the governorRejected in governing contract(sets activated setting to false) */ function vetoGovernor(uint256 proposalID, bool _withUpdate) external { require(proposalID % 2 == 1, "Invalid proposal ID"); require(isGovInvalidated[consensusProposal[proposalID].beneficiaryAddress].hasPassed && !isGovInvalidated[consensusProposal[proposalID].beneficiaryAddress].isInvalidated); if(tokensCastedPerVote(proposalID+1) >= tokensCastedPerVote(proposalID) / 5) { isGovInvalidated[consensusProposal[proposalID].beneficiaryAddress].isInvalidated = true; emit ChangeGovernor(proposalID, msg.sender, false); } if(_withUpdate) { IXVMCgovernor(owner()).governorRejected(); } } //even if not approved, can be cancled at any time if 25% of weighted votes go AGAINST function vetoGovernor2(uint256 proposalID, bool _withUpdate) external { require(proposalID % 2 == 1, "Invalid proposal ID"); if(tokensCastedPerVote(proposalID+1) >= totalXVMCStaked() * 25 / 100) { //25% of weighted total vote AGAINST kills the proposal as well isGovInvalidated[consensusProposal[proposalID].beneficiaryAddress].isInvalidated = true; emit ChangeGovernor(proposalID, msg.sender, false); } if(_withUpdate) { IXVMCgovernor(owner()).governorRejected(); } } function enforceGovernor(uint256 proposalID) external { require(proposalID % 2 == 1, "invalid proposal ID"); //proposal ID = 0 is neutral position and not allowed(%2 applies) require(!isGovInvalidated[consensusProposal[proposalID].beneficiaryAddress].isInvalidated, "invalid"); require(consensusProposal[proposalID].beneficiaryAddress == IXVMCgovernor(owner()).eligibleNewGovernor()); IXVMCgovernor(owner()).enforceGovernor(); isGovInvalidated[consensusProposal[proposalID].beneficiaryAddress].isInvalidated = true; } /** * Updates pool addresses and token addresses from the governor */ function updatePools() external { acPool1 = IXVMCgovernor(owner()).acPool1(); acPool2 = IXVMCgovernor(owner()).acPool2(); acPool3 = IXVMCgovernor(owner()).acPool3(); acPool4 = IXVMCgovernor(owner()).acPool4(); acPool5 = IXVMCgovernor(owner()).acPool5(); acPool6 = IXVMCgovernor(owner()).acPool6(); } //transfers ownership of this contract to new governor //masterchef is the token owner, governor is the owner of masterchef function changeGovernor() external { _transferOwnership(IToken(token).governor()); } function treasuryRequestsCount() external view returns (uint256) { return treasuryProposal.length; } /** * Returns total XVMC staked accross all pools. */ function totalXVMCStaked() public view returns(uint256) { return IERC20(token).balanceOf(acPool1) + IERC20(token).balanceOf(acPool2) + IERC20(token).balanceOf(acPool3) + IERC20(token).balanceOf(acPool4) + IERC20(token).balanceOf(acPool5) + IERC20(token).balanceOf(acPool6); } /** * Gets XVMC allocated per vote with ID for each pool * Process: * Gets votes for ID and calculates XVMC equivalent * ...and assigns weights to votes * Pool1(20%), Pool2(30%), Pool3(50%), Pool4(75%), Pool5(115%), Pool6(150%) */ function tokensCastedPerVote(uint256 _forID) public view returns(uint256) { return ( IacPool(acPool1).totalVotesForID(_forID) * IacPool(acPool1).getPricePerFullShare() / 1e19 * 2 + IacPool(acPool2).totalVotesForID(_forID) * IacPool(acPool2).getPricePerFullShare() / 1e19 * 3 + IacPool(acPool3).totalVotesForID(_forID) * IacPool(acPool3).getPricePerFullShare() / 1e19 * 5 + IacPool(acPool4).totalVotesForID(_forID) * IacPool(acPool4).getPricePerFullShare() / 1e20 * 75 + IacPool(acPool5).totalVotesForID(_forID) * IacPool(acPool5).getPricePerFullShare() / 1e20 * 115 + IacPool(acPool6).totalVotesForID(_forID) * IacPool(acPool6).getPricePerFullShare() / 1e19 * 15 ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_XVMC","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_type","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSacrificed","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_for","type":"bool"}],"name":"AddVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ChangeGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"consensusProposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"EnforceDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"HaltID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"consensusProposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"delayInSeconds","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"ProposalAgainstCommonEnemy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"address","name":"newGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"ProposeGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"consensusProposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"RemoveDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"bool","name":"isSuccess","type":"bool"}],"name":"TreasuryEnforce","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sacrificedTokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"consensusVoteID","type":"uint256"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"TreasuryProposal","type":"event"},{"inputs":[],"name":"acPool1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool5","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool6","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"approveTreasuryTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"consensusProposal","outputs":[{"internalType":"uint16","name":"typeOfChange","type":"uint16"},{"internalType":"address","name":"beneficiaryAddress","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fibonacciHaltID","type":"uint256"}],"name":"enforceDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"enforceGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"goldenRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governorCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"haltProposal","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"bool","name":"enforced","type":"bool"},{"internalType":"uint256","name":"consensusVoteID","type":"uint256"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"delayInSeconds","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"highestConsensusVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"depositingTokens","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amountToSend","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"initiateTreasuryTransferProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isGovInvalidated","outputs":[{"internalType":"bool","name":"isInvalidated","type":"bool"},{"internalType":"bool","name":"hasPassed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"killTreasuryTransferProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"proposeGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"haltProposalID","type":"uint256"}],"name":"removeDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_forID","type":"uint256"}],"name":"tokensCastedPerVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalXVMCStaked","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":"","type":"uint256"}],"name":"treasuryProposal","outputs":[{"internalType":"bool","name":"valid","type":"bool"},{"internalType":"uint256","name":"firstCallTimestamp","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedForVote","type":"uint256"},{"internalType":"uint256","name":"valueSacrificedAgainst","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"beneficiary","type":"address"},{"internalType":"uint256","name":"amountToSend","type":"uint256"},{"internalType":"uint256","name":"consensusProposalID","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryRequestsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"delayInSeconds","type":"uint256"}],"name":"uniteAgainstTheCommonEnemy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"consensusID","type":"uint256"}],"name":"updateHighestConsensusVotes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"vetoGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"vetoGovernor2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"vetoTreasuryTransferProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"},{"internalType":"bool","name":"withAction","type":"bool"}],"name":"voteTreasuryTransferProposalN","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"uint256","name":"withTokens","type":"uint256"}],"name":"voteTreasuryTransferProposalY","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c06040526106526080523480156200001757600080fd5b5060405162004bbf38038062004bbf8339810160408190526200003a916200016d565b6200004e6200004862000119565b6200011d565b60408051606080820183526000808352306020840190815242948401948552600380546001810182559252925160029091027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8101805494516001600160a01b0316620100000262010000600160b01b031961ffff9490941661ffff19909616959095179290921693909317905591517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c909101556001600160601b031991901b1660a0526200019d565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200017f578081fd5b81516001600160a01b038116811462000196578182fd5b9392505050565b60805160a05160601c6149ac62000213600039600081816107e7015281816108870152818161092a015281816109cd01528181610a7001528181610b1301528181610ef4015281816122d801528181612c1c01528181612e5301528181613c120152613d25015260006116fd01526149ac6000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806385a7dc2411610130578063d6efa24c116100b8578063eef592791161007c578063eef5927914610470578063f26d5d2614610483578063f2fa0bb01461048b578063f2fde38b14610493578063fc0c546a146104a657610227565b8063d6efa24c1461041c578063e51d4f0d1461042f578063e5715c1814610442578063e714332914610455578063e8c9fd451461046857610227565b8063a511d301116100ff578063a511d301146103c8578063b2922ec4146103db578063b798f196146103e3578063cd14373d146103f6578063d17cf4131461040957610227565b806385a7dc24146103725780638da5cb5b1461039a57806395c48bd5146103a257806396b6da00146103b557610227565b80632bb93fc5116101b357806367e5305d1161018257806367e5305d146103255780636ce5722114610347578063713c7ea61461034f578063715018a6146103575780637e57e8ff1461035f57610227565b80632bb93fc5146102de57806357770bee146103025780635ec232f11461030a5780635eff0dad1461031257610227565b8063209368da116101fa578063209368da146102955780632752cf15146102a8578063296d77fb146102bb5780632a9f51d7146102c35780632b1d4f15146102cb57610227565b8063050168c11461022c578063092b4a3e146102565780631363ae191461026b57806319cbe95014610280575b600080fd5b61023f61023a366004613fca565b6104ae565b60405161024d929190614186565b60405180910390f35b61025e6104cc565b60405161024d9190614143565b61027e61027936600461401e565b6104db565b005b6102886107ca565b60405161024d91906147c3565b61027e6102a336600461401e565b610bd3565b6102886102b636600461401e565b610e04565b61025e610e16565b61025e610e25565b61027e6102d93660046140ce565b610e34565b6102f16102ec36600461401e565b61118d565b60405161024d959493929190614198565b61027e6111d5565b61025e611567565b61027e61032036600461401e565b611576565b61033861033336600461401e565b6116b8565b60405161024d9392919061479e565b6102886116fb565b61028861171f565b61027e611725565b61028861036d36600461401e565b611770565b61038561038036600461401e565b611e89565b60405161024d999897969594939291906141bd565b61025e611ef7565b61027e6103b0366004613fca565b611f06565b61027e6103c33660046140ef565b612161565b61027e6103d636600461401e565b612397565b61025e612609565b61027e6103f136600461401e565b612618565b61027e61040436600461409f565b612882565b61027e6104173660046140ce565b612aa5565b61027e61042a36600461409f565b612cc5565b61027e61043d36600461404e565b612d04565b61027e61045036600461401e565b61318e565b61027e61046336600461401e565b6136ab565b610288613bd1565b61027e61047e36600461401e565b613bd7565b61027e613c0d565b61025e613ca6565b61027e6104a1366004613fca565b613cb5565b61025e613d23565b600b6020526000908152604090205460ff8082169161010090041682565b600a546001600160a01b031681565b600181815481106104fc57634e487b7160e01b600052603260045260246000fd5b600091825260209091206004909102015460ff16801561055357506001818154811061053857634e487b7160e01b600052603260045260246000fd5b6000918252602090912060049091020154610100900460ff16155b80156105915750426001828154811061057c57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402016002015411155b801561060b5750600181815481106105b957634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160030154600182815481106105ec57634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160020154610608919061484a565b42105b61061457600080fd5b60006001828154811061063757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201600101549050600061065682611770565b905060646106626107ca565b61066d90600f614876565b6106779190614862565b81101561069f5760405162461bcd60e51b81526004016106969061434c565b60405180910390fd5b6106aa600282614862565b6106b861036d84600161484a565b11156106d65760405162461bcd60e51b8152600401610696906144dd565b60018084815481106106f857634e487b7160e01b600052603260045260246000fd5b6000918252602090912060049091020180549115156101000261ff0019909216919091179055610726611ef7565b6001600160a01b0316632254ea3360016040518263ffffffff1660e01b8152600401610752919061417b565b600060405180830381600087803b15801561076c57600080fd5b505af1158015610780573d6000803e3d6000fd5b50505050336001600160a01b03167f0fd1fd8dbeea3bfbc8e77250b92a14e54c9512bc724c0fea75cad3d398492ebd836040516107bd91906147c3565b60405180910390a2505050565b600a546040516370a0823160e01b81526000916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116926370a082319261081d921690600401614143565b60206040518083038186803b15801561083557600080fd5b505afa158015610849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086d9190614036565b6009546040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116926370a08231926108c0929190911690600401614143565b60206040518083038186803b1580156108d857600080fd5b505afa1580156108ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109109190614036565b6008546040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116926370a0823192610963929190911690600401614143565b60206040518083038186803b15801561097b57600080fd5b505afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b39190614036565b6007546040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116926370a0823192610a06929190911690600401614143565b60206040518083038186803b158015610a1e57600080fd5b505afa158015610a32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a569190614036565b6006546040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116926370a0823192610aa9929190911690600401614143565b60206040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af99190614036565b6005546040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116926370a0823192610b4c929190911690600401614143565b60206040518083038186803b158015610b6457600080fd5b505afa158015610b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9c9190614036565b610ba6919061484a565b610bb0919061484a565b610bba919061484a565b610bc4919061484a565b610bce919061484a565b905090565b610bde6002826148f3565b600114610bfd5760405162461bcd60e51b815260040161069690614283565b600b600060038381548110610c2257634e487b7160e01b600052603260045260246000fd5b600091825260208083206002909202909101546001600160a01b036201000090910416835282019290925260400190205460ff1615610c735760405162461bcd60e51b81526004016106969061477d565b610c7b611ef7565b6001600160a01b03166366813f636040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610cb557600080fd5b505af1158015610cc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ced9190613fe6565b6001600160a01b031660038281548110610d1757634e487b7160e01b600052603260045260246000fd5b60009182526020909120600290910201546201000090046001600160a01b031614610d4157600080fd5b610d49611ef7565b6001600160a01b0316635553c9566040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b505050506001600b600060038481548110610dc257634e487b7160e01b600052603260045260246000fd5b60009182526020808320600292909202909101546201000090046001600160a01b031683528201929092526040019020805460ff191691151591909117905550565b600c6020526000908152604090205481565b6006546001600160a01b031681565b6005546001600160a01b031681565b610e4042610e1061484a565b8210158015610e5257506203f4808111155b610e5b57600080fd5b610f1c33610e67611ef7565b610e6f611ef7565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ea757600080fd5b505afa158015610ebb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edf9190614036565b610eea906032614876565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016929190613d47565b6000600380549050905060036040518060600160405280600261ffff168152602001306001600160a01b0316815260200142815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010155505060036040518060600160405280600261ffff168152602001306001600160a01b0316815260200142815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010155505060016040518060a0016040528060011515815260200160001515815260200183815260200185815260200184815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff0219169083151502179055506040820151816001015560608201518160020155608082015181600301555050336001600160a01b03167f4b6398e5fb029173daad5969d2ca5e13e3fa4235bc3edc7c0334dbbab43dcf026001808054905061117a9190614895565b8386866040516107bd949392919061482f565b6001818154811061119d57600080fd5b6000918252602090912060049091020180546001820154600283015460039093015460ff808416955061010090930490921692909185565b6111dd611ef7565b6001600160a01b0316632a9f51d76040518163ffffffff1660e01b815260040160206040518083038186803b15801561121557600080fd5b505afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124d9190613fe6565b600580546001600160a01b0319166001600160a01b0392909216919091179055611275611ef7565b6001600160a01b031663296d77fb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112ad57600080fd5b505afa1580156112c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e59190613fe6565b600680546001600160a01b0319166001600160a01b039290921691909117905561130d611ef7565b6001600160a01b031663b2922ec46040518163ffffffff1660e01b815260040160206040518083038186803b15801561134557600080fd5b505afa158015611359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137d9190613fe6565b600780546001600160a01b0319166001600160a01b03929092169190911790556113a5611ef7565b6001600160a01b0316635ec232f16040518163ffffffff1660e01b815260040160206040518083038186803b1580156113dd57600080fd5b505afa1580156113f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114159190613fe6565b600880546001600160a01b0319166001600160a01b039290921691909117905561143d611ef7565b6001600160a01b031663f2fa0bb06040518163ffffffff1660e01b815260040160206040518083038186803b15801561147557600080fd5b505afa158015611489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ad9190613fe6565b600980546001600160a01b0319166001600160a01b03929092169190911790556114d5611ef7565b6001600160a01b031663092b4a3e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561150d57600080fd5b505afa158015611521573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115459190613fe6565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b031681565b6002818154811061159757634e487b7160e01b600052603260045260246000fd5b600091825260209091206009909102015460ff166115c75760405162461bcd60e51b81526004016106969061459b565b6000600282815481106115ea57634e487b7160e01b600052603260045260246000fd5b906000526020600020906009020160080154905060646116086107ca565b61161390600f614876565b61161d9190614862565b61162b61036d83600161484a565b10156116495760405162461bcd60e51b815260040161069690614720565b60006002838154811061166c57634e487b7160e01b600052603260045260246000fd5b60009182526020822060099190910201805460ff1916921515929092179091556040513391600080516020614957833981519152916116ac9186916147e3565b60405180910390a25050565b600381815481106116c857600080fd5b60009182526020909120600290910201805460019091015461ffff82169250620100009091046001600160a01b03169083565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b61172d613d9f565b6001600160a01b031661173e611ef7565b6001600160a01b0316146117645760405162461bcd60e51b8152600401610696906145d2565b61176e6000613da3565b565b6000678ac7230489e80000600a60009054906101000a90046001600160a01b03166001600160a01b03166377c7b8fc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117c957600080fd5b505afa1580156117dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118019190614036565b600a5460405163e56d607d60e01b81526001600160a01b039091169063e56d607d906118319087906004016147c3565b60206040518083038186803b15801561184957600080fd5b505afa15801561185d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118819190614036565b61188b9190614876565b6118959190614862565b6118a090600f614876565b60095460408051631df1ee3f60e21b8152905168056bc75e2d63100000926001600160a01b0316916377c7b8fc916004808301926020929190829003018186803b1580156118ed57600080fd5b505afa158015611901573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119259190614036565b60095460405163e56d607d60e01b81526001600160a01b039091169063e56d607d906119559088906004016147c3565b60206040518083038186803b15801561196d57600080fd5b505afa158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190614036565b6119af9190614876565b6119b99190614862565b6119c4906073614876565b60085460408051631df1ee3f60e21b8152905168056bc75e2d63100000926001600160a01b0316916377c7b8fc916004808301926020929190829003018186803b158015611a1157600080fd5b505afa158015611a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a499190614036565b60085460405163e56d607d60e01b81526001600160a01b039091169063e56d607d90611a799089906004016147c3565b60206040518083038186803b158015611a9157600080fd5b505afa158015611aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac99190614036565b611ad39190614876565b611add9190614862565b611ae890604b614876565b60075460408051631df1ee3f60e21b81529051678ac7230489e80000926001600160a01b0316916377c7b8fc916004808301926020929190829003018186803b158015611b3457600080fd5b505afa158015611b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6c9190614036565b60075460405163e56d607d60e01b81526001600160a01b039091169063e56d607d90611b9c908a906004016147c3565b60206040518083038186803b158015611bb457600080fd5b505afa158015611bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bec9190614036565b611bf69190614876565b611c009190614862565b611c0b906005614876565b60065460408051631df1ee3f60e21b81529051678ac7230489e80000926001600160a01b0316916377c7b8fc916004808301926020929190829003018186803b158015611c5757600080fd5b505afa158015611c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8f9190614036565b60065460405163e56d607d60e01b81526001600160a01b039091169063e56d607d90611cbf908b906004016147c3565b60206040518083038186803b158015611cd757600080fd5b505afa158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190614036565b611d199190614876565b611d239190614862565b611d2e906003614876565b60055460408051631df1ee3f60e21b81529051678ac7230489e80000926001600160a01b0316916377c7b8fc916004808301926020929190829003018186803b158015611d7a57600080fd5b505afa158015611d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db29190614036565b60055460405163e56d607d60e01b81526001600160a01b039091169063e56d607d90611de2908c906004016147c3565b60206040518083038186803b158015611dfa57600080fd5b505afa158015611e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e329190614036565b611e3c9190614876565b611e469190614862565b611e51906002614876565b611e5b919061484a565b611e65919061484a565b611e6f919061484a565b611e79919061484a565b611e83919061484a565b92915050565b60028181548110611e9957600080fd5b600091825260209091206009909102018054600182015460028301546003840154600485015460058601546006870154600788015460089098015460ff909716985094969395929491936001600160a01b0391821693929091169189565b6000546001600160a01b031690565b60048054906000611f16836148d8565b9190505550611faa33611f27611ef7565b611f2f611ef7565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f6757600080fd5b505afa158015611f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9f9190614036565b610eea906064614876565b60036040518060600160405280600061ffff168152602001836001600160a01b0316815260200142815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010155505060036040518060600160405280600061ffff168152602001836001600160a01b0316815260200142815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600101555050336001600160a01b03167fb3cd3f6f085b716f2322ee298a89ff38a4570f6f90c5bd1256cb3ce20937eebe60026003805490506121479190614895565b836040516121569291906147cc565b60405180910390a250565b6002838154811061218257634e487b7160e01b600052603260045260246000fd5b600091825260209091206009909102015460ff166121b25760405162461bcd60e51b81526004016106969061477d565b426121bb611ef7565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b1580156121f357600080fd5b505afa158015612207573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222b9190614036565b6002858154811061224c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060090201600401546002868154811061227f57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600902016001015461229b919061484a565b6122a5919061484a565b116122c25760405162461bcd60e51b815260040161069690614409565b612300336122ce611ef7565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919085613d47565b816002848154811061232257634e487b7160e01b600052603260045260246000fd5b90600052602060002090600902016003016000828254612342919061484a565b909155505080156123565761235683612618565b336001600160a01b03167f417668270754634975f63e2a103ec6546e665d5068d4f888385de42fcc113a126000858560006040516107bd949392919061420a565b61239f611ef7565b6001600160a01b031663129ebc4b6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124119190614002565b801561245357506001818154811061243957634e487b7160e01b600052603260045260246000fd5b6000918252602090912060049091020154610100900460ff165b801561249057506001818154811061247b57634e487b7160e01b600052603260045260246000fd5b600091825260209091206004909102015460ff165b61249957600080fd5b600181815481106124ba57634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160030154600182815481106124ed57634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160020154612509919061484a565b4210156125285760405162461bcd60e51b8152600401610696906142b0565b60006001828154811061254b57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600490910201805460ff1916911515919091179055612572611ef7565b6001600160a01b0316632254ea3360006040518263ffffffff1660e01b815260040161259e919061417b565b600060405180830381600087803b1580156125b857600080fd5b505af11580156125cc573d6000803e3d6000fd5b50505050336001600160a01b03167fa59ae42cbe7aa8b89ccc3aa51c5e271684344aa22b0ce4215f168e1044ea5c948260405161215691906147c3565b6007546001600160a01b031681565b806126355760405162461bcd60e51b8152600401610696906142d9565b6002818154811061265657634e487b7160e01b600052603260045260246000fd5b600091825260209091206009909102015460ff16151560011461268b5760405162461bcd60e51b81526004016106969061459b565b42612694611ef7565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b1580156126cc57600080fd5b505afa1580156126e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127049190614036565b6002838154811061272557634e487b7160e01b600052603260045260246000fd5b9060005260206000209060090201600401546002848154811061275857634e487b7160e01b600052603260045260246000fd5b906000526020600020906009020160010154612774919061484a565b61277e919061484a565b101561279c5760405162461bcd60e51b8152600401610696906143d2565b600281815481106127bd57634e487b7160e01b600052603260045260246000fd5b906000526020600020906009020160030154600282815481106127f057634e487b7160e01b600052603260045260246000fd5b9060005260206000209060090201600201541061281f5760405162461bcd60e51b8152600401610696906144b3565b60006002828154811061284257634e487b7160e01b600052603260045260246000fd5b60009182526020822060099190910201805460ff1916921515929092179091556040513391600080516020614957833981519152916121569185916147e3565b61288d6002836148f3565b6001146128ac5760405162461bcd60e51b8152600401610696906142d9565b600b6000600384815481106128d157634e487b7160e01b600052603260045260246000fd5b60009182526020808320600292909202909101546201000090046001600160a01b03168352820192909252604001902054610100900460ff16801561296c5750600b60006003848154811061293657634e487b7160e01b600052603260045260246000fd5b600091825260208083206002909202909101546001600160a01b036201000090910416835282019290925260400190205460ff16155b61297557600080fd5b600561298083611770565b61298a9190614862565b61299861036d84600161484a565b10612a40576001600b6000600385815481106129c457634e487b7160e01b600052603260045260246000fd5b60009182526020808320600292909202909101546201000090046001600160a01b0316835282019290925260409081018220805460ff191693151593909317909255905133917f06bd7c4eceb9cbb7e4ac005be4c180934b4f0c22a214b630679fdf76217630b991612a379186916147e3565b60405180910390a25b8015612aa157612a4e611ef7565b6001600160a01b0316636f3d35426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612a8857600080fd5b505af1158015612a9c573d6000803e3d6000fd5b505050505b5050565b60028281548110612ac657634e487b7160e01b600052603260045260246000fd5b600091825260209091206009909102015460ff16612af65760405162461bcd60e51b81526004016106969061477d565b42612aff611ef7565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b158015612b3757600080fd5b505afa158015612b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6f9190614036565b60028481548110612b9057634e487b7160e01b600052603260045260246000fd5b90600052602060002090600902016004015460028581548110612bc357634e487b7160e01b600052603260045260246000fd5b906000526020600020906009020160010154612bdf919061484a565b612be9919061484a565b11612c065760405162461bcd60e51b815260040161069690614409565b612c4433612c12611ef7565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919084613d47565b8060028381548110612c6657634e487b7160e01b600052603260045260246000fd5b90600052602060002090600902016002016000828254612c86919061484a565b909155505060405133907f417668270754634975f63e2a103ec6546e665d5068d4f888385de42fcc113a12906116ac906000908690869060019061420a565b612cd06002836148f3565b600114612cef5760405162461bcd60e51b8152600401610696906142d9565b6064612cf96107ca565b612980906019614876565b612d0c611ef7565b6001600160a01b03166351a41dec6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d4457600080fd5b505afa158015612d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7c9190614036565b612d8790600a614876565b851015612da65760405162461bcd60e51b81526004016106969061451e565b612dae611ef7565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b158015612de657600080fd5b505afa158015612dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1e9190614036565b811115612e3d5760405162461bcd60e51b815260040161069690614607565b612e7b33612e49611ef7565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919088613d47565b600354600090612e8c90600161484a565b905060036040518060600160405280600161ffff168152602001306001600160a01b0316815260200142815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010155505060036040518060600160405280600161ffff168152602001306001600160a01b0316815260200142815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600101555050600260405180610120016040528060011515815260200142815260200188815260200160008152602001848152602001876001600160a01b03168152602001866001600160a01b0316815260200185815260200183815250908060018154018082558091505060019003906000526020600020906009020160009091909190915060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060c08201518160060160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060e0820151816007015561010082015181600801555050336001600160a01b03167f2b550c4a73b693ca7d13223697705fa53e4cd3c6cdba3e83338f5368ec6e723060016002805490506131659190614895565b88888888878960405161317e97969594939291906147f3565b60405180910390a2505050505050565b600281815481106131af57634e487b7160e01b600052603260045260246000fd5b600091825260209091206009909102015460ff166131df5760405162461bcd60e51b81526004016106969061459b565b60006002828154811061320257634e487b7160e01b600052603260045260246000fd5b906000526020600020906009020160080154905061321f81613bd7565b61322d61047e82600161484a565b42613236611ef7565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b15801561326e57600080fd5b505afa158015613282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a69190614036565b6132b1906002614876565b600284815481106132d257634e487b7160e01b600052603260045260246000fd5b9060005260206000209060090201600401546002858154811061330557634e487b7160e01b600052603260045260246000fd5b906000526020600020906009020160010154613321919061484a565b61332b919061484a565b11156133495760405162461bcd60e51b815260040161069690614555565b60006133536107ca565b6000838152600c60205260409020546002805492935090918590811061338957634e487b7160e01b600052603260045260246000fd5b906000526020600020906009020160030154600285815481106133bc57634e487b7160e01b600052603260045260246000fd5b906000526020600020906009020160020154101580156133f2575060646133e483600f614876565b6133ee9190614862565b8110155b15613639576064613404826021614876565b61340e9190614862565b600c600061341d86600161484a565b815260200190815260200160002054106134a15760006002858154811061345457634e487b7160e01b600052603260045260246000fd5b60009182526020822060099190910201805460ff1916921515929092179091556040513391600080516020614957833981519152916134949188916147e3565b60405180910390a2613634565b6134a9611ef7565b6001600160a01b0316632d72b864600286815481106134d857634e487b7160e01b600052603260045260246000fd5b906000526020600020906009020160050160009054906101000a90046001600160a01b03166002878154811061351e57634e487b7160e01b600052603260045260246000fd5b906000526020600020906009020160060160009054906101000a90046001600160a01b03166002888154811061356457634e487b7160e01b600052603260045260246000fd5b9060005260206000209060090201600701546040518463ffffffff1660e01b815260040161359493929190614157565b600060405180830381600087803b1580156135ae57600080fd5b505af11580156135c2573d6000803e3d6000fd5b505050506000600285815481106135e957634e487b7160e01b600052603260045260246000fd5b60009182526020909120600990910201805460ff191691151591909117905560405133906000805160206149578339815191529061362b9087906001906147e3565b60405180910390a25b6136a5565b60006002858154811061365c57634e487b7160e01b600052603260045260246000fd5b60009182526020822060099190910201805460ff19169215159290921790915560405133916000805160206149578339815191529161369c9188916147e3565b60405180910390a25b50505050565b6136b3611ef7565b6001600160a01b03166334733cc96040518163ffffffff1660e01b815260040160206040518083038186803b1580156136eb57600080fd5b505afa1580156136ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137239190614036565b6003828154811061374457634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010154613760919061484a565b42101561377f5760405162461bcd60e51b81526004016106969061439b565b600b6000600383815481106137a457634e487b7160e01b600052603260045260246000fd5b600091825260208083206002909202909101546001600160a01b036201000090910416835282019290925260400190205460ff16156137f55760405162461bcd60e51b815260040161069690614486565b600b60006003838154811061381a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320600292909202909101546201000090046001600160a01b03168352820192909252604001902054610100900460ff16156138705760405162461bcd60e51b81526004016106969061425a565b6003548110801561388b57506138876002826148f3565b6001145b6138a75760405162461bcd60e51b815260040161069690614283565b6138af611ef7565b6001600160a01b031663aaf5ab8d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156138e957600080fd5b505af11580156138fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139219190614002565b1561392b57600080fd5b6003818154811061394c57634e487b7160e01b600052603260045260246000fd5b600091825260209091206002909102015461ffff161561396b57600080fd5b60646139756107ca565b613980906021614876565b61398a9190614862565b61399382611770565b10156139b15760405162461bcd60e51b815260040161069690614650565b60056139bc82611770565b6139c69190614862565b6139d461036d83600161484a565b10613a80576001600b600060038481548110613a0057634e487b7160e01b600052603260045260246000fd5b60009182526020808320600292909202909101546201000090046001600160a01b0316835282019290925260409081018220805460ff191693151593909317909255905133917f06bd7c4eceb9cbb7e4ac005be4c180934b4f0c22a214b630679fdf76217630b991613a739185916147e3565b60405180910390a2613bce565b613a88611ef7565b6001600160a01b0316632495584660038381548110613ab757634e487b7160e01b600052603260045260246000fd5b600091825260209091206002909102015460405160e083901b6001600160e01b0319168152613af8916201000090046001600160a01b031690600401614143565b600060405180830381600087803b158015613b1257600080fd5b505af1158015613b26573d6000803e3d6000fd5b505050506001600b600060038481548110613b5157634e487b7160e01b600052603260045260246000fd5b600091825260208083206002909202909101546001600160a01b0362010000909104168352820192909252604090810190912080549215156101000261ff0019909316929092179091555133907f06bd7c4eceb9cbb7e4ac005be4c180934b4f0c22a214b630679fdf76217630b9906121569084906001906147e3565b50565b60045481565b6000613be282611770565b6000838152600c6020526040902054909150811115612aa1576000918252600c602052604090912055565b61176e7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630c340a246040518163ffffffff1660e01b815260040160206040518083038186803b158015613c6957600080fd5b505afa158015613c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca19190613fe6565b613da3565b6009546001600160a01b031681565b613cbd613d9f565b6001600160a01b0316613cce611ef7565b6001600160a01b031614613cf45760405162461bcd60e51b8152600401610696906145d2565b6001600160a01b038116613d1a5760405162461bcd60e51b815260040161069690614306565b613bce81613da3565b7f000000000000000000000000000000000000000000000000000000000000000081565b6136a584630c3023b960e01b858585604051602401613d6893929190614157565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613df3565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000613e48826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613e879092919063ffffffff16565b805190915015613e825780806020019051810190613e669190614002565b613e825760405162461bcd60e51b8152600401610696906146d6565b505050565b6060613e968484600085613ea0565b90505b9392505050565b606082471015613ec25760405162461bcd60e51b815260040161069690614440565b613ecb85613f60565b613ee75760405162461bcd60e51b81526004016106969061469f565b600080866001600160a01b03168587604051613f039190614127565b60006040518083038185875af1925050503d8060008114613f40576040519150601f19603f3d011682016040523d82523d6000602084013e613f45565b606091505b5091509150613f55828286613f91565b979650505050505050565b600080826001600160a01b0316803b806020016040519081016040528181526000908060200190933c511192915050565b60608315613fa0575081613e99565b825115613fb05782518084602001fd5b8160405162461bcd60e51b81526004016106969190614227565b600060208284031215613fdb578081fd5b8135613e9981614933565b600060208284031215613ff7578081fd5b8151613e9981614933565b600060208284031215614013578081fd5b8151613e9981614948565b60006020828403121561402f578081fd5b5035919050565b600060208284031215614047578081fd5b5051919050565b600080600080600060a08688031215614065578081fd5b85359450602086013561407781614933565b9350604086013561408781614933565b94979396509394606081013594506080013592915050565b600080604083850312156140b1578182fd5b8235915060208301356140c381614948565b809150509250929050565b600080604083850312156140e0578182fd5b50508035926020909101359150565b600080600060608486031215614103578283fd5b8335925060208401359150604084013561411c81614948565b809150509250925092565b600082516141398184602087016148ac565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b901515815260200190565b91151582521515602082015260400190565b9415158552921515602085015260408401919091526060830152608082015260a00190565b981515895260208901979097526040880195909552606087019390935260808601919091526001600160a01b0390811660a08601521660c084015260e08301526101008201526101200190565b938452602084019290925260408301521515606082015260800190565b60006020825282518060208401526142468160408501602087016148ac565b601f01601f19169190910160400192915050565b6020808252600f908201526e08185b1c9958591e481c185cdcd959608a1b604082015260600190565b6020808252601390820152721a5b9d985b1a59081c1c9bdc1bdcd85b081251606a1b604082015260600190565b6020808252600f908201526e1b9bdd081e595d08195e1c1a5c9959608a1b604082015260600190565b602080825260139082015272125b9d985b1a59081c1c9bdc1bdcd85b081251606a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252602f908201527f41746c6561737420313525206f66207374616b6564287765696768746564292060408201526e1d1bdad95b9cc81c995c5d5a5c9959608a1b606082015260800190565b6020808252601e908201527f4d75737420776169742064656c6179206265666f726520656e666f7263650000604082015260600190565b6020808252601b908201527f706173742074686520706f696e74206f66206e6f2072657475726e0000000000604082015260600190565b60208082526017908201527f63616e20616c726561647920626520656e666f72636564000000000000000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60208082526013908201527208185b1c9958591e5a5b9d985b1a59185d1959606a1b604082015260600190565b60208082526010908201526f6e65656473206d6f726520766f74657360801b604082015260600190565b60208082526021908201527f4d6f7265207468616e203530252061726520766f74696e6720616761696e73746040820152602160f81b606082015260800190565b60208082526018908201527f61746c65617374207831306d696e436f7374546f566f74650000000000000000604082015260600190565b60208082526026908201527f456e6f7567682074696d65206d7573742070617373206265666f726520656e666040820152656f7263696e6760d01b606082015260800190565b60208082526018908201527f50726f706f73616c20616c726561647920696e76616c69640000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f6d7573742062652073686f72746572207468616e2044656c6179206265666f726040820152686520656e666f72636560b81b606082015260800190565b6020808252602f908201527f52657175697265732061746c6561737420333325206f66207374616b6564287760408201526e656967687465642920746f6b656e7360881b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252603f908201527f313525207765696774656420766f74652028766f74696e6720616761696e737460408201527f2920726571756972656420746f206b696c6c207468652070726f706f73616c00606082015260800190565b6020808252600790820152661a5b9d985b1a5960ca1b604082015260600190565b61ffff9390931683526001600160a01b03919091166020830152604082015260600190565b90815260200190565b9182526001600160a01b0316602082015260400190565b9182521515602082015260400190565b96875260208701959095526001600160a01b039384166040870152919092166060850152608084019190915260a083015260c082015260e00190565b93845260208401929092526040830152606082015260800190565b6000821982111561485d5761485d614907565b500190565b6000826148715761487161491d565b500490565b600081600019048311821515161561489057614890614907565b500290565b6000828210156148a7576148a7614907565b500390565b60005b838110156148c75781810151838201526020016148af565b838111156136a55750506000910152565b60006000198214156148ec576148ec614907565b5060010190565b6000826149025761490261491d565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b0381168114613bce57600080fd5b8015158114613bce57600080fdfe7e683330cc42513c671d5ca554ec408ed90691a03c32ffcb53108a2dc65ee3d7a2646970667358221220a41ac06e4125802a8cebbb78b681501584efedb9a0f4970fc5f19eae58f4c18a64736f6c63430008000033000000000000000000000000970ccee657dd831e9c37511aa3eb5302c1eb5eee
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000970ccee657dd831e9c37511aa3eb5302c1eb5eee
-----Decoded View---------------
Arg [0] : _XVMC (address): 0x970ccee657dd831e9c37511aa3eb5302c1eb5eee
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000970ccee657dd831e9c37511aa3eb5302c1eb5eee
Deployed ByteCode Sourcemap
21011:19385:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22397:63;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;22364:22;;;:::i;:::-;;;;;;;:::i;25146:928::-;;;;;;:::i;:::-;;:::i;:::-;;38980:304;;;:::i;:::-;;;;;;;:::i;37509:586::-;;;;;;:::i;:::-;;:::i;22467:56::-;;;;;;:::i;:::-;;:::i;22248:22::-;;;:::i;22219:::-;;;:::i;24129:1011::-;;;;;;:::i;:::-;;:::i;21821:35::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;38190:358::-;;;:::i;22306:22::-;;;:::i;32300:528::-;;;;;;:::i;:::-;;:::i;21906:40::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;21953:43::-;;;:::i;38796:105::-;;;:::i;18523:103::-;;;:::i;39564:829::-;;;;;;:::i;:::-;;:::i;21860:42::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;17872:87::-;;;:::i;33119:538::-;;;;;;:::i;:::-;;:::i;29072:646::-;;;;;;:::i;:::-;;:::i;26077:487::-;;;;;;:::i;:::-;;:::i;22277:22::-;;;:::i;29724:686::-;;;;;;:::i;:::-;;:::i;36219:659::-;;;;;;:::i;:::-;;:::i;28507:562::-;;;;;;:::i;:::-;;:::i;36973:530::-;;;;;;:::i;:::-;;:::i;27195:1135::-;;;;;;:::i;:::-;;:::i;30671:1515::-;;;;;;:::i;:::-;;:::i;34251:1562::-;;;;;;:::i;:::-;;:::i;22088:28::-;;;:::i;32870:237::-;;;;;;:::i;:::-;;:::i;38699:92::-;;;:::i;22335:22::-;;;:::i;18781:201::-;;;;;;:::i;:::-;;:::i;22031:30::-;;;:::i;22397:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;22364:22::-;;;-1:-1:-1;;;;;22364:22:0;;:::o;25146:928::-;25215:12;25228:15;25215:29;;;;;;-1:-1:-1;;;25215:29:0;;;;;;;;;;;;;;;;;;;;;;:35;;;:78;;;;;25255:12;25268:15;25255:29;;;;;;-1:-1:-1;;;25255:29:0;;;;;;;;;;;;;;;;;;;;;;:38;;;;;;25254:39;25215:78;:152;;;;;25352:15;25304:12;25317:15;25304:29;;;;;;-1:-1:-1;;;25304:29:0;;;;;;;;;;;;;;;;;;;:44;;;:63;;25215:152;:272;;;;;25443:12;25456:15;25443:29;;;;;;-1:-1:-1;;;25443:29:0;;;;;;;;;;;;;;;;;;;:44;;;25396:12;25409:15;25396:29;;;;;;-1:-1:-1;;;25396:29:0;;;;;;;;;;;;;;;;;;;:44;;;:91;;;;:::i;:::-;25378:15;:109;25215:272;25207:281;;;;;;25493:19;25515:12;25528:15;25515:29;;;;;;-1:-1:-1;;;25515:29:0;;;;;;;;;;;;;;;;;;;:45;;;25493:67;;25573:21;25597:32;25617:11;25597:19;:32::i;:::-;25573:56;;25699:3;25674:17;:15;:17::i;:::-;:22;;25694:2;25674:22;:::i;:::-;:28;;;;:::i;:::-;25657:13;:45;;25635:134;;;;-1:-1:-1;;;25635:134:0;;;;;;;:::i;:::-;;;;;;;;;25846:17;25862:1;25846:13;:17;:::i;:::-;25806:36;25826:15;:11;25840:1;25826:15;:::i;25806:36::-;:57;;25784:132;;;;-1:-1:-1;;;25784:132:0;;;;;;;:::i;:::-;25966:4;25925:12;25938:15;25925:29;;;;;;-1:-1:-1;;;25925:29:0;;;;;;;;;;;;;;;;;;;;;;:45;;;;;;;-1:-1:-1;;25925:45:0;;;;;;;;;25989:7;:5;:7::i;:::-;-1:-1:-1;;;;;25975:37:0;;26013:4;25975:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26058:10;-1:-1:-1;;;;;26032:37:0;;26045:11;26032:37;;;;;;:::i;:::-;;;;;;;;25146:928;;;:::o;38980:304::-;39268:7;;39244:32;;-1:-1:-1;;;39244:32:0;;39027:7;;-1:-1:-1;;;;;39251:5:0;39244:23;;;;;:32;;39268:7;;39244:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39233:7;;39209:32;;-1:-1:-1;;;39209:32:0;;-1:-1:-1;;;;;39216:5:0;39209:23;;;;;:32;;39233:7;;;;;39209:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39198:7;;39174:32;;-1:-1:-1;;;39174:32:0;;-1:-1:-1;;;;;39181:5:0;39174:23;;;;;:32;;39198:7;;;;;39174:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39145:7;;39121:32;;-1:-1:-1;;;39121:32:0;;-1:-1:-1;;;;;39128:5:0;39121:23;;;;;:32;;39145:7;;;;;39121:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39110:7;;39086:32;;-1:-1:-1;;;39086:32:0;;-1:-1:-1;;;;;39093:5:0;39086:23;;;;;:32;;39110:7;;;;;39086:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39075:7;;39051:32;;-1:-1:-1;;;39051:32:0;;-1:-1:-1;;;;;39058:5:0;39051:23;;;;;:32;;39075:7;;;;;39051:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:102;;;;:::i;:::-;:155;;;;:::i;:::-;:190;;;;:::i;:::-;:225;;;;:::i;:::-;39044:232;;38980:304;:::o;37509:586::-;37582:14;37595:1;37582:10;:14;:::i;:::-;37600:1;37582:19;37574:51;;;;-1:-1:-1;;;37574:51:0;;;;;;;:::i;:::-;37711:16;:66;37728:17;37746:10;37728:29;;;;;;-1:-1:-1;;;37728:29:0;;;;;;;;;;;;;;;;;;;;;;;;:48;-1:-1:-1;;;;;37728:48:0;;;;;37711:66;;;;;;;;;;;;:80;;;37710:81;37702:101;;;;-1:-1:-1;;;37702:101:0;;;;;;;:::i;:::-;37898:7;:5;:7::i;:::-;-1:-1:-1;;;;;37884:42:0;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37832:96:0;:17;37850:10;37832:29;;;;;;-1:-1:-1;;;37832:29:0;;;;;;;;;;;;;;;;;;;;;;:48;;;;-1:-1:-1;;;;;37832:48:0;:96;37824:105;;;;;;37958:7;:5;:7::i;:::-;-1:-1:-1;;;;;37944:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38083:4;38000:16;:66;38017:17;38035:10;38017:29;;;;;;-1:-1:-1;;;38017:29:0;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;-1:-1:-1;;;;;38017:48:0;38000:66;;;;;;;;;;;;:87;;-1:-1:-1;;38000:87:0;;;;;;;;;;-1:-1:-1;37509:586:0:o;22467:56::-;;;;;;;;;;;;;:::o;22248:22::-;;;-1:-1:-1;;;;;22248:22:0;;:::o;22219:::-;;;-1:-1:-1;;;;;22219:22:0;;:::o;24129:1011::-;24254:22;:15;24272:4;24254:22;:::i;:::-;24235:14;:42;;:73;;;;;24299:9;24281:14;:27;;24235:73;24227:82;;;;;;24390:93;24421:10;24433:7;:5;:7::i;:::-;24461;:5;:7::i;:::-;-1:-1:-1;;;;;24447:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24442:40;;:2;:40;:::i;:::-;-1:-1:-1;;;;;24397:5:0;24390:30;;:93;;:30;:93::i;:::-;24492:20;24515:17;:24;;;;24492:47;;24665:17;24696:48;;;;;;;;24710:1;24696:48;;;;;;24721:4;-1:-1:-1;;;;;24696:48:0;;;;;24728:15;24696:48;;;24665:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24665:88:0;;;;;-1:-1:-1;;;;;24665:88:0;;;;;;;;;;;;;;;;24773:17;24807:48;;;;;;;;24821:1;24807:48;;;;;;24832:4;-1:-1:-1;;;;;24807:48:0;;;;;24839:15;24807:48;;;24773:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24773:94:0;;;;;-1:-1:-1;;;;;24773:94:0;;;;;;;;;;;;;;;;24893:12;24922:72;;;;;;;;24936:4;24922:72;;;;;;24942:5;24922:72;;;;;;24949:12;24922:72;;;;24963:14;24922:72;;;;24979:14;24922:72;;;24893:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25124:10;-1:-1:-1;;;;;25026:109:0;;25075:1;25053:12;:19;;;;:23;;;;:::i;:::-;25078:12;25092:14;25108;25026:109;;;;;;;;;:::i;21821:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21821:35:0;;;;;;;;;;;:::o;38190:358::-;38257:7;:5;:7::i;:::-;-1:-1:-1;;;;;38243:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38233:7;:42;;-1:-1:-1;;;;;;38233:42:0;-1:-1:-1;;;;;38233:42:0;;;;;;;;;;38310:7;:5;:7::i;:::-;-1:-1:-1;;;;;38296:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38286:7;:42;;-1:-1:-1;;;;;;38286:42:0;-1:-1:-1;;;;;38286:42:0;;;;;;;;;;38363:7;:5;:7::i;:::-;-1:-1:-1;;;;;38349:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38339:7;:42;;-1:-1:-1;;;;;;38339:42:0;-1:-1:-1;;;;;38339:42:0;;;;;;;;;;38416:7;:5;:7::i;:::-;-1:-1:-1;;;;;38402:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38392:7;:42;;-1:-1:-1;;;;;;38392:42:0;-1:-1:-1;;;;;38392:42:0;;;;;;;;;;38469:7;:5;:7::i;:::-;-1:-1:-1;;;;;38455:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38445:7;:42;;-1:-1:-1;;;;;;38445:42:0;-1:-1:-1;;;;;38445:42:0;;;;;;;;;;38522:7;:5;:7::i;:::-;-1:-1:-1;;;;;38508:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38498:7;:42;;-1:-1:-1;;;;;;38498:42:0;-1:-1:-1;;;;;38498:42:0;;;;;;;;;;38190:358::o;22306:22::-;;;-1:-1:-1;;;;;22306:22:0;;:::o;32300:528::-;32380:16;32397:10;32380:28;;;;;;-1:-1:-1;;;32380:28:0;;;;;;;;;;;;;;;;;;;;;;:34;;;32372:71;;;;-1:-1:-1;;;32372:71:0;;;;;;;:::i;:::-;32448:19;32470:16;32487:10;32470:28;;;;;;-1:-1:-1;;;32470:28:0;;;;;;;;;;;;;;;;;;;:48;;;32448:70;;32618:3;32593:17;:15;:17::i;:::-;:22;;32613:2;32593:22;:::i;:::-;:28;;;;:::i;:::-;32555:34;32575:13;:11;32587:1;32575:13;:::i;32555:34::-;:66;;32533:171;;;;-1:-1:-1;;;32533:171:0;;;;;;;:::i;:::-;32753:5;32716:16;32733:10;32716:28;;;;;;-1:-1:-1;;;32716:28:0;;;;;;;;;;;;;;;;;;;;;;:42;;-1:-1:-1;;32716:42:0;;;;;;;;;;;32777:46;;32805:10;;-1:-1:-1;;;;;;;;;;;32777:46:0;;;32793:10;;32777:46;:::i;:::-;;;;;;;;32300:528;;:::o;21906:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21906:40:0;;;;-1:-1:-1;;;;;21906:40:0;;;:::o;21953:43::-;;;:::o;38796:105::-;38873:16;:23;38796:105;:::o;18523:103::-;18103:12;:10;:12::i;:::-;-1:-1:-1;;;;;18092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;18092:23:0;;18084:68;;;;-1:-1:-1;;;18084:68:0;;;;;;;:::i;:::-;18588:30:::1;18615:1;18588:18;:30::i;:::-;18523:103::o:0;39564:829::-;39629:7;40365:4;40331:7;;;;;;;;;-1:-1:-1;;;;;40331:7:0;-1:-1:-1;;;;;40323:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40288:7;;40280:40;;-1:-1:-1;;;40280:40:0;;-1:-1:-1;;;;;40288:7:0;;;;40280:32;;:40;;40313:6;;40280:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:82;;;;:::i;:::-;:89;;;;:::i;:::-;:94;;40372:2;40280:94;:::i;:::-;40200:7;;40192:39;;;-1:-1:-1;;;40192:39:0;;;;40234:4;;-1:-1:-1;;;;;40200:7:0;;40192:37;;:39;;;;;;;;;;;;;;40200:7;40192:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40157:7;;40149:40;;-1:-1:-1;;;40149:40:0;;-1:-1:-1;;;;;40157:7:0;;;;40149:32;;:40;;40182:6;;40149:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:82;;;;:::i;:::-;:89;;;;:::i;:::-;:95;;40241:3;40149:95;:::i;:::-;40074:7;;40066:39;;;-1:-1:-1;;;40066:39:0;;;;40108:4;;-1:-1:-1;;;;;40074:7:0;;40066:37;;:39;;;;;;;;;;;;;;40074:7;40066:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40031:7;;40023:40;;-1:-1:-1;;;40023:40:0;;-1:-1:-1;;;;;40031:7:0;;;;40023:32;;:40;;40056:6;;40023:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:82;;;;:::i;:::-;:89;;;;:::i;:::-;:94;;40115:2;40023:94;:::i;:::-;39953:7;;39945:39;;;-1:-1:-1;;;39945:39:0;;;;39987:4;;-1:-1:-1;;;;;39953:7:0;;39945:37;;:39;;;;;;;;;;;;;;39953:7;39945:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39910:7;;39902:40;;-1:-1:-1;;;39902:40:0;;-1:-1:-1;;;;;39910:7:0;;;;39902:32;;:40;;39935:6;;39902:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:82;;;;:::i;:::-;:89;;;;:::i;:::-;:93;;39994:1;39902:93;:::i;:::-;39836:7;;39828:39;;;-1:-1:-1;;;39828:39:0;;;;39870:4;;-1:-1:-1;;;;;39836:7:0;;39828:37;;:39;;;;;;;;;;;;;;39836:7;39828:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39793:7;;39785:40;;-1:-1:-1;;;39785:40:0;;-1:-1:-1;;;;;39793:7:0;;;;39785:32;;:40;;39818:6;;39785:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:82;;;;:::i;:::-;:89;;;;:::i;:::-;:93;;39877:1;39785:93;:::i;:::-;39722:7;;39714:39;;;-1:-1:-1;;;39714:39:0;;;;39756:4;;-1:-1:-1;;;;;39722:7:0;;39714:37;;:39;;;;;;;;;;;;;;39722:7;39714:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39679:7;;39671:40;;-1:-1:-1;;;39671:40:0;;-1:-1:-1;;;;;39679:7:0;;;;39671:32;;:40;;39704:6;;39671:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:82;;;;:::i;:::-;:89;;;;:::i;:::-;:93;;39763:1;39671:93;:::i;:::-;:207;;;;:::i;:::-;:324;;;;:::i;:::-;:446;;;;:::i;:::-;:573;;;;:::i;:::-;:703;;;;:::i;:::-;39649:736;39564:829;-1:-1:-1;;39564:829:0:o;21860:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21860:42:0;;;;;;;;-1:-1:-1;;;;;21860:42:0;;;;;;;;;;:::o;17872:87::-;17918:7;17945:6;-1:-1:-1;;;;;17945:6:0;17872:87;:::o;33119:538::-;33180:13;:15;;;:13;:15;;;:::i;:::-;;;;;;33206:94;33237:10;33249:7;:5;:7::i;:::-;33272;:5;:7::i;:::-;-1:-1:-1;;;;;33258:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;33296:3;33258:41;:::i;33206:94::-;33309:17;33343:47;;;;;;;;33357:1;33343:47;;;;;;33360:12;-1:-1:-1;;;;;33343:47:0;;;;;33374:15;33343:47;;;33309:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33309:93:0;;;;;-1:-1:-1;;;;;33309:93:0;;;;;;;;;;;;;;;;33410:17;33444:47;;;;;;;;33458:1;33444:47;;;;;;33461:12;-1:-1:-1;;;;;33444:47:0;;;;;33475:15;33444:47;;;33410:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33410:93:0;;;;;-1:-1:-1;;;;;33410:93:0;;;;;;;;;;;;;;;;33638:10;-1:-1:-1;;;;;33578:71:0;;33621:1;33594:17;:24;;;;:28;;;;:::i;:::-;33624:12;33578:71;;;;;;;:::i;:::-;;;;;;;;33119:538;:::o;29072:646::-;29190:16;29207:10;29190:28;;;;;;-1:-1:-1;;;29190:28:0;;;;;;;;;;;;;;;;;;;;;;:34;;;29182:54;;;;-1:-1:-1;;;29182:54:0;;;;;;;:::i;:::-;29387:15;29355:7;:5;:7::i;:::-;-1:-1:-1;;;;;29341:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29304:16;29321:10;29304:28;;;;;;-1:-1:-1;;;29304:28:0;;;;;;;;;;;;;;;;;;;:34;;;29254:16;29271:10;29254:28;;;;;;-1:-1:-1;;;29254:28:0;;;;;;;;;;;;;;;;;;;:47;;;:84;;;;:::i;:::-;:130;;;;:::i;:::-;:148;29241:197;;;;-1:-1:-1;;;29241:197:0;;;;;;;:::i;:::-;29447:63;29478:10;29490:7;:5;:7::i;:::-;-1:-1:-1;;;;;29454:5:0;29447:30;;:63;29499:10;29447:30;:63::i;:::-;29573:10;29519:16;29536:10;29519:28;;;;;;-1:-1:-1;;;29519:28:0;;;;;;;;;;;;;;;;;;;:51;;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;29588:60:0;;;;29605:40;29634:10;29605:28;:40::i;:::-;29683:10;-1:-1:-1;;;;;29659:54:0;;29668:1;29671:10;29695;29707:5;29659:54;;;;;;;;;:::i;26077:487::-;26158:7;:5;:7::i;:::-;-1:-1:-1;;;;;26144:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:82;;;;;26189:12;26202:14;26189:28;;;;;;-1:-1:-1;;;26189:28:0;;;;;;;;;;;;;;;;;;;;;;:37;;;;;;26144:82;:120;;;;;26230:12;26243:14;26230:28;;;;;;-1:-1:-1;;;26230:28:0;;;;;;;;;;;;;;;;;;;;;;:34;;;26144:120;26136:129;;;;;;26343:12;26356:14;26343:28;;;;;;-1:-1:-1;;;26343:28:0;;;;;;;;;;;;;;;;;;;:43;;;26297:12;26310:14;26297:28;;;;;;-1:-1:-1;;;26297:28:0;;;;;;;;;;;;;;;;;;;:43;;;:89;;;;:::i;:::-;26278:15;:108;;26270:136;;;;-1:-1:-1;;;26270:136:0;;;;;;;:::i;:::-;26452:5;26415:12;26428:14;26415:28;;;;;;-1:-1:-1;;;26415:28:0;;;;;;;;;;;;;;;;;;;;;;:42;;-1:-1:-1;;26415:42:0;;;;;;;;;;26476:7;:5;:7::i;:::-;-1:-1:-1;;;;;26462:37:0;;26500:5;26462:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26548:10;-1:-1:-1;;;;;26520:39:0;;26532:14;26520:39;;;;;;:::i;22277:22::-;;;-1:-1:-1;;;;;22277:22:0;;:::o;29724:686::-;29808:15;29800:47;;;;-1:-1:-1;;;29800:47:0;;;;;;;:::i;:::-;29863:16;29880:10;29863:28;;;;;;-1:-1:-1;;;29863:28:0;;;;;;;;;;;;;;;;;;;;;;:34;;;:42;;:34;:42;29855:79;;;;-1:-1:-1;;;29855:79:0;;;;;;;:::i;:::-;30086:15;30053:7;:5;:7::i;:::-;-1:-1:-1;;;;;30039:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30002:16;30019:10;30002:28;;;;;;-1:-1:-1;;;30002:28:0;;;;;;;;;;;;;;;;;;;:34;;;29952:16;29969:10;29952:28;;;;;;-1:-1:-1;;;29952:28:0;;;;;;;;;;;;;;;;;;;:47;;;:84;;;;:::i;:::-;:130;;;;:::i;:::-;:149;;29939:202;;;;-1:-1:-1;;;29939:202:0;;;;;;;:::i;:::-;30211:16;30228:10;30211:28;;;;;;-1:-1:-1;;;30211:28:0;;;;;;;;;;;;;;;;;;;:51;;;30157:16;30174:10;30157:28;;;;;;-1:-1:-1;;;30157:28:0;;;;;;;;;;;;;;;;;;;:51;;;:105;30149:134;;;;-1:-1:-1;;;30149:134:0;;;;;;;:::i;:::-;30332:5;30295:16;30312:10;30295:28;;;;;;-1:-1:-1;;;30295:28:0;;;;;;;;;;;;;;;;;;;;;;:42;;-1:-1:-1;;30295:42:0;;;;;;;;;;;30356:46;;30384:10;;-1:-1:-1;;;;;;;;;;;30356:46:0;;;30372:10;;30356:46;:::i;36219:659::-;36307:14;36320:1;36307:10;:14;:::i;:::-;36325:1;36307:19;36299:51;;;;-1:-1:-1;;;36299:51:0;;;;;;;:::i;:::-;36369:16;:66;36386:17;36404:10;36386:29;;;;;;-1:-1:-1;;;36386:29:0;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;-1:-1:-1;;;;;36386:48:0;36369:66;;;;;;;;;;;;:76;36386:48;36369:76;;;;:167;;;;;36456:16;:66;36473:17;36491:10;36473:29;;;;;;-1:-1:-1;;;36473:29:0;;;;;;;;;;;;;;;;;;;;;;;;:48;-1:-1:-1;;;;;36473:48:0;;;;;36456:66;;;;;;;;;;;;:80;;;36455:81;36369:167;36361:176;;;;;;36624:1;36590:31;36610:10;36590:19;:31::i;:::-;:35;;;;:::i;:::-;36553:33;36573:12;:10;36584:1;36573:12;:::i;36553:33::-;:72;36550:251;;36727:4;36644:16;:66;36661:17;36679:10;36661:29;;;;;;-1:-1:-1;;;36661:29:0;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;-1:-1:-1;;;;;36661:48:0;36644:66;;;;;;;;;;;;;;:87;;-1:-1:-1;;36644:87:0;;;;;;;;;;;36744:45;;36771:10;;36744:45;;;;36759:10;;36744:45;:::i;:::-;;;;;;;;36550:251;36812:11;36809:62;;;36841:7;:5;:7::i;:::-;-1:-1:-1;;;;;36827:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36809:62;36219:659;;:::o;28507:562::-;28608:16;28625:10;28608:28;;;;;;-1:-1:-1;;;28608:28:0;;;;;;;;;;;;;;;;;;;;;;:34;;;28600:54;;;;-1:-1:-1;;;28600:54:0;;;;;;;:::i;:::-;28805:15;28773:7;:5;:7::i;:::-;-1:-1:-1;;;;;28759:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28722:16;28739:10;28722:28;;;;;;-1:-1:-1;;;28722:28:0;;;;;;;;;;;;;;;;;;;:34;;;28672:16;28689:10;28672:28;;;;;;-1:-1:-1;;;28672:28:0;;;;;;;;;;;;;;;;;;;:47;;;:84;;;;:::i;:::-;:130;;;;:::i;:::-;:148;28659:197;;;;-1:-1:-1;;;28659:197:0;;;;;;;:::i;:::-;28865:63;28896:10;28908:7;:5;:7::i;:::-;-1:-1:-1;;;;;28872:5:0;28865:30;;:63;28917:10;28865:30;:63::i;:::-;28989:10;28935:16;28952:10;28935:28;;;;;;-1:-1:-1;;;28935:28:0;;;;;;;;;;;;;;;;;;;:51;;;:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;29011:53:0;;29035:10;;29011:53;;;;29020:1;;29023:10;;29047;;29059:4;;29011:53;:::i;36973:530::-;37062:14;37075:1;37062:10;:14;:::i;:::-;37080:1;37062:19;37054:51;;;;-1:-1:-1;;;37054:51:0;;;;;;;:::i;:::-;37183:3;37158:17;:15;:17::i;:::-;:22;;37178:2;37158:22;:::i;27195:1135::-;27402:7;:5;:7::i;:::-;-1:-1:-1;;;;;27388:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;27426:2;27388:40;:::i;:::-;27368:16;:60;;27360:118;;;;-1:-1:-1;;;27360:118:0;;;;;;;:::i;:::-;27514:7;:5;:7::i;:::-;-1:-1:-1;;;;;27500:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27491:5;:52;;27483:106;;;;-1:-1:-1;;;27483:106:0;;;;;;;:::i;:::-;27604:69;27635:10;27647:7;:5;:7::i;:::-;-1:-1:-1;;;;;27611:5:0;27604:30;;:69;27656:16;27604:30;:69::i;:::-;27705:17;:24;27682:20;;27705:28;;27732:1;27705:28;:::i;:::-;27682:51;;27742:17;27773:48;;;;;;;;27787:1;27773:48;;;;;;27798:4;-1:-1:-1;;;;;27773:48:0;;;;;27805:15;27773:48;;;27742:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27742:88:0;;;;;-1:-1:-1;;;;;27742:88:0;;;;;;;;;;;;;;;;27850:17;27884:48;;;;;;;;27898:1;27884:48;;;;;;27909:4;-1:-1:-1;;;;;27884:48:0;;;;;27916:15;27884:48;;;27850:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27850:94:0;;;;;-1:-1:-1;;;;;27850:94:0;;;;;;;;;;;;;;;;27970:16;28003:120;;;;;;;;28020:4;28003:120;;;;;;28026:15;28003:120;;;;28043:16;28003:120;;;;28061:1;28003:120;;;;28064:5;28003:120;;;;28071:12;-1:-1:-1;;;;;28003:120:0;;;;;28085:9;-1:-1:-1;;;;;28003:120:0;;;;;28096:12;28003:120;;;;28110:12;28003:120;;;27970:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27970:164:0;;;;;-1:-1:-1;;;;;27970:164:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27970:164:0;;;;;-1:-1:-1;;;;;27970:164:0;;;;;;;;;;;;;;;;;;;;;;;;28290:10;-1:-1:-1;;;;;28159:163:0;;28216:1;28190:16;:23;;;;:27;;;;:::i;:::-;28219:16;28237:12;28251:9;28262:12;28276;28302:5;28159:163;;;;;;;;;;;;:::i;:::-;;;;;;;;27195:1135;;;;;;:::o;30671:1515::-;30744:16;30761:10;30744:28;;;;;;-1:-1:-1;;;30744:28:0;;;;;;;;;;;;;;;;;;;;;;:34;;;30736:71;;;;-1:-1:-1;;;30736:71:0;;;;;;;:::i;:::-;30812:19;30834:16;30851:10;30834:28;;;;;;-1:-1:-1;;;30834:28:0;;;;;;;;;;;;;;;;;;;:48;;;30812:70;;30887:40;30915:11;30887:27;:40::i;:::-;30932:42;30960:13;:11;30972:1;30960:13;:::i;30932:42::-;31130:15;31097:7;:5;:7::i;:::-;-1:-1:-1;;;;;31083:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31079:47;;:1;:47;:::i;:::-;31042:16;31059:10;31042:28;;;;;;-1:-1:-1;;;31042:28:0;;;;;;;;;;;;;;;;;;;:34;;;30992:16;31009:10;30992:28;;;;;;-1:-1:-1;;;30992:28:0;;;;;;;;;;;;;;;;;;;:47;;;:84;;;;:::i;:::-;:134;;;;:::i;:::-;:153;;30979:217;;;;-1:-1:-1;;;30979:217:0;;;;;;;:::i;:::-;31205:20;31228:17;:15;:17::i;:::-;31250:22;31275:34;;;:21;:34;;;;;;31372:16;:28;;31205:40;;-1:-1:-1;31275:34:0;;31389:10;;31372:28;;;;-1:-1:-1;;;31372:28:0;;;;;;;;;;;;;;;;;;;:51;;;31317:16;31334:10;31317:28;;;;;;-1:-1:-1;;;31317:28:0;;;;;;;;;;;;;;;;;;;:51;;;:106;;:156;;;;-1:-1:-1;31470:3:0;31450:17;:12;31465:2;31450:17;:::i;:::-;:23;;;;:::i;:::-;31432:14;:41;;31317:156;31314:868;;;31552:3;31530:19;:14;31547:2;31530:19;:::i;:::-;:25;;;;:::i;:::-;31490:21;:36;31512:13;:11;31524:1;31512:13;:::i;:::-;31490:36;;;;;;;;;;;;:65;31487:567;;31668:5;31631:16;31648:10;31631:28;;;;;;-1:-1:-1;;;31631:28:0;;;;;;;;;;;;;;;;;;;;;;:42;;-1:-1:-1;;31631:42:0;;;;;;;;;;;31685:46;;31713:10;;-1:-1:-1;;;;;;;;;;;31685:46:0;;;31701:10;;31685:46;:::i;:::-;;;;;;;;31487:567;;;31765:7;:5;:7::i;:::-;-1:-1:-1;;;;;31751:38:0;;31797:16;31814:10;31797:28;;;;;;-1:-1:-1;;;31797:28:0;;;;;;;;;;;;;;;;;;;:41;;;;;;;;;;-1:-1:-1;;;;;31797:41:0;31840:16;31857:10;31840:28;;;;;;-1:-1:-1;;;31840:28:0;;;;;;;;;;;;;;;;;;;:40;;;;;;;;;;-1:-1:-1;;;;;31840:40:0;31882:16;31899:10;31882:28;;;;;;-1:-1:-1;;;31882:28:0;;;;;;;;;;;;;;;;;;;:41;;;31751:182;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31977:5;31940:16;31957:10;31940:28;;;;;;-1:-1:-1;;;31940:28:0;;;;;;;;;;;;;;;;;;;;;;:42;;-1:-1:-1;;31940:42:0;;;;;;;;;;32002:45;;32030:10;;-1:-1:-1;;;;;;;;;;;32002:45:0;;;32018:10;;-1:-1:-1;;32002:45:0;:::i;:::-;;;;;;;;31487:567;31314:868;;;32108:5;32071:16;32088:10;32071:28;;;;;;-1:-1:-1;;;32071:28:0;;;;;;;;;;;;;;;;;;;;;;:42;;-1:-1:-1;;32071:42:0;;;;;;;;;;;32130:46;;32158:10;;-1:-1:-1;;;;;;;;;;;32130:46:0;;;32146:10;;32130:46;:::i;:::-;;;;;;;;31314:868;30671:1515;;;;:::o;34251:1562::-;34394:7;:5;:7::i;:::-;-1:-1:-1;;;;;34380:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34338:17;34356:10;34338:29;;;;;;-1:-1:-1;;;34338:29:0;;;;;;;;;;;;;;;;;;;:39;;;:85;;;;:::i;:::-;34318:15;:106;;34310:149;;;;-1:-1:-1;;;34310:149:0;;;;;;;:::i;:::-;34480:16;:66;34497:17;34515:10;34497:29;;;;;;-1:-1:-1;;;34497:29:0;;;;;;;;;;;;;;;;;;;;;;;;:48;-1:-1:-1;;;;;34497:48:0;;;;;34480:66;;;;;;;;;;;;:80;;;34478:83;34470:115;;;;-1:-1:-1;;;34470:115:0;;;;;;;:::i;:::-;34600:16;:66;34617:17;34635:10;34617:29;;;;;;-1:-1:-1;;;34617:29:0;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;-1:-1:-1;;;;;34617:48:0;34600:66;;;;;;;;;;;;:76;34617:48;34600:76;;;;34598:79;34590:107;;;;-1:-1:-1;;;34590:107:0;;;;;;;:::i;:::-;34710:17;:24;:37;-1:-1:-1;34710:60:0;;;;-1:-1:-1;34751:14:0;34764:1;34751:10;:14;:::i;:::-;34769:1;34751:19;34710:60;34702:92;;;;-1:-1:-1;;;34702:92:0;;;;;;;:::i;:::-;34869:7;:5;:7::i;:::-;-1:-1:-1;;;;;34855:46:0;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34853:51;34845:60;;;;;;34918:17;34936:10;34918:29;;;;;;-1:-1:-1;;;34918:29:0;;;;;;;;;;;;;;;;;;;;;;:42;;;:47;34910:56;;;;;;35061:3;35036:17;:15;:17::i;:::-;:22;;35056:2;35036:22;:::i;:::-;:28;;;;:::i;:::-;35001:31;35021:10;35001:19;:31::i;:::-;:63;;34979:152;;;;-1:-1:-1;;;34979:152:0;;;;;;;:::i;:::-;35252:1;35218:31;35238:10;35218:19;:31::i;:::-;:35;;;;:::i;:::-;35181:33;35201:12;:10;35212:1;35201:12;:::i;35181:33::-;:72;35178:628;;35371:4;35288:16;:66;35305:17;35323:10;35305:29;;;;;;-1:-1:-1;;;35305:29:0;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;-1:-1:-1;;;;;35305:48:0;35288:66;;;;;;;;;;;;;;:87;;-1:-1:-1;;35288:87:0;;;;;;;;;;;35405:45;;35432:10;;35405:45;;;;35420:10;;35405:45;:::i;:::-;;;;;;;;35178:628;;;35511:7;:5;:7::i;:::-;-1:-1:-1;;;;;35497:37:0;;35535:17;35553:10;35535:29;;;;;;-1:-1:-1;;;35535:29:0;;;;;;;;;;;;;;;;;;;;;;:48;35497:87;;;;;;-1:-1:-1;;;;;;35497:87:0;;;;;35535:48;;;-1:-1:-1;;;;;35535:48:0;;35497:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35700:4;35621:16;:66;35638:17;35656:10;35638:29;;;;;;-1:-1:-1;;;35638:29:0;;;;;;;;;;;;;;;;;;;;;;;;:48;-1:-1:-1;;;;;35638:48:0;;;;;35621:66;;;;;;;;;;;;;;;:83;;;;;35638:48;35621:83;-1:-1:-1;;35621:83:0;;;;;;;;;;35746:44;35773:10;;35746:44;;;;35761:10;;35621:76;;35746:44;:::i;35178:628::-;34251:1562;:::o;22088:28::-;;;;:::o;32870:237::-;32940:16;32959:32;32979:11;32959:19;:32::i;:::-;33010:34;;;;:21;:34;;;;;;32940:51;;-1:-1:-1;32999:45:0;;32996:107;;;33052:34;;;;:21;:34;;;;;;:45;32870:237::o;38699:92::-;38739:44;38765:5;-1:-1:-1;;;;;38758:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38739:18;:44::i;22335:22::-;;;-1:-1:-1;;;;;22335:22:0;;:::o;18781:201::-;18103:12;:10;:12::i;:::-;-1:-1:-1;;;;;18092:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;18092:23:0;;18084:68;;;;-1:-1:-1;;;18084:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18870:22:0;::::1;18862:73;;;;-1:-1:-1::0;;;18862:73:0::1;;;;;;;:::i;:::-;18946:28;18965:8;18946:18;:28::i;22031:30::-:0;;;:::o;12840:248::-;12984:96;13004:5;13034:27;;;13063:4;13069:2;13073:5;13011:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;13011:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13011:68:0;-1:-1:-1;;;;;;13011:68:0;;;;;;;;;;12984:19;:96::i;16596:98::-;16676:10;16596:98;:::o;19142:191::-;19216:16;19235:6;;-1:-1:-1;;;;;19252:17:0;;;-1:-1:-1;;;;;;19252:17:0;;;;;;19285:40;;19235:6;;;;;;;19285:40;;19216:16;19285:40;19142:191;;:::o;15194:716::-;15618:23;15644:69;15672:4;15644:69;;;;;;;;;;;;;;;;;15652:5;-1:-1:-1;;;;;15644:27:0;;;:69;;;;;:::i;:::-;15728:17;;15618:95;;-1:-1:-1;15728:21:0;15724:179;;15825:10;15814:30;;;;;;;;;;;;:::i;:::-;15806:85;;;;-1:-1:-1;;;15806:85:0;;;;;;;:::i;:::-;15194:716;;;:::o;3916:229::-;4053:12;4085:52;4107:6;4115:4;4121:1;4124:12;4085:21;:52::i;:::-;4078:59;;3916:229;;;;;;:::o;5036:510::-;5206:12;5264:5;5239:21;:30;;5231:81;;;;-1:-1:-1;;;5231:81:0;;;;;;;:::i;:::-;5331:18;5342:6;5331:10;:18::i;:::-;5323:60;;;;-1:-1:-1;;;5323:60:0;;;;;;;:::i;:::-;5397:12;5411:23;5438:6;-1:-1:-1;;;;;5438:11:0;5457:5;5464:4;5438:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5396:73;;;;5487:51;5504:7;5513:10;5525:12;5487:16;:51::i;:::-;5480:58;5036:510;-1:-1:-1;;;;;;;5036:510:0:o;1171:326::-;1231:4;1488:1;1466:7;-1:-1:-1;;;;;1466:12:0;;;;;;;;;;;;;;;;;;;;;;;;:19;:23;;1171:326;-1:-1:-1;;1171:326:0:o;7722:712::-;7872:12;7901:7;7897:530;;;-1:-1:-1;7932:10:0;7925:17;;7897:530;8046:17;;:21;8042:374;;8244:10;8238:17;8305:15;8292:10;8288:2;8284:19;8277:44;8192:148;8387:12;8380:20;;-1:-1:-1;;;8380:20:0;;;;;;;;:::i;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:257::-;;666:2;654:9;645:7;641:23;637:32;634:2;;;687:6;679;672:22;634:2;724:9;718:16;743:30;767:5;743:30;:::i;808:190::-;;920:2;908:9;899:7;895:23;891:32;888:2;;;941:6;933;926:22;888:2;-1:-1:-1;969:23:1;;878:120;-1:-1:-1;878:120:1:o;1003:194::-;;1126:2;1114:9;1105:7;1101:23;1097:32;1094:2;;;1147:6;1139;1132:22;1094:2;-1:-1:-1;1175:16:1;;1084:113;-1:-1:-1;1084:113:1:o;1202:608::-;;;;;;1382:3;1370:9;1361:7;1357:23;1353:33;1350:2;;;1404:6;1396;1389:22;1350:2;1445:9;1432:23;1422:33;;1505:2;1494:9;1490:18;1477:32;1518:33;1545:5;1518:33;:::i;:::-;1570:5;-1:-1:-1;1627:2:1;1612:18;;1599:32;1640:35;1599:32;1640:35;:::i;:::-;1340:470;;;;-1:-1:-1;1694:7:1;;1748:2;1733:18;;1720:32;;-1:-1:-1;1799:3:1;1784:19;1771:33;;1340:470;-1:-1:-1;;1340:470:1:o;1815:321::-;;;1941:2;1929:9;1920:7;1916:23;1912:32;1909:2;;;1962:6;1954;1947:22;1909:2;2003:9;1990:23;1980:33;;2063:2;2052:9;2048:18;2035:32;2076:30;2100:5;2076:30;:::i;:::-;2125:5;2115:15;;;1899:237;;;;;:::o;2141:258::-;;;2270:2;2258:9;2249:7;2245:23;2241:32;2238:2;;;2291:6;2283;2276:22;2238:2;-1:-1:-1;;2319:23:1;;;2389:2;2374:18;;;2361:32;;-1:-1:-1;2228:171:1:o;2404:389::-;;;;2547:2;2535:9;2526:7;2522:23;2518:32;2515:2;;;2568:6;2560;2553:22;2515:2;2609:9;2596:23;2586:33;;2666:2;2655:9;2651:18;2638:32;2628:42;;2720:2;2709:9;2705:18;2692:32;2733:30;2757:5;2733:30;:::i;:::-;2782:5;2772:15;;;2505:288;;;;;:::o;2798:274::-;;2965:6;2959:13;2981:53;3027:6;3022:3;3015:4;3007:6;3003:17;2981:53;:::i;:::-;3050:16;;;;;2935:137;-1:-1:-1;;2935:137:1:o;3077:203::-;-1:-1:-1;;;;;3241:32:1;;;;3223:51;;3211:2;3196:18;;3178:102::o;3285:375::-;-1:-1:-1;;;;;3543:15:1;;;3525:34;;3595:15;;;;3590:2;3575:18;;3568:43;3642:2;3627:18;;3620:34;;;;3475:2;3460:18;;3442:218::o;3665:187::-;3830:14;;3823:22;3805:41;;3793:2;3778:18;;3760:92::o;3857:268::-;4044:14;;4037:22;4019:41;;4103:14;4096:22;4091:2;4076:18;;4069:50;4007:2;3992:18;;3974:151::o;4130:483::-;4402:14;;4395:22;4377:41;;4461:14;;4454:22;4449:2;4434:18;;4427:50;4508:2;4493:18;;4486:34;;;;4551:2;4536:18;;4529:34;4594:3;4579:19;;4572:35;4364:3;4349:19;;4331:282::o;4618:817::-;5008:14;;5001:22;4983:41;;5055:2;5040:18;;5033:34;;;;5098:2;5083:18;;5076:34;;;;5141:2;5126:18;;5119:34;;;;5184:3;5169:19;;5162:35;;;;-1:-1:-1;;;;;5272:15:1;;;5224:3;5251:19;;5244:44;5325:15;5319:3;5304:19;;5297:44;5372:3;5357:19;;5350:35;5416:3;5401:19;;5394:35;4970:3;4955:19;;4937:498::o;5440:409::-;5673:25;;;5729:2;5714:18;;5707:34;;;;5772:2;5757:18;;5750:34;5827:14;5820:22;5815:2;5800:18;;5793:50;5660:3;5645:19;;5627:222::o;5854:383::-;;6003:2;5992:9;5985:21;6035:6;6029:13;6078:6;6073:2;6062:9;6058:18;6051:34;6094:66;6153:6;6148:2;6137:9;6133:18;6128:2;6120:6;6116:15;6094:66;:::i;:::-;6221:2;6200:15;-1:-1:-1;;6196:29:1;6181:45;;;;6228:2;6177:54;;5975:262;-1:-1:-1;;5975:262:1:o;6242:339::-;6444:2;6426:21;;;6483:2;6463:18;;;6456:30;-1:-1:-1;;;6517:2:1;6502:18;;6495:45;6572:2;6557:18;;6416:165::o;6586:343::-;6788:2;6770:21;;;6827:2;6807:18;;;6800:30;-1:-1:-1;;;6861:2:1;6846:18;;6839:49;6920:2;6905:18;;6760:169::o;6934:339::-;7136:2;7118:21;;;7175:2;7155:18;;;7148:30;-1:-1:-1;;;7209:2:1;7194:18;;7187:45;7264:2;7249:18;;7108:165::o;7278:343::-;7480:2;7462:21;;;7519:2;7499:18;;;7492:30;-1:-1:-1;;;7553:2:1;7538:18;;7531:49;7612:2;7597:18;;7452:169::o;7626:402::-;7828:2;7810:21;;;7867:2;7847:18;;;7840:30;7906:34;7901:2;7886:18;;7879:62;-1:-1:-1;;;7972:2:1;7957:18;;7950:36;8018:3;8003:19;;7800:228::o;8033:411::-;8235:2;8217:21;;;8274:2;8254:18;;;8247:30;8313:34;8308:2;8293:18;;8286:62;-1:-1:-1;;;8379:2:1;8364:18;;8357:45;8434:3;8419:19;;8207:237::o;8449:354::-;8651:2;8633:21;;;8690:2;8670:18;;;8663:30;8729:32;8724:2;8709:18;;8702:60;8794:2;8779:18;;8623:180::o;8808:351::-;9010:2;8992:21;;;9049:2;9029:18;;;9022:30;9088:29;9083:2;9068:18;;9061:57;9150:2;9135:18;;8982:177::o;9164:347::-;9366:2;9348:21;;;9405:2;9385:18;;;9378:30;9444:25;9439:2;9424:18;;9417:53;9502:2;9487:18;;9338:173::o;9516:402::-;9718:2;9700:21;;;9757:2;9737:18;;;9730:30;9796:34;9791:2;9776:18;;9769:62;-1:-1:-1;;;9862:2:1;9847:18;;9840:36;9908:3;9893:19;;9690:228::o;9923:343::-;10125:2;10107:21;;;10164:2;10144:18;;;10137:30;-1:-1:-1;;;10198:2:1;10183:18;;10176:49;10257:2;10242:18;;10097:169::o;10271:340::-;10473:2;10455:21;;;10512:2;10492:18;;;10485:30;-1:-1:-1;;;10546:2:1;10531:18;;10524:46;10602:2;10587:18;;10445:166::o;10616:397::-;10818:2;10800:21;;;10857:2;10837:18;;;10830:30;10896:34;10891:2;10876:18;;10869:62;-1:-1:-1;;;10962:2:1;10947:18;;10940:31;11003:3;10988:19;;10790:223::o;11018:348::-;11220:2;11202:21;;;11259:2;11239:18;;;11232:30;11298:26;11293:2;11278:18;;11271:54;11357:2;11342:18;;11192:174::o;11371:402::-;11573:2;11555:21;;;11612:2;11592:18;;;11585:30;11651:34;11646:2;11631:18;;11624:62;-1:-1:-1;;;11717:2:1;11702:18;;11695:36;11763:3;11748:19;;11545:228::o;11778:348::-;11980:2;11962:21;;;12019:2;11999:18;;;11992:30;12058:26;12053:2;12038:18;;12031:54;12117:2;12102:18;;11952:174::o;12131:356::-;12333:2;12315:21;;;12352:18;;;12345:30;12411:34;12406:2;12391:18;;12384:62;12478:2;12463:18;;12305:182::o;12492:405::-;12694:2;12676:21;;;12733:2;12713:18;;;12706:30;12772:34;12767:2;12752:18;;12745:62;-1:-1:-1;;;12838:2:1;12823:18;;12816:39;12887:3;12872:19;;12666:231::o;12902:411::-;13104:2;13086:21;;;13143:2;13123:18;;;13116:30;13182:34;13177:2;13162:18;;13155:62;-1:-1:-1;;;13248:2:1;13233:18;;13226:45;13303:3;13288:19;;13076:237::o;13318:353::-;13520:2;13502:21;;;13559:2;13539:18;;;13532:30;13598:31;13593:2;13578:18;;13571:59;13662:2;13647:18;;13492:179::o;13676:406::-;13878:2;13860:21;;;13917:2;13897:18;;;13890:30;13956:34;13951:2;13936:18;;13929:62;-1:-1:-1;;;14022:2:1;14007:18;;14000:40;14072:3;14057:19;;13850:232::o;14087:427::-;14289:2;14271:21;;;14328:2;14308:18;;;14301:30;14367:34;14362:2;14347:18;;14340:62;14438:33;14433:2;14418:18;;14411:61;14504:3;14489:19;;14261:253::o;14519:330::-;14721:2;14703:21;;;14760:1;14740:18;;;14733:29;-1:-1:-1;;;14793:2:1;14778:18;;14771:37;14840:2;14825:18;;14693:156::o;14854:356::-;15084:6;15072:19;;;;15054:38;;-1:-1:-1;;;;;15128:32:1;;;;15123:2;15108:18;;15101:60;15192:2;15177:18;;15170:34;15042:2;15027:18;;15009:201::o;15215:177::-;15361:25;;;15349:2;15334:18;;15316:76::o;15397:274::-;15571:25;;;-1:-1:-1;;;;;15632:32:1;15627:2;15612:18;;15605:60;15559:2;15544:18;;15526:145::o;15676:258::-;15844:25;;;15912:14;15905:22;15900:2;15885:18;;15878:50;15832:2;15817:18;;15799:135::o;15939:663::-;16254:25;;;16310:2;16295:18;;16288:34;;;;-1:-1:-1;;;;;16396:15:1;;;16391:2;16376:18;;16369:43;16448:15;;;;16443:2;16428:18;;16421:43;16495:3;16480:19;;16473:35;;;;16349:3;16524:19;;16517:35;16583:3;16568:19;;16561:35;16241:3;16226:19;;16208:394::o;16607:391::-;16838:25;;;16894:2;16879:18;;16872:34;;;;16937:2;16922:18;;16915:34;16980:2;16965:18;;16958:34;16825:3;16810:19;;16792:206::o;17003:128::-;;17074:1;17070:6;17067:1;17064:13;17061:2;;;17080:18;;:::i;:::-;-1:-1:-1;17116:9:1;;17051:80::o;17136:120::-;;17202:1;17192:2;;17207:18;;:::i;:::-;-1:-1:-1;17241:9:1;;17182:74::o;17261:168::-;;17367:1;17363;17359:6;17355:14;17352:1;17349:21;17344:1;17337:9;17330:17;17326:45;17323:2;;;17374:18;;:::i;:::-;-1:-1:-1;17414:9:1;;17313:116::o;17434:125::-;;17502:1;17499;17496:8;17493:2;;;17507:18;;:::i;:::-;-1:-1:-1;17544:9:1;;17483:76::o;17564:258::-;17636:1;17646:113;17660:6;17657:1;17654:13;17646:113;;;17736:11;;;17730:18;17717:11;;;17710:39;17682:2;17675:10;17646:113;;;17777:6;17774:1;17771:13;17768:2;;;-1:-1:-1;;17812:1:1;17794:16;;17787:27;17617:205::o;17827:135::-;;-1:-1:-1;;17887:17:1;;17884:2;;;17907:18;;:::i;:::-;-1:-1:-1;17954:1:1;17943:13;;17874:88::o;17967:112::-;;18025:1;18015:2;;18030:18;;:::i;:::-;-1:-1:-1;18064:9:1;;18005:74::o;18084:127::-;18145:10;18140:3;18136:20;18133:1;18126:31;18176:4;18173:1;18166:15;18200:4;18197:1;18190:15;18216:127;18277:10;18272:3;18268:20;18265:1;18258:31;18308:4;18305:1;18298:15;18332:4;18329:1;18322:15;18348:133;-1:-1:-1;;;;;18425:31:1;;18415:42;;18405:2;;18471:1;18468;18461:12;18486:120;18574:5;18567:13;18560:21;18553:5;18550:32;18540:2;;18596:1;18593;18586:12
Swarm Source
ipfs://a41ac06e4125802a8cebbb78b681501584efedb9a0f4970fc5f19eae58f4c18a
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.