Overview
ETH Balance
0.0114 ETH
Eth Value
$30.06 (@ $2,636.55/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 62 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 15536563 | 762 days ago | IN | 0 ETH | 0.0069731 | ||||
Withdraw | 15536558 | 762 days ago | IN | 0 ETH | 0.00648228 | ||||
Withdraw | 15536540 | 762 days ago | IN | 0 ETH | 0.0101289 | ||||
Withdraw | 15536534 | 762 days ago | IN | 0 ETH | 0.01095461 | ||||
Withdraw | 15536525 | 762 days ago | IN | 0 ETH | 0.01553466 | ||||
Withdraw | 15536521 | 762 days ago | IN | 0 ETH | 0.01046991 | ||||
Withdraw | 15536512 | 762 days ago | IN | 0 ETH | 0.00529724 | ||||
Withdraw | 15536502 | 762 days ago | IN | 0 ETH | 0.00369557 | ||||
Withdraw | 15536498 | 762 days ago | IN | 0 ETH | 0.00337514 | ||||
Withdraw | 15529348 | 763 days ago | IN | 0 ETH | 0.00887601 | ||||
Change Treasury | 15523485 | 764 days ago | IN | 0 ETH | 0.0005293 | ||||
Change Treasury | 15523483 | 764 days ago | IN | 0 ETH | 0.00058214 | ||||
Withdraw | 15496590 | 769 days ago | IN | 0 ETH | 0.00426548 | ||||
Withdraw | 15479380 | 771 days ago | IN | 0 ETH | 0.004598 | ||||
Withdraw | 15461994 | 774 days ago | IN | 0 ETH | 0.00324677 | ||||
Withdraw | 15456426 | 775 days ago | IN | 0 ETH | 0.00531322 | ||||
Withdraw | 15456419 | 775 days ago | IN | 0 ETH | 0.00505928 | ||||
Withdraw | 15450985 | 776 days ago | IN | 0 ETH | 0.00441564 | ||||
Withdraw | 15408656 | 783 days ago | IN | 0 ETH | 0.00256052 | ||||
Withdraw | 15401138 | 784 days ago | IN | 0 ETH | 0.00335237 | ||||
Withdraw | 15396362 | 785 days ago | IN | 0 ETH | 0.00300594 | ||||
Withdraw | 15382009 | 787 days ago | IN | 0 ETH | 0.00195652 | ||||
Withdraw | 15374909 | 788 days ago | IN | 0 ETH | 0.00345635 | ||||
Withdraw | 15372910 | 788 days ago | IN | 0 ETH | 0.00762606 | ||||
Withdraw | 15372681 | 788 days ago | IN | 0 ETH | 0.0100305 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
15536563 | 762 days ago | 0.0821 ETH | ||||
15536563 | 762 days ago | 0.0177 ETH | ||||
15536558 | 762 days ago | 0.0811 ETH | ||||
15536558 | 762 days ago | 0.0187 ETH | ||||
15536540 | 762 days ago | 0.0791 ETH | ||||
15536540 | 762 days ago | 0.0207 ETH | ||||
15536534 | 762 days ago | 0.0761 ETH | ||||
15536534 | 762 days ago | 0.0237 ETH | ||||
15536525 | 762 days ago | 0.0816 ETH | ||||
15536525 | 762 days ago | 0.0182 ETH | ||||
15536521 | 762 days ago | 0.0891 ETH | ||||
15536521 | 762 days ago | 0.0107 ETH | ||||
15536512 | 762 days ago | 0.0866 ETH | ||||
15536512 | 762 days ago | 0.0132 ETH | ||||
15536502 | 762 days ago | 0.0926 ETH | ||||
15536502 | 762 days ago | 0.0072 ETH | ||||
15536498 | 762 days ago | 0.0931 ETH | ||||
15536498 | 762 days ago | 0.0067 ETH | ||||
15536494 | 762 days ago | 0.1 ETH | ||||
15529348 | 763 days ago | 0.0771 ETH | ||||
15529348 | 763 days ago | 0.0227 ETH | ||||
15496590 | 769 days ago | 0.0901 ETH | ||||
15496590 | 769 days ago | 0.0097 ETH | ||||
15489947 | 770 days ago | 0.1 ETH | ||||
15489934 | 770 days ago | 0.1 ETH |
Loading...
Loading
This contract contains unverified libraries: Hasher
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
MessierAnonymity
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-02 */ // File: contracts/math/SafeMath.sol pragma solidity <0.6 >=0.4.21; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ /*@CTK SafeMath_mul @tag spec @post __reverted == __has_assertion_failure @post __has_assertion_failure == __has_overflow @post __reverted == false -> c == a * b @post msg == msg__post */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ /*@CTK SafeMath_div @tag spec @pre b != 0 @post __reverted == __has_assertion_failure @post __has_overflow == true -> __has_assertion_failure == true @post __reverted == false -> __return == a / b @post msg == msg__post */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ /*@CTK SafeMath_sub @tag spec @post __reverted == __has_assertion_failure @post __has_overflow == true -> __has_assertion_failure == true @post __reverted == false -> __return == a - b @post msg == msg__post */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ /*@CTK SafeMath_add @tag spec @post __reverted == __has_assertion_failure @post __has_assertion_failure == __has_overflow @post __reverted == false -> c == a + b @post msg == msg__post */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } pragma solidity <0.6 >=0.4.21; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract IERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: contracts/token/IERC20.sol pragma solidity <0.6 >=0.4.21; /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract IERC20 is IERC20Basic { function name() external view returns (string memory); function symbol() external view returns (string memory); function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/utils/Address.sol pragma solidity ^0.5.0; /** * @dev Collection of functions related to the address type, */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // File: contracts/token/SafeERC20.sol pragma solidity ^0.5.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/zksnarklib/MerkleTreeWithHistory.sol pragma solidity <0.6 >=0.4.24; library Hasher { function MiMCSponge(uint256 in_xL, uint256 in_xR) public pure returns (uint256 xL, uint256 xR); } contract MerkleTreeWithHistory { uint256 public constant FIELD_SIZE = 21888242871839275222246405745257275088548364400416034343698204186575808495617; uint256 public constant ZERO_VALUE = 21663839004416932945382355908790599225266501822907911457504978515578255421292; // = keccak256("tornado") % FIELD_SIZE uint32 public levels; // the following variables are made public for easier testing and debugging and // are not supposed to be accessed in regular code bytes32[] public filledSubtrees; bytes32[] public zeros; uint32 public currentRootIndex = 0; uint32 public nextIndex = 0; uint32 public constant ROOT_HISTORY_SIZE = 100; bytes32[ROOT_HISTORY_SIZE] public roots; constructor() public { levels = 20; bytes32 currentZero = bytes32(ZERO_VALUE); zeros.push(currentZero); filledSubtrees.push(currentZero); for (uint32 i = 1; i < levels; i++) { currentZero = hashLeftRight(currentZero, currentZero); zeros.push(currentZero); filledSubtrees.push(currentZero); } roots[0] = hashLeftRight(currentZero, currentZero); } /** @dev Hash 2 tree leaves, returns MiMC(_left, _right) */ function hashLeftRight(bytes32 _left, bytes32 _right) public pure returns (bytes32) { require(uint256(_left) < FIELD_SIZE, "_left should be inside the field"); require(uint256(_right) < FIELD_SIZE, "_right should be inside the field"); uint256 R = uint256(_left); uint256 C = 0; (R, C) = Hasher.MiMCSponge(R, C); R = addmod(R, uint256(_right), FIELD_SIZE); (R, C) = Hasher.MiMCSponge(R, C); return bytes32(R); } function _insert(bytes32 _leaf) internal returns(uint32 index) { uint32 currentIndex = nextIndex; require(currentIndex != uint32(2)**levels, "Merkle tree is full. No more leafs can be added"); nextIndex += 1; bytes32 currentLevelHash = _leaf; bytes32 left; bytes32 right; for (uint32 i = 0; i < levels; i++) { if (currentIndex % 2 == 0) { left = currentLevelHash; right = zeros[i]; filledSubtrees[i] = currentLevelHash; } else { left = filledSubtrees[i]; right = currentLevelHash; } currentLevelHash = hashLeftRight(left, right); currentIndex /= 2; } currentRootIndex = (currentRootIndex + 1) % ROOT_HISTORY_SIZE; roots[currentRootIndex] = currentLevelHash; return nextIndex - 1; } /** @dev Whether the root is present in the root history */ function isKnownRoot(bytes32 _root) public view returns(bool) { if (_root == 0) { return false; } uint32 i = currentRootIndex; do { if (_root == roots[i]) { return true; } if (i == 0) { i = ROOT_HISTORY_SIZE; } i--; } while (i != currentRootIndex); return false; } /** @dev Returns the last root */ function getLastRoot() public view returns(bytes32) { return roots[currentRootIndex]; } } // File: contracts/zksnarklib/IVerifier.sol pragma solidity <0.6 >=0.4.24; contract IVerifier { function verifyProof(bytes memory _proof, uint256[6] memory _input) public returns(bool); function verifyNullifier(bytes32 _nullifierHash) public; } // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol pragma solidity ^0.5.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. */ contract ReentrancyGuard { // counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor () internal { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call"); } } pragma solidity >=0.5.0 <0.8.0; interface IUniswapV2Router02 { function WETH() external pure returns (address); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; } // File: contracts/MessierAnonymity.sol pragma solidity <0.6 >=0.4.24; contract MessierAnonymity is MerkleTreeWithHistory, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; uint256 private constant MAX = ~uint256(0); uint256 public tokenDenomination; uint256 public coinDenomination; uint256 public initM87Denomination; mapping(bytes32 => bool) public commitments; // we store all commitments just to prevent accidental deposits with the same commitment IVerifier public verifier; IERC20 public token; IERC20 public M87Token; address public treasury; address public messier_owner; uint256 public numOfShares; uint256 public lastRewardBlock; uint256 public rewardPerBlock; uint256 public accumulateM87; uint256 public anonymityFee = 0; uint256 private duration = 365; uint256 private numDurationBlocks = duration * 24 * 60 * 4; uint256[5] public shareOfReward = [30, 0, 30, 40, 0]; address[4] public poolList; uint256[4] public rewardAmounts; uint256 public collectedFee; uint256 public feeToCollectPercent = 2; uint256 public feeToCollectAmount; uint256 public overMinEth = 250000000000000000; IUniswapV2Router02 public uniswapV2Router; uint256 public curPoolIndex; modifier onlyOwner { require(msg.sender == messier_owner, "Only Owner can call this function."); _; } event Deposit(bytes32 indexed commitment, uint32 leafIndex, uint256 timestamp, uint256 M87Denomination, uint256 anonymityFee); event Withdrawal(address to, bytes32 nullifierHash, address indexed relayer, uint256 reward, uint256 relayerFee); event RewardPerBlockUpdated(uint256 oldValue, uint256 newValue); event AnonymityFeeUpdated(uint256 oldValue, uint256 newValue); constructor() public { verifier = IVerifier(0x04f94E0bf3B30B0CE53288FbdfcFcf393ee5FB90); treasury = msg.sender; M87Token = IERC20(0x8AF5FedC0f263841C18F31D9DbCC97A47e1aB462); token = IERC20(0x0000000000000000000000000000000000000000); messier_owner = msg.sender; lastRewardBlock = block.number; initM87Denomination = 0; coinDenomination = 100000000000000000; tokenDenomination = 0; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; feeToCollectAmount = coinDenomination * feeToCollectPercent / uint256(1000); poolList = [address(0), address(0), address(0), address(0)]; M87Token.approve(messier_owner, MAX); } function calcAccumulateM87() internal view returns (uint256) { uint256 reward = block.number.sub(lastRewardBlock).mul(rewardPerBlock); uint256 remaining = M87Token.balanceOf(address(this)).sub(getAccumulateM87()); if (remaining < reward) { reward = remaining; } return getAccumulateM87().add(reward); } function updateBlockReward() public { uint256 blockNumber = block.number; if (blockNumber <= lastRewardBlock) { return; } if (rewardPerBlock != 0) { accumulateM87 = calcAccumulateM87(); } // always update lastRewardBlock no matter there is sufficient reward or not lastRewardBlock = blockNumber; } function getAccumulateM87() public view returns (uint256) { uint256 curBalance = M87Token.balanceOf(address(this)); if( curBalance < accumulateM87 ) return curBalance; return accumulateM87; } function M87Denomination() public view returns (uint256) { if (numOfShares == 0) { return initM87Denomination; } uint256 blockNumber = block.number; uint256 accM87 = getAccumulateM87(); if (blockNumber > lastRewardBlock && rewardPerBlock > 0) { accM87 = calcAccumulateM87(); } return accM87.add(numOfShares - 1).div(numOfShares); } /** @dev Deposit funds into the contract. The caller must send (for Coin) or approve (for ERC20) value equal to or `denomination` of this instance. @param _commitment the note commitment, which is PedersenHash(nullifier + secret) */ function deposit(bytes32 _commitment) external payable nonReentrant returns (bytes32 commitment, uint32 insertedIndex, uint256 blocktime, uint256 M87Deno, uint256 fee){ require(!commitments[_commitment], "The commitment has been submitted"); require(msg.value >= coinDenomination, "insufficient coin amount"); commitment = _commitment; blocktime = block.timestamp; uint256 refund = msg.value - coinDenomination; insertedIndex = _insert(_commitment); commitments[_commitment] = true; M87Deno = M87Denomination(); fee = anonymityFee; uint256 td = tokenDenomination; if (td > 0) { token.safeTransferFrom(msg.sender, address(this), td); } accumulateM87 += M87Deno; numOfShares += 1; if (refund > 0) { (bool success, ) = msg.sender.call.value(refund)(""); require(success, "failed to refund"); } collectedFee += feeToCollectAmount; if(collectedFee > overMinEth) { swapAndShare(); } else { sendRewardtoPool(); } updateBlockReward(); emit Deposit(_commitment, insertedIndex, block.timestamp, M87Deno, fee); } function withdraw(bytes calldata _proof, bytes32 _root, bytes32 _nullifierHash, address payable _recipient, address payable _relayer, uint256 _relayerFee, uint256 _refund) external payable nonReentrant { require(_refund == 0, "refund is not zero"); require(!Address.isContract(_recipient), "recipient of cannot be contract"); require(isKnownRoot(_root), "Cannot find your merkle root"); // Make sure to use a recent one require(verifier.verifyProof(_proof, [uint256(_root), uint256(_nullifierHash), uint256(_recipient), uint256(_relayer), _relayerFee, _refund]), "Invalid withdraw proof"); verifier.verifyNullifier(_nullifierHash); uint256 td = tokenDenomination; if (td > 0) { safeTransfer(token, _recipient, td); } updateBlockReward(); uint256 relayerFee = 0; // numOfShares should be larger than 0 uint256 M87Deno = getAccumulateM87().div(numOfShares); if (M87Deno > 0) { accumulateM87 -= M87Deno; safeTransfer(M87Token, _recipient, M87Deno); } uint256 cd = coinDenomination - feeToCollectAmount; if (_relayerFee > cd) { _relayerFee = cd; } if (_relayerFee > 0) { (bool success,) = _relayer.call.value(_relayerFee)(""); require(success, "failed to send relayer fee"); cd -= _relayerFee; } if (cd > 0) { (bool success,) = _recipient.call.value(cd)(""); require(success, "failed to withdraw coin"); } numOfShares -= 1; sendRewardtoPool(); emit Withdrawal(_recipient, _nullifierHash, _relayer, M87Deno, relayerFee); } function updateVerifier(address _newVerifier) external onlyOwner { verifier = IVerifier(_newVerifier); } function updateM87Token(address _newToken) external onlyOwner { M87Token = IERC20(_newToken); M87Token.approve(messier_owner, MAX); } function changeMessierOwner(address _newOwner) external onlyOwner { messier_owner = _newOwner; } function changeTreasury(address _newTreasury) external onlyOwner { treasury = _newTreasury; } function setAnonymityFee(uint256 _fee) public onlyOwner { emit AnonymityFeeUpdated(anonymityFee, _fee); anonymityFee = _fee; } // Safe transfer function, just in case if rounding error causes pool to not have enough M87s. function safeTransfer(IERC20 _token, address _to, uint256 _amount) internal { uint256 balance = _token.balanceOf(address(this)); if (_amount > balance) { _token.safeTransfer(_to, balance); } else { _token.safeTransfer(_to, _amount); } } function setPoolList(address addr1, address addr2, address addr3, address addr4) public onlyOwner { require( addr1 != address(0) && addr2 != address(0) && addr3 != address(0) && addr4 != address(0), "Not Zero Address"); poolList = [addr1, addr2, addr3, addr4]; } function setPoolFee(uint256 burnFee, uint256 fee1, uint256 fee2, uint256 fee3, uint256 fee4) public onlyOwner { require( burnFee + fee1 + fee2 + fee3 + fee4 == 100, "Invalid" ); shareOfReward = [burnFee, fee1, fee2, fee3, fee4]; } function setOverMinETH(uint256 _overMinEth) public onlyOwner { overMinEth = _overMinEth; } function swapAndShare() private { require(collectedFee > 0, "Insufficient Amount"); uint256 initialBalance = M87Token.balanceOf(address(this)); // generate the uniswap pair path address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(M87Token); // make the swap uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens.value(collectedFee) ( 0, // accept any amount of ETH path, address(this), block.timestamp.mul(2) ); // set to origin collectedFee = 0; uint256 newBalance = M87Token.balanceOf(address(this)).sub(initialBalance); if( shareOfReward[0] > 0 ) { M87Token.transfer( address(0x000000000000000000000000000000000000dEaD), newBalance.mul(shareOfReward[0]).div(100) ); } if( poolList[0] != address(0) && shareOfReward[1] > 0 && poolList[0] != address(this) ) { rewardAmounts[0] = rewardAmounts[0].add( newBalance.mul(shareOfReward[1]).div(100) ); // M87Token.transfer( poolList[0], newBalance.mul(shareOfReward[1]).div(100) ); } if( poolList[1] != address(0) && shareOfReward[2] > 0 && poolList[1] != address(this) ) { rewardAmounts[1] = rewardAmounts[1].add( newBalance.mul(shareOfReward[2]).div(100) ); // M87Token.transfer( poolList[1], newBalance.mul(shareOfReward[2]).div(100) ); } if( poolList[2] != address(0) && shareOfReward[3] > 0 && poolList[2] != address(this) ) { rewardAmounts[2] = rewardAmounts[2].add( newBalance.mul(shareOfReward[3]).div(100) ); // M87Token.transfer( poolList[2], newBalance.mul(shareOfReward[3]).div(100) ); } if( poolList[3] != address(0) && shareOfReward[4] > 0 && poolList[3] != address(this) ) { rewardAmounts[3] = rewardAmounts[3].add( newBalance.mul(shareOfReward[4]).div(100) ); // M87Token.transfer( poolList[3], newBalance.mul(shareOfReward[4]).div(100) ); } } function sendRewardtoPool() private { for(uint256 i; i < 4; i ++) { curPoolIndex ++; curPoolIndex = curPoolIndex == 4 ? 0 : curPoolIndex; if( rewardAmounts[curPoolIndex] > 0 ) { M87Token.transfer( poolList[curPoolIndex], rewardAmounts[curPoolIndex] ); rewardAmounts[curPoolIndex] = 0; return; } } } function forceSwapAndShare() public onlyOwner { swapAndShare(); } function setDuration(uint256 _duration) public onlyOwner { duration = _duration; numDurationBlocks = duration * 24 * 60 * 4; } function setFeePercent(uint256 _fee) public onlyOwner { require(_fee < 10, "Fee can't exceed 1%"); feeToCollectPercent = _fee; feeToCollectAmount = coinDenomination * feeToCollectPercent / uint256(1000); } function version() public pure returns(string memory) { return "2.3"; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"AnonymityFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"commitment","type":"bytes32"},{"indexed":false,"internalType":"uint32","name":"leafIndex","type":"uint32"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"M87Denomination","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"anonymityFee","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"RewardPerBlockUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bytes32","name":"nullifierHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"relayer","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"relayerFee","type":"uint256"}],"name":"Withdrawal","type":"event"},{"constant":true,"inputs":[],"name":"FIELD_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"M87Denomination","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"M87Token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROOT_HISTORY_SIZE","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ZERO_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"accumulateM87","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"anonymityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeMessierOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newTreasury","type":"address"}],"name":"changeTreasury","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"coinDenomination","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"collectedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"commitments","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"curPoolIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentRootIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_commitment","type":"bytes32"}],"name":"deposit","outputs":[{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"uint32","name":"insertedIndex","type":"uint32"},{"internalType":"uint256","name":"blocktime","type":"uint256"},{"internalType":"uint256","name":"M87Deno","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"feeToCollectAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeToCollectPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"filledSubtrees","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"forceSwapAndShare","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAccumulateM87","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLastRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_left","type":"bytes32"},{"internalType":"bytes32","name":"_right","type":"bytes32"}],"name":"hashLeftRight","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"initM87Denomination","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"isKnownRoot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"levels","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"messier_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nextIndex","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numOfShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"overMinEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolList","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardAmounts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"roots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setAnonymityFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"setDuration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFeePercent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_overMinEth","type":"uint256"}],"name":"setOverMinETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"fee1","type":"uint256"},{"internalType":"uint256","name":"fee2","type":"uint256"},{"internalType":"uint256","name":"fee3","type":"uint256"},{"internalType":"uint256","name":"fee4","type":"uint256"}],"name":"setPoolFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"addr1","type":"address"},{"internalType":"address","name":"addr2","type":"address"},{"internalType":"address","name":"addr3","type":"address"},{"internalType":"address","name":"addr4","type":"address"}],"name":"setPoolList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"shareOfReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenDenomination","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"updateBlockReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newToken","type":"address"}],"name":"updateM87Token","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newVerifier","type":"address"}],"name":"updateVerifier","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"verifier","outputs":[{"internalType":"contract IVerifier","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes","name":"_proof","type":"bytes"},{"internalType":"bytes32","name":"_root","type":"bytes32"},{"internalType":"bytes32","name":"_nullifierHash","type":"bytes32"},{"internalType":"address payable","name":"_recipient","type":"address"},{"internalType":"address payable","name":"_relayer","type":"address"},{"internalType":"uint256","name":"_relayerFee","type":"uint256"},{"internalType":"uint256","name":"_refund","type":"uint256"}],"name":"withdraw","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"zeros","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
600380546001600160401b03191690556000607681905561016d60775562201480607855610120604052601e608081815260a083905260c091909152602860e0526101009190915262000057906079906005620004e7565b5060026087556703782dace9d900006089553480156200007657600080fd5b506000805463ffffffff191660141781556002805460018181019092557f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c600080516020620032678339815191529091018190558154808301835592829052600080516020620032c88339815191529092018290555b60005463ffffffff908116908216101562000160576200011682806001600160e01b03620002fa16565b6002805460018181019092556000805160206200326783398151915201829055805480820182556000829052600080516020620032c88339815191520182905590925001620000ec565b506200017681806001600160e01b03620002fa16565b600460000155506001606855606d80547304f94e0bf3b30b0ce53288fbdfcfcf393ee5fb906001600160a01b03199182161790915560708054339083168117909155606f8054738af5fedc0f263841c18f31d9dbcc97a47e1ab462908416179055606e8054831690556071805483169091179055436073556000606b81905567016345785d8a0000606a819055606991909155608a8054737a250d5630b4cf539739df2c5dacb4c659f2488d9316831790556087546103e89102046088556040805160808101825260008082526020820181905291810182905260608101919091526200026890607e9060046200052f565b50606f546071546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b158015620002c457600080fd5b505af1158015620002d9573d6000803e3d6000fd5b505050506040513d6020811015620002f057600080fd5b50620005cf915050565b6000600080516020620032a8833981519152831062000360576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b600080516020620032a88339815191528210620003af5760405162461bcd60e51b8152600401808060200182810382526021815260200180620032876021913960400191505060405180910390fd5b6040805163f47d33b560e01b81526004810185905260006024820181905282518693919273560fcd70661c4ae014eeae72c763abada6f0b9bb9263f47d33b592604480840193829003018186803b1580156200040a57600080fd5b505af41580156200041f573d6000803e3d6000fd5b505050506040513d60408110156200043657600080fd5b5080516020909101519092509050600080516020620032a8833981519152848308915073560fcd70661c4ae014eeae72c763abada6f0b9bb63f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b158015620004b057600080fd5b505af4158015620004c5573d6000803e3d6000fd5b505050506040513d6040811015620004dc57600080fd5b505195945050505050565b82600581019282156200051d579160200282015b828111156200051d578251829060ff16905591602001919060010190620004fb565b506200052b92915062000588565b5090565b82600481019282156200057a579160200282015b828111156200057a57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000543565b506200052b929150620005a8565b620005a591905b808211156200052b57600081556001016200058f565b90565b620005a591905b808211156200052b5780546001600160a01b0319168155600101620005af565b612c8880620005df6000396000f3fe6080604052600436106102ff5760003560e01c80638d949d4b11610190578063ca093047116100dc578063e829558811610095578063f178e47c1161006f578063f178e47c14610a4c578063f6be71d114610a76578063fc0c546a14610aa0578063fc7e9c6f14610ab5576102ff565b8063e8295588146109f8578063ec73295914610a22578063ecaa650314610a37576102ff565b8063ca09304714610929578063ca13d4e614610953578063cd87a3b414610986578063d27c18241461099b578063d3129be4146109b0578063e811f50a146109e3576102ff565b8063a9f8d18111610149578063b214faa511610123578063b214faa514610888578063b4a61faa146108d5578063ba70f757146108ea578063c2b40ae4146108ff576102ff565b8063a9f8d1811461082b578063af32407614610840578063b14f2a3914610855576102ff565b80638d949d4b1461077a5780638daac0df1461078f57806390eeb02b146107b95780639709a6fd146107ce57806397fc007c146107e3578063997318ec14610816576102ff565b8063445cd6961161024f5780636c0813961161020857806375ddc9ed116101e257806375ddc9ed146106fc5780637ce3489b14610711578063839df9451461073b5780638ae39cac14610765576102ff565b80636c0813961461065e5780636c23cd68146106a95780636d9833e3146106be576102ff565b8063445cd696146105105780634b3e78111461053a5780634ecf518b1461057c5780635129b3e1146105aa57806354fd4d50146105bf57806361d027b314610649576102ff565b80632d0ec0ff116102bc57806334d6a7bf1161029657806334d6a7bf146104a157806338bf282e146104b65780633b406fb7146104e6578063414a37ba146104fb576102ff565b80632d0ec0ff146104625780633409038c1461047757806334749d221461048c576102ff565b80631694505e1461030457806321a0adb61461033557806322217cd3146103d257806329a5967e146103f95780632a48235b146104235780632b7ac3f31461044d575b600080fd5b34801561031057600080fd5b50610319610aca565b604080516001600160a01b039092168252519081900360200190f35b6103d0600480360360e081101561034b57600080fd5b81019060208101813564010000000081111561036657600080fd5b82018360208201111561037857600080fd5b8035906020019184600183028401116401000000008311171561039a57600080fd5b91935091508035906020810135906001600160a01b03604082013581169160608101359091169060808101359060a00135610ad9565b005b3480156103de57600080fd5b506103e7611043565b60408051918252519081900360200190f35b34801561040557600080fd5b506103d06004803603602081101561041c57600080fd5b50356110ac565b34801561042f57600080fd5b506103196004803603602081101561044657600080fd5b50356110fa565b34801561045957600080fd5b50610319611117565b34801561046e57600080fd5b506103e7611126565b34801561048357600080fd5b506103e761112c565b34801561049857600080fd5b506103d0611132565b3480156104ad57600080fd5b50610319611185565b3480156104c257600080fd5b506103e7600480360360408110156104d957600080fd5b5080359060200135611194565b3480156104f257600080fd5b506103e7611377565b34801561050757600080fd5b506103e761137d565b34801561051c57600080fd5b506103e76004803603602081101561053357600080fd5b503561138f565b34801561054657600080fd5b506103d0600480360360a081101561055d57600080fd5b50803590602081013590604081013590606081013590608001356113a3565b34801561058857600080fd5b50610591611472565b6040805163ffffffff9092168252519081900360200190f35b3480156105b657600080fd5b506103e761147e565b3480156105cb57600080fd5b506105d4611484565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561060e5781810151838201526020016105f6565b50505050905090810190601f16801561063b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561065557600080fd5b506103196114a1565b34801561066a57600080fd5b506103d06004803603608081101561068157600080fd5b506001600160a01b0381358116916020810135821691604082013581169160600135166114b0565b3480156106b557600080fd5b506103e76115cb565b3480156106ca57600080fd5b506106e8600480360360208110156106e157600080fd5b50356115d1565b604080519115158252519081900360200190f35b34801561070857600080fd5b50610319611644565b34801561071d57600080fd5b506103d06004803603602081101561073457600080fd5b5035611653565b34801561074757600080fd5b506106e86004803603602081101561075e57600080fd5b50356116fa565b34801561077157600080fd5b506103e761170f565b34801561078657600080fd5b506103d0611715565b34801561079b57600080fd5b506103d0600480360360208110156107b257600080fd5b503561173f565b3480156107c557600080fd5b506105916117ca565b3480156107da57600080fd5b506103e76117d6565b3480156107ef57600080fd5b506103d06004803603602081101561080657600080fd5b50356001600160a01b031661186e565b34801561082257600080fd5b506103e76118d9565b34801561083757600080fd5b506103e76118df565b34801561084c57600080fd5b506103e76118e5565b34801561086157600080fd5b506103d06004803603602081101561087857600080fd5b50356001600160a01b03166118eb565b6108a56004803603602081101561089e57600080fd5b5035611956565b6040805195865263ffffffff90941660208601528484019290925260608401526080830152519081900360a00190f35b3480156108e157600080fd5b506103e7611c05565b3480156108f657600080fd5b506103e7611c0b565b34801561090b57600080fd5b506103e76004803603602081101561092257600080fd5b5035611c2b565b34801561093557600080fd5b506103e76004803603602081101561094c57600080fd5b5035611c38565b34801561095f57600080fd5b506103d06004803603602081101561097657600080fd5b50356001600160a01b0316611c45565b34801561099257600080fd5b50610591611d2d565b3480156109a757600080fd5b506103e7611d32565b3480156109bc57600080fd5b506103d0600480360360208110156109d357600080fd5b50356001600160a01b0316611d38565b3480156109ef57600080fd5b506103e7611da3565b348015610a0457600080fd5b506103e760048036036020811015610a1b57600080fd5b5035611da9565b348015610a2e57600080fd5b506103e7611dc7565b348015610a4357600080fd5b506103e7611deb565b348015610a5857600080fd5b506103e760048036036020811015610a6f57600080fd5b5035611df1565b348015610a8257600080fd5b506103d060048036036020811015610a9957600080fd5b5035611dfe565b348015610aac57600080fd5b50610319611e55565b348015610ac157600080fd5b50610591611e64565b608a546001600160a01b031681565b60688054600101908190558115610b2c576040805162461bcd60e51b8152602060048201526012602482015271726566756e64206973206e6f74207a65726f60701b604482015290519081900360640190fd5b610b3585611e78565b15610b87576040805162461bcd60e51b815260206004820152601f60248201527f726563697069656e74206f662063616e6e6f7420626520636f6e747261637400604482015290519081900360640190fd5b610b90876115d1565b610be1576040805162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015290519081900360640190fd5b606d546040805160c080820183528a8252602082018a90526001600160a01b038981168385015288811660608401526080830188905260a08301879052925163695ef6f960e01b8152929093169263695ef6f9928d928d9290916004810191829160240190849080838360005b83811015610c66578181015183820152602001610c4e565b505050509050018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b158015610cb857600080fd5b505af1158015610ccc573d6000803e3d6000fd5b505050506040513d6020811015610ce257600080fd5b5051610d2e576040805162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b604482015290519081900360640190fd5b606d5460408051631955c64960e11b81526004810189905290516001600160a01b03909216916332ab8c929160248082019260009290919082900301818387803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b50506069549150508015610db457606e54610db4906001600160a01b03168783611e7e565b610dbc611715565b60008090506000610ddd607254610dd16117d6565b9063ffffffff611f3d16565b90508015610e0557607580548290039055606f54610e05906001600160a01b03168983611e7e565b608854606a540380871115610e18578096505b8615610ec9576040516000906001600160a01b038a169089908381818185875af1925050503d8060008114610e69576040519150601f19603f3d011682016040523d82523d6000602084013e610e6e565b606091505b5050905080610ec4576040805162461bcd60e51b815260206004820152601a60248201527f6661696c656420746f2073656e642072656c6179657220666565000000000000604482015290519081900360640190fd5b508690035b8015610f77576040516000906001600160a01b038b169083908381818185875af1925050503d8060008114610f1a576040519150601f19603f3d011682016040523d82523d6000602084013e610f1f565b606091505b5050905080610f75576040805162461bcd60e51b815260206004820152601760248201527f6661696c656420746f20776974686472617720636f696e000000000000000000604482015290519081900360640190fd5b505b60728054600019019055610f89611f50565b604080516001600160a01b038b81168252602082018d9052818301859052606082018690529151918a16917f6d7aac54bd3d1c91db3b1fd7b8d6cb45324ad6b5e373c0f0ea4d7b2606c4c2c89181900360800190a2505050506068548114611038576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b505050505050505050565b6000607254600014156110595750606b546110a9565b4360006110646117d6565b90506073548211801561107957506000607454115b156110895761108661207c565b90505b6072546110a490610dd183600019830163ffffffff61215e16565b925050505b90565b6071546001600160a01b031633146110f55760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b608955565b607e816004811061110757fe5b01546001600160a01b0316905081565b606d546001600160a01b031681565b60885481565b60725481565b6071546001600160a01b0316331461117b5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b61118361216b565b565b6071546001600160a01b031681565b6000600080516020612be983398151915283106111f8576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b600080516020612be983398151915282106112445760405162461bcd60e51b8152600401808060200182810382526021815260200180612bc86021913960400191505060405180910390fd5b6040805163f47d33b560e01b81526004810185905260006024820181905282518693919273560fcd70661c4ae014eeae72c763abada6f0b9bb9263f47d33b592604480840193829003018186803b15801561129e57600080fd5b505af41580156112b2573d6000803e3d6000fd5b505050506040513d60408110156112c857600080fd5b5080516020909101519092509050600080516020612be9833981519152848308915073560fcd70661c4ae014eeae72c763abada6f0b9bb63f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b15801561134057600080fd5b505af4158015611354573d6000803e3d6000fd5b505050506040513d604081101561136a57600080fd5b5051925050505b92915050565b60765481565b600080516020612be983398151915281565b6079816005811061139c57fe5b0154905081565b6071546001600160a01b031633146113ec5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b808284868801010101606414611433576040805162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b604482015290519081900360640190fd5b6040518060a0016040528086815260200185815260200184815260200183815260200182815250607990600561146a929190612aa6565b505050505050565b60005463ffffffff1681565b60695481565b604080518082019091526003815262322e3360e81b602082015290565b6070546001600160a01b031681565b6071546001600160a01b031633146114f95760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b6001600160a01b0384161580159061151957506001600160a01b03831615155b801561152d57506001600160a01b03821615155b801561154157506001600160a01b03811615155b611585576040805162461bcd60e51b815260206004820152601060248201526f4e6f74205a65726f204164647265737360801b604482015290519081900360640190fd5b604080516080810182526001600160a01b03808716825285811660208301528481169282019290925290821660608201526115c490607e906004612ae4565b5050505050565b608b5481565b6000816115e05750600061163f565b60035463ffffffff165b60048163ffffffff16606481106115fd57fe5b015483141561161057600191505061163f565b63ffffffff811661161f575060645b6003546000199091019063ffffffff808316911614156115ea5760009150505b919050565b606f546001600160a01b031681565b6071546001600160a01b0316331461169c5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b600a81106116e7576040805162461bcd60e51b81526020600482015260136024820152724665652063616e27742065786365656420312560681b604482015290519081900360640190fd5b6087819055606a546103e8910204608855565b606c6020526000908152604090205460ff1681565b60745481565b607354439081116117265750611183565b6074541561173a5761173661207c565b6075555b607355565b6071546001600160a01b031633146117885760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b607654604080519182526020820183905280517ff077eec825bf8719ab7021daf299e3feb4cb33472ac3f1e661657fd9701a3e7e9281900390910190a1607655565b60035463ffffffff1681565b606f54604080516370a0823160e01b8152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561182657600080fd5b505afa15801561183a573d6000803e3d6000fd5b505050506040513d602081101561185057600080fd5b50516075549091508110156118665790506110a9565b505060755490565b6071546001600160a01b031633146118b75760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b606d80546001600160a01b0319166001600160a01b0392909216919091179055565b606a5481565b60735481565b606b5481565b6071546001600160a01b031633146119345760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b607080546001600160a01b0319166001600160a01b0392909216919091179055565b60688054600101908190556000828152606c6020526040812054909182918291829182919060ff16156119ba5760405162461bcd60e51b8152600401808060200182810382526021815260200180612c096021913960400191505060405180910390fd5b606a54341015611a11576040805162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e7420636f696e20616d6f756e740000000000000000604482015290519081900360640190fd5b606a548796504294503403611a2587612671565b6000898152606c60205260409020805460ff191660011790559550611a48611043565b60765460695491955093508015611a7757606e54611a77906001600160a01b031633308463ffffffff61280b16565b60758054860190556072805460010190558115611b2057604051600090339084908381818185875af1925050503d8060008114611ad0576040519150601f19603f3d011682016040523d82523d6000602084013e611ad5565b606091505b5050905080611b1e576040805162461bcd60e51b815260206004820152601060248201526f19985a5b1959081d1bc81c99599d5b9960821b604482015290519081900360640190fd5b505b60885460868054909101908190556089541015611b4457611b3f61216b565b611b4c565b611b4c611f50565b611b54611715565b6040805163ffffffff891681524260208201528082018790526060810186905290518a917fcb186cc0add5be357ae2d3845e42be2ffbed8cb23b60f1b058ea371adff0a363919081900360800190a250506068548114611bfb576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5091939590929450565b60755481565b60035460009060049063ffffffff1660648110611c2457fe5b0154905090565b6004816064811061139c57fe5b6082816004811061139c57fe5b6071546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b606f80546001600160a01b0319166001600160a01b0383811691909117918290556071546040805163095ea7b360e01b81529183166004830152600019602483015251929091169163095ea7b3916044808201926020929091908290030181600087803b158015611cfe57600080fd5b505af1158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b505050565b606481565b60895481565b6071546001600160a01b03163314611d815760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b607180546001600160a01b0319166001600160a01b0392909216919091179055565b60865481565b60028181548110611db657fe5b600091825260209091200154905081565b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b60875481565b60018181548110611db657fe5b6071546001600160a01b03163314611e475760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b607781905561168002607855565b606e546001600160a01b031681565b600354640100000000900463ffffffff1681565b3b151590565b604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d6020811015611ef257600080fd5b5051905080821115611f1d57611f186001600160a01b038516848363ffffffff61286516565b611f37565b611f376001600160a01b038516848463ffffffff61286516565b50505050565b6000818381611f4857fe5b049392505050565b60005b600481101561207957608b805460010190819055600414611f7657608b54611f79565b60005b608b81905560009060829060048110611f8e57fe5b0154111561207157606f54608b546001600160a01b039091169063a9059cbb90607e9060048110611fbb57fe5b0154608b546001600160a01b039091169060829060048110611fd957fe5b01546040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561202a57600080fd5b505af115801561203e573d6000803e3d6000fd5b505050506040513d602081101561205457600080fd5b5050608b546000906082906004811061206957fe5b015550611183565b600101611f53565b50565b6000806120a660745461209a607354436128b790919063ffffffff16565b9063ffffffff6128c916565b905060006121386120b56117d6565b606f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561210057600080fd5b505afa158015612114573d6000803e3d6000fd5b505050506040513d602081101561212a57600080fd5b50519063ffffffff6128b716565b905081811015612146578091505b6110a4826121526117d6565b9063ffffffff61215e16565b8181018281101561137157fe5b6000608654116121b8576040805162461bcd60e51b8152602060048201526013602482015272125b9cdd59999a58da595b9d08105b5bdd5b9d606a1b604482015290519081900360640190fd5b606f54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561220357600080fd5b505afa158015612217573d6000803e3d6000fd5b505050506040513d602081101561222d57600080fd5b50516040805160028082526060808301845293945090916020830190803883395050608a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561229757600080fd5b505afa1580156122ab573d6000803e3d6000fd5b505050506040513d60208110156122c157600080fd5b5051815182906000906122d057fe5b6001600160a01b039283166020918202929092010152606f548251911690829060019081106122fb57fe5b6001600160a01b039283166020918202929092010152608a5460865491169063b6f9de95906000843061233542600263ffffffff6128c916565b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156123a8578181015183820152602001612390565b50505050905001955050505050506000604051808303818588803b1580156123cf57600080fd5b505af11580156123e3573d6000803e3d6000fd5b505060006086819055606f54604080516370a0823160e01b8152306004820152905192955061244294508793506001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561210057600080fd5b607954909150156124f857606f546001600160a01b031663a9059cbb61dead61247c6064610dd1607960000154879063ffffffff6128c916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156124cb57600080fd5b505af11580156124df573d6000803e3d6000fd5b505050506040513d60208110156124f557600080fd5b50505b607e546001600160a01b0316158015906125135750607a5415155b801561252a5750607e546001600160a01b03163014155b156125655761256161254e6064610dd1607960015b0154859063ffffffff6128c916565b608260005b01549063ffffffff61215e16565b6082555b607f546001600160a01b0316158015906125805750607b5415155b80156125975750607f546001600160a01b03163014155b156125bd576125b96125b06064610dd16079600261253f565b60826001612553565b6083555b6080546001600160a01b0316158015906125d85750607c5415155b80156125ef57506080546001600160a01b03163014155b15612615576126116126086064610dd16079600361253f565b60826002612553565b6084555b6081546001600160a01b0316158015906126305750607d5415155b801561264757506081546001600160a01b03163014155b15611d28576126696126606064610dd16079600461253f565b60826003612553565b608555505050565b60035460008054909163ffffffff640100000000909104811691811660020a168114156126cf5760405162461bcd60e51b815260040180806020018281038252602f815260200180612b99602f913960400191505060405180910390fd5b6003805463ffffffff64010000000080830482166001019091160267ffffffff000000001990911617905582600080805b60005463ffffffff90811690821610156127a857600185166127645783925060028163ffffffff168154811061273257fe5b906000526020600020015491508360018263ffffffff168154811061275357fe5b600091825260209091200155612788565b60018163ffffffff168154811061277757fe5b906000526020600020015492508391505b6127928383611194565b9350600263ffffffff8616049450600101612700565b5060035460649063ffffffff908116600101166003805463ffffffff19169290910663ffffffff9081169290921790819055849160049116606481106127ea57fe5b01555050600354640100000000900463ffffffff1660001901949350505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611f379085906128ee565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611d289084906128ee565b6000828211156128c357fe5b50900390565b6000826128d857506000611371565b50818102818382816128e657fe5b041461137157fe5b612900826001600160a01b0316611e78565b612951576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061298f5780518252601f199092019160209182019101612970565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146129f1576040519150601f19603f3d011682016040523d82523d6000602084013e6129f6565b606091505b509150915081612a4d576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611f3757808060200190516020811015612a6957600080fd5b5051611f375760405162461bcd60e51b815260040180806020018281038252602a815260200180612c2a602a913960400191505060405180910390fd5b8260058101928215612ad4579160200282015b82811115612ad4578251825591602001919060010190612ab9565b50612ae0929150612b38565b5090565b8260048101928215612b2c579160200282015b82811115612b2c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612af7565b50612ae0929150612b52565b6110a991905b80821115612ae05760008155600101612b3e565b6110a991905b80821115612ae05780546001600160a01b0319168155600101612b5856fe4f6e6c79204f776e65722063616e2063616c6c20746869732066756e6374696f6e2e4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656166732063616e2062652061646465645f72696768742073686f756c6420626520696e7369646520746865206669656c6430644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000154686520636f6d6d69746d656e7420686173206265656e207375626d69747465645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820bd9faa31ba99691cb28aac4ef7752696d0bc93c3c1c4a0cd28621959f5b439f064736f6c63430005110032405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f72696768742073686f756c6420626520696e7369646520746865206669656c6430644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c80638d949d4b11610190578063ca093047116100dc578063e829558811610095578063f178e47c1161006f578063f178e47c14610a4c578063f6be71d114610a76578063fc0c546a14610aa0578063fc7e9c6f14610ab5576102ff565b8063e8295588146109f8578063ec73295914610a22578063ecaa650314610a37576102ff565b8063ca09304714610929578063ca13d4e614610953578063cd87a3b414610986578063d27c18241461099b578063d3129be4146109b0578063e811f50a146109e3576102ff565b8063a9f8d18111610149578063b214faa511610123578063b214faa514610888578063b4a61faa146108d5578063ba70f757146108ea578063c2b40ae4146108ff576102ff565b8063a9f8d1811461082b578063af32407614610840578063b14f2a3914610855576102ff565b80638d949d4b1461077a5780638daac0df1461078f57806390eeb02b146107b95780639709a6fd146107ce57806397fc007c146107e3578063997318ec14610816576102ff565b8063445cd6961161024f5780636c0813961161020857806375ddc9ed116101e257806375ddc9ed146106fc5780637ce3489b14610711578063839df9451461073b5780638ae39cac14610765576102ff565b80636c0813961461065e5780636c23cd68146106a95780636d9833e3146106be576102ff565b8063445cd696146105105780634b3e78111461053a5780634ecf518b1461057c5780635129b3e1146105aa57806354fd4d50146105bf57806361d027b314610649576102ff565b80632d0ec0ff116102bc57806334d6a7bf1161029657806334d6a7bf146104a157806338bf282e146104b65780633b406fb7146104e6578063414a37ba146104fb576102ff565b80632d0ec0ff146104625780633409038c1461047757806334749d221461048c576102ff565b80631694505e1461030457806321a0adb61461033557806322217cd3146103d257806329a5967e146103f95780632a48235b146104235780632b7ac3f31461044d575b600080fd5b34801561031057600080fd5b50610319610aca565b604080516001600160a01b039092168252519081900360200190f35b6103d0600480360360e081101561034b57600080fd5b81019060208101813564010000000081111561036657600080fd5b82018360208201111561037857600080fd5b8035906020019184600183028401116401000000008311171561039a57600080fd5b91935091508035906020810135906001600160a01b03604082013581169160608101359091169060808101359060a00135610ad9565b005b3480156103de57600080fd5b506103e7611043565b60408051918252519081900360200190f35b34801561040557600080fd5b506103d06004803603602081101561041c57600080fd5b50356110ac565b34801561042f57600080fd5b506103196004803603602081101561044657600080fd5b50356110fa565b34801561045957600080fd5b50610319611117565b34801561046e57600080fd5b506103e7611126565b34801561048357600080fd5b506103e761112c565b34801561049857600080fd5b506103d0611132565b3480156104ad57600080fd5b50610319611185565b3480156104c257600080fd5b506103e7600480360360408110156104d957600080fd5b5080359060200135611194565b3480156104f257600080fd5b506103e7611377565b34801561050757600080fd5b506103e761137d565b34801561051c57600080fd5b506103e76004803603602081101561053357600080fd5b503561138f565b34801561054657600080fd5b506103d0600480360360a081101561055d57600080fd5b50803590602081013590604081013590606081013590608001356113a3565b34801561058857600080fd5b50610591611472565b6040805163ffffffff9092168252519081900360200190f35b3480156105b657600080fd5b506103e761147e565b3480156105cb57600080fd5b506105d4611484565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561060e5781810151838201526020016105f6565b50505050905090810190601f16801561063b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561065557600080fd5b506103196114a1565b34801561066a57600080fd5b506103d06004803603608081101561068157600080fd5b506001600160a01b0381358116916020810135821691604082013581169160600135166114b0565b3480156106b557600080fd5b506103e76115cb565b3480156106ca57600080fd5b506106e8600480360360208110156106e157600080fd5b50356115d1565b604080519115158252519081900360200190f35b34801561070857600080fd5b50610319611644565b34801561071d57600080fd5b506103d06004803603602081101561073457600080fd5b5035611653565b34801561074757600080fd5b506106e86004803603602081101561075e57600080fd5b50356116fa565b34801561077157600080fd5b506103e761170f565b34801561078657600080fd5b506103d0611715565b34801561079b57600080fd5b506103d0600480360360208110156107b257600080fd5b503561173f565b3480156107c557600080fd5b506105916117ca565b3480156107da57600080fd5b506103e76117d6565b3480156107ef57600080fd5b506103d06004803603602081101561080657600080fd5b50356001600160a01b031661186e565b34801561082257600080fd5b506103e76118d9565b34801561083757600080fd5b506103e76118df565b34801561084c57600080fd5b506103e76118e5565b34801561086157600080fd5b506103d06004803603602081101561087857600080fd5b50356001600160a01b03166118eb565b6108a56004803603602081101561089e57600080fd5b5035611956565b6040805195865263ffffffff90941660208601528484019290925260608401526080830152519081900360a00190f35b3480156108e157600080fd5b506103e7611c05565b3480156108f657600080fd5b506103e7611c0b565b34801561090b57600080fd5b506103e76004803603602081101561092257600080fd5b5035611c2b565b34801561093557600080fd5b506103e76004803603602081101561094c57600080fd5b5035611c38565b34801561095f57600080fd5b506103d06004803603602081101561097657600080fd5b50356001600160a01b0316611c45565b34801561099257600080fd5b50610591611d2d565b3480156109a757600080fd5b506103e7611d32565b3480156109bc57600080fd5b506103d0600480360360208110156109d357600080fd5b50356001600160a01b0316611d38565b3480156109ef57600080fd5b506103e7611da3565b348015610a0457600080fd5b506103e760048036036020811015610a1b57600080fd5b5035611da9565b348015610a2e57600080fd5b506103e7611dc7565b348015610a4357600080fd5b506103e7611deb565b348015610a5857600080fd5b506103e760048036036020811015610a6f57600080fd5b5035611df1565b348015610a8257600080fd5b506103d060048036036020811015610a9957600080fd5b5035611dfe565b348015610aac57600080fd5b50610319611e55565b348015610ac157600080fd5b50610591611e64565b608a546001600160a01b031681565b60688054600101908190558115610b2c576040805162461bcd60e51b8152602060048201526012602482015271726566756e64206973206e6f74207a65726f60701b604482015290519081900360640190fd5b610b3585611e78565b15610b87576040805162461bcd60e51b815260206004820152601f60248201527f726563697069656e74206f662063616e6e6f7420626520636f6e747261637400604482015290519081900360640190fd5b610b90876115d1565b610be1576040805162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742066696e6420796f7572206d65726b6c6520726f6f7400000000604482015290519081900360640190fd5b606d546040805160c080820183528a8252602082018a90526001600160a01b038981168385015288811660608401526080830188905260a08301879052925163695ef6f960e01b8152929093169263695ef6f9928d928d9290916004810191829160240190849080838360005b83811015610c66578181015183820152602001610c4e565b505050509050018281038252858582818152602001925080828437600081840152601f19601f820116905080830192505050945050505050602060405180830381600087803b158015610cb857600080fd5b505af1158015610ccc573d6000803e3d6000fd5b505050506040513d6020811015610ce257600080fd5b5051610d2e576040805162461bcd60e51b815260206004820152601660248201527524b73b30b634b2103bb4ba34323930bb90383937b7b360511b604482015290519081900360640190fd5b606d5460408051631955c64960e11b81526004810189905290516001600160a01b03909216916332ab8c929160248082019260009290919082900301818387803b158015610d7b57600080fd5b505af1158015610d8f573d6000803e3d6000fd5b50506069549150508015610db457606e54610db4906001600160a01b03168783611e7e565b610dbc611715565b60008090506000610ddd607254610dd16117d6565b9063ffffffff611f3d16565b90508015610e0557607580548290039055606f54610e05906001600160a01b03168983611e7e565b608854606a540380871115610e18578096505b8615610ec9576040516000906001600160a01b038a169089908381818185875af1925050503d8060008114610e69576040519150601f19603f3d011682016040523d82523d6000602084013e610e6e565b606091505b5050905080610ec4576040805162461bcd60e51b815260206004820152601a60248201527f6661696c656420746f2073656e642072656c6179657220666565000000000000604482015290519081900360640190fd5b508690035b8015610f77576040516000906001600160a01b038b169083908381818185875af1925050503d8060008114610f1a576040519150601f19603f3d011682016040523d82523d6000602084013e610f1f565b606091505b5050905080610f75576040805162461bcd60e51b815260206004820152601760248201527f6661696c656420746f20776974686472617720636f696e000000000000000000604482015290519081900360640190fd5b505b60728054600019019055610f89611f50565b604080516001600160a01b038b81168252602082018d9052818301859052606082018690529151918a16917f6d7aac54bd3d1c91db3b1fd7b8d6cb45324ad6b5e373c0f0ea4d7b2606c4c2c89181900360800190a2505050506068548114611038576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b505050505050505050565b6000607254600014156110595750606b546110a9565b4360006110646117d6565b90506073548211801561107957506000607454115b156110895761108661207c565b90505b6072546110a490610dd183600019830163ffffffff61215e16565b925050505b90565b6071546001600160a01b031633146110f55760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b608955565b607e816004811061110757fe5b01546001600160a01b0316905081565b606d546001600160a01b031681565b60885481565b60725481565b6071546001600160a01b0316331461117b5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b61118361216b565b565b6071546001600160a01b031681565b6000600080516020612be983398151915283106111f8576040805162461bcd60e51b815260206004820181905260248201527f5f6c6566742073686f756c6420626520696e7369646520746865206669656c64604482015290519081900360640190fd5b600080516020612be983398151915282106112445760405162461bcd60e51b8152600401808060200182810382526021815260200180612bc86021913960400191505060405180910390fd5b6040805163f47d33b560e01b81526004810185905260006024820181905282518693919273560fcd70661c4ae014eeae72c763abada6f0b9bb9263f47d33b592604480840193829003018186803b15801561129e57600080fd5b505af41580156112b2573d6000803e3d6000fd5b505050506040513d60408110156112c857600080fd5b5080516020909101519092509050600080516020612be9833981519152848308915073560fcd70661c4ae014eeae72c763abada6f0b9bb63f47d33b583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050604080518083038186803b15801561134057600080fd5b505af4158015611354573d6000803e3d6000fd5b505050506040513d604081101561136a57600080fd5b5051925050505b92915050565b60765481565b600080516020612be983398151915281565b6079816005811061139c57fe5b0154905081565b6071546001600160a01b031633146113ec5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b808284868801010101606414611433576040805162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b604482015290519081900360640190fd5b6040518060a0016040528086815260200185815260200184815260200183815260200182815250607990600561146a929190612aa6565b505050505050565b60005463ffffffff1681565b60695481565b604080518082019091526003815262322e3360e81b602082015290565b6070546001600160a01b031681565b6071546001600160a01b031633146114f95760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b6001600160a01b0384161580159061151957506001600160a01b03831615155b801561152d57506001600160a01b03821615155b801561154157506001600160a01b03811615155b611585576040805162461bcd60e51b815260206004820152601060248201526f4e6f74205a65726f204164647265737360801b604482015290519081900360640190fd5b604080516080810182526001600160a01b03808716825285811660208301528481169282019290925290821660608201526115c490607e906004612ae4565b5050505050565b608b5481565b6000816115e05750600061163f565b60035463ffffffff165b60048163ffffffff16606481106115fd57fe5b015483141561161057600191505061163f565b63ffffffff811661161f575060645b6003546000199091019063ffffffff808316911614156115ea5760009150505b919050565b606f546001600160a01b031681565b6071546001600160a01b0316331461169c5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b600a81106116e7576040805162461bcd60e51b81526020600482015260136024820152724665652063616e27742065786365656420312560681b604482015290519081900360640190fd5b6087819055606a546103e8910204608855565b606c6020526000908152604090205460ff1681565b60745481565b607354439081116117265750611183565b6074541561173a5761173661207c565b6075555b607355565b6071546001600160a01b031633146117885760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b607654604080519182526020820183905280517ff077eec825bf8719ab7021daf299e3feb4cb33472ac3f1e661657fd9701a3e7e9281900390910190a1607655565b60035463ffffffff1681565b606f54604080516370a0823160e01b8152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561182657600080fd5b505afa15801561183a573d6000803e3d6000fd5b505050506040513d602081101561185057600080fd5b50516075549091508110156118665790506110a9565b505060755490565b6071546001600160a01b031633146118b75760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b606d80546001600160a01b0319166001600160a01b0392909216919091179055565b606a5481565b60735481565b606b5481565b6071546001600160a01b031633146119345760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b607080546001600160a01b0319166001600160a01b0392909216919091179055565b60688054600101908190556000828152606c6020526040812054909182918291829182919060ff16156119ba5760405162461bcd60e51b8152600401808060200182810382526021815260200180612c096021913960400191505060405180910390fd5b606a54341015611a11576040805162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e7420636f696e20616d6f756e740000000000000000604482015290519081900360640190fd5b606a548796504294503403611a2587612671565b6000898152606c60205260409020805460ff191660011790559550611a48611043565b60765460695491955093508015611a7757606e54611a77906001600160a01b031633308463ffffffff61280b16565b60758054860190556072805460010190558115611b2057604051600090339084908381818185875af1925050503d8060008114611ad0576040519150601f19603f3d011682016040523d82523d6000602084013e611ad5565b606091505b5050905080611b1e576040805162461bcd60e51b815260206004820152601060248201526f19985a5b1959081d1bc81c99599d5b9960821b604482015290519081900360640190fd5b505b60885460868054909101908190556089541015611b4457611b3f61216b565b611b4c565b611b4c611f50565b611b54611715565b6040805163ffffffff891681524260208201528082018790526060810186905290518a917fcb186cc0add5be357ae2d3845e42be2ffbed8cb23b60f1b058ea371adff0a363919081900360800190a250506068548114611bfb576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b5091939590929450565b60755481565b60035460009060049063ffffffff1660648110611c2457fe5b0154905090565b6004816064811061139c57fe5b6082816004811061139c57fe5b6071546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b606f80546001600160a01b0319166001600160a01b0383811691909117918290556071546040805163095ea7b360e01b81529183166004830152600019602483015251929091169163095ea7b3916044808201926020929091908290030181600087803b158015611cfe57600080fd5b505af1158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b505050565b606481565b60895481565b6071546001600160a01b03163314611d815760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b607180546001600160a01b0319166001600160a01b0392909216919091179055565b60865481565b60028181548110611db657fe5b600091825260209091200154905081565b7f2fe54c60d3acabf3343a35b6eba15db4821b340f76e741e2249685ed4899af6c81565b60875481565b60018181548110611db657fe5b6071546001600160a01b03163314611e475760405162461bcd60e51b8152600401808060200182810382526022815260200180612b776022913960400191505060405180910390fd5b607781905561168002607855565b606e546001600160a01b031681565b600354640100000000900463ffffffff1681565b3b151590565b604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d6020811015611ef257600080fd5b5051905080821115611f1d57611f186001600160a01b038516848363ffffffff61286516565b611f37565b611f376001600160a01b038516848463ffffffff61286516565b50505050565b6000818381611f4857fe5b049392505050565b60005b600481101561207957608b805460010190819055600414611f7657608b54611f79565b60005b608b81905560009060829060048110611f8e57fe5b0154111561207157606f54608b546001600160a01b039091169063a9059cbb90607e9060048110611fbb57fe5b0154608b546001600160a01b039091169060829060048110611fd957fe5b01546040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561202a57600080fd5b505af115801561203e573d6000803e3d6000fd5b505050506040513d602081101561205457600080fd5b5050608b546000906082906004811061206957fe5b015550611183565b600101611f53565b50565b6000806120a660745461209a607354436128b790919063ffffffff16565b9063ffffffff6128c916565b905060006121386120b56117d6565b606f54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561210057600080fd5b505afa158015612114573d6000803e3d6000fd5b505050506040513d602081101561212a57600080fd5b50519063ffffffff6128b716565b905081811015612146578091505b6110a4826121526117d6565b9063ffffffff61215e16565b8181018281101561137157fe5b6000608654116121b8576040805162461bcd60e51b8152602060048201526013602482015272125b9cdd59999a58da595b9d08105b5bdd5b9d606a1b604482015290519081900360640190fd5b606f54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561220357600080fd5b505afa158015612217573d6000803e3d6000fd5b505050506040513d602081101561222d57600080fd5b50516040805160028082526060808301845293945090916020830190803883395050608a54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561229757600080fd5b505afa1580156122ab573d6000803e3d6000fd5b505050506040513d60208110156122c157600080fd5b5051815182906000906122d057fe5b6001600160a01b039283166020918202929092010152606f548251911690829060019081106122fb57fe5b6001600160a01b039283166020918202929092010152608a5460865491169063b6f9de95906000843061233542600263ffffffff6128c916565b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03166001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156123a8578181015183820152602001612390565b50505050905001955050505050506000604051808303818588803b1580156123cf57600080fd5b505af11580156123e3573d6000803e3d6000fd5b505060006086819055606f54604080516370a0823160e01b8152306004820152905192955061244294508793506001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561210057600080fd5b607954909150156124f857606f546001600160a01b031663a9059cbb61dead61247c6064610dd1607960000154879063ffffffff6128c916565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156124cb57600080fd5b505af11580156124df573d6000803e3d6000fd5b505050506040513d60208110156124f557600080fd5b50505b607e546001600160a01b0316158015906125135750607a5415155b801561252a5750607e546001600160a01b03163014155b156125655761256161254e6064610dd1607960015b0154859063ffffffff6128c916565b608260005b01549063ffffffff61215e16565b6082555b607f546001600160a01b0316158015906125805750607b5415155b80156125975750607f546001600160a01b03163014155b156125bd576125b96125b06064610dd16079600261253f565b60826001612553565b6083555b6080546001600160a01b0316158015906125d85750607c5415155b80156125ef57506080546001600160a01b03163014155b15612615576126116126086064610dd16079600361253f565b60826002612553565b6084555b6081546001600160a01b0316158015906126305750607d5415155b801561264757506081546001600160a01b03163014155b15611d28576126696126606064610dd16079600461253f565b60826003612553565b608555505050565b60035460008054909163ffffffff640100000000909104811691811660020a168114156126cf5760405162461bcd60e51b815260040180806020018281038252602f815260200180612b99602f913960400191505060405180910390fd5b6003805463ffffffff64010000000080830482166001019091160267ffffffff000000001990911617905582600080805b60005463ffffffff90811690821610156127a857600185166127645783925060028163ffffffff168154811061273257fe5b906000526020600020015491508360018263ffffffff168154811061275357fe5b600091825260209091200155612788565b60018163ffffffff168154811061277757fe5b906000526020600020015492508391505b6127928383611194565b9350600263ffffffff8616049450600101612700565b5060035460649063ffffffff908116600101166003805463ffffffff19169290910663ffffffff9081169290921790819055849160049116606481106127ea57fe5b01555050600354640100000000900463ffffffff1660001901949350505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611f379085906128ee565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611d289084906128ee565b6000828211156128c357fe5b50900390565b6000826128d857506000611371565b50818102818382816128e657fe5b041461137157fe5b612900826001600160a01b0316611e78565b612951576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061298f5780518252601f199092019160209182019101612970565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146129f1576040519150601f19603f3d011682016040523d82523d6000602084013e6129f6565b606091505b509150915081612a4d576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611f3757808060200190516020811015612a6957600080fd5b5051611f375760405162461bcd60e51b815260040180806020018281038252602a815260200180612c2a602a913960400191505060405180910390fd5b8260058101928215612ad4579160200282015b82811115612ad4578251825591602001919060010190612ab9565b50612ae0929150612b38565b5090565b8260048101928215612b2c579160200282015b82811115612b2c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612af7565b50612ae0929150612b52565b6110a991905b80821115612ae05760008155600101612b3e565b6110a991905b80821115612ae05780546001600160a01b0319168155600101612b5856fe4f6e6c79204f776e65722063616e2063616c6c20746869732066756e6374696f6e2e4d65726b6c6520747265652069732066756c6c2e204e6f206d6f7265206c656166732063616e2062652061646465645f72696768742073686f756c6420626520696e7369646520746865206669656c6430644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000154686520636f6d6d69746d656e7420686173206265656e207375626d69747465645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820bd9faa31ba99691cb28aac4ef7752696d0bc93c3c1c4a0cd28621959f5b439f064736f6c63430005110032
Deployed Bytecode Sourcemap
13586:11375:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14721:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14721:41:0;;;:::i;:::-;;;;-1:-1:-1;;;;;14721:41:0;;;;;;;;;;;;;;18808:1609;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18808:1609:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18808:1609:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18808:1609:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18808:1609:0;;-1:-1:-1;18808:1609:0;-1:-1:-1;18808:1609:0;;;;;;;;-1:-1:-1;;;;;18808:1609:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17000:383;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17000:383:0;;;:::i;:::-;;;;;;;;;;;;;;;;21962:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21962:98:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21962:98:0;;:::i;14490:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14490:26:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14490:26:0;;:::i;14024:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14024:25:0;;;:::i;14632:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14632:33:0;;;:::i;14166:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14166:26:0;;;:::i;24426:73::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24426:73:0;;;:::i;14133:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14133:28:0;;;:::i;9482:454::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9482:454:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9482:454:0;;;;;;;:::i;14299:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14299:31:0;;;:::i;8321:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8321:114:0;;;:::i;14433:52::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14433:52:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14433:52:0;;:::i;21713:243::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21713:243:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;21713:243:0;;;;;;;;;;;;;;;;;;;;;;:::i;8600:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8600:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13774:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13774:32:0;;;:::i;24879:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24879:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24879:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14105:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14105:23:0;;;:::i;21432:275::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21432:275:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;21432:275:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;14767:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14767:27:0;;;:::i;10848:357::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10848:357:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10848:357:0;;:::i;:::-;;;;;;;;;;;;;;;;;;14078:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14078:22:0;;;:::i;24650:223::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24650:223:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24650:223:0;;:::i;13887:43::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13887:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13887:43:0;;:::i;14232:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14232:29:0;;;:::i;16423:349::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16423:349:0;;;:::i;20910:139::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20910:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20910:139:0;;:::i;8827:34::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8827:34:0;;;:::i;16778:216::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16778:216:0;;;:::i;20423:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20423:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20423:112:0;-1:-1:-1;;;;;20423:112:0;;:::i;13812:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13812:31:0;;;:::i;14197:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14197:30:0;;;:::i;13848:34::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13848:34:0;;;:::i;20803:101::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20803:101:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20803:101:0;-1:-1:-1;;;;;20803:101:0;;:::i;17638:1164::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17638:1164:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14266:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14266:28:0;;;:::i;11256:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11256:95:0;;;:::i;8949:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8949:39:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8949:39:0;;:::i;14521:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14521:31:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14521:31:0;;:::i;20541:146::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20541:146:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20541:146:0;-1:-1:-1;;;;;20541:146:0;;:::i;8898:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8898:46:0;;;:::i;14670:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14670:46:0;;;:::i;20693:104::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20693:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20693:104:0;-1:-1:-1;;;;;20693:104:0;;:::i;14557:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14557:27:0;;;:::i;8800:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8800:22:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8800:22:0;;:::i;8440:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8440:114:0;;;:::i;14589:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14589:38:0;;;:::i;8764:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8764:31:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8764:31:0;;:::i;24505:139::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24505:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24505:139:0;;:::i;14054:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14054:19:0;;;:::i;8866:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8866:27:0;;;:::i;14721:41::-;;;-1:-1:-1;;;;;14721:41:0;;:::o;18808:1609::-;13009:13;:18;;13026:1;13009:18;;;;;19025:12;;19017:43;;;;;-1:-1:-1;;;19017:43:0;;;;;;;;;;;;-1:-1:-1;;;19017:43:0;;;;;;;;;;;;;;;19076:30;19095:10;19076:18;:30::i;:::-;19075:31;19067:75;;;;;-1:-1:-1;;;19067:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19157:18;19169:5;19157:11;:18::i;:::-;19149:59;;;;;-1:-1:-1;;;19149:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19256:8;;:133;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19327:19:0;;;19256:133;;;;19348:17;;;19256:133;;;;;;;;;;;;;;;;;;-1:-1:-1;;;19256:133:0;;:8;;;;;:20;;19277:6;;;;19256:133;;;;;;;;;;;;;;;;:8;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;19256:133:0;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;19256:133:0;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19256:133:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19256:133:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19256:133:0;19248:168;;;;;-1:-1:-1;;;19248:168:0;;;;;;;;;;;;-1:-1:-1;;;19248:168:0;;;;;;;;;;;;;;;19425:8;;:40;;;-1:-1:-1;;;19425:40:0;;;;;;;;;;-1:-1:-1;;;;;19425:8:0;;;;:24;;:40;;;;;:8;;:40;;;;;;;;:8;;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19425:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19485:17:0;;;-1:-1:-1;;19513:6:0;;19509:64;;19543:5;;19530:35;;-1:-1:-1;;;;;19543:5:0;19550:10;19562:2;19530:12;:35::i;:::-;19579:19;:17;:19::i;:::-;19605:18;19626:1;19605:22;;19678:15;19696:35;19719:11;;19696:18;:16;:18::i;:::-;:22;:35;:22;:35;:::i;:::-;19678:53;-1:-1:-1;19742:11:0;;19738:110;;19764:13;:24;;;;;;;19810:8;;19797:43;;-1:-1:-1;;;;;19810:8:0;19820:10;19781:7;19797:12;:43::i;:::-;19886:18;;19867:16;;:37;19915:16;;;19911:55;;;19956:2;19942:16;;19911:55;19976:15;;19972:173;;20020:36;;20003:12;;-1:-1:-1;;;;;20020:13:0;;;20040:11;;20003:12;20020:36;20003:12;20020:36;20040:11;20020:13;:36;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;20002:54:0;;;20073:7;20065:46;;;;;-1:-1:-1;;;20065:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20120:17:0;;;19972:173;20155:6;;20151:128;;20190:29;;20173:12;;-1:-1:-1;;;;;20190:15:0;;;20212:2;;20173:12;20190:29;20173:12;20190:29;20212:2;20190:15;:29;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;20172:47:0;;;20236:7;20228:43;;;;;-1:-1:-1;;;20228:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20151:128;;20285:11;:16;;-1:-1:-1;;20285:16:0;;;20310:18;:16;:18::i;:::-;20342:69;;;-1:-1:-1;;;;;20342:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13085:1;;;;13121:13;;13105:12;:29;13097:73;;;;;-1:-1:-1;;;13097:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18808:1609;;;;;;;;;:::o;17000:383::-;17048:7;17068:11;;17083:1;17068:16;17064:65;;;-1:-1:-1;17102:19:0;;17095:26;;17064:65;17157:12;17135:19;17193:18;:16;:18::i;:::-;17176:35;;17236:15;;17222:11;:29;:51;;;;;17272:1;17255:14;;:18;17222:51;17218:102;;;17293:19;:17;:19::i;:::-;17284:28;;17218:102;17365:11;;17333:44;;:27;:6;-1:-1:-1;;17344:15:0;;17333:27;:10;:27;:::i;:44::-;17326:51;;;;17000:383;;:::o;21962:98::-;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22030:10;:24;21962:98::o;14490:26::-;;;;;;;;;;;;-1:-1:-1;;;;;14490:26:0;;-1:-1:-1;14490:26:0;:::o;14024:25::-;;;-1:-1:-1;;;;;14024:25:0;;:::o;14632:33::-;;;;:::o;14166:26::-;;;;:::o;24426:73::-;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24479:14;:12;:14::i;:::-;24426:73::o;14133:28::-;;;-1:-1:-1;;;;;14133:28:0;;:::o;9482:454::-;9557:7;-1:-1:-1;;;;;;;;;;;9581:27:0;;9573:72;;;;;-1:-1:-1;;;9573:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9660:28:0;;9652:74;;;;-1:-1:-1;;;9652:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9795:23;;;-1:-1:-1;;;9795:23:0;;;;;;;;9733:9;9795:23;;;;;;;;9753:5;;9733:9;;9795:6;;:17;;:23;;;;;;;;;;:6;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;9795:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9795:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9795:23:0;;;;;;;;;-1:-1:-1;9795:23:0;-1:-1:-1;;;;;;;;;;;;9847:6:0;9836:1;9829:38;9825:42;;9883:6;:17;9901:1;9904;9883:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9883:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9883:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9883:23:0;;-1:-1:-1;;;9482:454:0;;;;;:::o;14299:31::-;;;;:::o;8321:114::-;-1:-1:-1;;;;;;;;;;;8321:114:0;:::o;14433:52::-;;;;;;;;;;;;;-1:-1:-1;14433:52:0;:::o;21713:243::-;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21870:4;21863;21856;21849;21839:7;:14;:21;:28;:35;21878:3;21839:42;21830:64;;;;;-1:-1:-1;;;21830:64:0;;;;;;;;;;;;-1:-1:-1;;;21830:64:0;;;;;;;;;;;;;;;21901:49;;;;;;;;21918:7;21901:49;;;;21927:4;21901:49;;;;21933:4;21901:49;;;;21939:4;21901:49;;;;21945:4;21901:49;;;:13;:49;;;;;;;:::i;:::-;;21713:243;;;;;:::o;8600:20::-;;;;;;:::o;13774:32::-;;;;:::o;24879:79::-;24940:12;;;;;;;;;;;;-1:-1:-1;;;24940:12:0;;;;24879:79;:::o;14105:23::-;;;-1:-1:-1;;;;;14105:23:0;;:::o;21432:275::-;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21546:19:0;;;;;;:42;;-1:-1:-1;;;;;;21569:19:0;;;;21546:42;:65;;;;-1:-1:-1;;;;;;21592:19:0;;;;21546:65;:88;;;;-1:-1:-1;;;;;;21615:19:0;;;;21546:88;21537:118;;;;;-1:-1:-1;;;21537:118:0;;;;;;;;;;;;-1:-1:-1;;;21537:118:0;;;;;;;;;;;;;;;21662:39;;;;;;;;-1:-1:-1;;;;;21662:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;;:39;;:::i;:::-;;21432:275;;;;:::o;14767:27::-;;;;:::o;10848:357::-;10904:4;10921:10;10917:45;;-1:-1:-1;10949:5:0;10942:12;;10917:45;10979:16;;;;11002:179;11027:5;11033:1;11027:8;;;;;;;;;;;11018:5;:17;11014:55;;;11055:4;11048:11;;;;;11014:55;11081:6;;;11077:54;;-1:-1:-1;8941:3:0;11077:54;11163:16;;-1:-1:-1;;11139:3:0;;;;11163:16;11158:21;;;11163:16;;11158:21;;11002:179;;11194:5;11187:12;;;10848:357;;;;:::o;14078:22::-;;;-1:-1:-1;;;;;14078:22:0;;:::o;24650:223::-;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24726:2;24719:4;:9;24711:41;;;;;-1:-1:-1;;;24711:41:0;;;;;;;;;;;;-1:-1:-1;;;24711:41:0;;;;;;;;;;;;;;;24759:19;:26;;;24813:16;;24862:4;24813:38;;:54;24792:18;:75;24650:223::o;13887:43::-;;;;;;;;;;;;;;;:::o;14232:29::-;;;;:::o;16423:349::-;16526:15;;16488:12;;16511:30;;16507:59;;16552:7;;;16507:59;16576:14;;:19;16572:77;;16622:19;:17;:19::i;:::-;16606:13;:35;16572:77;16737:15;:29;16423:349::o;20910:139::-;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20998:12;;20978:39;;;;;;;;;;;;;;;;;;;;;;;;21024:12;:19;20910:139::o;8827:34::-;;;;;;:::o;16778:216::-;16864:8;;:33;;;-1:-1:-1;;;16864:33:0;;16891:4;16864:33;;;;;;16827:7;;;;-1:-1:-1;;;;;16864:8:0;;;;:18;;:33;;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;16864:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16864:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16864:33:0;16921:13;;16864:33;;-1:-1:-1;16908:26:0;;16904:57;;;16951:10;-1:-1:-1;16944:17:0;;16904:57;-1:-1:-1;;16975:13:0;;16778:216;:::o;20423:112::-;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20495:8;:34;;-1:-1:-1;;;;;;20495:34:0;-1:-1:-1;;;;;20495:34:0;;;;;;;;;;20423:112::o;13812:31::-;;;;:::o;14197:30::-;;;;:::o;13848:34::-;;;;:::o;20803:101::-;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20875:8;:23;;-1:-1:-1;;;;;;20875:23:0;-1:-1:-1;;;;;20875:23:0;;;;;;;;;;20803:101::o;17638:1164::-;13009:13;:18;;13026:1;13009:18;;;;;17715;17821:24;;;:11;:24;;;;;;17715:18;;;;;;;;;;13009;17821:24;;17820:25;17812:71;;;;-1:-1:-1;;;17812:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17911:16;;17898:9;:29;;17890:66;;;;;-1:-1:-1;;;17890:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18059:16;;17978:11;;-1:-1:-1;18008:15:0;;-1:-1:-1;18047:9:0;:28;18098:20;17978:11;18098:7;:20::i;:::-;18125:24;;;;:11;:24;;;;;:31;;-1:-1:-1;;18125:31:0;18152:4;18125:31;;;18082:36;-1:-1:-1;18173:17:0;:15;:17::i;:::-;18203:12;;18235:17;;18163:27;;-1:-1:-1;18203:12:0;-1:-1:-1;18263:6:0;;18259:82;;18280:5;;:53;;-1:-1:-1;;;;;18280:5:0;18303:10;18323:4;18330:2;18280:53;:22;:53;:::i;:::-;18347:13;:24;;;;;;18378:11;:16;;-1:-1:-1;18378:16:0;;;18405:10;;18401:130;;18445:33;;18427:12;;18445:10;;18467:6;;18427:12;18445:33;18427:12;18445:33;18467:6;18445:10;:33;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;18426:52:0;;;18495:7;18487:36;;;;;-1:-1:-1;;;18487:36:0;;;;;;;;;;;;-1:-1:-1;;;18487:36:0;;;;;;;;;;;;;;;18401:130;;18555:18;;18539:12;:34;;;;;;;;;18598:10;;-1:-1:-1;18580:107:0;;;18619:14;:12;:14::i;:::-;18580:107;;;18661:18;:16;:18::i;:::-;18695:19;:17;:19::i;:::-;18730:66;;;;;;;;18766:15;18730:66;;;;;;;;;;;;;;;;;;18738:11;;18730:66;;;;;;;;;;13085:1;;13121:13;;13105:12;:29;13097:73;;;;;-1:-1:-1;;;13097:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17638:1164;;;;;;;;:::o;14266:28::-;;;;:::o;11256:95::-;11328:16;;11299:7;;11322:5;;11328:16;;11322:23;;;;;;;;;11315:30;;11256:95;:::o;8949:39::-;;;;;;;;;14521:31;;;;;;;;;20541:146;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20610:8;:28;;-1:-1:-1;;;;;;20610:28:0;-1:-1:-1;;;;;20610:28:0;;;;;;;;;;;20662:13;;20645:36;;;-1:-1:-1;;;20645:36:0;;20662:13;;;20645:36;;;;-1:-1:-1;;20645:36:0;;;;;:8;;;;;:16;;:36;;;;;;;;;;;;;;;-1:-1:-1;20645:8:0;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;20645:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20645:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;20541:146:0:o;8898:46::-;8941:3;8898:46;:::o;14670:::-;;;;:::o;20693:104::-;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20766:13;:25;;-1:-1:-1;;;;;;20766:25:0;-1:-1:-1;;;;;20766:25:0;;;;;;;;;;20693:104::o;14557:27::-;;;;:::o;8800:22::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8800:22:0;:::o;8440:114::-;8477:77;8440:114;:::o;14589:38::-;;;;:::o;8764:31::-;;;;;;;;;;24505:139;14849:13;;-1:-1:-1;;;;;14849:13:0;14835:10;:27;14827:74;;;;-1:-1:-1;;;14827:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24569:8;:20;;;24616:22;;24596:17;:42;24505:139::o;14054:19::-;;;-1:-1:-1;;;;;14054:19:0;;:::o;8866:27::-;;;;;;;;;:::o;3897:422::-;4264:20;4303:8;;;3897:422::o;21153:273::-;21254:31;;;-1:-1:-1;;;21254:31:0;;21279:4;21254:31;;;;;;21236:15;;-1:-1:-1;;;;;21254:16:0;;;;;:31;;;;;;;;;;;;;;;:16;:31;;;5:2:-1;;;;30:1;27;20:12;5:2;21254:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21254:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21254:31:0;;-1:-1:-1;21296:17:0;;;21292:129;;;21324:33;-1:-1:-1;;;;;21324:19:0;;21344:3;21349:7;21324:33;:19;:33;:::i;:::-;21292:129;;;21380:33;-1:-1:-1;;;;;21380:19:0;;21400:3;21405:7;21380:33;:19;:33;:::i;:::-;21153:273;;;;:::o;1004:277::-;1062:7;1274:1;1270;:5;;;;;;;1004:277;-1:-1:-1;;;1004:277:0:o;24054:366::-;24101:9;24097:318;24116:1;24112;:5;24097:318;;;24134:12;:15;;;;;;;;24189:1;24173:17;:36;;24197:12;;24173:36;;;24193:1;24173:36;24158:12;:51;;;24252:1;;24222:13;;:27;;;;;;;;;:31;24218:190;;;24267:8;;24295:12;;-1:-1:-1;;;;;24267:8:0;;;;:17;;24286:8;;:22;;;;;;;;;24324:12;;-1:-1:-1;;;;;24286:22:0;;;;24310:13;;:27;;;;;;;;;24267:72;;;;;;;;;;;;;-1:-1:-1;;;;;24267:72:0;-1:-1:-1;;;;;24267:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24267:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24267:72:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;24364:12:0;;24380:1;;24350:13;;:27;;;;;;;;:31;-1:-1:-1;24392:7:0;;24218:190;24119:4;;24097:318;;;;24054:366::o;16080:337::-;16132:7;16148:14;16165:53;16203:14;;16165:33;16182:15;;16165:12;:16;;:33;;;;:::i;:::-;:37;:53;:37;:53;:::i;:::-;16148:70;;16225:17;16245:57;16283:18;:16;:18::i;:::-;16245:8;;:33;;;-1:-1:-1;;;16245:33:0;;16272:4;16245:33;;;;;;-1:-1:-1;;;;;16245:8:0;;;;:18;;:33;;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;16245:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16245:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16245:33:0;;:57;:37;:57;:::i;:::-;16225:77;;16325:6;16313:9;:18;16309:59;;;16351:9;16342:18;;16309:59;16381:30;16404:6;16381:18;:16;:18::i;:::-;:22;:30;:22;:30;:::i;2041:127::-;2121:5;;;2140:6;;;;2133:14;;;22066:1982;22128:1;22113:12;;:16;22105:48;;;;;-1:-1:-1;;;22105:48:0;;;;;;;;;;;;-1:-1:-1;;;22105:48:0;;;;;;;;;;;;;;;22185:8;;:33;;;-1:-1:-1;;;22185:33:0;;22212:4;22185:33;;;;;;22160:22;;-1:-1:-1;;;;;22185:8:0;;:18;;:33;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;22185:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22185:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22185:33:0;22288:16;;;22302:1;22288:16;;;22264:21;22288:16;;;;;22185:33;;-1:-1:-1;22288:16:0;;;;;;;105:10:-1;22288:16:0;88:34:-1;-1:-1;;22321:15:0;;:22;;;-1:-1:-1;;;22321:22:0;;;;22264:40;;-1:-1:-1;;;;;;22321:15:0;;;;:20;;-1:-1:-1;22321:22:0;;;;;;;;;;;;;;:15;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;22321:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22321:22:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22321:22:0;22311:7;;:4;;22316:1;;22311:7;;;;-1:-1:-1;;;;;22311:32:0;;;:7;;;;;;;;;:32;22368:8;;22350:7;;22368:8;;;22350:4;;22368:8;;22350:7;;;;;;-1:-1:-1;;;;;22350:27:0;;;:7;;;;;;;;;:27;22406:15;;22479:12;;22406:15;;;:66;;:15;22545:4;22566;22580:22;:15;22600:1;22580:22;:19;:22;:::i;:::-;22406:203;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22406:203:0;-1:-1:-1;;;;;22406:203: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;22406:203:0;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22406:203:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22655:1:0;22640:12;:16;;;22686:8;;:33;;;-1:-1:-1;;;22686:33:0;;22713:4;22686:33;;;;;;22655:1;;-1:-1:-1;22686:53:0;;-1:-1:-1;22724:14:0;;-1:-1:-1;;;;;;22686:8:0;;;;:18;;:33;;;;;;;;;;;;;;;:8;:33;;;5:2:-1;;;;30:1;27;20:12;22686:53:0;22752:13;:16;22665:74;;-1:-1:-1;22752:20:0;22748:159;;22784:8;;-1:-1:-1;;;;;22784:8:0;:17;22811:42;22856:41;22893:3;22856:32;22871:13;22784:8;22871:16;;22856:10;;:32;:14;:32;:::i;:41::-;22784:115;;;;;;;;;;;;;-1:-1:-1;;;;;22784:115:0;-1:-1:-1;;;;;22784:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22784:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22784:115:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;22748:159:0;22919:8;:11;-1:-1:-1;;;;;22919:11:0;:25;;;;:49;;-1:-1:-1;22948:16:0;;:20;;22919:49;:81;;;;-1:-1:-1;22972:8:0;:11;-1:-1:-1;;;;;22972:11:0;22995:4;22972:28;;22919:81;22915:276;;;23031:65;23053:41;23090:3;23053:32;23068:13;23082:1;23068:16;;;23053:10;;:32;:14;:32;:::i;:41::-;23031:13;23045:1;23031:16;;;;:65;:20;:65;:::i;:::-;23012:13;:84;22915:276;23203:11;;-1:-1:-1;;;;;23203:11:0;:25;;;;:49;;-1:-1:-1;23232:16:0;;:20;;23203:49;:81;;;;-1:-1:-1;23256:11:0;;-1:-1:-1;;;;;23256:11:0;23279:4;23256:28;;23203:81;23199:276;;;23315:65;23337:41;23374:3;23337:32;23352:13;23366:1;23352:16;;23337:41;23315:13;23329:1;23315:16;;:65;23296:16;:84;23199:276;23487:11;;-1:-1:-1;;;;;23487:11:0;:25;;;;:49;;-1:-1:-1;23516:16:0;;:20;;23487:49;:81;;;;-1:-1:-1;23540:11:0;;-1:-1:-1;;;;;23540:11:0;23563:4;23540:28;;23487:81;23483:276;;;23599:65;23621:41;23658:3;23621:32;23636:13;23650:1;23636:16;;23621:41;23599:13;23613:1;23599:16;;:65;23580:16;:84;23483:276;23771:11;;-1:-1:-1;;;;;23771:11:0;:25;;;;:49;;-1:-1:-1;23800:16:0;;:20;;23771:49;:81;;;;-1:-1:-1;23824:11:0;;-1:-1:-1;;;;;23824:11:0;23847:4;23824:28;;23771:81;23767:276;;;23883:65;23905:41;23942:3;23905:32;23920:13;23934:1;23920:16;;23905:41;23883:13;23897:1;23883:16;;:65;23864:16;:84;-1:-1:-1;;;22066:1982:0:o;9942:829::-;10034:9;;9991:12;10085:6;;9991:12;;10034:9;;;;;;;;10085:6;;10081:1;10074:17;10058:33;;;;10050:93;;;;-1:-1:-1;;;10050:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10150:9;:14;;;;;;;;;10163:1;10150:14;;;;;-1:-1:-1;;10150:14:0;;;;;;10198:5;-1:-1:-1;;;10251:369:0;10274:6;;;;;;10270:10;;;;10251:369;;;10300:16;;;10296:233;;10341:16;10334:23;;10376:5;10382:1;10376:8;;;;;;;;;;;;;;;;;;10368:16;;10417;10397:14;10412:1;10397:17;;;;;;;;;;;;;;;;;;;:36;10296:233;;;10467:14;10482:1;10467:17;;;;;;;;;;;;;;;;;;10460:24;;10503:16;10495:24;;10296:233;10558:26;10572:4;10578:5;10558:13;:26::i;:::-;10539:45;-1:-1:-1;10611:1:0;10595:17;;;;;-1:-1:-1;10282:3:0;;10251:369;;;-1:-1:-1;10648:16:0;;8941:3;;10647:42;10648:16;;;;:20;10647:42;10628:16;:61;;-1:-1:-1;;10628:61:0;10647:42;;;;10628:61;;;;;;;;;;;;10722:16;;10696:5;;10702:16;10696:23;;;;;;;;:42;-1:-1:-1;;10752:9:0;;;;;;;-1:-1:-1;;10752:13:0;;9942:829;-1:-1:-1;;;;9942:829:0:o;5139:204::-;5266:68;;;-1:-1:-1;;;;;5266:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;5266:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;5240:95:0;;5259:5;;5240:18;:95::i;4955:176::-;5064:58;;;-1:-1:-1;;;;;5064:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;5064:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;5038:85:0;;5057:5;;5038:18;:85::i;1641:113::-;1699:7;1727:1;1722;:6;;1715:14;;;;-1:-1:-1;1743:5:0;;;1641:113::o;483:174::-;541:9;563:6;559:37;;-1:-1:-1;587:1:0;580:8;;559:37;-1:-1:-1;606:5:0;;;610:1;606;:5;:1;625:5;;;;;:10;618:18;;;6949:1114;7553:27;7561:5;-1:-1:-1;;;;;7553:25:0;;:27::i;:::-;7545:71;;;;;-1:-1:-1;;;7545:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7690:12;7704:23;7739:5;-1:-1:-1;;;;;7731:19:0;7751:4;7731:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;7731:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;7689:67:0;;;;7775:7;7767:52;;;;;-1:-1:-1;;;7767:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7836:17;;:21;7832:224;;7978:10;7967:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7967:30:0;7959:85;;;;-1:-1:-1;;;7959:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13586:11375;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13586:11375:0;;;-1:-1:-1;13586:11375:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13586:11375:0;-1:-1:-1;;;;;13586:11375:0;;;;;;;;;;;-1:-1:-1;13586:11375:0;;;;;;;-1:-1:-1;13586:11375:0;;;-1:-1:-1;13586:11375:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13586:11375:0;;;;;;
Swarm Source
bzzr://bd9faa31ba99691cb28aac4ef7752696d0bc93c3c1c4a0cd28621959f5b439f0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,636.55 | 0.0114 | $30.06 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.