Contract
0x3a1138075bd97a33f23a87824b811146fa44288e
1
[ Download CSV Export ]
OVERVIEW
A Decentralized Reserve Currency and VC on Cronos Network.Contract Name:
MINOERC20Token
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-01-07 */ // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } function _getValues( Set storage set_ ) private view returns ( bytes32[] storage ) { return set_._values; } // TODO needs insert function that maintains order. // TODO needs NatSpec documentation comment. /** * Inserts new value by moving existing value at provided index to end * of array and setting provided value at provided index */ function _insert(Set storage set_, uint256 index_, bytes32 valueToInsert_ ) private returns ( bool ) { require( set_._values.length > index_ ); require( !_contains( set_, valueToInsert_ ), "Remove value you wish to insert if you wish to reorder array." ); bytes32 existingValue_ = _at( set_, index_ ); set_._values[index_] = valueToInsert_; return _add( set_, existingValue_); } struct Bytes4Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes4Set storage set, bytes4 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes4Set storage set, bytes4 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes4Set storage set, bytes4 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values on the set. O(1). */ function length(Bytes4Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes4Set storage set, uint256 index) internal view returns ( bytes4 ) { return bytes4( _at( set._inner, index ) ); } function getValues( Bytes4Set storage set_ ) internal view returns ( bytes4[] memory ) { bytes4[] memory bytes4Array_; for( uint256 iteration_ = 0; _length( set_._inner ) > iteration_; iteration_++ ) { bytes4Array_[iteration_] = bytes4( _at( set_._inner, iteration_ ) ); } return bytes4Array_; } function insert( Bytes4Set storage set_, uint256 index_, bytes4 valueToInsert_ ) internal returns ( bool ) { return _insert( set_._inner, index_, valueToInsert_ ); } struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values on the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns ( bytes32 ) { return _at(set._inner, index); } function getValues( Bytes32Set storage set_ ) internal view returns ( bytes4[] memory ) { bytes4[] memory bytes4Array_; for( uint256 iteration_ = 0; _length( set_._inner ) >= iteration_; iteration_++ ){ bytes4Array_[iteration_] = bytes4( at( set_, iteration_ ) ); } return bytes4Array_; } function insert( Bytes32Set storage set_, uint256 index_, bytes32 valueToInsert_ ) internal returns ( bool ) { return _insert( set_._inner, index_, valueToInsert_ ); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } /** * TODO Might require explicit conversion of bytes32[] to address[]. * Might require iteration. */ function getValues( AddressSet storage set_ ) internal view returns ( address[] memory ) { address[] memory addressArray; for( uint256 iteration_ = 0; _length(set_._inner) >= iteration_; iteration_++ ){ addressArray[iteration_] = at( set_, iteration_ ); } return addressArray; } function insert(AddressSet storage set_, uint256 index_, address valueToInsert_ ) internal returns ( bool ) { return _insert( set_._inner, index_, bytes32(uint256(valueToInsert_)) ); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } struct UInt256Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UInt256Set storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UInt256Set storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UInt256Set storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UInt256Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UInt256Set storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function sqrrt(uint256 a) internal pure returns (uint c) { if (a > 3) { c = a; uint b = add( div( a, 2), 1 ); while (b < c) { c = b; b = div( add( div( a, b ), b), 2 ); } } else if (a != 0) { c = 1; } } function percentageAmount( uint256 total_, uint8 percentage_ ) internal pure returns ( uint256 percentAmount_ ) { return div( mul( total_, percentage_ ), 1000 ); } function substractPercentage( uint256 total_, uint8 percentageToSub_ ) internal pure returns ( uint256 result_ ) { return sub( total_, div( mul( total_, percentageToSub_ ), 1000 ) ); } function percentageOfTotal( uint256 part_, uint256 total_ ) internal pure returns ( uint256 percent_ ) { return div( mul(part_, 100) , total_ ); } function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } function quadraticPricing( uint256 payment_, uint256 multiplier_ ) internal pure returns (uint256) { return sqrrt( mul( multiplier_, payment_ ) ); } function bondingCurve( uint256 supply_, uint256 multiplier_ ) internal pure returns (uint256) { return mul( multiplier_, supply_ ); } } abstract contract ERC20 is IERC20 { using SafeMath for uint256; // TODO comment actual hash value. bytes32 constant private ERC20TOKEN_ERC1820_INTERFACE_ID = keccak256( "ERC20Token" ); // Present in ERC777 mapping (address => uint256) internal _balances; // Present in ERC777 mapping (address => mapping (address => uint256)) internal _allowances; // Present in ERC777 uint256 internal _totalSupply; // Present in ERC777 string internal _name; // Present in ERC777 string internal _symbol; // Present in ERC777 uint8 internal _decimals; constructor (string memory name_, string memory symbol_, uint8 decimals_) { _name = name_; _symbol = symbol_; _decimals = decimals_; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender] .sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] .sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account_, uint256 amount_) internal virtual { require(account_ != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address( this ), account_, amount_); _totalSupply = _totalSupply.add(amount_); _balances[account_] = _balances[account_].add(amount_); emit Transfer(address( this ), account_, amount_); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from_, address to_, uint256 amount_ ) internal virtual { } } library Counters { using SafeMath for uint256; struct Counter { uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } interface IERC2612Permit { function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); } abstract contract ERC20Permit is ERC20, IERC2612Permit { using Counters for Counters.Counter; mapping(address => Counters.Counter) private _nonces; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; bytes32 public DOMAIN_SEPARATOR; constructor() { uint256 chainID; assembly { chainID := chainid() } DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name())), keccak256(bytes("1")), // Version chainID, address(this) ) ); } function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual override { require(block.timestamp <= deadline, "Permit: expired deadline"); bytes32 hashStruct = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner].current(), deadline)); bytes32 _hash = keccak256(abi.encodePacked(uint16(0x1901), DOMAIN_SEPARATOR, hashStruct)); address signer = ecrecover(_hash, v, r, s); require(signer != address(0) && signer == owner, "ZeroSwapPermit: Invalid signature"); _nonces[owner].increment(); _approve(owner, spender, amount); } function nonces(address owner) public view override returns (uint256) { return _nonces[owner].current(); } } interface IOwnable { function owner() external view returns (address); function renounceOwnership() external; function transferOwnership( address newOwner_ ) external; } contract Ownable is IOwnable { address internal _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { _owner = msg.sender; emit OwnershipTransferred( address(0), _owner ); } function owner() public view override returns (address) { return _owner; } modifier onlyOwner() { require( _owner == msg.sender, "Ownable: caller is not the owner" ); _; } function renounceOwnership() public virtual override onlyOwner() { emit OwnershipTransferred( _owner, address(0) ); _owner = address(0); } function transferOwnership( address newOwner_ ) public virtual override onlyOwner() { require( newOwner_ != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred( _owner, newOwner_ ); _owner = newOwner_; } } contract VaultOwned is Ownable { address internal _vault; function setVault( address vault_ ) external onlyOwner() returns ( bool ) { _vault = vault_; return true; } function vault() public view returns (address) { return _vault; } modifier onlyVault() { require( _vault == msg.sender, "VaultOwned: caller is not the Vault" ); _; } } contract MINOERC20Token is ERC20Permit, VaultOwned { using SafeMath for uint256; mapping(address => bool) public taxFromMap; mapping(address => bool) public taxToMap; // Max transfer tax rate: 25.00%. uint256 public constant MAXIMUM_TRANSFER_TAX_RATE = 2500; // Transfer tax rate in basis points. (default 6.66%) uint256 public transferTaxRate = 666; // Staking address for rewards, defaults to burning tokens, but will be set to // the read staking address momentarily after this contracts deploy step. address public stakingAddress = 0x000000000000000000000000000000000000dEaD; address public immutable addLiquidityHelper; event TransferFeeChanged( uint256 txnFee ); event UpdateFeeMaps( address indexed _contract, bool fromTaxed, bool toTaxed ); event SetStakingAddress( address stakingAddress ); event OperatorTransferred( address indexed previousOperator, address indexed newOperator ); // The operator can only update the transfer tax rate address public operator; modifier onlyOperator() { require(operator == msg.sender, "!operator"); _; } constructor( address _addLiquidityHelper ) ERC20("MINO", "MINO", 9) { require( _addLiquidityHelper != address(0), "addLiquidityHelper address can't be address(0)" ); addLiquidityHelper = _addLiquidityHelper; operator = msg.sender; } function mint(address account_, uint256 amount_) external onlyVault() { _mint(account_, amount_); } function burn(uint256 amount) public virtual { _burn(msg.sender, amount); } function burnFrom(address account_, uint256 amount_) public virtual { _burnFrom(account_, amount_); } function _burnFrom(address account_, uint256 amount_) public virtual { uint256 decreasedAllowance_ = allowance(account_, msg.sender).sub( amount_, "ERC20: burn amount exceeds allowance" ); _approve(account_, msg.sender, decreasedAllowance_); _burn(account_, amount_); } /// @dev overrides transfer function to meet tokenomics of DARKSIDE function _transfer( address sender, address recipient, uint256 amount ) internal virtual override { bool toFromAddLiquidityHelper = (sender == addLiquidityHelper || recipient == addLiquidityHelper); if ( !( taxFromMap[ sender ] || taxToMap[ recipient ] ) || recipient == stakingAddress || toFromAddLiquidityHelper || transferTaxRate == 0 ) { super._transfer( sender, recipient, amount ); } else { // default tax is 6.66% of every taxed transfer uint256 taxAmount = ( amount.mul( transferTaxRate ) ) / 10000; // default 93.34% of transfer sent to recipient uint256 sendAmount = amount.sub( taxAmount ); assert( amount == sendAmount.add( taxAmount ) ); super._transfer( sender, stakingAddress, taxAmount ); super._transfer( sender, recipient, sendAmount ); amount = sendAmount; } } /** * @dev Update the transfer tax rate. * Can only be called by the current operator. */ function updateTransferTaxRate( uint256 _transferTaxRate ) external onlyOperator { require( _transferTaxRate <= MAXIMUM_TRANSFER_TAX_RATE, "!valid" ); transferTaxRate = _transferTaxRate; emit TransferFeeChanged( transferTaxRate ); } /** * @dev Update the excludeFromMap * Can only be called by the current operator. */ function updateFeeMaps( address _contract, bool fromTaxed, bool toTaxed ) external onlyOperator { taxFromMap[_contract] = fromTaxed; taxToMap[_contract] = toTaxed; emit UpdateFeeMaps( _contract, fromTaxed, toTaxed ); } /** * @dev Update the mino staking address. * Can only be called by the current operator. */ function updateMinoStakingAddress( address _stakingAddress ) external onlyOperator { require( _stakingAddress != address(0) && _stakingAddress != 0x000000000000000000000000000000000000dEaD, "!!0"); require( stakingAddress == 0x000000000000000000000000000000000000dEaD, "!unset"); stakingAddress = _stakingAddress; emit SetStakingAddress( stakingAddress ); } /** * @dev Transfers operator of the contract to a new account (`newOperator`). * Can only be called by the current operator. */ function transferOperator( address newOperator ) external onlyOperator { require( newOperator != address(0), "!!0" ); emit OperatorTransferred( operator, newOperator ); operator = newOperator; } }
[{"inputs":[{"internalType":"address","name":"_addLiquidityHelper","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"stakingAddress","type":"address"}],"name":"SetStakingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"txnFee","type":"uint256"}],"name":"TransferFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_contract","type":"address"},{"indexed":false,"internalType":"bool","name":"fromTaxed","type":"bool"},{"indexed":false,"internalType":"bool","name":"toTaxed","type":"bool"}],"name":"UpdateFeeMaps","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_TRANSFER_TAX_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"_burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addLiquidityHelper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault_","type":"address"}],"name":"setVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxFromMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxToMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bool","name":"fromTaxed","type":"bool"},{"internalType":"bool","name":"toTaxed","type":"bool"}],"name":"updateFeeMaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"name":"updateMinoStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferTaxRate","type":"uint256"}],"name":"updateTransferTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405261029a600c5561dead600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200005a57600080fd5b506040516200387538038062003875833981810160405260208110156200008057600080fd5b81019080805190602001909291905050506040518060400160405280600481526020017f4d494e4f000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d494e4f00000000000000000000000000000000000000000000000000000000815250600982600390805190602001906200011792919062000495565b5081600490805190602001906200013092919062000495565b5080600560006101000a81548160ff021916908360ff16021790555050505060004690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f62000185620003ef60201b60201c565b805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050604051602081830303815290604052805190602001206007819055505033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062003847602e913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200054b565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156200048b5780601f106200045f576101008083540402835291602001916200048b565b820191906000526020600020905b8154815290600101906020018083116200046d57829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620004cd576000855562000519565b82601f10620004e857805160ff191683800117855562000519565b8280016001018555821562000519579182015b8281111562000518578251825591602001919060010190620004fb565b5b5090506200052891906200052c565b5090565b5b80821115620005475760008160009055506001016200052d565b5090565b60805160601c6132d4620005736000398061154c52806125bd528061261252506132d46000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80635bf43a9711610125578063a22b35ce116100ad578063d505accf1161007c578063d505accf14610a75578063d7b4be2414610b0e578063dd62ed3e14610b42578063f2fde38b14610bba578063fbfa77cf14610bfe57610211565b8063a22b35ce14610941578063a457c2d71461098f578063a9059cbb146109f3578063b65d08b014610a5757610211565b806379cc6790116100f457806379cc6790146107a05780637ecebe00146107ee5780638da5cb5b1461084657806392b9cb021461087a57806395d89b41146108be57610211565b80635bf43a97146106b05780636817031b146106e457806370a082311461073e578063715018a61461079657610211565b806329605e77116101a85780633950935111610177578063395093511461056e57806340c10f19146105d257806342966c6814610620578063570ca7351461064e57806358615c1b1461068257610211565b806329605e77146104cd57806330adf81f14610511578063313ce5671461052f5780633644e5151461055057610211565b8063177611ec116101e4578063177611ec146103b357806318160ddd1461040d5780631ad9339a1461042b57806323b872dd1461044957610211565b806306a95a801461021657806306fdde0314610270578063095ea7b3146102f35780630c86911d14610357575b600080fd5b6102586004803603602081101561022c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c32565b60405180821515815260200191505060405180910390f35b610278610c52565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102b857808201518184015260208101905061029d565b50505050905090810190601f1680156102e55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61033f6004803603604081101561030957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610cf4565b60405180821515815260200191505060405180910390f35b6103b16004803603606081101561036d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803515159060200190929190505050610d0b565b005b6103f5600480360360208110156103c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610edb565b60405180821515815260200191505060405180910390f35b610415610efb565b6040518082815260200191505060405180910390f35b610433610f05565b6040518082815260200191505060405180910390f35b6104b56004803603606081101561045f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f0b565b60405180821515815260200191505060405180910390f35b61050f600480360360208110156104e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fd6565b005b6105196111fc565b6040518082815260200191505060405180910390f35b610537611223565b604051808260ff16815260200191505060405180910390f35b61055861123a565b6040518082815260200191505060405180910390f35b6105ba6004803603604081101561058457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611240565b60405180821515815260200191505060405180910390f35b61061e600480360360408110156105e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112e5565b005b61064c6004803603602081101561063657600080fd5b8101908080359060200190929190505050611399565b005b6106566113a6565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106ae6004803603602081101561069857600080fd5b81019080803590602001909291905050506113cc565b005b6106b861154a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610726600480360360208110156106fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061156e565b60405180821515815260200191505060405180910390f35b6107806004803603602081101561075457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061167d565b6040518082815260200191505060405180910390f35b61079e6116c5565b005b6107ec600480360360408110156107b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611849565b005b6108306004803603602081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611857565b6040518082815260200191505060405180910390f35b61084e6118a7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108bc6004803603602081101561089057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118d1565b005b6108c6611be9565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109065780820151818401526020810190506108eb565b50505050905090810190601f1680156109335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61098d6004803603604081101561095757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c8b565b005b6109db600480360360408110156109a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cdf565b60405180821515815260200191505060405180910390f35b610a3f60048036036040811015610a0957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d9e565b60405180821515815260200191505060405180910390f35b610a5f611db5565b6040518082815260200191505060405180910390f35b610b0c600480360360e0811015610a8b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611dbb565b005b610b166120e2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610ba460048036036040811015610b5857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612108565b6040518082815260200191505060405180910390f35b610bfc60048036036020811015610bd057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061218f565b005b610c06612398565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600b6020528060005260406000206000915054906101000a900460ff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610cea5780601f10610cbf57610100808354040283529160200191610cea565b820191906000526020600020905b815481529060010190602001808311610ccd57829003601f168201915b5050505050905090565b6000610d013384846123c2565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f216f70657261746f72000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff167faa0229b7a89a7cbbb65fa3bb420871ace27f9b9cdb4847f6f8a14c54f1a6d7e7838360405180831515815260200182151581526020019250505060405180910390a2505050565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b6109c481565b6000610f188484846125b9565b610fcb8433610fc6856040518060600160405280602881526020016131a160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128209092919063ffffffff16565b6123c2565b600190509392505050565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f216f70657261746f72000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561113c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260038152602001807f212130000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b6000600560009054906101000a900460ff16905090565b60075481565b60006112db33846112d685600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e090919063ffffffff16565b6123c2565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806131c96023913960400191505060405180910390fd5b6113958282612968565b5050565b6113a33382612b2d565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461148f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f216f70657261746f72000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6109c4811115611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f2176616c6964000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600c819055507f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f4600c546040518082815260200191505060405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b60003373ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611633576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611788576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118538282611c8b565b5050565b60006118a0600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612cf1565b9050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611994576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f216f70657261746f72000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156119ff575061dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611a71576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260038152602001807f212130000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f21756e736574000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd6912e103d1553f15e77ffc98e99da32c9ce0d21d8be27cbb38437b1afe30928600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c815780601f10611c5657610100808354040283529160200191611c81565b820191906000526020600020905b815481529060010190602001808311611c6457829003601f168201915b5050505050905090565b6000611cc3826040518060600160405280602481526020016131ec60249139611cb48633612108565b6128209092919063ffffffff16565b9050611cd08333836123c2565b611cda8383612b2d565b505050565b6000611d943384611d8f8560405180606001604052806025815260200161327a60259139600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128209092919063ffffffff16565b6123c2565b6001905092915050565b6000611dab3384846125b9565b6001905092915050565b600c5481565b83421115611e31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5065726d69743a206578706972656420646561646c696e65000000000000000081525060200191505060405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b888888611ea1600660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612cf1565b89604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019650505050505050604051602081830303815290604052805190602001209050600061190160075483604051602001808461ffff1660f01b81526002018381526020018281526020019350505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611fbb573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561202f57508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b612084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061315f6021913960400191505060405180910390fd5b6120cb600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612cff565b6120d68a8a8a6123c2565b50505050505050505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612252576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130f16026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612448576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806132566024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131176022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b9050600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127035750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b158061275c5750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806127645750805b8061277157506000600c54145b1561278657612781848484612d15565b61281a565b60006127106127a0600c5485612fd690919063ffffffff16565b816127a757fe5b04905060006127bf828561305c90919063ffffffff16565b90506127d482826128e090919063ffffffff16565b84146127dc57fe5b61280986600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612d15565b612814868683612d15565b80935050505b50505050565b60008383111582906128cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612892578082015181840152602081019050612877565b50505050905090810190601f1680156128bf5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008082840190508381101561295e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612a163083836130a6565b612a2b816002546128e090919063ffffffff16565b600281905550612a82816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806132106021913960400191505060405180910390fd5b612bbf826000836130a6565b612c2a816040518060600160405280602281526020016130cf602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128209092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c818160025461305c90919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806132316025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806130ac6023913960400191505060405180910390fd5b612e2c8383836130a6565b612e9781604051806060016040528060268152602001613139602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128209092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f2a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e090919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600080831415612fe95760009050613056565b6000828402905082848281612ffa57fe5b0414613051576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131806021913960400191505060405180910390fd5b809150505b92915050565b600061309e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612820565b905092915050565b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655a65726f537761705065726d69743a20496e76616c6964207369676e6174757265536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655661756c744f776e65643a2063616c6c6572206973206e6f7420746865205661756c7445524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203aa2ffc9539b780084b68c5f9df4093065f8d43487a7101e43201a560002c91b64736f6c634300070500336164644c697175696469747948656c70657220616464726573732063616e277420626520616464726573732830290000000000000000000000007a5a4ac0088e71b2585eedced53011d627e43953
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a5a4ac0088e71b2585eedced53011d627e43953
-----Decoded View---------------
Arg [0] : _addLiquidityHelper (address): 0x7a5a4ac0088e71b2585eedced53011d627e43953
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a5a4ac0088e71b2585eedced53011d627e43953
Deployed ByteCode Sourcemap
28064:4934:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28208:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20358:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21168:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31827:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28159:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20611:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28296:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21343:329;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32765:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25050:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20528:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25167:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21680:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29522:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29643:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29115:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31430:280;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28713:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27736:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20711:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27250:151;;;:::i;:::-;;29745:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26464:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27047:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32203:402;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20441:81;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29868:363;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21902:277;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20838:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28420:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25686:770;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28628:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21009:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27407:250;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27864:73;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28208:40;;;;;;;;;;;;;;;;;;;;;;:::o;20358:77::-;20395:13;20424:5;20417:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20358:77;:::o;21168:167::-;21251:4;21268:37;21277:10;21289:7;21298:6;21268:8;:37::i;:::-;21323:4;21316:11;;21168:167;;;;:::o;31827:252::-;29202:10;29190:22;;:8;;;;;;;;;;;:22;;;29182:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31958:9:::1;31934:10;:21;31945:9;31934:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;32000:7;31978:8;:19;31987:9;31978:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32040:9;32025:46;;;32051:9;32062:7;32025:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;31827:252:::0;;;:::o;28159:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;20611:94::-;20664:7;20687:12;;20680:19;;20611:94;:::o;28296:56::-;28348:4;28296:56;:::o;21343:329::-;21449:4;21466:36;21476:6;21484:9;21495:6;21466:9;:36::i;:::-;21513:129;21522:6;21530:10;21542:99;21590:6;21542:99;;;;;;;;;;;;;;;;;:11;:19;21554:6;21542:19;;;;;;;;;;;;;;;:31;21562:10;21542:31;;;;;;;;;;;;;;;;:47;;:99;;;;;:::i;:::-;21513:8;:129::i;:::-;21660:4;21653:11;;21343:329;;;;;:::o;32765:230::-;29202:10;29190:22;;:8;;;;;;;;;;;:22;;;29182:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32879:1:::1;32856:25;;:11;:25;;;;32847:43;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32939:11;32908:44;;32929:8;;;;;;;;;;;32908:44;;;;;;;;;;;;32976:11;32965:8;;:22;;;;;;;;;;;;;;;;;;32765:230:::0;:::o;25050:108::-;25092:66;25050:108;;;:::o;20528:77::-;20569:5;20590:9;;;;;;;;;;;20583:16;;20528:77;:::o;25167:31::-;;;;:::o;21680:214::-;21768:4;21785:79;21794:10;21806:7;21815:48;21852:10;21815:11;:23;21827:10;21815:23;;;;;;;;;;;;;;;:32;21839:7;21815:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;21785:8;:79::i;:::-;21882:4;21875:11;;21680:214;;;;:::o;29522:113::-;27990:10;27980:20;;:6;;;;;;;;;;;:20;;;27971:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29603:24:::1;29609:8;29619:7;29603:5;:24::i;:::-;29522:113:::0;;:::o;29643:89::-;29699:25;29705:10;29717:6;29699:5;:25::i;:::-;29643:89;:::o;29115:23::-;;;;;;;;;;;;;:::o;31430:280::-;29202:10;29190:22;;:8;;;;;;;;;;;:22;;;29182:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28348:4:::1;31531:16;:46;;31522:80;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31631:16;31613:15;:34;;;;31665:37;31685:15;;31665:37;;;;;;;;;;;;;;;;;;31430:280:::0;:::o;28713:43::-;;;:::o;27736:122::-;27803:4;27182:10;27172:20;;:6;;;;;;;;;;;:20;;;27163:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27826:6:::1;27817;;:15;;;;;;;;;;;;;;;;;;27848:4;27841:11;;27736:122:::0;;;:::o;20711:121::-;20785:7;20808:9;:18;20818:7;20808:18;;;;;;;;;;;;;;;;20801:25;;20711:121;;;:::o;27250:151::-;27182:10;27172:20;;:6;;;;;;;;;;;:20;;;27163:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27365:1:::1;27327:42;;27349:6;;;;;;;;;;;27327:42;;;;;;;;;;;;27393:1;27376:6;;:19;;;;;;;;;;;;;;;;;;27250:151::o:0;29745:115::-;29824:28;29834:8;29844:7;29824:9;:28::i;:::-;29745:115;;:::o;26464:120::-;26525:7;26552:24;:7;:14;26560:5;26552:14;;;;;;;;;;;;;;;:22;:24::i;:::-;26545:31;;26464:120;;;:::o;27047:82::-;27094:7;27117:6;;;;;;;;;;;27110:13;;27047:82;:::o;32203:402::-;29202:10;29190:22;;:8;;;;;;;;;;;:22;;;29182:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32333:1:::1;32306:29;;:15;:29;;;;:94;;;;;32358:42;32339:61;;:15;:61;;;;32306:94;32297:111;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32446:42;32428:60;;:14;;;;;;;;;;;:60;;;32419:80;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32529:15;32512:14;;:32;;;;;;;;;;;;;;;;;;32562:35;32581:14;;;;;;;;;;;32562:35;;;;;;;;;;;;;;;;;;;;32203:402:::0;:::o;20441:81::-;20480:13;20509:7;20502:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20441:81;:::o;29868:363::-;29948:27;29991:133;30045:7;29991:133;;;;;;;;;;;;;;;;;:31;30001:8;30011:10;29991:9;:31::i;:::-;:35;;:133;;;;;:::i;:::-;29948:176;;30137:51;30146:8;30156:10;30168:19;30137:8;:51::i;:::-;30199:24;30205:8;30215:7;30199:5;:24::i;:::-;29868:363;;;:::o;21902:277::-;21995:4;22012:137;22021:10;22033:7;22042:106;22091:15;22042:106;;;;;;;;;;;;;;;;;:11;:23;22054:10;22042:23;;;;;;;;;;;;;;;:32;22066:7;22042:32;;;;;;;;;;;;;;;;:48;;:106;;;;;:::i;:::-;22012:8;:137::i;:::-;22167:4;22160:11;;21902:277;;;;:::o;20838:163::-;20924:4;20937:40;20947:10;20959:9;20970:6;20937:9;:40::i;:::-;20991:4;20984:11;;20838:163;;;;:::o;28420:36::-;;;;:::o;25686:770::-;25931:8;25912:15;:27;;25904:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25981:18;25092:66;26036:15;;26053:5;26060:7;26069:6;26077:24;:7;:14;26085:5;26077:14;;;;;;;;;;;;;;;:22;:24::i;:::-;26103:8;26025:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26015:98;;;;;;25981:132;;26126:13;26176:6;26185:16;;26203:10;26152:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26142:73;;;;;;26126:89;;26228:14;26245:25;26255:5;26262:1;26265;26268;26245:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26228:42;;26307:1;26289:20;;:6;:20;;;;:39;;;;;26323:5;26313:15;;:6;:15;;;26289:39;26281:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26379:26;:7;:14;26387:5;26379:14;;;;;;;;;;;;;;;:24;:26::i;:::-;26416:32;26425:5;26432:7;26441:6;26416:8;:32::i;:::-;25686:770;;;;;;;;;;:::o;28628:74::-;;;;;;;;;;;;;:::o;21009:151::-;21098:7;21125:11;:18;21137:5;21125:18;;;;;;;;;;;;;;;:27;21144:7;21125:27;;;;;;;;;;;;;;;;21118:34;;21009:151;;;;:::o;27407:250::-;27182:10;27172:20;;:6;;;;;;;;;;;:20;;;27163:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27528:1:::1;27507:23;;:9;:23;;;;27498:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27615:9;27585:41;;27607:6;;;;;;;;;;;27585:41;;;;;;;;;;;;27642:9;27633:6;;:18;;;;;;;;;;;;;;;;;;27407:250:::0;:::o;27864:73::-;27902:7;27925:6;;;;;;;;;;;27918:13;;27864:73;:::o;23551:346::-;23670:1;23653:19;;:5;:19;;;;23645:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23751:1;23732:21;;:7;:21;;;;23724:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23835:6;23805:11;:18;23817:5;23805:18;;;;;;;;;;;;;;;:27;23824:7;23805:27;;;;;;;;;;;;;;;:36;;;;23873:7;23857:32;;23866:5;23857:32;;;23882:6;23857:32;;;;;;;;;;;;;;;;;;23551:346;;;:::o;30312:997::-;30421:29;30464:18;30454:28;;:6;:28;;;:63;;;;30499:18;30486:31;;:9;:31;;;30454:63;30421:97;;30539:10;:20;30551:6;30539:20;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;30563:8;:21;30573:9;30563:21;;;;;;;;;;;;;;;;;;;;;;;;;30539:45;30536:50;:94;;;;30616:14;;;;;;;;;;;30603:27;;:9;:27;;;30536:94;:135;;;;30647:24;30536:135;:172;;;;30707:1;30688:15;;:20;30536:172;30531:771;;;30739:44;30756:6;30764:9;30775:6;30739:15;:44::i;:::-;30531:771;;;30877:17;30933:5;30899:29;30911:15;;30899:6;:10;;:29;;;;:::i;:::-;30897:41;;;;;;30877:61;;31016:18;31037:23;31049:9;31037:6;:10;;:23;;;;:::i;:::-;31016:44;;31095:27;31111:9;31095:10;:14;;:27;;;;:::i;:::-;31085:6;:37;31077:47;;;;31141:52;31158:6;31166:14;;;;;;;;;;;31182:9;31141:15;:52::i;:::-;31208:48;31225:6;31233:9;31244:10;31208:15;:48::i;:::-;31280:10;31271:19;;30531:771;;;30312:997;;;;:::o;16968:192::-;17054:7;17087:1;17082;:6;;17090:12;17074:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17114:9;17130:1;17126;:5;17114:17;;17151:1;17144:8;;;16968:192;;;;;:::o;16635:181::-;16693:7;16713:9;16729:1;16725;:5;16713:17;;16754:1;16749;:6;;16741:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16807:1;16800:8;;;16635:181;;;;:::o;22722:395::-;22828:1;22808:22;;:8;:22;;;;22800:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22877:56;22907:4;22915:8;22925:7;22877:20;:56::i;:::-;22959:25;22976:7;22959:12;;:16;;:25;;;;:::i;:::-;22944:12;:40;;;;23017:32;23041:7;23017:9;:19;23027:8;23017:19;;;;;;;;;;;;;;;;:23;;:32;;;;:::i;:::-;22995:9;:19;23005:8;22995:19;;;;;;;;;;;;;;;:54;;;;23091:8;23065:44;;23083:4;23065:44;;;23101:7;23065:44;;;;;;;;;;;;;;;;;;22722:395;;:::o;23125:418::-;23228:1;23209:21;;:7;:21;;;;23201:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23281:49;23302:7;23319:1;23323:6;23281:20;:49::i;:::-;23364:68;23387:6;23364:68;;;;;;;;;;;;;;;;;:9;:18;23374:7;23364:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;23343:9;:18;23353:7;23343:18;;;;;;;;;;;;;;;:89;;;;23458:24;23475:6;23458:12;;:16;;:24;;;;:::i;:::-;23443:12;:39;;;;23524:1;23498:37;;23507:7;23498:37;;;23528:6;23498:37;;;;;;;;;;;;;;;;;;23125:418;;:::o;24136:114::-;24201:7;24228;:14;;;24221:21;;24136:114;;;:::o;24258:91::-;24340:1;24322:7;:14;;;:19;;;;;;;;;;;24258:91;:::o;22187:527::-;22309:1;22291:20;;:6;:20;;;;22283:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22391:1;22370:23;;:9;:23;;;;22362:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22444:47;22465:6;22473:9;22484:6;22444:20;:47::i;:::-;22522:71;22544:6;22522:71;;;;;;;;;;;;;;;;;:9;:17;22532:6;22522:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;22502:9;:17;22512:6;22502:17;;;;;;;;;;;;;;;:91;;;;22625:32;22650:6;22625:9;:20;22635:9;22625:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;22602:9;:20;22612:9;22602:20;;;;;;;;;;;;;;;:55;;;;22688:9;22671:35;;22680:6;22671:35;;;22699:6;22671:35;;;;;;;;;;;;;;;;;;22187:527;;;:::o;17168:252::-;17226:7;17257:1;17252;:6;17248:47;;;17282:1;17275:8;;;;17248:47;17307:9;17323:1;17319;:5;17307:17;;17352:1;17347;17343;:5;;;;;;:10;17335:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17411:1;17404:8;;;17168:252;;;;;:::o;16824:136::-;16882:7;16909:43;16913:1;16916;16909:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16902:50;;16824:136;;;;:::o;23903:97::-;;;;:::o
Swarm Source
ipfs://3aa2ffc9539b780084b68c5f9df4093065f8d43487a7101e43201a560002c91b
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.