More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 29,629 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20910226 | 1 hr ago | IN | 0 ETH | 0.00000263 | ||||
Deposit | 20909041 | 2 hrs ago | IN | 0 ETH | 0.00000219 | ||||
Withdraw | 20909012 | 2 hrs ago | IN | 0 ETH | 0.00000252 | ||||
Deposit | 20908914 | 2 hrs ago | IN | 0 ETH | 0.00000169 | ||||
Withdraw And Har... | 20879092 | 29 hrs ago | IN | 0 ETH | 0.00000162 | ||||
Withdraw And Har... | 20879090 | 29 hrs ago | IN | 0 ETH | 0.00000145 | ||||
Withdraw And Har... | 20877593 | 31 hrs ago | IN | 0 ETH | 0.00000139 | ||||
Withdraw And Har... | 20847557 | 2 days ago | IN | 0 ETH | 0.00000369 | ||||
Deposit | 20843014 | 2 days ago | IN | 0 ETH | 0.00000219 | ||||
Withdraw | 20835665 | 2 days ago | IN | 0 ETH | 0.00000167 | ||||
Withdraw And Har... | 20833251 | 2 days ago | IN | 0 ETH | 0.0000038 | ||||
Deposit | 20829443 | 3 days ago | IN | 0 ETH | 0.00000219 | ||||
Deposit | 20801862 | 4 days ago | IN | 0 ETH | 0.00000425 | ||||
Withdraw And Har... | 20801848 | 4 days ago | IN | 0 ETH | 0.00000278 | ||||
Withdraw | 20774116 | 5 days ago | IN | 0 ETH | 0.00000142 | ||||
Deposit | 20749983 | 6 days ago | IN | 0 ETH | 0.00000219 | ||||
Withdraw | 20747952 | 6 days ago | IN | 0 ETH | 0.00000395 | ||||
Withdraw And Har... | 20727803 | 7 days ago | IN | 0 ETH | 0.00000518 | ||||
Withdraw And Har... | 20705754 | 7 days ago | IN | 0 ETH | 0.00000173 | ||||
Deposit | 20693730 | 8 days ago | IN | 0 ETH | 0.00000338 | ||||
Deposit | 20633499 | 10 days ago | IN | 0 ETH | 0.00000219 | ||||
Deposit | 20633432 | 10 days ago | IN | 0 ETH | 0.00000283 | ||||
Deposit | 20627735 | 10 days ago | IN | 0 ETH | 0.00000141 | ||||
Withdraw And Har... | 20596047 | 12 days ago | IN | 0 ETH | 0.00000344 | ||||
Withdraw | 20590767 | 12 days ago | IN | 0 ETH | 0.00000148 |
Loading...
Loading
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:
MasterChef
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at zkevm.polygonscan.com on 2023-05-03 */ pragma solidity =0.7.6; pragma abicoder v2; // Sources flattened with hardhat v2.13.0 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] /** * @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. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @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() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/MasterChef.sol // Sources flattened with hardhat v2.0.11 https://hardhat.org // File @boringcrypto/boring-solidity/contracts/libraries/[email protected] // a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math) library BoringMath { function add(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a - b) <= a, "BoringMath: Underflow");} function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {require(b == 0 || (c = a * b)/b == a, "BoringMath: Mul Overflow");} function to128(uint256 a) internal pure returns (uint128 c) { require(a <= uint128(-1), "BoringMath: uint128 Overflow"); c = uint128(a); } function to64(uint256 a) internal pure returns (uint64 c) { require(a <= uint64(-1), "BoringMath: uint64 Overflow"); c = uint64(a); } function to32(uint256 a) internal pure returns (uint32 c) { require(a <= uint32(-1), "BoringMath: uint32 Overflow"); c = uint32(a); } } library BoringMath128 { function add(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a - b) <= a, "BoringMath: Underflow");} } library BoringMath64 { function add(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a - b) <= a, "BoringMath: Underflow");} } library BoringMath32 { function add(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a - b) <= a, "BoringMath: Underflow");} } // File @boringcrypto/boring-solidity/contracts/interfaces/[email protected] interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address owner, address spender, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); // EIP 2612 function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; } // File @boringcrypto/boring-solidity/contracts/libraries/[email protected] library BoringERC20 { function safeSymbol(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeName(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeDecimals(IERC20 token) internal view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567)); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } function safeTransfer(IERC20 token, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed"); } function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed"); } } // File @boringcrypto/boring-solidity/contracts/[email protected] // Audit on 5-Jan-2021 by Keno and BoringCrypto // P1 - P3: OK // solhint-disable avoid-low-level-calls // T1 - T4: OK contract BaseBoringBatchable { function _getRevertMsg(bytes memory _returnData) internal pure returns (string memory) { // If the _res length is less than 68, then the transaction failed silently (without a revert message) if (_returnData.length < 68) return "Transaction reverted silently"; assembly { // Slice the sighash. _returnData := add(_returnData, 0x04) } return abi.decode(_returnData, (string)); // All that remains is the revert string } // F3 - F9: OK // F1: External is ok here because this is the batch function, adding it to a batch makes no sense // F2: Calls in the batch may be payable, delegatecall operates in the same context, so each call in the batch has access to msg.value // C1 - C21: OK // C3: The length of the loop is fully under user control, so can't be exploited // C7: Delegatecall is only used on the same contract, so it's safe function batch(bytes[] calldata calls, bool revertOnFail) external payable returns(bool[] memory successes, bytes[] memory results) { // Interactions successes = new bool[](calls.length); results = new bytes[](calls.length); for (uint256 i = 0; i < calls.length; i++) { (bool success, bytes memory result) = address(this).delegatecall(calls[i]); require(success || !revertOnFail, _getRevertMsg(result)); successes[i] = success; results[i] = result; } } } // T1 - T4: OK contract BoringBatchable is BaseBoringBatchable { // F1 - F9: OK // F6: Parameters can be used front-run the permit and the user's permit will fail (due to nonce or other revert) // if part of a batch this could be used to grief once as the second call would not need the permit // C1 - C21: OK function permitToken(IERC20 token, address from, address to, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { // Interactions // X1 - X5 token.permit(from, to, amount, deadline, v, r, s); } } // File @boringcrypto/boring-solidity/contracts/[email protected] // Audit on 5-Jan-2021 by Keno and BoringCrypto // P1 - P3: OK // Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol // Edited by BoringCrypto // T1 - T4: OK contract BoringOwnableData { // V1 - V5: OK address public owner; // V1 - V5: OK address public pendingOwner; } // T1 - T4: OK contract BoringOwnable is BoringOwnableData { // E1: OK event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () public { owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } // F1 - F9: OK // C1 - C21: OK function transferOwnership(address newOwner, bool direct, bool renounce) public onlyOwner { if (direct) { // Checks require(newOwner != address(0) || renounce, "Ownable: zero address"); // Effects emit OwnershipTransferred(owner, newOwner); owner = newOwner; pendingOwner = address(0); } else { // Effects pendingOwner = newOwner; } } // F1 - F9: OK // C1 - C21: OK function claimOwnership() public { address _pendingOwner = pendingOwner; // Checks require(msg.sender == _pendingOwner, "Ownable: caller != pending owner"); // Effects emit OwnershipTransferred(owner, _pendingOwner); owner = _pendingOwner; pendingOwner = address(0); } // M1 - M5: OK // C1 - C21: OK modifier onlyOwner() { require(msg.sender == owner, "Ownable: caller is not the owner"); _; } } // File contracts/libraries/SignedSafeMath.sol library SignedSafeMath { int256 constant private _INT256_MIN = -2**255; /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } require(!(a == -1 && b == _INT256_MIN), "SignedSafeMath: multiplication overflow"); int256 c = a * b; require(c / a == b, "SignedSafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two signed integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(int256 a, int256 b) internal pure returns (int256) { require(b != 0, "SignedSafeMath: division by zero"); require(!(b == -1 && a == _INT256_MIN), "SignedSafeMath: division overflow"); int256 c = a / b; return c; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a), "SignedSafeMath: subtraction overflow"); return c; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a), "SignedSafeMath: addition overflow"); return c; } function toUInt256(int256 a) internal pure returns (uint256) { require(a >= 0, "Integer < 0"); return uint256(a); } } // File contracts/interfaces/IRewarder.sol interface IRewarder { //using BoringERC20 for IERC20; function rewardToken() external returns(address); function onSushiReward(uint256 pid, address user, address recipient, uint256 sushiAmount, uint256 newLpAmount) external; function pendingTokens(uint256 pid, address user, uint256 sushiAmount) external view returns (IERC20[] memory, uint256[] memory); } // File contracts/interfaces/IMasterChef.sol interface IMasterChef { //using BoringERC20 for IERC20; struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. } struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. SUSHI to distribute per block. uint256 lastRewardBlock; // Last block number that SUSHI distribution occurs. uint256 accSushiPerShare; // Accumulated SUSHI per share, times 1e12. See below. } function poolInfo(uint256 pid) external view returns (IMasterChef.PoolInfo memory); function totalAllocPoint() external view returns (uint256); function deposit(uint256 _pid, uint256 _amount) external; } // File contracts/Masterchef.sol /// @notice The (older) MasterChef contract gives out a constant number of SUSHI tokens per block. /// It is the only address with minting rights for SUSHI. /// The idea for this MasterChef V2 (MCV2) contract is therefore to be the owner of a dummy token /// that is deposited into the MasterChef V1 (MCV1) contract. /// The allocation point for this pool on MCV1 is the total allocation point for all pools that receive double incentives. contract MasterChef is BoringOwnable, BoringBatchable, ReentrancyGuard { using BoringMath for uint256; using BoringMath128 for uint128; using BoringERC20 for IERC20; using SignedSafeMath for int256; /// @notice Info of each MCV2 user. /// `amount` LP token amount the user has provided. /// `rewardDebt` The amount of SUSHI entitled to the user. struct UserInfo { uint256 amount; int256 rewardDebt; } /// @notice Info of each MCV2 pool. /// `allocPoint` The amount of allocation points assigned to the pool. /// Also known as the amount of SUSHI to distribute per block. struct PoolInfo { uint128 accSushiPerShare; uint64 lastRewardTime; uint64 allocPoint; IRewarder[] rewarders; } /// @notice Address of SUSHI contract. IERC20 public immutable SUSHI; /// @notice Info of each MCV2 pool. PoolInfo[] public poolInfo; /// @notice Address of the LP token for each MCV2 pool. IERC20[] public lpToken; /// @notice Info of each user that stakes LP tokens. mapping (uint256 => mapping (address => UserInfo)) public userInfo; /// @dev Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint; uint256 public sushiPerSecond; uint256 private constant ACC_SUSHI_PRECISION = 1e12; event Deposit(address indexed user, uint256 indexed pid, uint256 amount, address indexed to); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to); event Harvest(address indexed user, uint256 indexed pid, uint256 amount); event LogPoolAddition(uint256 indexed pid, uint256 allocPoint, IERC20 indexed lpToken); event LogSetPool(uint256 indexed pid, uint256 allocPoint); event LogUpdatePool(uint256 indexed pid, uint64 lastRewardTime, uint256 lpSupply, uint256 accSushiPerShare); event LogSushiPerSecond(uint256 sushiPerSecond); event LogRewarderAdded(uint256 indexed pid, IRewarder indexed rewarder); /// @param _sushi The SUSHI token contract address. constructor(IERC20 _sushi) public { SUSHI = _sushi; } /// @notice Returns the number of MCV2 pools. function poolLength() public view returns (uint256 pools) { pools = poolInfo.length; } /// @notice Add a new LP to the pool. Can only be called by the owner. /// DO NOT add the same LP token more than once. Rewards will be messed up if you do. /// @param allocPoint AP of the new pool. /// @param _lpToken Address of the LP ERC-20 token. function add(uint256 allocPoint, IERC20 _lpToken) public onlyOwner { totalAllocPoint = totalAllocPoint.add(allocPoint); lpToken.push(_lpToken); poolInfo.push(PoolInfo({ allocPoint: allocPoint.to64(), lastRewardTime: block.timestamp.to64(), accSushiPerShare: 0, rewarders: (new IRewarder[](0)) })); emit LogPoolAddition(lpToken.length.sub(1), allocPoint, _lpToken); } /// @notice Add a new Rewarder instance to a given pool /// @param _pid The index of the pool. See `poolInfo`. /// @param _rewarder Address of the rewarder delegate. function addRewarder(uint256 _pid, IRewarder _rewarder) public onlyOwner { for( uint256 i = 0; i < poolInfo[_pid].rewarders.length; i++ ) { require(address(poolInfo[_pid].rewarders[i]) != address(_rewarder), "already added"); } poolInfo[_pid].rewarders.push(_rewarder); emit LogRewarderAdded(_pid, _rewarder); } /// @notice Update the given pool's SUSHI allocation point and `IRewarder` contract. Can only be called by the owner. /// @param _pid The index of the pool. See `poolInfo`. /// @param _allocPoint New AP of the pool. function set(uint256 _pid, uint256 _allocPoint) public onlyOwner { totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint.to64(); emit LogSetPool(_pid, _allocPoint); } /// @notice Sets the sushi per second to be distributed. Can only be called by the owner. /// @param _sushiPerSecond The amount of Sushi to be distributed per second. function setSushiPerSecond(uint256 _sushiPerSecond) public onlyOwner { sushiPerSecond = _sushiPerSecond; emit LogSushiPerSecond(_sushiPerSecond); } /// @notice View function to see pending SUSHI on frontend. /// @param _pid The index of the pool. See `poolInfo`. /// @param _user Address of user. /// @return pending SUSHI reward for a given user. function pendingSushi(uint256 _pid, address _user) external view returns (uint256 pending) { PoolInfo memory pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accSushiPerShare = pool.accSushiPerShare; uint256 lpSupply = lpToken[_pid].balanceOf(address(this)); if (block.timestamp > pool.lastRewardTime && lpSupply != 0) { uint256 time = block.timestamp.sub(pool.lastRewardTime); uint256 sushiReward = time.mul(sushiPerSecond).mul(pool.allocPoint) / totalAllocPoint; accSushiPerShare = accSushiPerShare.add(sushiReward.mul(ACC_SUSHI_PRECISION) / lpSupply); } pending = int256(user.amount.mul(accSushiPerShare) / ACC_SUSHI_PRECISION).sub(user.rewardDebt).toUInt256(); } /// @notice Update reward variables for all pools. Be careful of gas spending! /// @param pids Pool IDs of all to be updated. Make sure to update all active pools. function massUpdatePools(uint256[] calldata pids) external { uint256 len = pids.length; for (uint256 i = 0; i < len; ++i) { updatePool(pids[i]); } } /// @notice Update reward variables of the given pool. /// @param pid The index of the pool. See `poolInfo`. /// @return pool Returns the pool that was updated. function updatePool(uint256 pid) public returns (PoolInfo memory pool) { pool = poolInfo[pid]; if (block.timestamp > pool.lastRewardTime) { uint256 lpSupply = lpToken[pid].balanceOf(address(this)); if (lpSupply > 0) { uint256 time = block.timestamp.sub(pool.lastRewardTime); uint256 sushiReward = time.mul(sushiPerSecond).mul(pool.allocPoint) / totalAllocPoint; pool.accSushiPerShare = pool.accSushiPerShare.add((sushiReward.mul(ACC_SUSHI_PRECISION) / lpSupply).to128()); } pool.lastRewardTime = block.timestamp.to64(); poolInfo[pid] = pool; emit LogUpdatePool(pid, pool.lastRewardTime, lpSupply, pool.accSushiPerShare); } } /// @notice Deposit LP tokens to MCV2 for SUSHI allocation. /// @param pid The index of the pool. See `poolInfo`. /// @param amount LP token amount to deposit. /// @param to The receiver of `amount` deposit benefit. function deposit(uint256 pid, uint256 amount, address to) nonReentrant public { PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][to]; // Effects user.amount = user.amount.add(amount); user.rewardDebt = user.rewardDebt.add(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION)); // Interactions for( uint256 i = 0; i < poolInfo[pid].rewarders.length; i++) { IRewarder _rewarder = poolInfo[pid].rewarders[i]; if (address(_rewarder) != address(0)) { _rewarder.onSushiReward(pid, to, to, 0, user.amount); } } lpToken[pid].safeTransferFrom(msg.sender, address(this), amount); emit Deposit(msg.sender, pid, amount, to); } /// @notice Withdraw LP tokens from MCV2. /// @param pid The index of the pool. See `poolInfo`. /// @param amount LP token amount to withdraw. /// @param to Receiver of the LP tokens. function withdraw(uint256 pid, uint256 amount, address to) nonReentrant public { PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][msg.sender]; // Effects user.rewardDebt = user.rewardDebt.sub(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION)); user.amount = user.amount.sub(amount); // Interactions for( uint256 i = 0; i < poolInfo[pid].rewarders.length; i++) { IRewarder _rewarder = poolInfo[pid].rewarders[i]; if (address(_rewarder) != address(0)) { _rewarder.onSushiReward(pid, msg.sender, to, 0, user.amount); } } lpToken[pid].safeTransfer(to, amount); emit Withdraw(msg.sender, pid, amount, to); } /// @notice Harvest proceeds for transaction sender to `to`. /// @param pid The index of the pool. See `poolInfo`. /// @param to Receiver of SUSHI rewards. function harvest(uint256 pid, address to) nonReentrant public { PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][msg.sender]; int256 accumulatedSushi = int256(user.amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION); uint256 _pendingSushi = accumulatedSushi.sub(user.rewardDebt).toUInt256(); // Effects user.rewardDebt = accumulatedSushi; // Interactions if (_pendingSushi != 0) { SUSHI.safeTransfer(to, _pendingSushi); } for( uint256 i = 0; i < poolInfo[pid].rewarders.length; i++) { IRewarder _rewarder = poolInfo[pid].rewarders[i]; if (address(_rewarder) != address(0)) { _rewarder.onSushiReward( pid, msg.sender, to, _pendingSushi, user.amount); } } emit Harvest(msg.sender, pid, _pendingSushi); } /// @notice Withdraw LP tokens from MCV2 and harvest proceeds for transaction sender to `to`. /// @param pid The index of the pool. See `poolInfo`. /// @param amount LP token amount to withdraw. /// @param to Receiver of the LP tokens and SUSHI rewards. function withdrawAndHarvest(uint256 pid, uint256 amount, address to) nonReentrant public { PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][msg.sender]; int256 accumulatedSushi = int256(user.amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION); uint256 _pendingSushi = accumulatedSushi.sub(user.rewardDebt).toUInt256(); // Effects user.rewardDebt = accumulatedSushi.sub(int256(amount.mul(pool.accSushiPerShare) / ACC_SUSHI_PRECISION)); user.amount = user.amount.sub(amount); // Interactions SUSHI.safeTransfer(to, _pendingSushi); for( uint256 i = 0; i < poolInfo[pid].rewarders.length; i++) { IRewarder _rewarder = poolInfo[pid].rewarders[i]; if (address(_rewarder) != address(0)) { _rewarder.onSushiReward(pid, msg.sender, to, _pendingSushi, user.amount); } } lpToken[pid].safeTransfer(to, amount); emit Withdraw(msg.sender, pid, amount, to); emit Harvest(msg.sender, pid, _pendingSushi); } /// @notice Withdraw without caring about rewards. EMERGENCY ONLY. /// @param pid The index of the pool. See `poolInfo`. /// @param to Receiver of the LP tokens. function emergencyWithdraw(uint256 pid, address to) nonReentrant public { UserInfo storage user = userInfo[pid][msg.sender]; uint256 amount = user.amount; user.amount = 0; user.rewardDebt = 0; for( uint256 i = 0; i < poolInfo[pid].rewarders.length; i++) { IRewarder _rewarder = poolInfo[pid].rewarders[i]; if (address(_rewarder) != address(0)) { _rewarder.onSushiReward(pid, msg.sender, to, 0, 0); } } // Note: transfer can fail or succeed if `amount` is zero. lpToken[pid].safeTransfer(to, amount); emit EmergencyWithdraw(msg.sender, pid, amount, to); } function getRewarder(uint256 _pid, uint256 _rid) public view returns(address) { return address(poolInfo[_pid].rewarders[_rid]); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_sushi","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"lpToken","type":"address"}],"name":"LogPoolAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"name":"LogRewarderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"}],"name":"LogSetPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sushiPerSecond","type":"uint256"}],"name":"LogSushiPerSecond","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accSushiPerShare","type":"uint256"}],"name":"LogUpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"SUSHI","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"}],"name":"addRewarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"calls","type":"bytes[]"},{"internalType":"bool","name":"revertOnFail","type":"bool"}],"name":"batch","outputs":[{"internalType":"bool[]","name":"successes","type":"bool[]"},{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_rid","type":"uint256"}],"name":"getRewarder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pids","type":"uint256[]"}],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingSushi","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permitToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint128","name":"accSushiPerShare","type":"uint128"},{"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"pools","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sushiPerSecond","type":"uint256"}],"name":"setSushiPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sushiPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"updatePool","outputs":[{"components":[{"internalType":"uint128","name":"accSushiPerShare","type":"uint128"},{"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"},{"internalType":"contract IRewarder[]","name":"rewarders","type":"address[]"}],"internalType":"struct MasterChef.PoolInfo","name":"pool","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"int256","name":"rewardDebt","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawAndHarvest","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162002d2b38038062002d2b83398101604081905262000034916200008e565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600160025560601b6001600160601b031916608052620000be565b600060208284031215620000a0578081fd5b81516001600160a01b0381168114620000b7578182fd5b9392505050565b60805160601c612c45620000e66000398061090e528061186c528061197c5250612c456000f3fe6080604052600436106101815760003560e01c806357a5b58c116100d15780639baf58c31161008a578063d1abb90711610064578063d1abb90714610453578063d2423b5114610473578063e30c397814610494578063e7a2e3e0146104a957610181565b80639baf58c314610409578063a06e408b14610429578063ab560e101461043e57610181565b806357a5b58c1461034657806378ed5d1f146103665780637c516e94146103865780638da5cb5b146103a65780638dbdbe6d146103bb57806393f1a40b146103db57610181565b806318fccc761161013e5780632b8bbbe8116101185780632b8bbbe8146102c45780632f940c70146102e45780634e71e0c81461030457806351eb05a61461031957610181565b806318fccc7614610264578063195426ec146102845780631ab06ee5146102a457610181565b8063060fb93114610186578063078dfbe7146101bc578063081e3eda146101de5780630ad58d2f146102005780631526fe271461022057806317caf6f11461024f575b600080fd5b34801561019257600080fd5b506101a66101a1366004612555565b6104c9565b6040516101b391906125fb565b60405180910390f35b3480156101c857600080fd5b506101dc6101d73660046122eb565b610512565b005b3480156101ea57600080fd5b506101f3610601565b6040516101b39190612b09565b34801561020c57600080fd5b506101dc61021b366004612576565b610607565b34801561022c57600080fd5b5061024061023b3660046124f6565b61080a565b6040516101b393929190612adf565b34801561025b57600080fd5b506101f3610854565b34801561027057600080fd5b506101dc61027f366004612526565b61085a565b34801561029057600080fd5b506101f361029f366004612526565b610a6a565b3480156102b057600080fd5b506101dc6102bf366004612555565b610cd9565b3480156102d057600080fd5b506101dc6102df366004612526565b610dd1565b3480156102f057600080fd5b506101dc6102ff366004612526565b610fb8565b34801561031057600080fd5b506101dc611152565b34801561032557600080fd5b506103396103343660046124f6565b6111df565b6040516101b39190612a4f565b34801561035257600080fd5b506101dc61036136600461237e565b6114f9565b34801561037257600080fd5b506101a66103813660046124f6565b61152f565b34801561039257600080fd5b506101dc6103a13660046123d9565b611559565b3480156103b257600080fd5b506101a66115cd565b3480156103c757600080fd5b506101dc6103d6366004612576565b6115dc565b3480156103e757600080fd5b506103fb6103f6366004612526565b6117d6565b6040516101b3929190612b41565b34801561041557600080fd5b506101dc6104243660046124f6565b6117fa565b34801561043557600080fd5b506101f3611864565b34801561044a57600080fd5b506101a661186a565b34801561045f57600080fd5b506101dc61046e366004612576565b61188e565b610486610481366004612335565b611b37565b6040516101b392919061268d565b3480156104a057600080fd5b506101a6611cc6565b3480156104b557600080fd5b506101dc6104c4366004612526565b611cd5565b6000600383815481106104d857fe5b906000526020600020906002020160010182815481106104f457fe5b6000918252602090912001546001600160a01b031690505b92915050565b6000546001600160a01b031633146105455760405162461bcd60e51b815260040161053c906128c7565b60405180910390fd5b81156105e0576001600160a01b03831615158061055f5750805b61057b5760405162461bcd60e51b815260040161053c90612803565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b0319918216179091556001805490911690556105fc565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b6002805414156106295760405162461bcd60e51b815260040161053c906129e1565b600280556000610638846111df565b6000858152600560209081526040808320338452909152902081519192509061068a9064e8d4a51000906106769087906001600160801b0316611e13565b8161067d57fe5b6001840154919004611e4a565b6001820155805461069b9085611e97565b815560005b600386815481106106ad57fe5b906000526020600020906002020160010180549050811015610783576000600387815481106106d857fe5b906000526020600020906002020160010182815481106106f457fe5b6000918252602090912001546001600160a01b03169050801561077a5782546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291610747918b9133918b9160009190600401612b12565b600060405180830381600087803b15801561076157600080fd5b505af1158015610775573d6000803e3d6000fd5b505050505b506001016106a0565b506107b283856004888154811061079657fe5b6000918252602090912001546001600160a01b03169190611eba565b826001600160a01b031685336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132876040516107f69190612b09565b60405180910390a450506001600255505050565b6003818154811061081a57600080fd5b60009182526020909120600290910201546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60065481565b60028054141561087c5760405162461bcd60e51b815260040161053c906129e1565b60028055600061088b836111df565b6000848152600560209081526040808320338452909152812082518154939450909264e8d4a51000916108c791906001600160801b0316611e13565b816108ce57fe5b04905060006108f26108ed846001015484611e4a90919063ffffffff16565b611fa7565b6001840183905590508015610935576109356001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683611eba565b60005b6003878154811061094557fe5b906000526020600020906002020160010180549050811015610a1a5760006003888154811061097057fe5b9060005260206000209060020201600101828154811061098c57fe5b6000918252602090912001546001600160a01b031690508015610a115784546040516345fb1ba160e11b81526001600160a01b03831691638bf63742916109de918c9133918d918a9190600401612b12565b600060405180830381600087803b1580156109f857600080fd5b505af1158015610a0c573d6000803e3d6000fd5b505050505b50600101610938565b5085336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495483604051610a559190612b09565b60405180910390a35050600160025550505050565b60008060038481548110610a7a57fe5b600091825260209182902060408051608081018252600290930290910180546001600160801b03811684526001600160401b03600160801b8204811685870152600160c01b909104168383015260018101805483518187028101870190945280845293949193606086019392830182828015610b1f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b01575b5050509190925250505060008581526005602090815260408083206001600160a01b0388168452909152812082516004805494955091936001600160801b0390911692919088908110610b6e57fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610ba79030906004016125fb565b60206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf7919061250e565b905083602001516001600160401b031642118015610c1457508015155b15610ca0576000610c3b85602001516001600160401b031642611e9790919063ffffffff16565b90506000600654610c6e87604001516001600160401b0316610c6860075486611e1390919063ffffffff16565b90611e13565b81610c7557fe5b049050610c9b83610c8b8364e8d4a51000611e13565b81610c9257fe5b86919004611fcd565b935050505b60018301548354610cce916108ed9164e8d4a5100090610cc09087611e13565b81610cc757fe5b0490611e4a565b979650505050505050565b6000546001600160a01b03163314610d035760405162461bcd60e51b815260040161053c906128c7565b610d4781610d4160038581548110610d1757fe5b600091825260209091206002909102015460065490600160c01b90046001600160401b0316611e97565b90611fcd565b600655610d5381611ff0565b60038381548110610d6057fe5b906000526020600020906002020160000160186101000a8154816001600160401b0302191690836001600160401b03160217905550817f942cc7e17a17c164bd977f32ab8c54265d5b9d481e4e352bf874f1e568874e7c82604051610dc59190612b09565b60405180910390a25050565b6000546001600160a01b03163314610dfb5760405162461bcd60e51b815260040161053c906128c7565b600654610e089083611fcd565b6006556004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038416179055604080516080810190915290815260039060208101610e7342611ff0565b6001600160401b03168152602001610e8a85611ff0565b6001600160401b031681526020016000604051908082528060200260200182016040528015610ec3578160200160208202803683370190505b5090528154600180820184556000938452602093849020835160029093020180548486015160408601516001600160801b03199092166001600160801b039095169490941767ffffffffffffffff60801b1916600160801b6001600160401b0395861602176001600160c01b0316600160c01b94909116939093029290921782556060830151805193949293610f6193928501929190910190612207565b50506004546001600160a01b0383169150610f7d906001611e97565b7f4710feb78e3bce8d2e3ca2989a8eb2f8bcd32a6a55b4535942c180fc4d2e295284604051610fac9190612b09565b60405180910390a35050565b600280541415610fda5760405162461bcd60e51b815260040161053c906129e1565b600280556000828152600560209081526040808320338452909152812080548282556001820183905590915b6003858154811061101357fe5b9060005260206000209060020201600101805490508110156110e85760006003868154811061103e57fe5b9060005260206000209060020201600101828154811061105a57fe5b6000918252602090912001546001600160a01b0316905080156110df576040516345fb1ba160e11b81526001600160a01b03821690638bf63742906110ac90899033908a906000908190600401612b12565b600060405180830381600087803b1580156110c657600080fd5b505af11580156110da573d6000803e3d6000fd5b505050505b50600101611006565b506110fb83826004878154811061079657fe5b826001600160a01b031684336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b8460405161113f9190612b09565b60405180910390a4505060016002555050565b6001546001600160a01b031633811461117d5760405162461bcd60e51b815260040161053c906128fc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6111e7612268565b600382815481106111f457fe5b600091825260209182902060408051608081018252600290930290910180546001600160801b03811684526001600160401b03600160801b8204811685870152600160c01b90910416838301526001810180548351818702810187019094528084529394919360608601939283018282801561129957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161127b575b505050505081525050905080602001516001600160401b03164211156114f4576000600483815481106112c857fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906113019030906004016125fb565b60206040518083038186803b15801561131957600080fd5b505afa15801561132d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611351919061250e565b905080156113f457600061137b83602001516001600160401b031642611e9790919063ffffffff16565b905060006006546113a885604001516001600160401b0316610c6860075486611e1390919063ffffffff16565b816113af57fe5b0490506113e66113d5846113c88464e8d4a51000611e13565b816113cf57fe5b04612019565b85516001600160801b031690612042565b6001600160801b0316845250505b6113fd42611ff0565b6001600160401b03166020830152600380548391908590811061141c57fe5b600091825260209182902083516002929092020180548484015160408601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911781556060830151805191926114ad92600185019290910190612207565b5050506020820151825160405185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad353926114ea92869190612b4f565b60405180910390a2505b919050565b8060005b818110156115295761152084848381811061151457fe5b905060200201356111df565b506001016114fd565b50505050565b6004818154811061153f57600080fd5b6000918252602090912001546001600160a01b0316905081565b60405163d505accf60e01b81526001600160a01b0389169063d505accf90611591908a908a908a908a908a908a908a90600401612633565b600060405180830381600087803b1580156115ab57600080fd5b505af11580156115bf573d6000803e3d6000fd5b505050505050505050505050565b6000546001600160a01b031681565b6002805414156115fe5760405162461bcd60e51b815260040161053c906129e1565b60028055600061160d846111df565b60008581526005602090815260408083206001600160a01b0387168452909152902080549192509061163f9085611fcd565b815581516116769064e8d4a51000906116629087906001600160801b0316611e13565b8161166957fe5b6001840154919004612071565b600182015560005b6003868154811061168b57fe5b906000526020600020906002020160010180549050811015611761576000600387815481106116b657fe5b906000526020600020906002020160010182815481106116d257fe5b6000918252602090912001546001600160a01b0316905080156117585782546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291611725918b918a91829160009190600401612b12565b600060405180830381600087803b15801561173f57600080fd5b505af1158015611753573d6000803e3d6000fd5b505050505b5060010161167e565b506117923330866004898154811061177557fe5b6000918252602090912001546001600160a01b03169291906120b7565b826001600160a01b031685336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47876040516107f69190612b09565b60056020908152600092835260408084209091529082529020805460019091015482565b6000546001600160a01b031633146118245760405162461bcd60e51b815260040161053c906128c7565b60078190556040517fc6ce5eff3291fb2c1517b943daa5067ea76c83816bbf674307fbc7fea3b311d090611859908390612b09565b60405180910390a150565b60075481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6002805414156118b05760405162461bcd60e51b815260040161053c906129e1565b6002805560006118bf846111df565b6000858152600560209081526040808320338452909152812082518154939450909264e8d4a51000916118fb91906001600160801b0316611e13565b8161190257fe5b04905060006119216108ed846001015484611e4a90919063ffffffff16565b905061195c64e8d4a5100061194c86600001516001600160801b031689611e1390919063ffffffff16565b8161195357fe5b84919004611e4a565b6001840155825461196d9087611e97565b83556119a36001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683611eba565b60005b600388815481106119b357fe5b906000526020600020906002020160010180549050811015611a88576000600389815481106119de57fe5b906000526020600020906002020160010182815481106119fa57fe5b6000918252602090912001546001600160a01b031690508015611a7f5784546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291611a4c918d9133918d918a9190600401612b12565b600060405180830381600087803b158015611a6657600080fd5b505af1158015611a7a573d6000803e3d6000fd5b505050505b506001016119a6565b50611a9b858760048a8154811061079657fe5b846001600160a01b031687336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec213289604051611adf9190612b09565b60405180910390a486336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495483604051611b219190612b09565b60405180910390a3505060016002555050505050565b606080836001600160401b0381118015611b5057600080fd5b50604051908082528060200260200182016040528015611b7a578160200160208202803683370190505b509150836001600160401b0381118015611b9357600080fd5b50604051908082528060200260200182016040528015611bc757816020015b6060815260200190600190039081611bb25790505b50905060005b84811015611cbd5760008030888885818110611be557fe5b9050602002810190611bf79190612b79565b604051611c059291906125cf565b600060405180830381855af49150503d8060008114611c40576040519150601f19603f3d011682016040523d82523d6000602084013e611c45565b606091505b50915091508180611c54575085155b611c5d826121a7565b90611c7b5760405162461bcd60e51b815260040161053c9190612724565b5081858481518110611c8957fe5b60200260200101901515908115158152505080848481518110611ca857fe5b60209081029190910101525050600101611bcd565b50935093915050565b6001546001600160a01b031681565b6000546001600160a01b03163314611cff5760405162461bcd60e51b815260040161053c906128c7565b60005b60038381548110611d0f57fe5b906000526020600020906002020160010180549050811015611d9957816001600160a01b031660038481548110611d4257fe5b90600052602060002090600202016001018281548110611d5e57fe5b6000918252602090912001546001600160a01b03161415611d915760405162461bcd60e51b815260040161053c90612832565b600101611d02565b5060038281548110611da757fe5b600091825260208083206001600290930201820180549283018155835282200180546001600160a01b0384166001600160a01b03199091168117909155604051909184917f026b05825d8f499fd88497aab35f95fb84bfdcd4d39928568b10da7d2a53afa99190a35050565b6000811580611e2e57505080820282828281611e2b57fe5b04145b61050c5760405162461bcd60e51b815260040161053c90612a18565b6000818303818312801590611e5f5750838113155b80611e745750600083128015611e7457508381135b611e905760405162461bcd60e51b815260040161053c90612968565b9392505050565b8082038281111561050c5760405162461bcd60e51b815260040161053c90612737565b600080846001600160a01b031663a9059cbb8585604051602401611edf929190612674565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611f1891906125df565b6000604051808303816000865af19150503d8060008114611f55576040519150601f19603f3d011682016040523d82523d6000602084013e611f5a565b606091505b5091509150818015611f84575080511580611f84575080806020019051810190611f8491906123bd565b611fa05760405162461bcd60e51b815260040161053c9061278b565b5050505050565b600080821215611fc95760405162461bcd60e51b815260040161053c90612766565b5090565b8181018181101561050c5760405162461bcd60e51b815260040161053c90612890565b60006001600160401b03821115611fc95760405162461bcd60e51b815260040161053c90612931565b60006001600160801b03821115611fc95760405162461bcd60e51b815260040161053c90612859565b8181016001600160801b03808316908216101561050c5760405162461bcd60e51b815260040161053c90612890565b60008282018183128015906120865750838112155b8061209b575060008312801561209b57508381125b611e905760405162461bcd60e51b815260040161053c906127c2565b600080856001600160a01b03166323b872dd8686866040516024016120de9392919061260f565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161211791906125df565b6000604051808303816000865af19150503d8060008114612154576040519150601f19603f3d011682016040523d82523d6000602084013e612159565b606091505b509150915081801561218357508051158061218357508080602001905181019061218391906123bd565b61219f5760405162461bcd60e51b815260040161053c906129ac565b505050505050565b60606044825110156121ed575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526114f4565b6004820191508180602001905181019061050c9190612460565b82805482825590600052602060002090810192821561225c579160200282015b8281111561225c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612227565b50611fc992915061228e565b604080516080810182526000808252602082018190529181019190915260608082015290565b5b80821115611fc9576000815560010161228f565b60008083601f8401126122b4578081fd5b5081356001600160401b038111156122ca578182fd5b60208301915083602080830285010111156122e457600080fd5b9250929050565b6000806000606084860312156122ff578283fd5b833561230a81612be9565b9250602084013561231a81612c01565b9150604084013561232a81612c01565b809150509250925092565b600080600060408486031215612349578283fd5b83356001600160401b0381111561235e578384fd5b61236a868287016122a3565b909450925050602084013561232a81612c01565b60008060208385031215612390578182fd5b82356001600160401b038111156123a5578283fd5b6123b1858286016122a3565b90969095509350505050565b6000602082840312156123ce578081fd5b8151611e9081612c01565b600080600080600080600080610100898b0312156123f5578384fd5b883561240081612be9565b9750602089013561241081612be9565b9650604089013561242081612be9565b9550606089013594506080890135935060a089013560ff81168114612443578384fd5b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215612471578081fd5b81516001600160401b0380821115612487578283fd5b818401915084601f83011261249a578283fd5b8151818111156124a657fe5b604051601f8201601f1916810160200183811182821017156124c457fe5b6040528181528382016020018710156124db578485fd5b6124ec826020830160208701612bbd565b9695505050505050565b600060208284031215612507578081fd5b5035919050565b60006020828403121561251f578081fd5b5051919050565b60008060408385031215612538578182fd5b82359150602083013561254a81612be9565b809150509250929050565b60008060408385031215612567578182fd5b50508035926020909101359150565b60008060006060848603121561258a578081fd5b8335925060208401359150604084013561232a81612be9565b600081518084526125bb816020860160208601612bbd565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600082516125f1818460208701612bbd565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b828110156126c85781511515845292840192908401906001016126aa565b5050508381038285015284518082528282019080840283018401878501865b8381101561271557601f198684030185526127038383516125a3565b948701949250908601906001016126e7565b50909998505050505050505050565b600060208252611e9060208301846125a3565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b6020808252600d908201526c185b1c9958591e481859191959609a1b604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b6000602080835260a083016001600160801b0385511682850152818501516001600160401b0380821660408701528060408801511660608701525050606085015160808086015281815180845260c08701915084830193508592505b80831015612ad45783516001600160a01b03168252928401926001929092019190840190612aab565b509695505050505050565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612b8f578283fd5b8301803591506001600160401b03821115612ba8578283fd5b6020019150368190038213156122e457600080fd5b60005b83811015612bd8578181015183820152602001612bc0565b838111156115295750506000910152565b6001600160a01b0381168114612bfe57600080fd5b50565b8015158114612bfe57600080fdfea2646970667358221220bae783bc90e5805b5cef25b34d74459e5236f7af7ecc8102f1f192263baa99f264736f6c63430007060033000000000000000000000000d17aa3296e865c6c1360d074776f82d4505c5053
Deployed Bytecode
0x6080604052600436106101815760003560e01c806357a5b58c116100d15780639baf58c31161008a578063d1abb90711610064578063d1abb90714610453578063d2423b5114610473578063e30c397814610494578063e7a2e3e0146104a957610181565b80639baf58c314610409578063a06e408b14610429578063ab560e101461043e57610181565b806357a5b58c1461034657806378ed5d1f146103665780637c516e94146103865780638da5cb5b146103a65780638dbdbe6d146103bb57806393f1a40b146103db57610181565b806318fccc761161013e5780632b8bbbe8116101185780632b8bbbe8146102c45780632f940c70146102e45780634e71e0c81461030457806351eb05a61461031957610181565b806318fccc7614610264578063195426ec146102845780631ab06ee5146102a457610181565b8063060fb93114610186578063078dfbe7146101bc578063081e3eda146101de5780630ad58d2f146102005780631526fe271461022057806317caf6f11461024f575b600080fd5b34801561019257600080fd5b506101a66101a1366004612555565b6104c9565b6040516101b391906125fb565b60405180910390f35b3480156101c857600080fd5b506101dc6101d73660046122eb565b610512565b005b3480156101ea57600080fd5b506101f3610601565b6040516101b39190612b09565b34801561020c57600080fd5b506101dc61021b366004612576565b610607565b34801561022c57600080fd5b5061024061023b3660046124f6565b61080a565b6040516101b393929190612adf565b34801561025b57600080fd5b506101f3610854565b34801561027057600080fd5b506101dc61027f366004612526565b61085a565b34801561029057600080fd5b506101f361029f366004612526565b610a6a565b3480156102b057600080fd5b506101dc6102bf366004612555565b610cd9565b3480156102d057600080fd5b506101dc6102df366004612526565b610dd1565b3480156102f057600080fd5b506101dc6102ff366004612526565b610fb8565b34801561031057600080fd5b506101dc611152565b34801561032557600080fd5b506103396103343660046124f6565b6111df565b6040516101b39190612a4f565b34801561035257600080fd5b506101dc61036136600461237e565b6114f9565b34801561037257600080fd5b506101a66103813660046124f6565b61152f565b34801561039257600080fd5b506101dc6103a13660046123d9565b611559565b3480156103b257600080fd5b506101a66115cd565b3480156103c757600080fd5b506101dc6103d6366004612576565b6115dc565b3480156103e757600080fd5b506103fb6103f6366004612526565b6117d6565b6040516101b3929190612b41565b34801561041557600080fd5b506101dc6104243660046124f6565b6117fa565b34801561043557600080fd5b506101f3611864565b34801561044a57600080fd5b506101a661186a565b34801561045f57600080fd5b506101dc61046e366004612576565b61188e565b610486610481366004612335565b611b37565b6040516101b392919061268d565b3480156104a057600080fd5b506101a6611cc6565b3480156104b557600080fd5b506101dc6104c4366004612526565b611cd5565b6000600383815481106104d857fe5b906000526020600020906002020160010182815481106104f457fe5b6000918252602090912001546001600160a01b031690505b92915050565b6000546001600160a01b031633146105455760405162461bcd60e51b815260040161053c906128c7565b60405180910390fd5b81156105e0576001600160a01b03831615158061055f5750805b61057b5760405162461bcd60e51b815260040161053c90612803565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b0319918216179091556001805490911690556105fc565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60035490565b6002805414156106295760405162461bcd60e51b815260040161053c906129e1565b600280556000610638846111df565b6000858152600560209081526040808320338452909152902081519192509061068a9064e8d4a51000906106769087906001600160801b0316611e13565b8161067d57fe5b6001840154919004611e4a565b6001820155805461069b9085611e97565b815560005b600386815481106106ad57fe5b906000526020600020906002020160010180549050811015610783576000600387815481106106d857fe5b906000526020600020906002020160010182815481106106f457fe5b6000918252602090912001546001600160a01b03169050801561077a5782546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291610747918b9133918b9160009190600401612b12565b600060405180830381600087803b15801561076157600080fd5b505af1158015610775573d6000803e3d6000fd5b505050505b506001016106a0565b506107b283856004888154811061079657fe5b6000918252602090912001546001600160a01b03169190611eba565b826001600160a01b031685336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132876040516107f69190612b09565b60405180910390a450506001600255505050565b6003818154811061081a57600080fd5b60009182526020909120600290910201546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60065481565b60028054141561087c5760405162461bcd60e51b815260040161053c906129e1565b60028055600061088b836111df565b6000848152600560209081526040808320338452909152812082518154939450909264e8d4a51000916108c791906001600160801b0316611e13565b816108ce57fe5b04905060006108f26108ed846001015484611e4a90919063ffffffff16565b611fa7565b6001840183905590508015610935576109356001600160a01b037f000000000000000000000000d17aa3296e865c6c1360d074776f82d4505c5053168683611eba565b60005b6003878154811061094557fe5b906000526020600020906002020160010180549050811015610a1a5760006003888154811061097057fe5b9060005260206000209060020201600101828154811061098c57fe5b6000918252602090912001546001600160a01b031690508015610a115784546040516345fb1ba160e11b81526001600160a01b03831691638bf63742916109de918c9133918d918a9190600401612b12565b600060405180830381600087803b1580156109f857600080fd5b505af1158015610a0c573d6000803e3d6000fd5b505050505b50600101610938565b5085336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495483604051610a559190612b09565b60405180910390a35050600160025550505050565b60008060038481548110610a7a57fe5b600091825260209182902060408051608081018252600290930290910180546001600160801b03811684526001600160401b03600160801b8204811685870152600160c01b909104168383015260018101805483518187028101870190945280845293949193606086019392830182828015610b1f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610b01575b5050509190925250505060008581526005602090815260408083206001600160a01b0388168452909152812082516004805494955091936001600160801b0390911692919088908110610b6e57fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610ba79030906004016125fb565b60206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf7919061250e565b905083602001516001600160401b031642118015610c1457508015155b15610ca0576000610c3b85602001516001600160401b031642611e9790919063ffffffff16565b90506000600654610c6e87604001516001600160401b0316610c6860075486611e1390919063ffffffff16565b90611e13565b81610c7557fe5b049050610c9b83610c8b8364e8d4a51000611e13565b81610c9257fe5b86919004611fcd565b935050505b60018301548354610cce916108ed9164e8d4a5100090610cc09087611e13565b81610cc757fe5b0490611e4a565b979650505050505050565b6000546001600160a01b03163314610d035760405162461bcd60e51b815260040161053c906128c7565b610d4781610d4160038581548110610d1757fe5b600091825260209091206002909102015460065490600160c01b90046001600160401b0316611e97565b90611fcd565b600655610d5381611ff0565b60038381548110610d6057fe5b906000526020600020906002020160000160186101000a8154816001600160401b0302191690836001600160401b03160217905550817f942cc7e17a17c164bd977f32ab8c54265d5b9d481e4e352bf874f1e568874e7c82604051610dc59190612b09565b60405180910390a25050565b6000546001600160a01b03163314610dfb5760405162461bcd60e51b815260040161053c906128c7565b600654610e089083611fcd565b6006556004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038416179055604080516080810190915290815260039060208101610e7342611ff0565b6001600160401b03168152602001610e8a85611ff0565b6001600160401b031681526020016000604051908082528060200260200182016040528015610ec3578160200160208202803683370190505b5090528154600180820184556000938452602093849020835160029093020180548486015160408601516001600160801b03199092166001600160801b039095169490941767ffffffffffffffff60801b1916600160801b6001600160401b0395861602176001600160c01b0316600160c01b94909116939093029290921782556060830151805193949293610f6193928501929190910190612207565b50506004546001600160a01b0383169150610f7d906001611e97565b7f4710feb78e3bce8d2e3ca2989a8eb2f8bcd32a6a55b4535942c180fc4d2e295284604051610fac9190612b09565b60405180910390a35050565b600280541415610fda5760405162461bcd60e51b815260040161053c906129e1565b600280556000828152600560209081526040808320338452909152812080548282556001820183905590915b6003858154811061101357fe5b9060005260206000209060020201600101805490508110156110e85760006003868154811061103e57fe5b9060005260206000209060020201600101828154811061105a57fe5b6000918252602090912001546001600160a01b0316905080156110df576040516345fb1ba160e11b81526001600160a01b03821690638bf63742906110ac90899033908a906000908190600401612b12565b600060405180830381600087803b1580156110c657600080fd5b505af11580156110da573d6000803e3d6000fd5b505050505b50600101611006565b506110fb83826004878154811061079657fe5b826001600160a01b031684336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b8460405161113f9190612b09565b60405180910390a4505060016002555050565b6001546001600160a01b031633811461117d5760405162461bcd60e51b815260040161053c906128fc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6111e7612268565b600382815481106111f457fe5b600091825260209182902060408051608081018252600290930290910180546001600160801b03811684526001600160401b03600160801b8204811685870152600160c01b90910416838301526001810180548351818702810187019094528084529394919360608601939283018282801561129957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161127b575b505050505081525050905080602001516001600160401b03164211156114f4576000600483815481106112c857fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906113019030906004016125fb565b60206040518083038186803b15801561131957600080fd5b505afa15801561132d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611351919061250e565b905080156113f457600061137b83602001516001600160401b031642611e9790919063ffffffff16565b905060006006546113a885604001516001600160401b0316610c6860075486611e1390919063ffffffff16565b816113af57fe5b0490506113e66113d5846113c88464e8d4a51000611e13565b816113cf57fe5b04612019565b85516001600160801b031690612042565b6001600160801b0316845250505b6113fd42611ff0565b6001600160401b03166020830152600380548391908590811061141c57fe5b600091825260209182902083516002929092020180548484015160408601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911781556060830151805191926114ad92600185019290910190612207565b5050506020820151825160405185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad353926114ea92869190612b4f565b60405180910390a2505b919050565b8060005b818110156115295761152084848381811061151457fe5b905060200201356111df565b506001016114fd565b50505050565b6004818154811061153f57600080fd5b6000918252602090912001546001600160a01b0316905081565b60405163d505accf60e01b81526001600160a01b0389169063d505accf90611591908a908a908a908a908a908a908a90600401612633565b600060405180830381600087803b1580156115ab57600080fd5b505af11580156115bf573d6000803e3d6000fd5b505050505050505050505050565b6000546001600160a01b031681565b6002805414156115fe5760405162461bcd60e51b815260040161053c906129e1565b60028055600061160d846111df565b60008581526005602090815260408083206001600160a01b0387168452909152902080549192509061163f9085611fcd565b815581516116769064e8d4a51000906116629087906001600160801b0316611e13565b8161166957fe5b6001840154919004612071565b600182015560005b6003868154811061168b57fe5b906000526020600020906002020160010180549050811015611761576000600387815481106116b657fe5b906000526020600020906002020160010182815481106116d257fe5b6000918252602090912001546001600160a01b0316905080156117585782546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291611725918b918a91829160009190600401612b12565b600060405180830381600087803b15801561173f57600080fd5b505af1158015611753573d6000803e3d6000fd5b505050505b5060010161167e565b506117923330866004898154811061177557fe5b6000918252602090912001546001600160a01b03169291906120b7565b826001600160a01b031685336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47876040516107f69190612b09565b60056020908152600092835260408084209091529082529020805460019091015482565b6000546001600160a01b031633146118245760405162461bcd60e51b815260040161053c906128c7565b60078190556040517fc6ce5eff3291fb2c1517b943daa5067ea76c83816bbf674307fbc7fea3b311d090611859908390612b09565b60405180910390a150565b60075481565b7f000000000000000000000000d17aa3296e865c6c1360d074776f82d4505c505381565b6002805414156118b05760405162461bcd60e51b815260040161053c906129e1565b6002805560006118bf846111df565b6000858152600560209081526040808320338452909152812082518154939450909264e8d4a51000916118fb91906001600160801b0316611e13565b8161190257fe5b04905060006119216108ed846001015484611e4a90919063ffffffff16565b905061195c64e8d4a5100061194c86600001516001600160801b031689611e1390919063ffffffff16565b8161195357fe5b84919004611e4a565b6001840155825461196d9087611e97565b83556119a36001600160a01b037f000000000000000000000000d17aa3296e865c6c1360d074776f82d4505c5053168683611eba565b60005b600388815481106119b357fe5b906000526020600020906002020160010180549050811015611a88576000600389815481106119de57fe5b906000526020600020906002020160010182815481106119fa57fe5b6000918252602090912001546001600160a01b031690508015611a7f5784546040516345fb1ba160e11b81526001600160a01b03831691638bf6374291611a4c918d9133918d918a9190600401612b12565b600060405180830381600087803b158015611a6657600080fd5b505af1158015611a7a573d6000803e3d6000fd5b505050505b506001016119a6565b50611a9b858760048a8154811061079657fe5b846001600160a01b031687336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec213289604051611adf9190612b09565b60405180910390a486336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495483604051611b219190612b09565b60405180910390a3505060016002555050505050565b606080836001600160401b0381118015611b5057600080fd5b50604051908082528060200260200182016040528015611b7a578160200160208202803683370190505b509150836001600160401b0381118015611b9357600080fd5b50604051908082528060200260200182016040528015611bc757816020015b6060815260200190600190039081611bb25790505b50905060005b84811015611cbd5760008030888885818110611be557fe5b9050602002810190611bf79190612b79565b604051611c059291906125cf565b600060405180830381855af49150503d8060008114611c40576040519150601f19603f3d011682016040523d82523d6000602084013e611c45565b606091505b50915091508180611c54575085155b611c5d826121a7565b90611c7b5760405162461bcd60e51b815260040161053c9190612724565b5081858481518110611c8957fe5b60200260200101901515908115158152505080848481518110611ca857fe5b60209081029190910101525050600101611bcd565b50935093915050565b6001546001600160a01b031681565b6000546001600160a01b03163314611cff5760405162461bcd60e51b815260040161053c906128c7565b60005b60038381548110611d0f57fe5b906000526020600020906002020160010180549050811015611d9957816001600160a01b031660038481548110611d4257fe5b90600052602060002090600202016001018281548110611d5e57fe5b6000918252602090912001546001600160a01b03161415611d915760405162461bcd60e51b815260040161053c90612832565b600101611d02565b5060038281548110611da757fe5b600091825260208083206001600290930201820180549283018155835282200180546001600160a01b0384166001600160a01b03199091168117909155604051909184917f026b05825d8f499fd88497aab35f95fb84bfdcd4d39928568b10da7d2a53afa99190a35050565b6000811580611e2e57505080820282828281611e2b57fe5b04145b61050c5760405162461bcd60e51b815260040161053c90612a18565b6000818303818312801590611e5f5750838113155b80611e745750600083128015611e7457508381135b611e905760405162461bcd60e51b815260040161053c90612968565b9392505050565b8082038281111561050c5760405162461bcd60e51b815260040161053c90612737565b600080846001600160a01b031663a9059cbb8585604051602401611edf929190612674565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611f1891906125df565b6000604051808303816000865af19150503d8060008114611f55576040519150601f19603f3d011682016040523d82523d6000602084013e611f5a565b606091505b5091509150818015611f84575080511580611f84575080806020019051810190611f8491906123bd565b611fa05760405162461bcd60e51b815260040161053c9061278b565b5050505050565b600080821215611fc95760405162461bcd60e51b815260040161053c90612766565b5090565b8181018181101561050c5760405162461bcd60e51b815260040161053c90612890565b60006001600160401b03821115611fc95760405162461bcd60e51b815260040161053c90612931565b60006001600160801b03821115611fc95760405162461bcd60e51b815260040161053c90612859565b8181016001600160801b03808316908216101561050c5760405162461bcd60e51b815260040161053c90612890565b60008282018183128015906120865750838112155b8061209b575060008312801561209b57508381125b611e905760405162461bcd60e51b815260040161053c906127c2565b600080856001600160a01b03166323b872dd8686866040516024016120de9392919061260f565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161211791906125df565b6000604051808303816000865af19150503d8060008114612154576040519150601f19603f3d011682016040523d82523d6000602084013e612159565b606091505b509150915081801561218357508051158061218357508080602001905181019061218391906123bd565b61219f5760405162461bcd60e51b815260040161053c906129ac565b505050505050565b60606044825110156121ed575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526114f4565b6004820191508180602001905181019061050c9190612460565b82805482825590600052602060002090810192821561225c579160200282015b8281111561225c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612227565b50611fc992915061228e565b604080516080810182526000808252602082018190529181019190915260608082015290565b5b80821115611fc9576000815560010161228f565b60008083601f8401126122b4578081fd5b5081356001600160401b038111156122ca578182fd5b60208301915083602080830285010111156122e457600080fd5b9250929050565b6000806000606084860312156122ff578283fd5b833561230a81612be9565b9250602084013561231a81612c01565b9150604084013561232a81612c01565b809150509250925092565b600080600060408486031215612349578283fd5b83356001600160401b0381111561235e578384fd5b61236a868287016122a3565b909450925050602084013561232a81612c01565b60008060208385031215612390578182fd5b82356001600160401b038111156123a5578283fd5b6123b1858286016122a3565b90969095509350505050565b6000602082840312156123ce578081fd5b8151611e9081612c01565b600080600080600080600080610100898b0312156123f5578384fd5b883561240081612be9565b9750602089013561241081612be9565b9650604089013561242081612be9565b9550606089013594506080890135935060a089013560ff81168114612443578384fd5b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215612471578081fd5b81516001600160401b0380821115612487578283fd5b818401915084601f83011261249a578283fd5b8151818111156124a657fe5b604051601f8201601f1916810160200183811182821017156124c457fe5b6040528181528382016020018710156124db578485fd5b6124ec826020830160208701612bbd565b9695505050505050565b600060208284031215612507578081fd5b5035919050565b60006020828403121561251f578081fd5b5051919050565b60008060408385031215612538578182fd5b82359150602083013561254a81612be9565b809150509250929050565b60008060408385031215612567578182fd5b50508035926020909101359150565b60008060006060848603121561258a578081fd5b8335925060208401359150604084013561232a81612be9565b600081518084526125bb816020860160208601612bbd565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600082516125f1818460208701612bbd565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b828110156126c85781511515845292840192908401906001016126aa565b5050508381038285015284518082528282019080840283018401878501865b8381101561271557601f198684030185526127038383516125a3565b948701949250908601906001016126e7565b50909998505050505050505050565b600060208252611e9060208301846125a3565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b6020808252600d908201526c185b1c9958591e481859191959609a1b604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b6000602080835260a083016001600160801b0385511682850152818501516001600160401b0380821660408701528060408801511660608701525050606085015160808086015281815180845260c08701915084830193508592505b80831015612ad45783516001600160a01b03168252928401926001929092019190840190612aab565b509695505050505050565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612b8f578283fd5b8301803591506001600160401b03821115612ba8578283fd5b6020019150368190038213156122e457600080fd5b60005b83811015612bd8578181015183820152602001612bc0565b838111156115295750506000910152565b6001600160a01b0381168114612bfe57600080fd5b50565b8015158114612bfe57600080fdfea2646970667358221220bae783bc90e5805b5cef25b34d74459e5236f7af7ecc8102f1f192263baa99f264736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d17aa3296e865c6c1360d074776f82d4505c5053
-----Decoded View---------------
Arg [0] : _sushi (address): 0xd17Aa3296E865C6c1360d074776f82d4505C5053
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d17aa3296e865c6c1360d074776f82d4505c5053
Deployed Bytecode Sourcemap
16076:12677:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28606:141;;;;;;;;;;-1:-1:-1;28606:141:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10430:472;;;;;;;;;;-1:-1:-1;10430:472:0;;;;;:::i;:::-;;:::i;:::-;;18477:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;24385:809::-;;;;;;;;;;-1:-1:-1;24385:809:0;;;;;:::i;:::-;;:::i;17016:26::-;;;;;;;;;;-1:-1:-1;17016:26:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;17367:30::-;;;;;;;;;;;;;:::i;25373:933::-;;;;;;;;;;-1:-1:-1;25373:933:0;;;;;:::i;:::-;;:::i;20970:802::-;;;;;;;;;;-1:-1:-1;20970:802:0;;;;;:::i;:::-;;:::i;20120:267::-;;;;;;;;;;-1:-1:-1;20120:267:0;;;;;:::i;:::-;;:::i;18856:470::-;;;;;;;;;;-1:-1:-1;18856:470:0;;;;;:::i;:::-;;:::i;27902:696::-;;;;;;;;;;-1:-1:-1;27902:696:0;;;;;:::i;:::-;;:::i;10951:348::-;;;;;;;;;;;;;:::i;22331:785::-;;;;;;;;;;-1:-1:-1;22331:785:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21954:193::-;;;;;;;;;;-1:-1:-1;21954:193:0;;;;;:::i;:::-;;:::i;17110:23::-;;;;;;;;;;-1:-1:-1;17110:23:0;;;;;:::i;:::-;;:::i;9383:246::-;;;;;;;;;;-1:-1:-1;9383:246:0;;;;;:::i;:::-;;:::i;10006:20::-;;;;;;;;;;;;;:::i;23360:813::-;;;;;;;;;;-1:-1:-1;23360:813:0;;;;;:::i;:::-;;:::i;17200:66::-;;;;;;;;;;-1:-1:-1;17200:66:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;20572:170::-;;;;;;;;;;-1:-1:-1;20572:170:0;;;;;:::i;:::-;;:::i;17406:29::-;;;;;;;;;;;;;:::i;16937:::-;;;;;;;;;;;;;:::i;26592:1125::-;;;;;;;;;;-1:-1:-1;26592:1125:0;;;;;:::i;:::-;;:::i;8482:554::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;10053:27::-;;;;;;;;;;;;;:::i;19516:365::-;;;;;;;;;;-1:-1:-1;19516:365:0;;;;;:::i;:::-;;:::i;28606:141::-;28675:7;28708:8;28717:4;28708:14;;;;;;;;;;;;;;;;;;:24;;28733:4;28708:30;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28708:30:0;;-1:-1:-1;28606:141:0;;;;;:::o;10430:472::-;11402:5;;-1:-1:-1;;;;;11402:5:0;11388:10;:19;11380:64;;;;-1:-1:-1;;;11380:64:0;;;;;;;:::i;:::-;;;;;;;;;10535:6:::1;10531:364;;;-1:-1:-1::0;;;;;10589:22:0;::::1;::::0;::::1;::::0;:34:::1;;;10615:8;10589:34;10581:68;;;;-1:-1:-1::0;;;10581:68:0::1;;;;;;;:::i;:::-;10716:5;::::0;;10695:37:::1;::::0;-1:-1:-1;;;;;10695:37:0;;::::1;::::0;10716:5;::::1;::::0;10695:37:::1;::::0;::::1;10747:5;:16:::0;;-1:-1:-1;;;;;10747:16:0;::::1;-1:-1:-1::0;;;;;;10747:16:0;;::::1;;::::0;;;;10778:25;;;;::::1;::::0;;10531:364:::1;;;10860:12;:23:::0;;-1:-1:-1;;;;;;10860:23:0::1;-1:-1:-1::0;;;;;10860:23:0;::::1;;::::0;;10531:364:::1;10430:472:::0;;;:::o;18477:100::-;18554:8;:15;;18477:100::o;24385:809::-;1838:1;2444:7;;:19;;2436:63;;;;-1:-1:-1;;;2436:63:0;;;;;;;:::i;:::-;1838:1;2577:18;;24475:20:::1;24498:15;24509:3:::0;24498:10:::1;:15::i;:::-;24524:21;24548:13:::0;;;:8:::1;:13;::::0;;;;;;;24562:10:::1;24548:25:::0;;;;;;;24662:21;;24475:38;;-1:-1:-1;24548:25:0;24624:84:::1;::::0;17489:4:::1;::::0;24651:33:::1;::::0;:6;;-1:-1:-1;;;;;24651:33:0::1;:10;:33::i;:::-;:55;;;;;24624:15;::::0;::::1;::::0;;24651:55;::::1;24624:19;:84::i;:::-;24606:15;::::0;::::1;:102:::0;24733:11;;:23:::1;::::0;24749:6;24733:15:::1;:23::i;:::-;24719:37:::0;;:11:::1;24794:283;24818:8;24827:3;24818:13;;;;;;;;;;;;;;;;;;:23;;:30;;;;24814:1;:34;24794:283;;;24870:19;24892:8;24901:3;24892:13;;;;;;;;;;;;;;;;;;:23;;24916:1;24892:26;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24892:26:0::1;::::0;-1:-1:-1;24937:32:0;;24933:133:::1;;25038:11:::0;;24990:60:::1;::::0;-1:-1:-1;;;24990:60:0;;-1:-1:-1;;;;;24990:23:0;::::1;::::0;::::1;::::0;:60:::1;::::0;25014:3;;25019:10:::1;::::0;25031:2;;25035:1:::1;::::0;25038:11;24990:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24933:133;-1:-1:-1::0;24850:3:0::1;;24794:283;;;;25094:37;25120:2;25124:6;25094:7;25102:3;25094:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25094:12:0::1;::::0;:37;:25:::1;:37::i;:::-;25183:2;-1:-1:-1::0;;;;;25149:37:0::1;25170:3;25158:10;-1:-1:-1::0;;;;;25149:37:0::1;;25175:6;25149:37;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;1794:1:0;2756:7;:22;-1:-1:-1;;;24385:809:0:o;17016:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17016:26:0;;;-1:-1:-1;;;;;;;;;17016:26:0;;;;;-1:-1:-1;;;17016:26:0;;;;:::o;17367:30::-;;;;:::o;25373:933::-;1838:1;2444:7;;:19;;2436:63;;;;-1:-1:-1;;;2436:63:0;;;;;;;:::i;:::-;1838:1;2577:18;;25446:20:::1;25469:15;25480:3:::0;25469:10:::1;:15::i;:::-;25495:21;25519:13:::0;;;:8:::1;:13;::::0;;;;;;;25533:10:::1;25519:25:::0;;;;;;;25604:21;;25588:11;;25446:38;;-1:-1:-1;25519:25:0;;17489:4:::1;::::0;25588:38:::1;::::0;:11;-1:-1:-1;;;;;25588:38:0::1;:15;:38::i;:::-;:60;;;;;;25555:94;;25660:21;25684:49;:37;25705:4;:15;;;25684:16;:20;;:37;;;;:::i;:::-;:47;:49::i;:::-;25766:15;::::0;::::1;:34:::0;;;25660:73;-1:-1:-1;25842:18:0;;25838:88:::1;;25877:37;-1:-1:-1::0;;;;;25877:5:0::1;:18;25896:2:::0;25900:13;25877:18:::1;:37::i;:::-;25951:9;25946:296;25970:8;25979:3;25970:13;;;;;;;;;;;;;;;;;;:23;;:30;;;;25966:1;:34;25946:296;;;26022:19;26044:8;26053:3;26044:13;;;;;;;;;;;;;;;;;;:23;;26068:1;26044:26;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;26044:26:0::1;::::0;-1:-1:-1;26089:32:0;;26085:146:::1;;26203:11:::0;;26142:73:::1;::::0;-1:-1:-1;;;26142:73:0;;-1:-1:-1;;;;;26142:23:0;::::1;::::0;::::1;::::0;:73:::1;::::0;26167:3;;26172:10:::1;::::0;26184:2;;26188:13;;26203:11;26142:73:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26085:146;-1:-1:-1::0;26002:3:0::1;;25946:296;;;;26279:3;26267:10;-1:-1:-1::0;;;;;26259:39:0::1;;26284:13;26259:39;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;1794:1:0;2756:7;:22;-1:-1:-1;;;;25373:933:0:o;20970:802::-;21044:15;21072:20;21095:8;21104:4;21095:14;;;;;;;;;;;;;;;;;21072:37;;;;;;;;21095:14;;;;;;;21072:37;;-1:-1:-1;;;;;21072:37:0;;;;-1:-1:-1;;;;;;;;21072:37:0;;;;;;;;-1:-1:-1;;;21072:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21095:14;;21072:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21072:37:0;;;;;;;;;;;;;;;;-1:-1:-1;;;21072:37:0;;;;-1:-1:-1;;;21120:21:0;21144:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;21144:21:0;;;;;;;;;21203;;21254:7;:13;;21072:37;;-1:-1:-1;21144:21:0;;-1:-1:-1;;;;;21176:48:0;;;;21120:21;21254:7;21153:4;;21254:13;;;;;;;;;;;;;;;;:38;;-1:-1:-1;;;21254:38:0;;-1:-1:-1;;;;;21254:13:0;;;;:23;;:38;;21286:4;;21254:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21235:57;;21325:4;:19;;;-1:-1:-1;;;;;21307:37:0;:15;:37;:54;;;;-1:-1:-1;21348:13:0;;;21307:54;21303:345;;;21378:12;21393:40;21413:4;:19;;;-1:-1:-1;;;;;21393:40:0;:15;:19;;:40;;;;:::i;:::-;21378:55;;21448:19;21518:15;;21470:45;21499:4;:15;;;-1:-1:-1;;;;;21470:45:0;:24;21479:14;;21470:4;:8;;:24;;;;:::i;:::-;:28;;:45::i;:::-;:63;;;;;;;-1:-1:-1;21567:69:0;21627:8;21588:36;21470:63;17489:4;21588:15;:36::i;:::-;:47;;;;;21567:16;;21588:47;;21567:20;:69::i;:::-;21548:88;;21303:345;;;21736:15;;;;21675:11;;21668:96;;:84;;17489:4;;21675:33;;21691:16;21675:15;:33::i;:::-;:55;;;;;;;21668:67;:84::i;:96::-;21658:106;20970:802;-1:-1:-1;;;;;;;20970:802:0:o;20120:267::-;11402:5;;-1:-1:-1;;;;;11402:5:0;11388:10;:19;11380:64;;;;-1:-1:-1;;;11380:64:0;;;;;;;:::i;:::-;20214:63:::1;20265:11;20214:46;20234:8;20243:4;20234:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:25:::0;20214:15:::1;::::0;;-1:-1:-1;;;20234:25:0;::::1;-1:-1:-1::0;;;;;20234:25:0::1;20214:19;:46::i;:::-;:50:::0;::::1;:63::i;:::-;20196:15;:81:::0;20316:18:::1;:11:::0;:16:::1;:18::i;:::-;20288:8;20297:4;20288:14;;;;;;;;;;;;;;;;;;:25;;;:46;;;;;-1:-1:-1::0;;;;;20288:46:0::1;;;;;-1:-1:-1::0;;;;;20288:46:0::1;;;;;;20361:4;20350:29;20367:11;20350:29;;;;;;:::i;:::-;;;;;;;;20120:267:::0;;:::o;18856:470::-;11402:5;;-1:-1:-1;;;;;11402:5:0;11388:10;:19;11380:64;;;;-1:-1:-1;;;11380:64:0;;;;;;;:::i;:::-;18952:15:::1;::::0;:31:::1;::::0;18972:10;18952:19:::1;:31::i;:::-;18934:15;:49:::0;18994:7:::1;:22:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;18994:22:0;;;;::::1;::::0;;-1:-1:-1;;;;;;18994:22:0::1;-1:-1:-1::0;;;;;18994:22:0;::::1;;::::0;;19043:198:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;19029:8:::1;::::0;18994:22:::1;19043:198:::0;::::1;19127:22;:15;:20;:22::i;:::-;-1:-1:-1::0;;;;;19043:198:0::1;;;;;19079:17;:10;:15;:17::i;:::-;-1:-1:-1::0;;;;;19043:198:0::1;::::0;;::::1;;19226:1;19210:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;19210:18:0::1;-1:-1:-1::0;19043:198:0;;19029:213;;::::1;::::0;;::::1;::::0;;-1:-1:-1;19029:213:0;;;::::1;::::0;;;;;;::::1;::::0;;::::1;;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;;19029:213:0;;::::1;-1:-1:-1::0;;;;;19029:213:0;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;19029:213:0::1;-1:-1:-1::0;;;;;;;;19029:213:0;;::::1;;;-1:-1:-1::0;;;;;19029:213:0::1;-1:-1:-1::0;;;19029:213:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;19274:7:0::1;:14:::0;-1:-1:-1;;;;;19258:60:0;::::1;::::0;-1:-1:-1;19274:21:0::1;::::0;19293:1:::1;19274:18;:21::i;:::-;19258:60;19297:10;19258:60;;;;;;:::i;:::-;;;;;;;;18856:470:::0;;:::o;27902:696::-;1838:1;2444:7;;:19;;2436:63;;;;-1:-1:-1;;;2436:63:0;;;;;;;:::i;:::-;1838:1;2577:18;;27985:21:::1;28009:13:::0;;;:8:::1;:13;::::0;;;;;;;28023:10:::1;28009:25:::0;;;;;;;28062:11;;28084:15;;;-1:-1:-1;28110:15:0;::::1;:19:::0;;;28009:25;;28142:271:::1;28166:8;28175:3;28166:13;;;;;;;;;;;;;;;;;;:23;;:30;;;;28162:1;:34;28142:271;;;28218:19;28240:8;28249:3;28240:13;;;;;;;;;;;;;;;;;;:23;;28264:1;28240:26;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28240:26:0::1;::::0;-1:-1:-1;28285:32:0;;28281:121:::1;;28336:50;::::0;-1:-1:-1;;;28336:50:0;;-1:-1:-1;;;;;28336:23:0;::::1;::::0;::::1;::::0;:50:::1;::::0;28360:3;;28365:10:::1;::::0;28377:2;;28381:1:::1;::::0;;;28336:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28281:121;-1:-1:-1::0;28198:3:0::1;;28142:271;;;;28491:37;28517:2;28521:6;28491:7;28499:3;28491:12;;;;;;;:37;28587:2;-1:-1:-1::0;;;;;28544:46:0::1;28574:3;28562:10;-1:-1:-1::0;;;;;28544:46:0::1;;28579:6;28544:46;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;1794:1:0;2756:7;:22;-1:-1:-1;;27902:696:0:o;10951:348::-;11019:12;;-1:-1:-1;;;;;11019:12:0;11079:10;:27;;11071:72;;;;-1:-1:-1;;;11071:72:0;;;;;;;:::i;:::-;11202:5;;;11181:42;;-1:-1:-1;;;;;11181:42:0;;;;11202:5;;;11181:42;;;11234:5;:21;;-1:-1:-1;;;;;11234:21:0;;;-1:-1:-1;;;;;;11234:21:0;;;;;;;11266:25;;;;;;;10951:348::o;22331:785::-;22380:20;;:::i;:::-;22420:8;22429:3;22420:13;;;;;;;;;;;;;;;;;22413:20;;;;;;;;22420:13;;;;;;;22413:20;;-1:-1:-1;;;;;22413:20:0;;;;-1:-1:-1;;;;;;;;22413:20:0;;;;;;;;-1:-1:-1;;;22413:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22420:13;;22413:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22413:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;22466:4;:19;;;-1:-1:-1;;;;;22448:37:0;:15;:37;22444:665;;;22502:16;22521:7;22529:3;22521:12;;;;;;;;;;;;;;;;;;:37;;-1:-1:-1;;;22521:37:0;;-1:-1:-1;;;;;22521:12:0;;;;:22;;:37;;22552:4;;22521:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22502:56;-1:-1:-1;22577:12:0;;22573:339;;22610:12;22625:40;22645:4;:19;;;-1:-1:-1;;;;;22625:40:0;:15;:19;;:40;;;;:::i;:::-;22610:55;;22684:19;22754:15;;22706:45;22735:4;:15;;;-1:-1:-1;;;;;22706:45:0;:24;22715:14;;22706:4;:8;;:24;;;;:::i;:45::-;:63;;;;;;;-1:-1:-1;22812:84:0;22838:57;22878:8;22839:36;22706:63;17489:4;22839:15;:36::i;:::-;:47;;;;;;22838:55;:57::i;:::-;22812:21;;-1:-1:-1;;;;;22812:25:0;;;:84::i;:::-;-1:-1:-1;;;;;22788:108:0;;;-1:-1:-1;;22573:339:0;22948:22;:15;:20;:22::i;:::-;-1:-1:-1;;;;;22926:44:0;:19;;;:44;22985:8;:13;;22926:4;;22985:8;22994:3;;22985:13;;;;;;;;;;;;;;;:20;;:13;;;;;;:20;;;;;;;;;;-1:-1:-1;;;;;;22985:20:0;;;-1:-1:-1;;;;;22985:20:0;;;;;;;-1:-1:-1;;;;22985:20:0;-1:-1:-1;;;;;;;;22985:20:0;;;;;-1:-1:-1;;;;;22985:20:0;-1:-1:-1;;;22985:20:0;;;;;;;;;;;;;;;;;;;;:13;;:20;;-1:-1:-1;22985:20:0;;;;;;;;:::i;:::-;-1:-1:-1;;;23044:19:0;;;;23075:21;;23025:72;;23039:3;;23025:72;;;;23065:8;;23075:21;23025:72;:::i;:::-;;;;;;;;22444:665;;22331:785;;;:::o;21954:193::-;22038:4;22024:11;22060:80;22084:3;22080:1;:7;22060:80;;;22109:19;22120:4;;22125:1;22120:7;;;;;;;;;;;;;22109:10;:19::i;:::-;-1:-1:-1;22089:3:0;;22060:80;;;;21954:193;;;:::o;17110:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17110:23:0;;-1:-1:-1;17110:23:0;:::o;9383:246::-;9572:49;;-1:-1:-1;;;9572:49:0;;-1:-1:-1;;;;;9572:12:0;;;;;:49;;9585:4;;9591:2;;9595:6;;9603:8;;9613:1;;9616;;9619;;9572:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9383:246;;;;;;;;:::o;10006:20::-;;;-1:-1:-1;;;;;10006:20:0;;:::o;23360:813::-;1838:1;2444:7;;:19;;2436:63;;;;-1:-1:-1;;;2436:63:0;;;;;;;:::i;:::-;1838:1;2577:18;;23449:20:::1;23472:15;23483:3:::0;23472:10:::1;:15::i;:::-;23498:21;23522:13:::0;;;:8:::1;:13;::::0;;;;;;;-1:-1:-1;;;;;23522:17:0;::::1;::::0;;;;;;;23586:11;;23449:38;;-1:-1:-1;23522:17:0;23586:23:::1;::::0;23602:6;23586:15:::1;:23::i;:::-;23572:37:::0;;23676:21;;23638:84:::1;::::0;17489:4:::1;::::0;23665:33:::1;::::0;:6;;-1:-1:-1;;;;;23665:33:0::1;:10;:33::i;:::-;:55;;;;;23638:15;::::0;::::1;::::0;;23665:55;::::1;23638:19;:84::i;:::-;23620:15;::::0;::::1;:102:::0;23765:9:::1;23760:275;23784:8;23793:3;23784:13;;;;;;;;;;;;;;;;;;:23;;:30;;;;23780:1;:34;23760:275;;;23836:19;23858:8;23867:3;23858:13;;;;;;;;;;;;;;;;;;:23;;23882:1;23858:26;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23858:26:0::1;::::0;-1:-1:-1;23903:32:0;;23899:125:::1;;23996:11:::0;;23956:52:::1;::::0;-1:-1:-1;;;23956:52:0;;-1:-1:-1;;;;;23956:23:0;::::1;::::0;::::1;::::0;:52:::1;::::0;23980:3;;23985:2;;;;23993:1:::1;::::0;23996:11;23956:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23899:125;-1:-1:-1::0;23816:3:0::1;;23760:275;;;;24047:64;24077:10;24097:4;24104:6;24047:7;24055:3;24047:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24047:12:0::1;::::0;:64;;:29:::1;:64::i;:::-;24162:2;-1:-1:-1::0;;;;;24129:36:0::1;24149:3;24137:10;-1:-1:-1::0;;;;;24129:36:0::1;;24154:6;24129:36;;;;;;:::i;17200:66::-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20572:170::-;11402:5;;-1:-1:-1;;;;;11402:5:0;11388:10;:19;11380:64;;;;-1:-1:-1;;;11380:64:0;;;;;;;:::i;:::-;20652:14:::1;:32:::0;;;20700:34:::1;::::0;::::1;::::0;::::1;::::0;20669:15;;20700:34:::1;:::i;:::-;;;;;;;;20572:170:::0;:::o;17406:29::-;;;;:::o;16937:::-;;;:::o;26592:1125::-;1838:1;2444:7;;:19;;2436:63;;;;-1:-1:-1;;;2436:63:0;;;;;;;:::i;:::-;1838:1;2577:18;;26692:20:::1;26715:15;26726:3:::0;26715:10:::1;:15::i;:::-;26741:21;26765:13:::0;;;:8:::1;:13;::::0;;;;;;;26779:10:::1;26765:25:::0;;;;;;;26850:21;;26834:11;;26692:38;;-1:-1:-1;26765:25:0;;17489:4:::1;::::0;26834:38:::1;::::0;:11;-1:-1:-1;;;;;26834:38:0::1;:15;:38::i;:::-;:60;;;;;;26801:94;;26906:21;26930:49;:37;26951:4;:15;;;26930:16;:20;;:37;;;;:::i;:49::-;26906:73;;27030:85;17489:4;27058:33;27069:4;:21;;;-1:-1:-1::0;;;;;27058:33:0::1;:6;:10;;:33;;;;:::i;:::-;:55;;;;;27030:16:::0;;27058:55;::::1;27030:20;:85::i;:::-;27012:15;::::0;::::1;:103:::0;27140:11;;:23:::1;::::0;27156:6;27140:15:::1;:23::i;:::-;27126:37:::0;;27209::::1;-1:-1:-1::0;;;;;27209:5:0::1;:18;27228:2:::0;27232:13;27209:18:::1;:37::i;:::-;27264:9;27259:293;27283:8;27292:3;27283:13;;;;;;;;;;;;;;;;;;:23;;:30;;;;27279:1;:34;27259:293;;;27335:19;27357:8;27366:3;27357:13;;;;;;;;;;;;;;;;;;:23;;27381:1;27357:26;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27357:26:0::1;::::0;-1:-1:-1;27402:32:0;;27398:143:::1;;27513:11:::0;;27453:72:::1;::::0;-1:-1:-1;;;27453:72:0;;-1:-1:-1;;;;;27453:23:0;::::1;::::0;::::1;::::0;:72:::1;::::0;27477:3;;27482:10:::1;::::0;27494:2;;27498:13;;27513:11;27453:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27398:143;-1:-1:-1::0;27315:3:0::1;;27259:293;;;;27562:37;27588:2;27592:6;27562:7;27570:3;27562:12;;;;;;;:37;27651:2;-1:-1:-1::0;;;;;27617:37:0::1;27638:3;27626:10;-1:-1:-1::0;;;;;27617:37:0::1;;27643:6;27617:37;;;;;;:::i;:::-;;;;;;;;27690:3;27678:10;-1:-1:-1::0;;;;;27670:39:0::1;;27695:13;27670:39;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;1794:1:0;2756:7;:22;-1:-1:-1;;;;;26592:1125:0:o;8482:554::-;8565:23;;8673:5;-1:-1:-1;;;;;8662:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8662:24:0;-1:-1:-1;8650:36:0;-1:-1:-1;8719:5:0;-1:-1:-1;;;;;8707:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8697:35;;8748:9;8743:286;8763:16;;;8743:286;;;8802:12;;8847:4;8866:5;;8872:1;8866:8;;;;;;;;;;;;;;;;;;:::i;:::-;8839:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8801:74;;;;8898:7;:24;;;;8910:12;8909:13;8898:24;8924:21;8938:6;8924:13;:21::i;:::-;8890:56;;;;;-1:-1:-1;;;8890:56:0;;;;;;;;:::i;:::-;;8976:7;8961:9;8971:1;8961:12;;;;;;;;;;;;;:22;;;;;;;;;;;9011:6;8998:7;9006:1;8998:10;;;;;;;;;;;;;;;;;:19;-1:-1:-1;;8781:3:0;;8743:286;;;;8482:554;;;;;;:::o;10053:27::-;;;-1:-1:-1;;;;;10053:27:0;;:::o;19516:365::-;11402:5;;-1:-1:-1;;;;;11402:5:0;11388:10;:19;11380:64;;;;-1:-1:-1;;;11380:64:0;;;;;;;:::i;:::-;19605:9:::1;19600:174;19624:8;19633:4;19624:14;;;;;;;;;;;;;;;;;;:24;;:31;;;;19620:1;:35;19600:174;;;19734:9;-1:-1:-1::0;;;;;19686:58:0::1;19694:8;19703:4;19694:14;;;;;;;;;;;;;;;;;;:24;;19719:1;19694:27;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19694:27:0::1;19686:58;;19678:84;;;;-1:-1:-1::0;;;19678:84:0::1;;;;;;;:::i;:::-;19657:3;;19600:174;;;;19784:8;19793:4;19784:14;;;;;;;;;::::0;;;::::1;::::0;;;:24:::1;:14;::::0;;::::1;;:24:::0;::::1;:40:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;19784:40:0;::::1;-1:-1:-1::0;;;;;;19784:40:0;;::::1;::::0;::::1;::::0;;;19840:33:::1;::::0;19784:40;;19857:4;;19840:33:::1;::::0;19784:14;19840:33:::1;19516:365:::0;;:::o;3393:137::-;3451:9;3471:6;;;:28;;-1:-1:-1;;3486:5:0;;;3498:1;3493;3486:5;3493:1;3481:13;;;;;:18;3471:28;3463:65;;;;-1:-1:-1;;;3463:65:0;;;;;;;:::i;13422:218::-;13478:6;13508:5;;;13533:6;;;;;;:16;;;13548:1;13543;:6;;13533:16;13532:38;;;;13559:1;13555;:5;:14;;;;;13568:1;13564;:5;13555:14;13524:87;;;;-1:-1:-1;;;13524:87:0;;;;;;;:::i;:::-;13631:1;13422:218;-1:-1:-1;;;13422:218:0:o;3265:122::-;3348:5;;;3343:16;;;;3335:50;;;;-1:-1:-1;;;3335:50:0;;;;;;;:::i;6634:304::-;6719:12;6733:17;6762:5;-1:-1:-1;;;;;6754:19:0;6797:10;6809:2;6813:6;6774:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6774:46:0;;;;;;;;;;;6754:67;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6718:103;;;;6840:7;:57;;;;-1:-1:-1;6852:11:0;;:16;;:44;;;6883:4;6872:24;;;;;;;;;;;;:::i;:::-;6832:98;;;;-1:-1:-1;;;6832:98:0;;;;;;;:::i;:::-;6634:304;;;;;:::o;14108:138::-;14160:7;14193:1;14188;:6;;14180:30;;;;-1:-1:-1;;;14180:30:0;;;;;;;:::i;:::-;-1:-1:-1;14236:1:0;14108:138::o;3134:125::-;3217:5;;;3212:16;;;;3204:53;;;;-1:-1:-1;;;3204:53:0;;;;;;;:::i;3703:156::-;3751:8;-1:-1:-1;;;;;3780:15:0;;;3772:55;;;;-1:-1:-1;;;3772:55:0;;;;;;;:::i;3536:161::-;3585:9;-1:-1:-1;;;;;3615:16:0;;;3607:57;;;;-1:-1:-1;;;3607:57:0;;;;;;;:::i;4057:125::-;4140:5;;;-1:-1:-1;;;;;4135:16:0;;;;;;;;4127:53;;;;-1:-1:-1;;;4127:53:0;;;;;;;:::i;13885:215::-;13941:6;13971:5;;;13996:6;;;;;;:16;;;14011:1;14006;:6;;13996:16;13995:38;;;;14022:1;14018;:5;:14;;;;;14031:1;14027;:5;14018:14;13987:84;;;;-1:-1:-1;;;13987:84:0;;;;;;;:::i;6946:332::-;7049:12;7063:17;7092:5;-1:-1:-1;;;;;7084:19:0;7127:10;7139:4;7145:2;7149:6;7104:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7104:52:0;;;;;;;;;;;7084:73;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7048:109;;;;7176:7;:57;;;;-1:-1:-1;7188:11:0;;:16;;:44;;;7219:4;7208:24;;;;;;;;;;;;:::i;:::-;7168:102;;;;-1:-1:-1;;;7168:102:0;;;;;;;:::i;:::-;6946:332;;;;;;:::o;7526:496::-;7598:13;7761:2;7740:11;:18;:23;7736:67;;;-1:-1:-1;7765:38:0;;;;;;;;;;;;;;;;;;;7736:67;7907:4;7894:11;7890:22;7875:37;;7951:11;7940:33;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:407:1;;;154:3;147:4;139:6;135:17;131:27;121:2;;177:6;169;162:22;121:2;-1:-1:-1;205:20:1;;-1:-1:-1;;;;;237:30:1;;234:2;;;287:8;277;270:26;234:2;331:4;323:6;319:17;307:29;;394:3;387:4;379;371:6;367:17;359:6;355:30;351:41;348:50;345:2;;;411:1;408;401:12;345:2;111:310;;;;;:::o;426:533::-;;;;566:2;554:9;545:7;541:23;537:32;534:2;;;587:6;579;572:22;534:2;631:9;618:23;650:33;677:5;650:33;:::i;:::-;702:5;-1:-1:-1;759:2:1;744:18;;731:32;772;731;772;:::i;:::-;823:7;-1:-1:-1;882:2:1;867:18;;854:32;895;854;895;:::i;:::-;946:7;936:17;;;524:435;;;;;:::o;964:612::-;;;;1136:2;1124:9;1115:7;1111:23;1107:32;1104:2;;;1157:6;1149;1142:22;1104:2;1202:9;1189:23;-1:-1:-1;;;;;1227:6:1;1224:30;1221:2;;;1272:6;1264;1257:22;1221:2;1316:83;1391:7;1382:6;1371:9;1367:22;1316:83;:::i;:::-;1418:8;;-1:-1:-1;1290:109:1;-1:-1:-1;;1503:2:1;1488:18;;1475:32;1516:30;1475:32;1516:30;:::i;1581:470::-;;;1728:2;1716:9;1707:7;1703:23;1699:32;1696:2;;;1749:6;1741;1734:22;1696:2;1794:9;1781:23;-1:-1:-1;;;;;1819:6:1;1816:30;1813:2;;;1864:6;1856;1849:22;1813:2;1908:83;1983:7;1974:6;1963:9;1959:22;1908:83;:::i;:::-;2010:8;;1882:109;;-1:-1:-1;1686:365:1;-1:-1:-1;;;;1686:365:1:o;2056:257::-;;2176:2;2164:9;2155:7;2151:23;2147:32;2144:2;;;2197:6;2189;2182:22;2144:2;2234:9;2228:16;2253:30;2277:5;2253:30;:::i;2318:1011::-;;;;;;;;;2561:3;2549:9;2540:7;2536:23;2532:33;2529:2;;;2583:6;2575;2568:22;2529:2;2627:9;2614:23;2646:33;2673:5;2646:33;:::i;:::-;2698:5;-1:-1:-1;2755:2:1;2740:18;;2727:32;2768:35;2727:32;2768:35;:::i;:::-;2822:7;-1:-1:-1;2881:2:1;2866:18;;2853:32;2894:35;2853:32;2894:35;:::i;:::-;2948:7;-1:-1:-1;3002:2:1;2987:18;;2974:32;;-1:-1:-1;3053:3:1;3038:19;;3025:33;;-1:-1:-1;3110:3:1;3095:19;;3082:33;3159:4;3146:18;;3134:31;;3124:2;;3184:6;3176;3169:22;3124:2;2519:810;;;;-1:-1:-1;2519:810:1;;;;;;3212:7;;-1:-1:-1;;;3266:3:1;3251:19;;3238:33;;3318:3;3303:19;3290:33;;2519:810::o;3334:876::-;;3467:2;3455:9;3446:7;3442:23;3438:32;3435:2;;;3488:6;3480;3473:22;3435:2;3526:9;3520:16;-1:-1:-1;;;;;3596:2:1;3588:6;3585:14;3582:2;;;3617:6;3609;3602:22;3582:2;3660:6;3649:9;3645:22;3635:32;;3705:7;3698:4;3694:2;3690:13;3686:27;3676:2;;3732:6;3724;3717:22;3676:2;3766;3760:9;3788:2;3784;3781:10;3778:2;;;3794:9;3778:2;3834;3828:9;3903:2;3884:13;;-1:-1:-1;;3880:27:1;3868:40;;3910:2;3864:49;3928:18;;;3948:22;;;3925:46;3922:2;;;3974:9;3922:2;4001;3994:22;4025:18;;;4062:11;;;4075:2;4058:20;4055:33;-1:-1:-1;4052:2:1;;;4106:6;4098;4091:22;4052:2;4124:55;4176:2;4171;4163:6;4159:15;4154:2;4150;4146:11;4124:55;:::i;:::-;4198:6;3425:785;-1:-1:-1;;;;;;3425:785:1:o;4215:190::-;;4327:2;4315:9;4306:7;4302:23;4298:32;4295:2;;;4348:6;4340;4333:22;4295:2;-1:-1:-1;4376:23:1;;4285:120;-1:-1:-1;4285:120:1:o;4410:194::-;;4533:2;4521:9;4512:7;4508:23;4504:32;4501:2;;;4554:6;4546;4539:22;4501:2;-1:-1:-1;4582:16:1;;4491:113;-1:-1:-1;4491:113:1:o;4609:327::-;;;4738:2;4726:9;4717:7;4713:23;4709:32;4706:2;;;4759:6;4751;4744:22;4706:2;4800:9;4787:23;4777:33;;4860:2;4849:9;4845:18;4832:32;4873:33;4900:5;4873:33;:::i;:::-;4925:5;4915:15;;;4696:240;;;;;:::o;5637:258::-;;;5766:2;5754:9;5745:7;5741:23;5737:32;5734:2;;;5787:6;5779;5772:22;5734:2;-1:-1:-1;;5815:23:1;;;5885:2;5870:18;;;5857:32;;-1:-1:-1;5724:171:1:o;5900:395::-;;;;6046:2;6034:9;6025:7;6021:23;6017:32;6014:2;;;6067:6;6059;6052:22;6014:2;6108:9;6095:23;6085:33;;6165:2;6154:9;6150:18;6137:32;6127:42;;6219:2;6208:9;6204:18;6191:32;6232:33;6259:5;6232:33;:::i;6300:259::-;;6381:5;6375:12;6408:6;6403:3;6396:19;6424:63;6480:6;6473:4;6468:3;6464:14;6457:4;6450:5;6446:16;6424:63;:::i;:::-;6541:2;6520:15;-1:-1:-1;;6516:29:1;6507:39;;;;6548:4;6503:50;;6351:208;-1:-1:-1;;6351:208:1:o;6564:273::-;;6747:6;6739;6734:3;6721:33;6773:16;;6798:15;;;6773:16;6711:126;-1:-1:-1;6711:126:1:o;6842:274::-;;7009:6;7003:13;7025:53;7071:6;7066:3;7059:4;7051:6;7047:17;7025:53;:::i;:::-;7094:16;;;;;6979:137;-1:-1:-1;;6979:137:1:o;7121:203::-;-1:-1:-1;;;;;7285:32:1;;;;7267:51;;7255:2;7240:18;;7222:102::o;7329:375::-;-1:-1:-1;;;;;7587:15:1;;;7569:34;;7639:15;;;;7634:2;7619:18;;7612:43;7686:2;7671:18;;7664:34;;;;7519:2;7504:18;;7486:218::o;7709:670::-;-1:-1:-1;;;;;8076:15:1;;;8058:34;;8128:15;;;;8123:2;8108:18;;8101:43;8175:2;8160:18;;8153:34;;;;8218:2;8203:18;;8196:34;;;;8279:4;8267:17;8261:3;8246:19;;8239:46;8038:3;8301:19;;8294:35;8360:3;8345:19;;8338:35;;;;8007:3;7992:19;;7974:405::o;8384:274::-;-1:-1:-1;;;;;8576:32:1;;;;8558:51;;8640:2;8625:18;;8618:34;8546:2;8531:18;;8513:145::o;8663:1327::-;8943:2;8955:21;;;9025:13;;8928:18;;;9047:22;;;8663:1327;;9122:4;;9100:2;9085:18;;;9149:15;;;8663:1327;9195:185;9209:6;9206:1;9203:13;9195:185;;;9284:13;;9277:21;9270:29;9258:42;;9320:12;;;;9355:15;;;;9231:1;9224:9;9195:185;;;-1:-1:-1;;;9416:19:1;;;9396:18;;;9389:47;9486:13;;9508:21;;;9547:12;;;;9595:17;;;9586:27;;9582:36;;9643:15;;;9678:4;9691:270;9707:8;9702:3;9699:17;9691:270;;;9802:2;9798:7;9792:3;9784:6;9780:16;9776:30;9769:5;9762:45;9830:43;9866:6;9855:8;9849:15;9830:43;:::i;:::-;9937:14;;;;9820:53;-1:-1:-1;9898:17:1;;;;9735:1;9726:11;9691:270;;;-1:-1:-1;9978:6:1;;8904:1086;-1:-1:-1;;;;;;;;;8904:1086:1:o;10217:221::-;;10366:2;10355:9;10348:21;10386:46;10428:2;10417:9;10413:18;10405:6;10386:46;:::i;10443:345::-;10645:2;10627:21;;;10684:2;10664:18;;;10657:30;-1:-1:-1;;;10718:2:1;10703:18;;10696:51;10779:2;10764:18;;10617:171::o;10793:335::-;10995:2;10977:21;;;11034:2;11014:18;;;11007:30;-1:-1:-1;;;11068:2:1;11053:18;;11046:41;11119:2;11104:18;;10967:161::o;11133:352::-;11335:2;11317:21;;;11374:2;11354:18;;;11347:30;11413;11408:2;11393:18;;11386:58;11476:2;11461:18;;11307:178::o;11490:397::-;11692:2;11674:21;;;11731:2;11711:18;;;11704:30;11770:34;11765:2;11750:18;;11743:62;-1:-1:-1;;;11836:2:1;11821:18;;11814:31;11877:3;11862:19;;11664:223::o;11892:345::-;12094:2;12076:21;;;12133:2;12113:18;;;12106:30;-1:-1:-1;;;12167:2:1;12152:18;;12145:51;12228:2;12213:18;;12066:171::o;12242:337::-;12444:2;12426:21;;;12483:2;12463:18;;;12456:30;-1:-1:-1;;;12517:2:1;12502:18;;12495:43;12570:2;12555:18;;12416:163::o;12584:352::-;12786:2;12768:21;;;12825:2;12805:18;;;12798:30;12864;12859:2;12844:18;;12837:58;12927:2;12912:18;;12758:178::o;12941:348::-;13143:2;13125:21;;;13182:2;13162:18;;;13155:30;13221:26;13216:2;13201:18;;13194:54;13280:2;13265:18;;13115:174::o;13294:356::-;13496:2;13478:21;;;13515:18;;;13508:30;13574:34;13569:2;13554:18;;13547:62;13641:2;13626:18;;13468:182::o;13655:356::-;13857:2;13839:21;;;13876:18;;;13869:30;13935:34;13930:2;13915:18;;13908:62;14002:2;13987:18;;13829:182::o;14016:351::-;14218:2;14200:21;;;14257:2;14237:18;;;14230:30;14296:29;14291:2;14276:18;;14269:57;14358:2;14343:18;;14190:177::o;14372:400::-;14574:2;14556:21;;;14613:2;14593:18;;;14586:30;14652:34;14647:2;14632:18;;14625:62;-1:-1:-1;;;14718:2:1;14703:18;;14696:34;14762:3;14747:19;;14546:226::o;14777:356::-;14979:2;14961:21;;;14998:18;;;14991:30;15057:34;15052:2;15037:18;;15030:62;15124:2;15109:18;;14951:182::o;15138:355::-;15340:2;15322:21;;;15379:2;15359:18;;;15352:30;15418:33;15413:2;15398:18;;15391:61;15484:2;15469:18;;15312:181::o;15498:348::-;15700:2;15682:21;;;15739:2;15719:18;;;15712:30;15778:26;15773:2;15758:18;;15751:54;15837:2;15822:18;;15672:174::o;15851:1082::-;;16024:2;16053;16042:9;16035:21;16094:3;16083:9;16079:19;-1:-1:-1;;;;;16144:6:1;16138:13;16134:54;16129:2;16118:9;16114:18;16107:82;16236:2;16228:6;16224:15;16218:22;-1:-1:-1;;;;;16331:2:1;16317:12;16313:21;16308:2;16297:9;16293:18;16286:49;16399:2;16393;16385:6;16381:15;16375:22;16371:31;16366:2;16355:9;16351:18;16344:59;;;16452:2;16444:6;16440:15;16434:22;16494:4;16487;16476:9;16472:20;16465:34;16519:6;16554:14;16548:21;16593:6;16585;16578:22;16631:3;16620:9;16616:19;16609:26;;16678:2;16662:14;16658:23;16644:37;;16699:4;16690:13;;16712:195;16726:6;16723:1;16720:13;16712:195;;;16791:13;;-1:-1:-1;;;;;16787:39:1;16775:52;;16882:15;;;;16823:1;16741:9;;;;;16847:12;;;;16712:195;;;-1:-1:-1;16924:3:1;16004:929;-1:-1:-1;;;;;;16004:929:1:o;16938:411::-;-1:-1:-1;;;;;17154:47:1;;;;17136:66;;-1:-1:-1;;;;;17275:15:1;;;17270:2;17255:18;;17248:43;17327:15;17322:2;17307:18;;17300:43;17124:2;17109:18;;17091:258::o;17354:177::-;17500:25;;;17488:2;17473:18;;17455:76::o;17536:543::-;17819:25;;;-1:-1:-1;;;;;17918:15:1;;;17913:2;17898:18;;17891:43;17970:15;;;;17965:2;17950:18;;17943:43;18017:2;18002:18;;17995:34;;;;18060:3;18045:19;;18038:35;17806:3;17791:19;;17773:306::o;19688:246::-;19860:25;;;19916:2;19901:18;;19894:34;19848:2;19833:18;;19815:119::o;19939:383::-;-1:-1:-1;;;;;20157:31:1;;;;20139:50;;20220:2;20205:18;;20198:34;;;;-1:-1:-1;;;;;20268:47:1;20263:2;20248:18;;20241:75;20127:2;20112:18;;20094:228::o;20327:533::-;;;20470:11;20457:25;20564:2;20560:7;20549:8;20533:14;20529:29;20525:43;20505:18;20501:68;20491:2;;20586:4;20580;20573:18;20491:2;20616:33;;20668:20;;;-1:-1:-1;;;;;;20700:30:1;;20697:2;;;20746:4;20740;20733:18;20697:2;20782:4;20770:17;;-1:-1:-1;20813:14:1;20809:27;;;20799:38;;20796:2;;;20850:1;20847;20840:12;20865:258;20937:1;20947:113;20961:6;20958:1;20955:13;20947:113;;;21037:11;;;21031:18;21018:11;;;21011:39;20983:2;20976:10;20947:113;;;21078:6;21075:1;21072:13;21069:2;;;-1:-1:-1;;21113:1:1;21095:16;;21088:27;20918:205::o;21128:133::-;-1:-1:-1;;;;;21205:31:1;;21195:42;;21185:2;;21251:1;21248;21241:12;21185:2;21175:86;:::o;21266:120::-;21354:5;21347:13;21340:21;21333:5;21330:32;21320:2;;21376:1;21373;21366:12
Swarm Source
ipfs://bae783bc90e5805b5cef25b34d74459e5236f7af7ecc8102f1f192263baa99f2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.