Contract
0x7373c42502874c88954bdd6d50b53061f018422e
4
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
SwapMining
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at hecoinfo.com on 2021-02-04 */ pragma solidity >=0.5.0 <0.7.0; interface IERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); } interface IMdx is IERC20 { function mint(address to, uint256 amount) external returns (bool); } 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]; } // Bytes32Set 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 in 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); } // 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))); } // 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)); } } library SafeMath { uint256 constant WAD = 10 ** 18; uint256 constant RAY = 10 ** 27; function wad() public pure returns (uint256) { return WAD; } function ray() public pure returns (uint256) { return RAY; } 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) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } 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) { // Solidity only automatically asserts when dividing by 0 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 min(uint256 a, uint256 b) internal pure returns (uint256) { return a <= b ? a : b; } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function sqrt(uint256 a) internal pure returns (uint256 b) { if (a > 3) { b = a; uint256 x = a / 2 + 1; while (x < b) { b = x; x = (a / x + x) / 2; } } else if (a != 0) { b = 1; } } function wmul(uint256 a, uint256 b) internal pure returns (uint256) { return mul(a, b) / WAD; } function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, b), WAD / 2) / WAD; } function rmul(uint256 a, uint256 b) internal pure returns (uint256) { return mul(a, b) / RAY; } function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, b), RAY / 2) / RAY; } function wdiv(uint256 a, uint256 b) internal pure returns (uint256) { return div(mul(a, WAD), b); } function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, WAD), b / 2) / b; } function rdiv(uint256 a, uint256 b) internal pure returns (uint256) { return div(mul(a, RAY), b); } function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) { return add(mul(a, RAY), b / 2) / b; } function wpow(uint256 x, uint256 n) internal pure returns (uint256) { uint256 result = WAD; while (n > 0) { if (n % 2 != 0) { result = wmul(result, x); } x = wmul(x, x); n /= 2; } return result; } function rpow(uint256 x, uint256 n) internal pure returns (uint256) { uint256 result = RAY; while (n > 0) { if (n % 2 != 0) { result = rmul(result, x); } x = rmul(x, x); n /= 2; } return result; } } contract Ownable { address private _owner; constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } function owner() public view returns (address) { return _owner; } function isOwner(address account) public view returns (bool) { return account == _owner; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } modifier onlyOwner() { require(isOwner(msg.sender), "Ownable: caller is not the owner"); _; } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); } interface IMdexFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function feeToRate() external view returns (uint256); function initCodeHash() external view returns (bytes32); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setFeeToRate(uint256) external; function setInitCodeHash(bytes32) external; function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1); function pairFor(address tokenA, address tokenB) external view returns (address pair); function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB); function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB); function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountOut); function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external view returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IMdexPair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function price(address token, uint256 baseDecimal) external view returns (uint256); function initialize(address, address) external; } interface IOracle { function update(address tokenA, address tokenB) external; function consult(address tokenIn, uint amountIn, address tokenOut) external view returns (uint amountOut); } contract SwapMining is Ownable { using SafeMath for uint256; using EnumerableSet for EnumerableSet.AddressSet; EnumerableSet.AddressSet private _whitelist; // MDX tokens created per block uint256 public mdxPerBlock; // The block number when MDX mining starts. uint256 public startBlock; // How many blocks are halved uint256 public halvingPeriod = 5256000; // Total allocation points uint256 public totalAllocPoint = 0; IOracle public oracle; // router address address public router; // factory address IMdexFactory public factory; // mdx token address IMdx public mdx; // Calculate price based on HUSD address public targetToken; // pair corresponding pid mapping(address => uint256) public pairOfPid; constructor( IMdx _mdx, IMdexFactory _factory, IOracle _oracle, address _router, address _targetToken, uint256 _mdxPerBlock, uint256 _startBlock ) public { mdx = _mdx; factory = _factory; oracle = _oracle; router = _router; targetToken = _targetToken; mdxPerBlock = _mdxPerBlock; startBlock = _startBlock; } struct UserInfo { uint256 quantity; // How many LP tokens the user has provided uint256 blockNumber; // Last transaction block } struct PoolInfo { address pair; // Trading pairs that can be mined uint256 quantity; // Current amount of LPs uint256 totalQuantity; // All quantity uint256 allocPoint; // How many allocation points assigned to this pool uint256 allocMdxAmount; // How many MDXs uint256 lastRewardBlock;// Last transaction block } PoolInfo[] public poolInfo; mapping(uint256 => mapping(address => UserInfo)) public userInfo; function poolLength() public view returns (uint256) { return poolInfo.length; } function addPair(uint256 _allocPoint, address _pair, bool _withUpdate) public onlyOwner { require(_pair != address(0), "_pair is the zero address"); if (_withUpdate) { massMintPools(); } uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({ pair : _pair, quantity : 0, totalQuantity : 0, allocPoint : _allocPoint, allocMdxAmount : 0, lastRewardBlock : lastRewardBlock })); pairOfPid[_pair] = poolLength() - 1; } // Update the allocPoint of the pool function setPair(uint256 _pid, uint256 _allocPoint, bool _withUpdate) public onlyOwner { if (_withUpdate) { massMintPools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; } // Set the number of mdx produced by each block function setMdxPerBlock(uint256 _newPerBlock) public onlyOwner { massMintPools(); mdxPerBlock = _newPerBlock; } // Only tokens in the whitelist can be mined MDX function addWhitelist(address _addToken) public onlyOwner returns (bool) { require(_addToken != address(0), "SwapMining: token is the zero address"); return EnumerableSet.add(_whitelist, _addToken); } function delWhitelist(address _delToken) public onlyOwner returns (bool) { require(_delToken != address(0), "SwapMining: token is the zero address"); return EnumerableSet.remove(_whitelist, _delToken); } function getWhitelistLength() public view returns (uint256) { return EnumerableSet.length(_whitelist); } function isWhitelist(address _token) public view returns (bool) { return EnumerableSet.contains(_whitelist, _token); } function getWhitelist(uint256 _index) public view returns (address){ require(_index <= getWhitelistLength() - 1, "SwapMining: index out of bounds"); return EnumerableSet.at(_whitelist, _index); } function setHalvingPeriod(uint256 _block) public onlyOwner { halvingPeriod = _block; } function setRouter(address newRouter) public onlyOwner { require(newRouter != address(0), "SwapMining: new router is the zero address"); router = newRouter; } function setOracle(IOracle _oracle) public onlyOwner { require(address(_oracle) != address(0), "SwapMining: new oracle is the zero address"); oracle = _oracle; } // At what phase function phase(uint256 blockNumber) public view returns (uint256) { if (halvingPeriod == 0) { return 0; } if (blockNumber > startBlock) { return (blockNumber.sub(startBlock).sub(1)).div(halvingPeriod); } return 0; } function phase() public view returns (uint256) { return phase(block.number); } function reward(uint256 blockNumber) public view returns (uint256) { uint256 _phase = phase(blockNumber); return mdxPerBlock.div(2 ** _phase); } function reward() public view returns (uint256) { return reward(block.number); } // Rewards for the current block function getMdxReward(uint256 _lastRewardBlock) public view returns (uint256) { require(_lastRewardBlock <= block.number, "SwapMining: must little than the current block number"); uint256 blockReward = 0; uint256 n = phase(_lastRewardBlock); uint256 m = phase(block.number); // If it crosses the cycle while (n < m) { n++; // Get the last block of the previous cycle uint256 r = n.mul(halvingPeriod).add(startBlock); // Get rewards from previous periods blockReward = blockReward.add((r.sub(_lastRewardBlock)).mul(reward(r))); _lastRewardBlock = r; } blockReward = blockReward.add((block.number.sub(_lastRewardBlock)).mul(reward(block.number))); return blockReward; } // Update all pools Called when updating allocPoint and setting new blocks function massMintPools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { mint(pid); } } function mint(uint256 _pid) public returns (bool) { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return false; } uint256 blockReward = getMdxReward(pool.lastRewardBlock); if (blockReward <= 0) { return false; } // Calculate the rewards obtained by the pool based on the allocPoint uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint); mdx.mint(address(this), mdxReward); // Increase the number of tokens in the current pool pool.allocMdxAmount = pool.allocMdxAmount.add(mdxReward); pool.lastRewardBlock = block.number; return true; } // swapMining only router function swap(address account, address input, address output, uint256 amount) public onlyRouter returns (bool) { require(account != address(0), "SwapMining: taker swap account is the zero address"); require(input != address(0), "SwapMining: taker swap input is the zero address"); require(output != address(0), "SwapMining: taker swap output is the zero address"); if (poolLength() <= 0) { return false; } if (!isWhitelist(input) || !isWhitelist(output)) { return false; } address pair = IMdexFactory(factory).pairFor(input, output); PoolInfo storage pool = poolInfo[pairOfPid[pair]]; // If it does not exist or the allocPoint is 0 then return if (pool.pair != pair || pool.allocPoint <= 0) { return false; } uint256 quantity = getQuantity(output, amount, targetToken); if (quantity <= 0) { return false; } mint(pairOfPid[pair]); pool.quantity = pool.quantity.add(quantity); pool.totalQuantity = pool.totalQuantity.add(quantity); UserInfo storage user = userInfo[pairOfPid[pair]][account]; user.quantity = user.quantity.add(quantity); user.blockNumber = block.number; return true; } // The user withdraws all the transaction rewards of the pool function takerWithdraw() public { uint256 userSub; uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { PoolInfo storage pool = poolInfo[pid]; UserInfo storage user = userInfo[pid][msg.sender]; if (user.quantity > 0) { mint(pid); // The reward held by the user in this pool uint256 userReward = pool.allocMdxAmount.mul(user.quantity).div(pool.quantity); pool.quantity = pool.quantity.sub(user.quantity); pool.allocMdxAmount = pool.allocMdxAmount.sub(userReward); user.quantity = 0; user.blockNumber = block.number; userSub = userSub.add(userReward); } } if (userSub <= 0) { return; } mdx.transfer(msg.sender, userSub); } // Get rewards from users in the current pool function getUserReward(uint256 _pid) public view returns (uint256, uint256){ require(_pid <= poolInfo.length - 1, "SwapMining: Not find this pool"); uint256 userSub; PoolInfo memory pool = poolInfo[_pid]; UserInfo memory user = userInfo[_pid][msg.sender]; if (user.quantity > 0) { uint256 blockReward = getMdxReward(pool.lastRewardBlock); uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint); userSub = userSub.add((pool.allocMdxAmount.add(mdxReward)).mul(user.quantity).div(pool.quantity)); } //Mdx available to users, User transaction amount return (userSub, user.quantity); } // Get details of the pool function getPoolInfo(uint256 _pid) public view returns (address, address, uint256, uint256, uint256, uint256){ require(_pid <= poolInfo.length - 1, "SwapMining: Not find this pool"); PoolInfo memory pool = poolInfo[_pid]; address token0 = IMdexPair(pool.pair).token0(); address token1 = IMdexPair(pool.pair).token1(); uint256 mdxAmount = pool.allocMdxAmount; uint256 blockReward = getMdxReward(pool.lastRewardBlock); uint256 mdxReward = blockReward.mul(pool.allocPoint).div(totalAllocPoint); mdxAmount = mdxAmount.add(mdxReward); //token0,token1,Pool remaining reward,Total /Current transaction volume of the pool return (token0, token1, mdxAmount, pool.totalQuantity, pool.quantity, pool.allocPoint); } modifier onlyRouter() { require(msg.sender == router, "SwapMining: caller is not the router"); _; } function getQuantity(address outputToken, uint256 outputAmount, address anchorToken) public view returns (uint256) { uint256 quantity = 0; if (outputToken == anchorToken) { quantity = outputAmount; } else if (IMdexFactory(factory).getPair(outputToken, anchorToken) != address(0)) { quantity = IOracle(oracle).consult(outputToken, outputAmount, anchorToken); } else { uint256 length = getWhitelistLength(); for (uint256 index = 0; index < length; index++) { address intermediate = getWhitelist(index); if (IMdexFactory(factory).getPair(outputToken, intermediate) != address(0) && IMdexFactory(factory).getPair(intermediate, anchorToken) != address(0)) { uint256 interQuantity = IOracle(oracle).consult(outputToken, outputAmount, intermediate); quantity = IOracle(oracle).consult(intermediate, interQuantity, anchorToken); break; } } } return quantity; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IMdx","name":"_mdx","type":"address"},{"internalType":"contract IMdexFactory","name":"_factory","type":"address"},{"internalType":"contract IOracle","name":"_oracle","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_targetToken","type":"address"},{"internalType":"uint256","name":"_mdxPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addToken","type":"address"}],"name":"addWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delToken","type":"address"}],"name":"delWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IMdexFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lastRewardBlock","type":"uint256"}],"name":"getMdxReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"address","name":"anchorToken","type":"address"}],"name":"getQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getUserReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massMintPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mdx","outputs":[{"internalType":"contract IMdx","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mdxPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairOfPid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"phase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"totalQuantity","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"allocMdxAmount","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block","type":"uint256"}],"name":"setHalvingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPerBlock","type":"uint256"}],"name":"setMdxPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOracle","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"input","type":"address"},{"internalType":"address","name":"output","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"takerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"targetToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","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"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405262503340600555600060065534801561001c57600080fd5b5060405161273b38038061273b833981810160405260e081101561003f57600080fd5b50805160208201516040808401516060850151608086015160a087015160c090970151600080546001600160a01b031916331780825595519798969794969395929491926001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600a80546001600160a01b03199081166001600160a01b03998a1617909155600980548216978916979097179096556007805487169588169590951790945560088054861693871693909317909255600b8054909416941693909317909155600391909155600455612612806101296000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806396db752a1161013b578063b5ec5c99116100b8578063e377fe351161007c578063e377fe3514610658578063f2fde38b14610675578063f80f5dd51461069b578063f887ea40146106c1578063f9d181f9146106c957610248565b8063b5ec5c99146105df578063b872dd0e146105fc578063c0d7865514610604578063c45a01551461062a578063c683630d1461063257610248565b8063a13202e9116100ff578063a13202e914610540578063a7ef67f614610548578063a9678a181461057e578063a9fb763c146105ba578063b1c9fe6e146105d757610248565b806396db752a146104bb57806397ecfaab146104d85780639f4ece2e146104fe5780639fb08cb714610506578063a0712d681461052357610248565b806348cd4cb1116101c95780637adbf9731161018d5780637adbf973146104385780637dc0d1d01461045e5780638da5cb5b146104665780638fa39a881461046e57806393f1a40b1461047657610248565b806348cd4cb1146103fb5780635672ab55146104035780635a3e251f1461040b578063715018a614610413578063791ba3741461041b57610248565b8063190cf6c911610210578063190cf6c91461030c578063228cb733146103395780632f380b35146103415780632f54bf6e1461039d578063327107f7146103d757610248565b80630495de501461024d578063081e3eda14610285578063135f8aa71461028d5780631526fe27146102aa57806317caf6f114610304575b600080fd5b6102736004803603602081101561026357600080fd5b50356001600160a01b03166106fd565b60408051918252519081900360200190f35b61027361070f565b610273600480360360208110156102a357600080fd5b5035610715565b6102c7600480360360208110156102c057600080fd5b503561077c565b604080516001600160a01b0390971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b6102736107c9565b6103376004803603606081101561032257600080fd5b508035906020810135906040013515156107cf565b005b610273610896565b61035e6004803603602081101561035757600080fd5b50356108a6565b604080516001600160a01b039788168152959096166020860152848601939093526060840191909152608083015260a082015290519081900360c00190f35b6103c3600480360360208110156103b357600080fd5b50356001600160a01b0316610ac8565b604080519115158252519081900360200190f35b6103df610adc565b604080516001600160a01b039092168252519081900360200190f35b610273610aeb565b6103df610af1565b610273610b00565b610337610b06565b6103376004803603602081101561043157600080fd5b5035610b98565b6103376004803603602081101561044e57600080fd5b50356001600160a01b0316610bed565b6103df610c9c565b6103df610cab565b610273610cba565b6104a26004803603604081101561048c57600080fd5b50803590602001356001600160a01b0316610cc0565b6040805192835260208301919091528051918290030190f35b6103df600480360360208110156104d157600080fd5b5035610ce4565b6103c3600480360360208110156104ee57600080fd5b50356001600160a01b0316610d56565b610337610df0565b6104a26004803603602081101561051c57600080fd5b5035610e14565b6103c36004803603602081101561053957600080fd5b5035610fb4565b6102736110da565b6102736004803603606081101561055e57600080fd5b506001600160a01b038135811691602081013591604090910135166110e6565b6103c36004803603608081101561059457600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356114a9565b610273600480360360208110156105d057600080fd5b50356117d2565b6102736117ff565b610337600480360360208110156105f557600080fd5b503561180a565b610337611857565b6103376004803603602081101561061a57600080fd5b50356001600160a01b03166119ca565b6103df611a79565b6103c36004803603602081101561064857600080fd5b50356001600160a01b0316611a88565b6102736004803603602081101561066e57600080fd5b5035611a95565b6103376004803603602081101561068b57600080fd5b50356001600160a01b0316611b8b565b6103c3600480360360208110156106b157600080fd5b50356001600160a01b0316611bdf565b6103df611c79565b610337600480360360608110156106df57600080fd5b508035906001600160a01b0360208201351690604001351515611c88565b600c6020526000908152604090205481565b600d5490565b60006005546000141561072a57506000610777565b6004548211156107735761076c600554610760600161075460045487611edc90919063ffffffff16565b9063ffffffff611edc16565b9063ffffffff611f1e16565b9050610777565b5060005b919050565b600d818154811061078957fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b60065481565b6107d833610ac8565b610817576040805162461bcd60e51b8152602060048201819052602482015260008051602061255b833981519152604482015290519081900360640190fd5b801561082557610825610df0565b6108688261085c600d868154811061083957fe5b906000526020600020906006020160030154600654611edc90919063ffffffff16565b9063ffffffff611f6016565b60068190555081600d848154811061087c57fe5b906000526020600020906006020160030181905550505050565b60006108a1436117d2565b905090565b6000806000806000806001600d805490500387111561090c576040805162461bcd60e51b815260206004820152601e60248201527f537761704d696e696e673a204e6f742066696e64207468697320706f6f6c0000604482015290519081900360640190fd5b610914612395565b600d888154811061092157fe5b600091825260208083206040805160c081018252600690940290910180546001600160a01b031680855260018201548585015260028201548584015260038201546060860152600480830154608087015260059092015460a08601528251630dfe168160e01b8152925194965093630dfe16819383830193909290829003018186803b1580156109b057600080fd5b505afa1580156109c4573d6000803e3d6000fd5b505050506040513d60208110156109da57600080fd5b505182516040805163d21220a760e01b815290519293506000926001600160a01b039092169163d21220a791600480820192602092909190829003018186803b158015610a2657600080fd5b505afa158015610a3a573d6000803e3d6000fd5b505050506040513d6020811015610a5057600080fd5b5051608084015160a085015191925090600090610a6c90611a95565b90506000610a8d600654610760886060015185611fba90919063ffffffff16565b9050610a9f838263ffffffff611f6016565b60408701516020880151606090980151969f959e50909c509a5094985092965090945050505050565b6000546001600160a01b0390811691161490565b600b546001600160a01b031681565b60045481565b600a546001600160a01b031681565b60055481565b610b0f33610ac8565b610b4e576040805162461bcd60e51b8152602060048201819052602482015260008051602061255b833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610ba133610ac8565b610be0576040805162461bcd60e51b8152602060048201819052602482015260008051602061255b833981519152604482015290519081900360640190fd5b610be8610df0565b600355565b610bf633610ac8565b610c35576040805162461bcd60e51b8152602060048201819052602482015260008051602061255b833981519152604482015290519081900360640190fd5b6001600160a01b038116610c7a5760405162461bcd60e51b815260040180806020018281038252602a8152602001806124ec602a913960400191505060405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6007546001600160a01b031681565b6000546001600160a01b031690565b60035481565b600e6020908152600092835260408084209091529082529020805460019091015482565b60006001610cf06110da565b03821115610d45576040805162461bcd60e51b815260206004820152601f60248201527f537761704d696e696e673a20696e646578206f7574206f6620626f756e647300604482015290519081900360640190fd5b610d50600183612013565b92915050565b6000610d6133610ac8565b610da0576040805162461bcd60e51b8152602060048201819052602482015260008051602061255b833981519152604482015290519081900360640190fd5b6001600160a01b038216610de55760405162461bcd60e51b81526004018080602001828103825260258152602001806124966025913960400191505060405180910390fd5b610d5060018361201f565b600d5460005b81811015610e1057610e0781610fb4565b50600101610df6565b5050565b600d54600090819060001901831115610e74576040805162461bcd60e51b815260206004820152601e60248201527f537761704d696e696e673a204e6f742066696e64207468697320706f6f6c0000604482015290519081900360640190fd5b6000610e7e612395565b600d8581548110610e8b57fe5b60009182526020918290206040805160c081018252600690930290910180546001600160a01b03168352600181015493830193909352600283015490820152600382015460608201526004820154608082015260059091015460a08201529050610ef36123d4565b506000858152600e60209081526040808320338452825291829020825180840190935280548084526001909101549183019190915215610fa7576000610f3c8360a00151611a95565b90506000610f5d600654610760866060015185611fba90919063ffffffff16565b9050610fa2610f9585602001516107608660000151610f89868a60800151611f6090919063ffffffff16565b9063ffffffff611fba16565b869063ffffffff611f6016565b945050505b5191935090915050915091565b600080600d8381548110610fc457fe5b9060005260206000209060060201905080600501544311610fe9576000915050610777565b6000610ff88260050154611a95565b90506000811161100d57600092505050610777565b600061102c600654610760856003015485611fba90919063ffffffff16565b600a54604080516340c10f1960e01b81523060048201526024810184905290519293506001600160a01b03909116916340c10f19916044808201926020929091908290030181600087803b15801561108357600080fd5b505af1158015611097573d6000803e3d6000fd5b505050506040513d60208110156110ad57600080fd5b505060048301546110c4908263ffffffff611f6016565b6004840155505043600590910155506001919050565b60006108a16001612034565b6000806001600160a01b0385811690841614156111045750826114a1565b6009546040805163e6a4390560e01b81526001600160a01b038881166004830152868116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561115c57600080fd5b505afa158015611170573d6000803e3d6000fd5b505050506040513d602081101561118657600080fd5b50516001600160a01b0316146112255760075460408051632321bc7960e21b81526001600160a01b03888116600483015260248201889052868116604483015291519190921691638c86f1e4916064808301926020929190829003018186803b1580156111f257600080fd5b505afa158015611206573d6000803e3d6000fd5b505050506040513d602081101561121c57600080fd5b505190506114a1565b600061122f6110da565b905060005b8181101561149e57600061124782610ce4565b6009546040805163e6a4390560e01b81526001600160a01b038c8116600483015284811660248301529151939450600093919092169163e6a43905916044808301926020929190829003018186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d60208110156112cc57600080fd5b50516001600160a01b03161480159061137057506009546040805163e6a4390560e01b81526001600160a01b038481166004830152898116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561133857600080fd5b505afa15801561134c573d6000803e3d6000fd5b505050506040513d602081101561136257600080fd5b50516001600160a01b031614155b156114955760075460408051632321bc7960e21b81526001600160a01b038b81166004830152602482018b9052848116604483015291516000939290921691638c86f1e491606480820192602092909190829003018186803b1580156113d557600080fd5b505afa1580156113e9573d6000803e3d6000fd5b505050506040513d60208110156113ff57600080fd5b505160075460408051632321bc7960e21b81526001600160a01b038681166004830152602482018590528b811660448301529151939450911691638c86f1e491606480820192602092909190829003018186803b15801561145f57600080fd5b505afa158015611473573d6000803e3d6000fd5b505050506040513d602081101561148957600080fd5b5051945061149e915050565b50600101611234565b50505b949350505050565b6008546000906001600160a01b031633146114f55760405162461bcd60e51b81526004018080602001828103825260248152602001806125166024913960400191505060405180910390fd5b6001600160a01b03851661153a5760405162461bcd60e51b815260040180806020018281038252603281526020018061257b6032913960400191505060405180910390fd5b6001600160a01b03841661157f5760405162461bcd60e51b81526004018080602001828103825260308152602001806125ad6030913960400191505060405180910390fd5b6001600160a01b0383166115c45760405162461bcd60e51b81526004018080602001828103825260318152602001806124bb6031913960400191505060405180910390fd5b60006115ce61070f565b116115db575060006114a1565b6115e484611a88565b15806115f657506115f483611a88565b155b15611603575060006114a1565b600954604080516396ed28f960e01b81526001600160a01b0387811660048301528681166024830152915160009392909216916396ed28f991604480820192602092909190829003018186803b15801561165c57600080fd5b505afa158015611670573d6000803e3d6000fd5b505050506040513d602081101561168657600080fd5b50516001600160a01b0381166000908152600c6020526040812054600d8054939450919281106116b257fe5b6000918252602090912060069091020180549091506001600160a01b0383811691161415806116e357506003810154155b156116f3576000925050506114a1565b600b5460009061170f90879087906001600160a01b03166110e6565b90506000811161172557600093505050506114a1565b6001600160a01b0383166000908152600c602052604090205461174790610fb4565b50600182015461175d908263ffffffff611f6016565b60018301556002820154611777908263ffffffff611f6016565b60028301556001600160a01b038084166000908152600c60209081526040808320548352600e8252808320938c1683529290522080546117bd908363ffffffff611f6016565b81554360019182015598975050505050505050565b6000806117de83610715565b90506117f88160020a600354611f1e90919063ffffffff16565b9392505050565b60006108a143610715565b61181333610ac8565b611852576040805162461bcd60e51b8152602060048201819052602482015260008051602061255b833981519152604482015290519081900360640190fd5b600555565b600d54600090815b81811015611935576000600d828154811061187657fe5b60009182526020808320858452600e8252604080852033865290925292208054600690920290920192501561192b576118ae83610fb4565b5060006118d4836001015461076084600001548660040154611fba90919063ffffffff16565b825460018501549192506118ee919063ffffffff611edc16565b60018401556004830154611908908263ffffffff611edc16565b600484015560008255436001830155611927868263ffffffff611f6016565b9550505b505060010161185f565b50600082116119455750506119c8565b600a546040805163a9059cbb60e01b81523360048201526024810185905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561199957600080fd5b505af11580156119ad573d6000803e3d6000fd5b505050506040513d60208110156119c357600080fd5b505050505b565b6119d333610ac8565b611a12576040805162461bcd60e51b8152602060048201819052602482015260008051602061255b833981519152604482015290519081900360640190fd5b6001600160a01b038116611a575760405162461bcd60e51b815260040180806020018281038252602a815260200180612411602a913960400191505060405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031681565b6000610d5060018361203f565b600043821115611ad65760405162461bcd60e51b81526004018080602001828103825260358152602001806124616035913960400191505060405180910390fd5b600080611ae284610715565b90506000611aef43610715565b90505b80821015611b5657600454600554600190930192600091611b1e9161085c90869063ffffffff611fba16565b9050611b4c611b3f611b2f836117d2565b610f89848a63ffffffff611edc16565b859063ffffffff611f6016565b9095509250611af2565b611b82611b75611b65436117d2565b610f89438963ffffffff611edc16565b849063ffffffff611f6016565b95945050505050565b611b9433610ac8565b611bd3576040805162461bcd60e51b8152602060048201819052602482015260008051602061255b833981519152604482015290519081900360640190fd5b611bdc81612054565b50565b6000611bea33610ac8565b611c29576040805162461bcd60e51b8152602060048201819052602482015260008051602061255b833981519152604482015290519081900360640190fd5b6001600160a01b038216611c6e5760405162461bcd60e51b81526004018080602001828103825260258152602001806124966025913960400191505060405180910390fd5b610d506001836120f4565b6008546001600160a01b031681565b611c9133610ac8565b611cd0576040805162461bcd60e51b8152602060048201819052602482015260008051602061255b833981519152604482015290519081900360640190fd5b6001600160a01b038216611d2b576040805162461bcd60e51b815260206004820152601960248201527f5f7061697220697320746865207a65726f206164647265737300000000000000604482015290519081900360640190fd5b8015611d3957611d39610df0565b60006004544311611d4c57600454611d4e565b435b600654909150611d64908563ffffffff611f6016565b60069081556040805160c0810182526001600160a01b038681168252600060208301818152938301818152606084018a81526080850183815260a08601898152600d8054600180820183559190965296517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb59590990294850180546001600160a01b031916999096169890981790945594517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb6830155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb782015592517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb8840155517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb983015591517fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eba90910155611eb961070f565b6001600160a01b039094166000908152600c602052604090209303909255505050565b60006117f883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612109565b60006117f883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121a0565b6000828201838110156117f8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611fc957506000610d50565b82820282848281611fd657fe5b04146117f85760405162461bcd60e51b815260040180806020018281038252602181526020018061253a6021913960400191505060405180910390fd5b60006117f88383612205565b60006117f8836001600160a01b038416612269565b6000610d508261232f565b60006117f8836001600160a01b038416612333565b6001600160a01b0381166120995760405162461bcd60e51b815260040180806020018281038252602681526020018061243b6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60006117f8836001600160a01b03841661234b565b600081848411156121985760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561215d578181015183820152602001612145565b50505050905090810190601f16801561218a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836121ef5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561215d578181015183820152602001612145565b5060008385816121fb57fe5b0495945050505050565b815460009082106122475760405162461bcd60e51b81526004018080602001828103825260228152602001806123ef6022913960400191505060405180910390fd5b82600001828154811061225657fe5b9060005260206000200154905092915050565b60008181526001830160205260408120548015612325578354600019808301919081019060009087908390811061229c57fe5b90600052602060002001549050808760000184815481106122b957fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806122e957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610d50565b6000915050610d50565b5490565b60009081526001919091016020526040902054151590565b60006123578383612333565b61238d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d50565b506000610d50565b6040518060c0016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180604001604052806000815260200160008152509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473537761704d696e696e673a206e657720726f7574657220697320746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373537761704d696e696e673a206d757374206c6974746c65207468616e207468652063757272656e7420626c6f636b206e756d626572537761704d696e696e673a20746f6b656e20697320746865207a65726f2061646472657373537761704d696e696e673a2074616b65722073776170206f757470757420697320746865207a65726f2061646472657373537761704d696e696e673a206e6577206f7261636c6520697320746865207a65726f2061646472657373537761704d696e696e673a2063616c6c6572206973206e6f742074686520726f75746572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572537761704d696e696e673a2074616b65722073776170206163636f756e7420697320746865207a65726f2061646472657373537761704d696e696e673a2074616b6572207377617020696e70757420697320746865207a65726f2061646472657373a26469706673582212201bddcb4e8995d7560789df298809d64baa488c718eb56e3e130294315e38d95864736f6c6343000606003300000000000000000000000025d2e80cb6b86881fd7e07dd263fb79f4abe033c000000000000000000000000b0b670fc1f7724119963018db0bfa86adb22d9410000000000000000000000007b4b0d9cd226017ea3875d49196ea63a6ea8c278000000000000000000000000ed7d5f38c79115ca12fe6c0041abb22f0a06c300000000000000000000000000a71edc38d189767582c38a3145b5873052c3e47a0000000000000000000000000000000000000000000000022b1c8c1227a000000000000000000000000000000000000000000000000000000000000000152e0e
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000025d2e80cb6b86881fd7e07dd263fb79f4abe033c000000000000000000000000b0b670fc1f7724119963018db0bfa86adb22d9410000000000000000000000007b4b0d9cd226017ea3875d49196ea63a6ea8c278000000000000000000000000ed7d5f38c79115ca12fe6c0041abb22f0a06c300000000000000000000000000a71edc38d189767582c38a3145b5873052c3e47a0000000000000000000000000000000000000000000000022b1c8c1227a000000000000000000000000000000000000000000000000000000000000000152e0e
-----Decoded View---------------
Arg [0] : _mdx (address): 0x25d2e80cb6b86881fd7e07dd263fb79f4abe033c
Arg [1] : _factory (address): 0xb0b670fc1f7724119963018db0bfa86adb22d941
Arg [2] : _oracle (address): 0x7b4b0d9cd226017ea3875d49196ea63a6ea8c278
Arg [3] : _router (address): 0xed7d5f38c79115ca12fe6c0041abb22f0a06c300
Arg [4] : _targetToken (address): 0xa71edc38d189767582c38a3145b5873052c3e47a
Arg [5] : _mdxPerBlock (uint256): 40000000000000000000
Arg [6] : _startBlock (uint256): 1388046
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 00000000000000000000000025d2e80cb6b86881fd7e07dd263fb79f4abe033c
Arg [1] : 000000000000000000000000b0b670fc1f7724119963018db0bfa86adb22d941
Arg [2] : 0000000000000000000000007b4b0d9cd226017ea3875d49196ea63a6ea8c278
Arg [3] : 000000000000000000000000ed7d5f38c79115ca12fe6c0041abb22f0a06c300
Arg [4] : 000000000000000000000000a71edc38d189767582c38a3145b5873052c3e47a
Arg [5] : 0000000000000000000000000000000000000000000000022b1c8c1227a00000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000152e0e
Deployed ByteCode Sourcemap
19870:12572:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19870:12572:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;20639:44:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20639:44:0;-1:-1:-1;;;;;20639:44:0;;:::i;:::-;;;;;;;;;;;;;;;;21820:93;;;:::i;24663:291::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24663:291:0;;:::i;21712:26::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21712:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;21712:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20311:34;;;:::i;22632:306::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22632:306:0;;;;;;;;;;;;;;:::i;:::-;;25237:94;;;:::i;30411:798::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30411:798:0;;:::i;:::-;;;;-1:-1:-1;;;;;30411:798:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14433:104;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14433:104:0;-1:-1:-1;;;;;14433:104:0;;:::i;:::-;;;;;;;;;;;;;;;;;;20575:26;;;:::i;:::-;;;;-1:-1:-1;;;;;20575:26:0;;;;;;;;;;;;;;20167:25;;;:::i;20515:15::-;;;:::i;20234:38::-;;;:::i;14545:140::-;;;:::i;22999:134::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22999:134:0;;:::i;24449:184::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24449:184:0;-1:-1:-1;;;;;24449:184:0;;:::i;20352:21::-;;;:::i;14346:79::-;;;:::i;20085:26::-;;;:::i;21745:64::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21745:64:0;;;;;;-1:-1:-1;;;;;21745:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23926:218;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23926:218:0;;:::i;23426:226::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23426:226:0;-1:-1:-1;;;;;23426:226:0;;:::i;26296:172::-;;;:::i;29656:715::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29656:715:0;;:::i;26476:741::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26476:741:0;;:::i;23660:118::-;;;:::i;31347:1090::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;31347:1090:0;;;;;;;;;;;;;;;;;:::i;27256:1351::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27256:1351:0;;;;;;;;;;;;;;;;;;;;;;:::i;25062:167::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25062:167:0;;:::i;24962:92::-;;;:::i;24152:100::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24152:100:0;;:::i;28682:915::-;;;:::i;24260:181::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24260:181:0;-1:-1:-1;;;;;24260:181:0;;:::i;20455:27::-;;;:::i;23786:132::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23786:132:0;-1:-1:-1;;;;;23786:132:0;;:::i;25377:831::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25377:831:0;;:::i;14930:109::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14930:109:0;-1:-1:-1;;;;;14930:109:0;;:::i;23195:223::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23195:223:0;-1:-1:-1;;;;;23195:223:0;;:::i;20403:21::-;;;:::i;21923:659::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21923:659:0;;;-1:-1:-1;;;;;21923:659:0;;;;;;;;;;;;:::i;20639:44::-;;;;;;;;;;;;;:::o;21820:93::-;21890:8;:15;21820:93;:::o;24663:291::-;24720:7;24744:13;;24761:1;24744:18;24740:59;;;-1:-1:-1;24786:1:0;24779:8;;24740:59;24827:10;;24813:11;:24;24809:119;;;24861:55;24902:13;;24862:34;24894:1;24862:27;24878:10;;24862:11;:15;;:27;;;;:::i;:::-;:31;:34;:31;:34;:::i;:::-;24861:40;:55;:40;:55;:::i;:::-;24854:62;;;;24809:119;-1:-1:-1;24945:1:0;24663:291;;;;:::o;21712:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21712:26:0;;;;-1:-1:-1;21712:26:0;;;;;:::o;20311:34::-;;;;:::o;22632:306::-;15089:19;15097:10;15089:7;:19::i;:::-;15081:64;;;;;-1:-1:-1;;;15081:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15081:64:0;;;;;;;;;;;;;;;22734:11:::1;22730:59;;;22762:15;:13;:15::i;:::-;22817:63;22868:11;22817:46;22837:8;22846:4;22837:14;;;;;;;;;;;;;;;;;;:25;;;22817:15;;:19;;:46;;;;:::i;:::-;:50:::0;:63:::1;:50;:63;:::i;:::-;22799:15;:81;;;;22919:11;22891:8;22900:4;22891:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;22632:306:::0;;;:::o;25237:94::-;25276:7;25303:20;25310:12;25303:6;:20::i;:::-;25296:27;;25237:94;:::o;30411:798::-;30467:7;30476;30485;30494;30503;30512;30565:1;30547:8;:15;;;;:19;30539:4;:27;;30531:70;;;;;-1:-1:-1;;;30531:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30612:20;;:::i;:::-;30635:8;30644:4;30635:14;;;;;;;;;;;;;;;;30612:37;;;;;;;;30635:14;;;;;;;30612:37;;-1:-1:-1;;;;;30612:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30677:29;;-1:-1:-1;;;30677:29:0;;;;30612:37;;-1:-1:-1;30612:37:0;30677:27;;:29;;;;30635:14;;30677:29;;;;;;30612:37;30677:29;;;2:2:-1;;;;27:1;24;17:12;2:2;30677:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30677:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30677:29:0;30744:9;;30734:29;;;-1:-1:-1;;;30734:29:0;;;;30677;;-1:-1:-1;30717:14:0;;-1:-1:-1;;;;;30734:27:0;;;;;;:29;;;;;30677;;30734;;;;;;;;:27;:29;;;2:2:-1;;;;27:1;24;17:12;2:2;30734:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30734:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30734:29:0;30794:19;;;;30859:20;;;;30734:29;;-1:-1:-1;30794:19:0;30774:17;;30846:34;;:12;:34::i;:::-;30824:56;;30891:17;30911:53;30948:15;;30911:32;30927:4;:15;;;30911:11;:15;;:32;;;;:::i;:53::-;30891:73;-1:-1:-1;30987:24:0;:9;30891:73;30987:24;:13;:24;:::i;:::-;31150:18;;;;31170:13;;;;31185:15;;;;;31123:6;;31131;;-1:-1:-1;30975:36:0;;-1:-1:-1;31150:18:0;-1:-1:-1;31170:13:0;;-1:-1:-1;31185:15:0;;-1:-1:-1;30411:798:0;;-1:-1:-1;;;;;30411:798:0:o;14433:104::-;14488:4;14523:6;-1:-1:-1;;;;;14523:6:0;;;14512:17;;;;14433:104::o;20575:26::-;;;-1:-1:-1;;;;;20575:26:0;;:::o;20167:25::-;;;;:::o;20515:15::-;;;-1:-1:-1;;;;;20515:15:0;;:::o;20234:38::-;;;;:::o;14545:140::-;15089:19;15097:10;15089:7;:19::i;:::-;15081:64;;;;;-1:-1:-1;;;15081:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15081:64:0;;;;;;;;;;;;;;;14644:1:::1;14628:6:::0;;14607:40:::1;::::0;-1:-1:-1;;;;;14628:6:0;;::::1;::::0;14607:40:::1;::::0;14644:1;;14607:40:::1;14675:1;14658:19:::0;;-1:-1:-1;;;;;;14658:19:0::1;::::0;;14545:140::o;22999:134::-;15089:19;15097:10;15089:7;:19::i;:::-;15081:64;;;;;-1:-1:-1;;;15081:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15081:64:0;;;;;;;;;;;;;;;23073:15:::1;:13;:15::i;:::-;23099:11;:26:::0;22999:134::o;24449:184::-;15089:19;15097:10;15089:7;:19::i;:::-;15081:64;;;;;-1:-1:-1;;;15081:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15081:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24521:30:0;::::1;24513:85;;;;-1:-1:-1::0;;;24513:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24609:6;:16:::0;;-1:-1:-1;;;;;;24609:16:0::1;-1:-1:-1::0;;;;;24609:16:0;;;::::1;::::0;;;::::1;::::0;;24449:184::o;20352:21::-;;;-1:-1:-1;;;;;20352:21:0;;:::o;14346:79::-;14384:7;14411:6;-1:-1:-1;;;;;14411:6:0;14346:79;:::o;20085:26::-;;;;:::o;21745:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23926:218::-;23985:7;24045:1;24022:20;:18;:20::i;:::-;:24;24012:6;:34;;24004:78;;;;;-1:-1:-1;;;24004:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24100:36;24117:10;24129:6;24100:16;:36::i;:::-;24093:43;23926:218;-1:-1:-1;;23926:218:0:o;23426:226::-;23493:4;15089:19;15097:10;15089:7;:19::i;:::-;15081:64;;;;;-1:-1:-1;;;15081:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15081:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23518:23:0;::::1;23510:73;;;;-1:-1:-1::0;;;23510:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23601:43;23622:10;23634:9;23601:20;:43::i;26296:172::-:0;26356:8;:15;26339:14;26382:79;26410:6;26404:3;:12;26382:79;;;26440:9;26445:3;26440:4;:9::i;:::-;-1:-1:-1;26418:5:0;;26382:79;;;;26296:172;:::o;29656:715::-;29758:8;:15;29714:7;;;;-1:-1:-1;;29758:19:0;29750:27;;;29742:70;;;;;-1:-1:-1;;;29742:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29823:15;29849:20;;:::i;:::-;29872:8;29881:4;29872:14;;;;;;;;;;;;;;;;;29849:37;;;;;;;;29872:14;;;;;;;29849:37;;-1:-1:-1;;;;;29849:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29897:20:0;;:::i;:::-;-1:-1:-1;29920:14:0;;;;:8;:14;;;;;;;;29935:10;29920:26;;;;;;;;29897:49;;;;;;;;;;;;;;;;;;;;;;;;;29961:17;29957:306;;29995:19;30017:34;30030:4;:20;;;30017:12;:34::i;:::-;29995:56;;30066:17;30086:53;30123:15;;30086:32;30102:4;:15;;;30086:11;:15;;:32;;;;:::i;:53::-;30066:73;;30164:87;30176:74;30236:4;:13;;;30176:55;30217:4;:13;;;30177:34;30201:9;30177:4;:19;;;:23;;:34;;;;:::i;:::-;30176:40;:55;:40;:55;:::i;:74::-;30164:7;;:87;:11;:87;:::i;:::-;30154:97;;29957:306;;;30349:13;30340:7;;-1:-1:-1;30349:13:0;;-1:-1:-1;;29656:715:0;;;:::o;26476:741::-;26520:4;26537:21;26561:8;26570:4;26561:14;;;;;;;;;;;;;;;;;;26537:38;;26606:4;:20;;;26590:12;:36;26586:81;;26650:5;26643:12;;;;;26586:81;26677:19;26699:34;26712:4;:20;;;26699:12;:34::i;:::-;26677:56;;26763:1;26748:11;:16;26744:61;;26788:5;26781:12;;;;;;26744:61;26894:17;26914:53;26951:15;;26914:32;26930:4;:15;;;26914:11;:15;;:32;;;;:::i;:53::-;26978:3;;:34;;;-1:-1:-1;;;26978:34:0;;26995:4;26978:34;;;;;;;;;;;;26894:73;;-1:-1:-1;;;;;;26978:3:0;;;;:8;;:34;;;;;;;;;;;;;;;:3;;:34;;;2:2:-1;;;;27:1;24;17:12;2:2;26978:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26978:34:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;27107:19:0;;;;:34;;27131:9;27107:34;:23;:34;:::i;:::-;27085:19;;;:56;-1:-1:-1;;27175:12:0;27152:20;;;;:35;-1:-1:-1;27205:4:0;26476:741;;;:::o;23660:118::-;23711:7;23738:32;23759:10;23738:20;:32::i;31347:1090::-;31453:7;;-1:-1:-1;;;;;31508:26:0;;;;;;;31504:900;;;-1:-1:-1;31562:12:0;31504:900;;;31609:7;;31596:55;;;-1:-1:-1;;;31596:55:0;;-1:-1:-1;;;;;31596:55:0;;;;;;;;;;;;;;;;31663:1;;31609:7;;;;31596:29;;:55;;;;;;;;;;;;;;;31609:7;31596:55;;;2:2:-1;;;;27:1;24;17:12;2:2;31596:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31596:55:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31596:55:0;-1:-1:-1;;;;;31596:69:0;;31592:812;;31701:6;;31693:63;;;-1:-1:-1;;;31693:63:0;;-1:-1:-1;;;;;31693:63:0;;;;;;;;;;;;;;;;;;;;;;31701:6;;;;;31693:23;;:63;;;;;;;;;;;;;;31701:6;31693:63;;;2:2:-1;;;;27:1;24;17:12;2:2;31693:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31693:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31693:63:0;;-1:-1:-1;31592:812:0;;;31789:14;31806:20;:18;:20::i;:::-;31789:37;-1:-1:-1;31846:13:0;31841:552;31873:6;31865:5;:14;31841:552;;;31909:20;31932:19;31945:5;31932:12;:19::i;:::-;31987:7;;31974:56;;;-1:-1:-1;;;31974:56:0;;-1:-1:-1;;;;;31974:56:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31987:7:0;;;;;31974:29;;:56;;;;;;;;;;;;;;31987:7;31974:56;;;2:2:-1;;;;27:1;24;17:12;2:2;31974:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31974:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31974:56:0;-1:-1:-1;;;;;31974:70:0;;;;;:144;;-1:-1:-1;32061:7:0;;32048:56;;;-1:-1:-1;;;32048:56:0;;-1:-1:-1;;;;;32048:56:0;;;;;;;;;;;;;;;;32116:1;;32061:7;;;;32048:29;;:56;;;;;;;;;;;;;;;32061:7;32048:56;;;2:2:-1;;;;27:1;24;17:12;2:2;32048:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32048:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32048:56:0;-1:-1:-1;;;;;32048:70:0;;;31974:144;31970:408;;;32175:6;;32167:64;;;-1:-1:-1;;;32167:64:0;;-1:-1:-1;;;;;32167:64:0;;;;;;;;;;;;;;;;;;;;;;32143:21;;32175:6;;;;;32167:23;;:64;;;;;;;;;;;;;;;32175:6;32167:64;;;2:2:-1;;;;27:1;24;17:12;2:2;32167:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32167:64:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32167:64:0;32273:6;;32265:65;;;-1:-1:-1;;;32265:65:0;;-1:-1:-1;;;;;32265:65:0;;;;;;;;;;;;;;;;;;;;;;32167:64;;-1:-1:-1;32273:6:0;;;32265:23;;:65;;;;;32167:64;;32265:65;;;;;;;;32273:6;32265:65;;;2:2:-1;;;;27:1;24;17:12;2:2;32265:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32265:65:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32265:65:0;;-1:-1:-1;32353:5:0;;-1:-1:-1;;32353:5:0;31970:408;-1:-1:-1;31881:7:0;;31841:552;;;;31592:812;;32421:8;31347:1090;-1:-1:-1;;;;31347:1090:0:o;27256:1351::-;31272:6;;27361:4;;-1:-1:-1;;;;;31272:6:0;31258:10;:20;31250:69;;;;-1:-1:-1;;;31250:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27386:21:0;::::1;27378:84;;;;-1:-1:-1::0;;;27378:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;27481:19:0;::::1;27473:80;;;;-1:-1:-1::0;;;27473:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;27572:20:0;::::1;27564:82;;;;-1:-1:-1::0;;;27564:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27679:1;27663:12;:10;:12::i;:::-;:17;27659:62;;-1:-1:-1::0;27704:5:0::1;27697:12;;27659:62;27738:18;27750:5;27738:11;:18::i;:::-;27737:19;:43;;;;27761:19;27773:6;27761:11;:19::i;:::-;27760:20;27737:43;27733:88;;;-1:-1:-1::0;27804:5:0::1;27797:12;;27733:88;27861:7;::::0;27848:44:::1;::::0;;-1:-1:-1;;;27848:44:0;;-1:-1:-1;;;;;27848:44:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;27833:12:::1;::::0;27861:7;;;::::1;::::0;27848:29:::1;::::0;:44;;;;;::::1;::::0;;;;;;;;;27861:7;27848:44;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;27848:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27848:44:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27848:44:0;-1:-1:-1;;;;;27938:15:0;::::1;27905:21;27938:15:::0;;;:9:::1;27848:44;27938:15:::0;;;;;27929:8:::1;:25:::0;;27848:44;;-1:-1:-1;27905:21:0;;27929:25;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;28037:9:::0;;27929:25;;-1:-1:-1;;;;;;28037:17:0;;::::1;:9:::0;::::1;:17;;::::0;:41:::1;;-1:-1:-1::0;28058:15:0::1;::::0;::::1;::::0;:20;28037:41:::1;28033:86;;;28102:5;28095:12;;;;;;28033:86;28178:11;::::0;28131:16:::1;::::0;28150:40:::1;::::0;28162:6;;28170;;-1:-1:-1;;;;;28178:11:0::1;28150;:40::i;:::-;28131:59;;28217:1;28205:8;:13;28201:58;;28242:5;28235:12;;;;;;;28201:58;-1:-1:-1::0;;;;;28276:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;28271:21:::1;::::0;:4:::1;:21::i;:::-;-1:-1:-1::0;28321:13:0::1;::::0;::::1;::::0;:27:::1;::::0;28339:8;28321:27:::1;:17;:27;:::i;:::-;28305:13;::::0;::::1;:43:::0;28380:18:::1;::::0;::::1;::::0;:32:::1;::::0;28403:8;28380:32:::1;:22;:32;:::i;:::-;28359:18;::::0;::::1;:53:::0;-1:-1:-1;;;;;28456:15:0;;::::1;28423:21;28456:15:::0;;;:9:::1;:15;::::0;;;;;;;;28447:25;;:8:::1;:25:::0;;;;;:34;;::::1;::::0;;;;;;28508:13;;:27:::1;::::0;28526:8;28508:27:::1;:17;:27;:::i;:::-;28492:43:::0;;28565:12:::1;28546:16;::::0;;::::1;:31:::0;:16;27256:1351;-1:-1:-1;;;;;;;;27256:1351:0:o;25062:167::-;25120:7;25140:14;25157:18;25163:11;25157:5;:18::i;:::-;25140:35;;25193:28;25214:6;25209:1;:11;25193;;:15;;:28;;;;:::i;:::-;25186:35;25062:167;-1:-1:-1;;;25062:167:0:o;24962:92::-;25000:7;25027:19;25033:12;25027:5;:19::i;24152:100::-;15089:19;15097:10;15089:7;:19::i;:::-;15081:64;;;;;-1:-1:-1;;;15081:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15081:64:0;;;;;;;;;;;;;;;24222:13:::1;:22:::0;24152:100::o;28682:915::-;28768:8;:15;28725;;;28794:691;28822:6;28816:3;:12;28794:691;;;28852:21;28876:8;28885:3;28876:13;;;;;;;;;;;;;;;;28928;;;:8;:13;;;;;;28942:10;28928:25;;;;;;;28972:13;;28876;;;;;;;;-1:-1:-1;28972:17:0;28968:506;;29010:9;29015:3;29010:4;:9::i;:::-;;29099:18;29120:57;29163:4;:13;;;29120:38;29144:4;:13;;;29120:4;:19;;;:23;;:38;;;;:::i;:57::-;29230:13;;29212;;;;29099:78;;-1:-1:-1;29212:32:0;;:13;:32;:17;:32;:::i;:::-;29196:13;;;:48;29285:19;;;;:35;;29309:10;29285:35;:23;:35;:::i;:::-;29263:19;;;:57;29355:1;29339:17;;29394:12;29375:16;;;:31;29435:23;:7;29447:10;29435:23;:11;:23;:::i;:::-;29425:33;;28968:506;;-1:-1:-1;;28830:5:0;;28794:691;;;;29510:1;29499:7;:12;29495:51;;29528:7;;;;29495:51;29556:3;;:33;;;-1:-1:-1;;;29556:33:0;;29569:10;29556:33;;;;;;;;;;;;-1:-1:-1;;;;;29556:3:0;;;;:12;;:33;;;;;;;;;;;;;;;:3;;:33;;;2:2:-1;;;;27:1;24;17:12;2:2;29556:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29556:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;28682:915:0;:::o;24260:181::-;15089:19;15097:10;15089:7;:19::i;:::-;15081:64;;;;;-1:-1:-1;;;15081:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15081:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24334:23:0;::::1;24326:78;;;;-1:-1:-1::0;;;24326:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24415:6;:18:::0;;-1:-1:-1;;;;;;24415:18:0::1;-1:-1:-1::0;;;;;24415:18:0;;;::::1;::::0;;;::::1;::::0;;24260:181::o;20455:27::-;;;-1:-1:-1;;;;;20455:27:0;;:::o;23786:132::-;23844:4;23868:42;23891:10;23903:6;23868:22;:42::i;25377:831::-;25446:7;25494:12;25474:16;:32;;25466:98;;;;-1:-1:-1;;;25466:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25575:19;;25621:23;25627:16;25621:5;:23::i;:::-;25609:35;;25655:9;25667:19;25673:12;25667:5;:19::i;:::-;25655:31;;25733:335;25744:1;25740;:5;25733:335;;;25874:10;;25855:13;;25762:3;;;;;25837:9;;25849:36;;:20;;25762:3;;25849:20;:5;:20;:::i;:36::-;25837:48;;25964:57;25980:40;26010:9;26017:1;26010:6;:9::i;:::-;25981:23;:1;25987:16;25981:23;:5;:23;:::i;25980:40::-;25964:11;;:57;:15;:57;:::i;:::-;26055:1;;-1:-1:-1;25950:71:0;-1:-1:-1;25733:335:0;;;26092:79;26108:62;26149:20;26156:12;26149:6;:20::i;:::-;26109:34;:12;26126:16;26109:34;:16;:34;:::i;26108:62::-;26092:11;;:79;:15;:79;:::i;:::-;26078:93;25377:831;-1:-1:-1;;;;;25377:831:0:o;14930:109::-;15089:19;15097:10;15089:7;:19::i;:::-;15081:64;;;;;-1:-1:-1;;;15081:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15081:64:0;;;;;;;;;;;;;;;15003:28:::1;15022:8;15003:18;:28::i;:::-;14930:109:::0;:::o;23195:223::-;23262:4;15089:19;15097:10;15089:7;:19::i;:::-;15081:64;;;;;-1:-1:-1;;;15081:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15081:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23287:23:0;::::1;23279:73;;;;-1:-1:-1::0;;;23279:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23370:40;23388:10;23400:9;23370:17;:40::i;20403:21::-:0;;;-1:-1:-1;;;;;20403:21:0;;:::o;21923:659::-;15089:19;15097:10;15089:7;:19::i;:::-;15081:64;;;;;-1:-1:-1;;;15081:64:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15081:64:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22030:19:0;::::1;22022:57;;;::::0;;-1:-1:-1;;;22022:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22094:11;22090:59;;;22122:15;:13;:15::i;:::-;22159:23;22200:10;;22185:12;:25;:53;;22228:10;;22185:53;;;22213:12;22185:53;22267:15;::::0;22159:79;;-1:-1:-1;22267:32:0::1;::::0;22287:11;22267:32:::1;:19;:32;:::i;:::-;22249:15;:50:::0;;;22324:203:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;22324:203:0;;::::1;::::0;;-1:-1:-1;22324:203:0::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;22310:8:::1;27:10:-1::0;;39:1:::1;23:18:::0;;::::1;45:23:::0;;22310:218:0;;;;;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;22310:218:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22558:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;22539:16:0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;22558;::::1;22539:35:::0;;;-1:-1:-1;;;21923:659:0:o;10344:136::-;10402:7;10429:43;10433:1;10436;10429:43;;;;;;;;;;;;;;;;;:3;:43::i;11167:132::-;11225:7;11252:39;11256:1;11259;11252:39;;;;;;;;;;;;;;;;;:3;:39::i;10155:181::-;10213:7;10245:5;;;10269:6;;;;10261:46;;;;;-1:-1:-1;;;10261:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10688:471;10746:7;10991:6;10987:47;;-1:-1:-1;11021:1:0;11014:8;;10987:47;11058:5;;;11062:1;11058;:5;:1;11082:5;;;;;:10;11074:56;;;;-1:-1:-1;;;11074:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8116:149;8190:7;8233:22;8237:3;8249:5;8233:3;:22::i;7166:149::-;7239:4;7263:44;7271:3;-1:-1:-1;;;;;7291:14:0;;7263:7;:44::i;7645:117::-;7708:7;7735:19;7743:3;7735:7;:19::i;7401:158::-;7481:4;7505:46;7515:3;-1:-1:-1;;;;;7535:14:0;;7505:9;:46::i;14693:229::-;-1:-1:-1;;;;;14767:22:0;;14759:73;;;;-1:-1:-1;;;14759:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14869:6;;;14848:38;;-1:-1:-1;;;;;14848:38:0;;;;14869:6;;;14848:38;;;14897:6;:17;;-1:-1:-1;;;;;;14897:17:0;-1:-1:-1;;;;;14897:17:0;;;;;;;;;;14693:229::o;6847:143::-;6917:4;6941:41;6946:3;-1:-1:-1;;;;;6966:14:0;;6941:4;:41::i;10488:192::-;10574:7;10610:12;10602:6;;;;10594:29;;;;-1:-1:-1;;;10594:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;10594:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10646:5:0;;;10488:192::o;11307:345::-;11393:7;11495:12;11488:5;11480:28;;;;-1:-1:-1;;;11480:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;11480:28:0;;11519:9;11535:1;11531;:5;;;;;;;11307:345;-1:-1:-1;;;;;11307:345:0:o;4789:204::-;4884:18;;4856:7;;4884:26;-1:-1:-1;4876:73:0;;;;-1:-1:-1;;;4876:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4967:3;:11;;4979:5;4967:18;;;;;;;;;;;;;;;;4960:25;;4789:204;;;;:::o;2469:1556::-;2535:4;2674:19;;;:12;;;:19;;;;;;2710:15;;2706:1312;;3144:18;;-1:-1:-1;;3095:14:0;;;;3144:22;;;;3071:21;;3144:3;;:22;;3431;;;;;;;;;;;;;;3411:42;;3577:9;3548:3;:11;;3560:13;3548:26;;;;;;;;;;;;;;;;;;;:38;;;;3654:23;;;3696:1;3654:12;;;:23;;;;;;3680:17;;;3654:43;;3819:17;;3654:3;;3819:17;;;;;;;;;;;;;;;;;;;;;;3914:3;:12;;:19;3927:5;3914:19;;;;;;;;;;;3907:26;;;3957:4;3950:11;;;;;;;;2706:1312;4001:5;3994:12;;;;;4326:109;4409:18;;4326:109::o;4111:129::-;4184:4;4208:19;;;:12;;;;;:19;;;;;;:24;;;4111:129::o;1879:414::-;1942:4;1964:21;1974:3;1979:5;1964:9;:21::i;:::-;1959:327;;-1:-1:-1;27:10;;39:1;23:18;;;45:23;;2002:11:0;:23;;;;;;;;;;;;;2185:18;;2163:19;;;:12;;;:19;;;;;;:40;;;;2218:11;;1959:327;-1:-1:-1;2269:5:0;2262:12;;19870:12572;;;;;;;;;;-1:-1:-1;;;;;19870:12572:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://1bddcb4e8995d7560789df298809d64baa488c718eb56e3e130294315e38d958
Age | Block | Fee Address | Jailed | Incoming |
---|