Source Code
Latest 25 from a total of 8,410 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw All And... | 146870678 | 8 days ago | IN | 0 ETH | 0.000000003524 | ||||
| Withdraw All And... | 145169225 | 48 days ago | IN | 0 ETH | 0.000000118117 | ||||
| Withdraw All And... | 145169215 | 48 days ago | IN | 0 ETH | 0.000000118105 | ||||
| Withdraw All And... | 145169207 | 48 days ago | IN | 0 ETH | 0.000000118084 | ||||
| Withdraw All And... | 143673314 | 82 days ago | IN | 0 ETH | 0.000000135421 | ||||
| Withdraw All And... | 142906431 | 100 days ago | IN | 0 ETH | 0.000000008324 | ||||
| Withdraw All And... | 142906422 | 100 days ago | IN | 0 ETH | 0.000000014234 | ||||
| Withdraw All And... | 142079534 | 119 days ago | IN | 0 ETH | 0.000000021317 | ||||
| Withdraw All And... | 141833527 | 125 days ago | IN | 0 ETH | 0.000000014227 | ||||
| Harvest | 141833522 | 125 days ago | IN | 0 ETH | 0.000000015364 | ||||
| Withdraw All And... | 140821657 | 148 days ago | IN | 0 ETH | 0.000000001275 | ||||
| Harvest | 140618958 | 153 days ago | IN | 0 ETH | 0.000000007702 | ||||
| Withdraw All And... | 139413403 | 181 days ago | IN | 0 ETH | 0.000000019921 | ||||
| Deposit With Per... | 139413383 | 181 days ago | IN | 0 ETH | 0.000000028332 | ||||
| Withdraw All And... | 138971710 | 191 days ago | IN | 0 ETH | 0.000000017428 | ||||
| Withdraw All And... | 138601341 | 200 days ago | IN | 0 ETH | 0.000000062331 | ||||
| Harvest | 138601330 | 200 days ago | IN | 0 ETH | 0.000000062826 | ||||
| Withdraw All And... | 138022453 | 213 days ago | IN | 0 ETH | 0.000000022771 | ||||
| Harvest | 138022447 | 213 days ago | IN | 0 ETH | 0.000000024254 | ||||
| Withdraw All And... | 132294729 | 346 days ago | IN | 0 ETH | 0.000001133775 | ||||
| Harvest | 132294723 | 346 days ago | IN | 0 ETH | 0.000001276815 | ||||
| Withdraw All And... | 132246132 | 347 days ago | IN | 0 ETH | 0.00000002588 | ||||
| Deposit With Per... | 132245014 | 347 days ago | IN | 0 ETH | 0.000000037107 | ||||
| Withdraw All And... | 132118734 | 350 days ago | IN | 0 ETH | 0.000000157409 | ||||
| Withdraw All And... | 130664751 | 384 days ago | IN | 0 ETH | 0.000000047412 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 107538826 | 919 days ago | 0 ETH | ||||
| 107538826 | 919 days ago | 0 ETH | ||||
| 107538826 | 919 days ago | 0 ETH | ||||
| 107351219 | 923 days ago | 0 ETH | ||||
| 107351219 | 923 days ago | 0 ETH | ||||
| 107351219 | 923 days ago | 0 ETH | ||||
| 107350812 | 923 days ago | 0 ETH | ||||
| 107350812 | 923 days ago | 0 ETH | ||||
| 107350812 | 923 days ago | 0 ETH | ||||
| 107350242 | 923 days ago | 0 ETH | ||||
| 107350242 | 923 days ago | 0 ETH | ||||
| 107350242 | 923 days ago | 0 ETH | ||||
| 107349858 | 923 days ago | 0 ETH | ||||
| 107349858 | 923 days ago | 0 ETH | ||||
| 107349858 | 923 days ago | 0 ETH | ||||
| 107349431 | 923 days ago | 0 ETH | ||||
| 107349431 | 923 days ago | 0 ETH | ||||
| 107349431 | 923 days ago | 0 ETH | ||||
| 107348790 | 923 days ago | 0 ETH | ||||
| 107348790 | 923 days ago | 0 ETH | ||||
| 107348790 | 923 days ago | 0 ETH | ||||
| 107346281 | 923 days ago | 0 ETH | ||||
| 107346281 | 923 days ago | 0 ETH | ||||
| 107346281 | 923 days ago | 0 ETH | ||||
| 107343593 | 923 days ago | 0 ETH |
Cross-Chain Transactions
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:
ZipRewards
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// based on MiniChefV2 from Sushiswap, fixed some bugs and added possibility of zapping out
pragma solidity ^0.8.11;
import { Ownable } from "Ownable.sol";
import { BoringBatchableWithPermit } from "BoringBatchable.sol";
import "Math.sol";
import "Pausable.sol";
import "BoringERC20.sol";
import "IERC20.sol";
interface IRewarder {
function notify_onDeposit(uint pid, uint depositedAmount, uint finalBalance, address sender, address to) external;
//to may be a zapper contract
function notify_onWithdrawal(uint pid, uint withdrawnAmount, uint remainingAmount, address user, address to) external;
function notify_onHarvest(uint pid, uint zipAmount, address user, address recipient) external;
function pendingTokens(uint256 pid, address user, uint256 rewardAmount) external view returns (IERC20[] memory, uint256[] memory);
}
interface IWithdrawalNotifiable {
function notify_onWithdrawal(uint amount, bytes calldata data) external;
}
interface IDepositNotifiable {
function notify_onDeposit(uint amount, bytes calldata data) external;
}
// note: withdrawals can't be paused
contract BaseZipRewards is Ownable, BoringBatchableWithPermit, Pausable {
using BoringERC20 for IERC20;
/// @notice Info of each user.
/// `amount` LP token amount the user has provided.
/// `rewardDebt` The amount of zipToken entitled to the user.
struct UserInfo {
uint128 amount;
int128 rewardDebt;
}
/// @notice Info of each pool.
/// `allocPoint` The amount of allocation points assigned to the pool.
/// Also known as the amount of zipToken to distribute per block.
struct PoolInfo {
uint accZipPerShare;
uint64 lastRewardTime;
uint64 allocPoint;
}
/// @notice Address of zipToken contract.
IERC20 public immutable zipToken;
/// @notice Info of each pool.
PoolInfo[] public poolInfo;
/// @notice Address of the LP token for each pool.
IERC20[] public lpToken;
/// @notice Address of each `IRewarder` contract.
IRewarder[] public rewarder;
/// @notice Info of each user that stakes LP tokens.
mapping (uint256 => mapping (address => UserInfo)) public userInfo;
/// @dev Tokens added
mapping (address => bool) public addedTokens;
/// @dev Total allocation points. Must be the sum of all allocation points in all pools.
uint public totalAllocPoint;
uint public zipPerSecond;
//note: maximum theoretically possible balance of Uni2 LP is 2**112-1
//accZipPerShare is 256 bit. therefore, the maximum supported reward balance is ~10^25 units (*18 decimals)
uint private constant ACC_ZIP_PRECISION = 2**112-1;
uint public totalPaidRewards;
//timestamp when zip rewards run out given current balance
uint64 public zipRewardsSpentTime;
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, IRewarder indexed rewarder);
event LogSetPool(uint256 indexed pid, uint256 allocPoint, IRewarder indexed rewarder, bool overwrite);
event LogUpdatePool(uint256 indexed pid, uint64 lastRewardTime, uint256 lpSupply, uint256 accZipPerShare);
event LogZipPerSecond(uint256 zipPerSecond);
/// @param _zipToken The zipToken token contract address.
constructor(IERC20 _zipToken) {
zipToken = _zipToken;
assert(ACC_ZIP_PRECISION != 0);
}
/// @notice Returns the number of pools.
function poolLength() public view returns (uint256 pools) {
pools = poolInfo.length;
}
/// @notice View function to see pending zipToken on frontend.
/// @param _pid The index of the pool. See `poolInfo`.
/// @param _user Address of user.
/// @return pending zipToken reward for a given user.
function pendingReward(uint _pid, address _user) external view returns (uint pending) {
PoolInfo memory pool = poolInfo[_pid];
UserInfo storage user = userInfo[_pid][_user];
uint accZipPerShare = pool.accZipPerShare;
uint lpSupply = lpToken[_pid].balanceOf(address(this));
if (lpSupply > 0 && totalAllocPoint > 0) {
uint time;
if(block.timestamp > zipRewardsSpentTime) {
if(pool.lastRewardTime < zipRewardsSpentTime) {
time = zipRewardsSpentTime - pool.lastRewardTime;
}
else {
time = 0;
}
}
else {
time = block.timestamp - pool.lastRewardTime;
}
uint tokenReward = time*zipPerSecond*pool.allocPoint/totalAllocPoint;
accZipPerShare += tokenReward*ACC_ZIP_PRECISION / lpSupply;
}
pending = uint(int(uint(user.amount)*accZipPerShare/ACC_ZIP_PRECISION) - user.rewardDebt);
}
/// @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(uint pid) public returns (PoolInfo memory pool) {
pool = poolInfo[pid];
if (block.timestamp > pool.lastRewardTime) {
uint lpSupply = lpToken[pid].balanceOf(address(this));
if (lpSupply > 0 && totalAllocPoint > 0) {
uint time;
if(block.timestamp > zipRewardsSpentTime) {
if(pool.lastRewardTime < zipRewardsSpentTime) {
time = zipRewardsSpentTime - pool.lastRewardTime;
}
else {
time = 0;
}
}
else {
time = block.timestamp - pool.lastRewardTime;
}
uint tokenReward = time*zipPerSecond*pool.allocPoint/totalAllocPoint;
pool.accZipPerShare += tokenReward*ACC_ZIP_PRECISION / lpSupply;
}
pool.lastRewardTime = uint64(block.timestamp);
poolInfo[pid] = pool;
emit LogUpdatePool(pid, pool.lastRewardTime, lpSupply, pool.accZipPerShare);
}
}
/// @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(uint[] calldata pids) external {
uint len = pids.length;
for (uint i = 0; i < len; ++i) {
PoolInfo memory pool = updatePool(pids[i]);
}
}
/// @notice Deposit LP tokens for zipToken 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(uint pid, uint128 amount, address to) public whenNotPaused {
PoolInfo memory pool = updatePool(pid);
UserInfo storage user = userInfo[pid][to];
user.amount += amount;
uint rewardDebtChange = uint(amount)*pool.accZipPerShare / ACC_ZIP_PRECISION;
user.rewardDebt += int128(uint128(rewardDebtChange));
IRewarder _rewarder = rewarder[pid];
if (address(_rewarder) != address(0)) {
_rewarder.notify_onDeposit(pid, amount, user.amount, msg.sender, to);
}
lpToken[pid].safeTransferFrom(msg.sender, address(this), amount);
emit Deposit(msg.sender, pid, amount, to);
}
/// @notice Withdraw LP tokens.
/// @param pid The index of the pool. See `poolInfo`.
/// @param amount LP token amount to withdraw.
/// @param to Receiver of the LP tokens.
/// @param ignoreNotifyThrow if error in secondary rewarder should be ignored
function withdrawLong(uint pid, uint128 amount, address to, bool ignoreNotifyThrow) public {
(PoolInfo memory pool, UserInfo storage user, uint accumulatedZip, uint pendingZip) = getUserDataUpdatePool(pid, msg.sender);
user.rewardDebt -= int128(uint128(uint(amount)*pool.accZipPerShare / ACC_ZIP_PRECISION));
user.amount -= amount;
IRewarder _rewarder = rewarder[pid];
if (address(_rewarder) != address(0)) {
try _rewarder.notify_onWithdrawal(pid, amount, user.amount, msg.sender, to) {}
catch (bytes memory reason) {
if(!ignoreNotifyThrow) {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
}
lpToken[pid].safeTransfer(to, amount);
emit Withdraw(msg.sender, pid, amount, to);
}
function harvestLong(uint pid, address to, bool ignoreNotifyThrow) public whenNotPaused returns (uint) {
(PoolInfo memory pool, UserInfo storage user, uint accumulatedZip, uint pendingZip) = getUserDataUpdatePool(pid, msg.sender);
user.rewardDebt = int128(uint128(accumulatedZip));
transferReward(pid, to, pendingZip, ignoreNotifyThrow);
emit Harvest(msg.sender, pid, pendingZip);
return pendingZip;
}
/// @notice Withdraw LP tokens and harvest proceeds for transaction sender.
/// @param pid The index of the pool. See `poolInfo`.
/// @param amount LP token amount to withdraw.
/// @param stakedTo Receiver of the LP tokens
/// @param rewardsTo Receiver of the zipToken rewards.
function withdrawAndHarvestLong(uint pid, uint128 amount, address stakedTo, address rewardsTo) public whenNotPaused returns (uint) {
(PoolInfo memory pool, UserInfo storage user, uint accumulatedZip, uint pendingZip) = getUserDataUpdatePool(pid, msg.sender);
user.rewardDebt = int128(int(accumulatedZip)-int(uint(amount)*pool.accZipPerShare / ACC_ZIP_PRECISION));
user.amount -= amount;
transferReward(pid, rewardsTo, pendingZip, false);
IRewarder _rewarder = rewarder[pid];
if (address(_rewarder) != address(0)) {
_rewarder.notify_onWithdrawal(pid, amount, user.amount, msg.sender, stakedTo);
}
lpToken[pid].safeTransfer(stakedTo, amount);
emit Withdraw(msg.sender, pid, amount, stakedTo);
emit Harvest(msg.sender, pid, pendingZip);
return pendingZip;
}
function transferReward(uint pid, address rewardsTo, uint rewardAmount, bool ignoreNotifyThrow) internal {
if(rewardAmount != 0) {
totalPaidRewards += rewardAmount;
zipToken.safeTransfer(rewardsTo, rewardAmount);
}
IRewarder _rewarder = rewarder[pid];
if (address(_rewarder) != address(0)) {
try _rewarder.notify_onHarvest(pid, rewardAmount, msg.sender, rewardsTo) {}
catch (bytes memory reason) {
if(!ignoreNotifyThrow) {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
}
}
function getUserDataUpdatePool(uint pid, address who) internal returns (PoolInfo memory pool, UserInfo storage user, uint accumulatedZip, uint pendingZip) {
pool = updatePool(pid);
user = userInfo[pid][who];
accumulatedZip = uint(user.amount)*pool.accZipPerShare / ACC_ZIP_PRECISION;
pendingZip = uint(int(accumulatedZip)-int(user.rewardDebt));
}
/// @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(uint pid, address to) external returns (uint amount) {
UserInfo storage user = userInfo[pid][msg.sender];
amount = user.amount;
user.amount = 0;
user.rewardDebt = 0;
IRewarder _rewarder = rewarder[pid];
if (address(_rewarder) != address(0)) {
try _rewarder.notify_onWithdrawal(pid, amount, 0, msg.sender, to) {}
catch {}
}
// Note: transfer can fail or succeed if `amount` is zero.
lpToken[pid].safeTransfer(to, amount);
emit EmergencyWithdraw(msg.sender, pid, amount, to);
}
}
contract BaseZipRewardsWithOwnerFunctions is BaseZipRewards {
constructor(IERC20 _zipToken) BaseZipRewards(_zipToken) {}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// OWNER FUNCTIONS //
//////////////////////////////////////////////////////////////////////////////////////////////////////
// note: owner can't transfer users' deposits or block withdrawals
//before calling set, add, setZipPerSecond all non-zero alloc pools MUST be updated in the same second
/// @notice Add a new LP to the pool. Can only be called by the owner.
/// @param allocPoint AP of the new pool.
/// @param _lpToken Address of the LP ERC-20 token.
/// @param _rewarder Address of the rewarder delegate.
function add(uint allocPoint, IERC20 _lpToken, IRewarder _rewarder) external onlyOwner {
require(addedTokens[address(_lpToken)] == false, "Token already added");
totalAllocPoint += allocPoint;
lpToken.push(_lpToken);
rewarder.push(_rewarder);
poolInfo.push(PoolInfo({
allocPoint: uint64(allocPoint),
lastRewardTime: uint64(block.timestamp),
accZipPerShare: 0
}));
addedTokens[address(_lpToken)] = true;
emit LogPoolAddition(lpToken.length-1, allocPoint, _lpToken, _rewarder);
}
/// @notice Update the given pool's zipToken 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.
/// @param _rewarder Address of the rewarder delegate.
/// @param overwrite True if _rewarder should be `set`. Otherwise `_rewarder` is ignored.
function set(uint _pid, uint _allocPoint, IRewarder _rewarder, bool overwrite) external onlyOwner {
totalAllocPoint = totalAllocPoint-poolInfo[_pid].allocPoint+_allocPoint;
poolInfo[_pid].allocPoint = uint64(_allocPoint);
if (overwrite) { rewarder[_pid] = _rewarder; }
emit LogSetPool(_pid, _allocPoint, overwrite ? _rewarder : rewarder[_pid], overwrite);
}
uint64 public totalAccumulatedRewardsLastSetTimestamp;
uint public totalAccumulatedZipRewards;
/// @notice Sets the zipToken per second to be distributed. Can only be called by the owner.
/// @param newZipPerSecond The amount of zipToken to be distributed per second.
function setZipPerSecond(uint newZipPerSecond) external onlyOwner {
if(block.timestamp <= zipRewardsSpentTime) {
//contract didn't run out of rewards
totalAccumulatedZipRewards += zipPerSecond*(block.timestamp-uint(totalAccumulatedRewardsLastSetTimestamp));
}
else {
//contract has run out of rewards
if(totalAccumulatedRewardsLastSetTimestamp < zipRewardsSpentTime) {
totalAccumulatedZipRewards += zipPerSecond*uint(zipRewardsSpentTime-totalAccumulatedRewardsLastSetTimestamp);
}
}
uint unclaimedZip = totalAccumulatedZipRewards-totalPaidRewards;
uint zipForNewRewards = zipToken.balanceOf(address(this))-unclaimedZip;
uint secondsRewardsCanLast = zipForNewRewards/newZipPerSecond;
zipRewardsSpentTime = uint64(block.timestamp+zipForNewRewards/newZipPerSecond);
zipPerSecond = newZipPerSecond;
totalAccumulatedRewardsLastSetTimestamp = uint64(block.timestamp);
emit LogZipPerSecond(newZipPerSecond);
}
/*
failsafe functions can be used to fix an incorrect state that may arise from calling set/add/setZipPerSecond by the owner
without calling updatePool() on pools with non-zero alloc first.
Unfortunately, gas limit considerations make it impossible to enforce directly.
*/
function failsafe_setRewardParams
(uint newZipPerSecond, bool setNewZipPerSecond,
uint64 newZipRewardsSpentTime, bool setZipRewardsSpentTime,
uint64 newTotalAccumulatedRewardsLastSetTimestamp, bool setTotalAccumulatedRewardsLastSetTimestamp,
uint newTotalAccumulatedZipRewards, bool setTotalAccumulatedZipRewards,
uint newTotalPaidRewards, bool setNewTotalPaidRewards,
uint newTotalAllocPoint, bool setTotalAllocPoint)
external onlyOwner {
if(setNewZipPerSecond) {
zipPerSecond = newZipPerSecond;
}
if(setZipRewardsSpentTime) {
zipRewardsSpentTime = newZipRewardsSpentTime;
}
if(setTotalAccumulatedRewardsLastSetTimestamp) {
totalAccumulatedRewardsLastSetTimestamp = newTotalAccumulatedRewardsLastSetTimestamp;
}
if(setTotalAccumulatedZipRewards) {
totalAccumulatedZipRewards = newTotalAccumulatedZipRewards;
}
if(setNewTotalPaidRewards) {
totalPaidRewards = newTotalPaidRewards;
}
if(setTotalAllocPoint) {
totalAllocPoint = newTotalAllocPoint;
}
}
function failsafe_setPoolParams(uint pid, PoolInfo calldata newPoolInfo) external onlyOwner {
poolInfo[pid] = newPoolInfo;
}
function failsafe_setUserRewardDebt(uint pid, address who, int128 rewardDebt) external onlyOwner {
UserInfo storage user = userInfo[pid][who];
user.rewardDebt = rewardDebt;
}
function ownerWithdrawRewardToken(address recipient, uint amount) external onlyOwner returns (uint) {
if(amount == 0) {
amount = zipToken.balanceOf(address(this));
}
require(zipToken.transfer(recipient, amount));
return amount;
}
function ownerPauseDepositsAndHarvests() external onlyOwner {
_pause();
}
function ownerUnpauseDepositsAndHarvests() external onlyOwner {
_unpause();
}
}
contract ZipRewards is BaseZipRewardsWithOwnerFunctions {
constructor(IERC20 _zipToken) BaseZipRewardsWithOwnerFunctions(_zipToken) {}
function depositNotify(uint pid, uint128 amount, address to, IDepositNotifiable notifyAddress, bytes calldata data) external {
deposit(pid, amount, to);
notifyAddress.notify_onDeposit(amount, data);
}
function depositShort(uint pid, uint128 amount) external {
deposit(pid, amount, msg.sender);
}
function depositWithPermit(uint pid, uint128 amount, address to, uint deadline, uint8 v, bytes32 r, bytes32 s) public {
lpToken[pid].permit(msg.sender, address(this), amount, deadline, v, r, s);
deposit(pid, amount, to);
}
function depositWithPermitShort(uint pid, uint128 amount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
depositWithPermit(pid, amount, msg.sender, deadline, v, r, s);
}
//can be used to zap out of LP tokens with a helper contract
function withdrawNotify(uint pid, uint128 amount, address to, bytes calldata data) external {
withdrawLong(pid, amount, to, false);
IWithdrawalNotifiable(to).notify_onWithdrawal(amount, data);
}
function withdraw(uint pid, uint128 amount, address to) external {
withdrawLong(pid, amount, to, false);
}
function withdrawShort(uint pid, uint128 amount) external {
withdrawLong(pid, amount, msg.sender, false);
}
function withdrawAll(uint pid) external {
UserInfo storage user = userInfo[pid][msg.sender];
withdrawLong(pid, user.amount, msg.sender, false);
}
/// @notice Harvest proceeds for transaction sender to `to`.
/// @param pid The index of the pool. See `poolInfo`.
/// @param to Receiver of zipToken rewards.
function harvest(uint pid, address to) external returns (uint) {
return harvestLong(pid, to, false);
}
function harvestShort(uint pid) external returns (uint) {
return harvestLong(pid, msg.sender, false);
}
function withdrawAndHarvestShort(uint pid, uint128 amount) external returns (uint) {
return withdrawAndHarvestLong(pid, amount, msg.sender, msg.sender);
}
function withdrawAllAndHarvest(uint pid) external returns (uint) {
UserInfo storage user = userInfo[pid][msg.sender];
return withdrawAndHarvestLong(pid, user.amount, msg.sender, msg.sender);
}
//can be used to zap out of LP tokens with a helper contract
function withdrawAndHarvestNotifyLong(uint pid, uint128 amount, address stakedTo, address rewardsTo, bytes calldata data) external returns (uint rewardAmount) {
rewardAmount = withdrawAndHarvestLong(pid, amount, stakedTo, rewardsTo);
IWithdrawalNotifiable(stakedTo).notify_onWithdrawal(amount, data);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
abstract contract Ownable {
address private _owner;
address private newOwner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(msg.sender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == msg.sender, "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address _newOwner) public virtual onlyOwner {
require(_newOwner != address(0), "Ownable: new owner is the zero address");
newOwner = _newOwner;
}
function acceptOwnership() public virtual {
require(msg.sender == newOwner, "Ownable: sender != newOwner");
_transferOwnership(msg.sender);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address _newOwner) internal virtual {
address oldOwner = _owner;
_owner = _newOwner;
emit OwnershipTransferred(oldOwner, _newOwner);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8;
import "IERC20.sol";
//from BoringSolidity - original forced solidity version 0.6.12
contract BoringBatchable {
/// @dev Helper function to extract a useful revert message from a failed call.
/// If the returned data is malformed or not correctly abi encoded then this call can fail itself.
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
}
/// @notice Allows batched call to self (this contract).
/// @param calls An array of inputs for each call.
/// @param revertOnFail If True then reverts after a failed call and stops doing further calls.
// 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
// 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 {
for (uint256 i = 0; i < calls.length; i++) {
(bool success, bytes memory result) = address(this).delegatecall(calls[i]);
if (!success && revertOnFail) {
revert(_getRevertMsg(result));
}
}
}
function batchRevertOnFailure(bytes[] calldata calls) external payable {
//copy-pasted to save on copying arguments from calldata to memory (in a public function)
for (uint256 i = 0; i < calls.length; i++) {
(bool success, bytes memory result) = address(this).delegatecall(calls[i]);
if (!success) {
revert(_getRevertMsg(result));
}
}
}
}
contract BoringBatchableWithPermit is BoringBatchable {
/// @notice Call wrapper that performs `ERC20.permit` on `token`.
/// Lookup `IERC20.permit`.
// 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
function batchPermitToken(
IERC20 token,
address from,
address to,
uint256 amount,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public {
token.permit(from, to, amount, deadline, v, r, s);
}
}pragma solidity >=0.5.0;
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds up instead
* of rounding down.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b - 1) / b can overflow on addition, so we distribute.
return a / b + (a % b == 0 ? 0 : 1);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)
pragma solidity ^0.8.0;
import "Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
require(!paused(), "Pausable: paused");
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
require(paused(), "Pausable: not paused");
_;
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
import "IERC20.sol";
// solhint-disable avoid-low-level-calls
library BoringERC20 {
bytes4 private constant SIG_SYMBOL = 0x95d89b41; // symbol()
bytes4 private constant SIG_NAME = 0x06fdde03; // name()
bytes4 private constant SIG_DECIMALS = 0x313ce567; // decimals()
bytes4 private constant SIG_BALANCE_OF = 0x70a08231; // balanceOf(address)
bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256)
bytes4 private constant SIG_TRANSFER_FROM = 0x23b872dd; // transferFrom(address,address,uint256)
function returnDataToString(bytes memory data) internal pure returns (string memory) {
unchecked {
if (data.length >= 64) {
return abi.decode(data, (string));
} else if (data.length == 32) {
uint8 i = 0;
while (i < 32 && data[i] != 0) {
i++;
}
bytes memory bytesArray = new bytes(i);
for (i = 0; i < 32 && data[i] != 0; i++) {
bytesArray[i] = data[i];
}
return string(bytesArray);
} else {
return "???";
}
}
}
/// @notice Provides a safe ERC20.symbol version which returns '???' as fallback string.
/// @param token The address of the ERC-20 token contract.
/// @return (string) Token symbol.
function safeSymbol(IERC20 token) internal view returns (string memory) {
(bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_SYMBOL));
return success ? returnDataToString(data) : "???";
}
/// @notice Provides a safe ERC20.name version which returns '???' as fallback string.
/// @param token The address of the ERC-20 token contract.
/// @return (string) Token name.
function safeName(IERC20 token) internal view returns (string memory) {
(bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_NAME));
return success ? returnDataToString(data) : "???";
}
/// @notice Provides a safe ERC20.decimals version which returns '18' as fallback value.
/// @param token The address of the ERC-20 token contract.
/// @return (uint8) Token decimals.
function safeDecimals(IERC20 token) internal view returns (uint8) {
(bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_DECIMALS));
return success && data.length == 32 ? abi.decode(data, (uint8)) : 18;
}
/// @notice Provides a gas-optimized balance check to avoid a redundant extcodesize check in addition to the returndatasize check.
/// @param token The address of the ERC-20 token.
/// @param to The address of the user to check.
/// @return amount The token amount.
function safeBalanceOf(IERC20 token, address to) internal view returns (uint256 amount) {
(bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(SIG_BALANCE_OF, to));
require(success && data.length >= 32, "BoringERC20: BalanceOf failed");
amount = abi.decode(data, (uint256));
}
/// @notice Provides a safe ERC20.transfer version for different ERC-20 implementations.
/// Reverts on a failed transfer.
/// @param token The address of the ERC-20 token.
/// @param to Transfer tokens to.
/// @param amount The token amount.
function safeTransfer(
IERC20 token,
address to,
uint256 amount
) internal {
(bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER, to, amount));
require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed");
}
/// @notice Provides a safe ERC20.transferFrom version for different ERC-20 implementations.
/// Reverts on a failed transfer.
/// @param token The address of the ERC-20 token.
/// @param from Transfer tokens from.
/// @param to Transfer tokens to.
/// @param amount The token amount.
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 amount
) internal {
(bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(SIG_TRANSFER_FROM, from, to, amount));
require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed");
}
}{
"evmVersion": "istanbul",
"optimizer": {
"enabled": true,
"runs": 500
},
"libraries": {
"ZipRewards.sol": {}
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"_zipToken","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"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"name":"LogPoolAddition","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 IRewarder","name":"rewarder","type":"address"},{"indexed":false,"internalType":"bool","name":"overwrite","type":"bool"}],"name":"LogSetPool","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":"accZipPerShare","type":"uint256"}],"name":"LogUpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"zipPerSecond","type":"uint256"}],"name":"LogZipPerSecond","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","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":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"calls","type":"bytes[]"},{"internalType":"bool","name":"revertOnFail","type":"bool"}],"name":"batch","outputs":[],"stateMutability":"payable","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":"batchPermitToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"calls","type":"bytes[]"}],"name":"batchRevertOnFailure","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IDepositNotifiable","name":"notifyAddress","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"depositNotify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"}],"name":"depositShort","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"to","type":"address"},{"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":"depositWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"},{"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":"depositWithPermitShort","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdraw","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"components":[{"internalType":"uint256","name":"accZipPerShare","type":"uint256"},{"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"}],"internalType":"struct BaseZipRewards.PoolInfo","name":"newPoolInfo","type":"tuple"}],"name":"failsafe_setPoolParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newZipPerSecond","type":"uint256"},{"internalType":"bool","name":"setNewZipPerSecond","type":"bool"},{"internalType":"uint64","name":"newZipRewardsSpentTime","type":"uint64"},{"internalType":"bool","name":"setZipRewardsSpentTime","type":"bool"},{"internalType":"uint64","name":"newTotalAccumulatedRewardsLastSetTimestamp","type":"uint64"},{"internalType":"bool","name":"setTotalAccumulatedRewardsLastSetTimestamp","type":"bool"},{"internalType":"uint256","name":"newTotalAccumulatedZipRewards","type":"uint256"},{"internalType":"bool","name":"setTotalAccumulatedZipRewards","type":"bool"},{"internalType":"uint256","name":"newTotalPaidRewards","type":"uint256"},{"internalType":"bool","name":"setNewTotalPaidRewards","type":"bool"},{"internalType":"uint256","name":"newTotalAllocPoint","type":"uint256"},{"internalType":"bool","name":"setTotalAllocPoint","type":"bool"}],"name":"failsafe_setRewardParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"who","type":"address"},{"internalType":"int128","name":"rewardDebt","type":"int128"}],"name":"failsafe_setUserRewardDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"harvest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"ignoreNotifyThrow","type":"bool"}],"name":"harvestLong","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"harvestShort","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"ownerPauseDepositsAndHarvests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ownerUnpauseDepositsAndHarvests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownerWithdrawRewardToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"accZipPerShare","type":"uint256"},{"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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewarder","outputs":[{"internalType":"contract IRewarder","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newZipPerSecond","type":"uint256"}],"name":"setZipPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAccumulatedRewardsLastSetTimestamp","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAccumulatedZipRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPaidRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"updatePool","outputs":[{"components":[{"internalType":"uint256","name":"accZipPerShare","type":"uint256"},{"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"}],"internalType":"struct BaseZipRewards.PoolInfo","name":"pool","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"int128","name":"rewardDebt","type":"int128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"withdrawAllAndHarvest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"stakedTo","type":"address"},{"internalType":"address","name":"rewardsTo","type":"address"}],"name":"withdrawAndHarvestLong","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"stakedTo","type":"address"},{"internalType":"address","name":"rewardsTo","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"withdrawAndHarvestNotifyLong","outputs":[{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"}],"name":"withdrawAndHarvestShort","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"ignoreNotifyThrow","type":"bool"}],"name":"withdrawLong","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"withdrawNotify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint128","name":"amount","type":"uint128"}],"name":"withdrawShort","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zipPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zipRewardsSpentTime","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zipToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60a06040523480156200001157600080fd5b5060405162003de438038062003de48339810160408190526200003491620000b3565b8080620000413362000063565b6001805460ff60a01b191690556001600160a01b031660805250620000e59050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620000c657600080fd5b81516001600160a01b0381168114620000de57600080fd5b9392505050565b608051613cc76200011d6000396000818161077a015281816118fa01528181611996015281816129b10152612fbb0152613cc76000f3fe6080604052600436106103345760003560e01c8063771df2eb116101b05780639fa8511c116100ec578063d2423b5111610095578063efab81101161006f578063efab8110146109bc578063f2fde38b146109dc578063f345b9ed146109fc578063fa50ce1914610a1c57600080fd5b8063d2423b5114610973578063e007237214610986578063e4438ce7146109a657600080fd5b8063aed7cac2116100c6578063aed7cac214610913578063b4ce511514610933578063c346253d1461095357600080fd5b80639fa8511c146108be578063ab7de098146108de578063acbe766c146108fe57600080fd5b80638529ba011161015957806393f1a40b1161013357806393f1a40b146107fa578063958e2d311461086957806398969e82146108895780639eb80667146108a957600080fd5b80638529ba011461079c57806388bba42f146107bc5780638da5cb5b146107dc57600080fd5b806379ba50971161018a57806379ba50971461072357806379d12ffb146107385780637f37b4101461076857600080fd5b8063771df2eb146106ab57806378c5a65f146106cb57806378ed5d1f146106eb57600080fd5b80632fadcb681161027f57806357a5b58c11610228578063660c1ab011610202578063660c1ab014610643578063681e1144146106565780636b90191a14610676578063715018a61461069657600080fd5b806357a5b58c146105d15780635c975abb146105f15780635ce31d0b1461061c57600080fd5b80634491632411610259578063449163241461055257806351eb05a61461056857806355f6b7d3146105bb57600080fd5b80632fadcb68146104da578063348d748f146104fa578063425d1c991461051a57600080fd5b806318fccc76116102e15780632dd20051116102bb5780632dd200511461047a5780632df978061461049a5780632f940c70146104ba57600080fd5b806318fccc761461041a5780631e21fe4e1461043a5780631e708c8a1461045a57600080fd5b80630e06346e116103125780630e06346e1461039f5780631526fe27146103bf57806317caf6f11461040457600080fd5b806302bc19ab14610339578063081e3eda1461035b5780630892c74f1461037f575b600080fd5b34801561034557600080fd5b5061035961035436600461310b565b610a3c565b005b34801561036757600080fd5b506002545b6040519081526020015b60405180910390f35b34801561038b57600080fd5b5061036c61039a36600461315c565b610c78565b3480156103ab57600080fd5b506103596103ba366004613175565b610cb4565b3480156103cb57600080fd5b506103df6103da36600461315c565b610cc3565b604080519384526001600160401b039283166020850152911690820152606001610376565b34801561041057600080fd5b5061036c60075481565b34801561042657600080fd5b5061036c6104353660046131a1565b610d05565b34801561044657600080fd5b50610359610455366004613219565b610d13565b34801561046657600080fd5b50610359610475366004613289565b610d89565b34801561048657600080fd5b506103596104953660046132c9565b611007565b3480156104a657600080fd5b5061036c6104b5366004613175565b61107c565b3480156104c657600080fd5b5061036c6104d53660046131a1565b61108a565b3480156104e657600080fd5b506103596104f536600461335c565b6111c5565b34801561050657600080fd5b50610359610515366004613175565b611257565b34801561052657600080fd5b50600a5461053a906001600160401b031681565b6040516001600160401b039091168152602001610376565b34801561055e57600080fd5b5061036c60085481565b34801561057457600080fd5b5061058861058336600461315c565b611264565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001610376565b3480156105c757600080fd5b5061036c60095481565b3480156105dd57600080fd5b506103596105ec366004613421565b611539565b3480156105fd57600080fd5b50600154600160a01b900460ff165b6040519015158152602001610376565b34801561062857600080fd5b50600a5461053a90600160401b90046001600160401b031681565b610359610651366004613421565b611581565b34801561066257600080fd5b50610359610671366004613462565b611648565b34801561068257600080fd5b5061035961069136600461349a565b6116cd565b3480156106a257600080fd5b5061035961178d565b3480156106b757600080fd5b506103596106c6366004613506565b6117f0565b3480156106d757600080fd5b5061036c6106e6366004613544565b611887565b3480156106f757600080fd5b5061070b61070636600461315c565b611a12565b6040516001600160a01b039091168152602001610376565b34801561072f57600080fd5b50610359611a3c565b34801561074457600080fd5b5061060c610753366004613570565b60066020526000908152604090205460ff1681565b34801561077457600080fd5b5061070b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107a857600080fd5b5061036c6107b73660046132c9565b611a9f565b3480156107c857600080fd5b506103596107d736600461358d565b611b1c565b3480156107e857600080fd5b506000546001600160a01b031661070b565b34801561080657600080fd5b506108476108153660046131a1565b60056020908152600092835260408084209091529082529020546001600160801b03811690600160801b9004600f0b82565b604080516001600160801b039093168352600f9190910b602083015201610376565b34801561087557600080fd5b5061035961088436600461315c565b611ce2565b34801561089557600080fd5b5061036c6108a43660046131a1565b611d14565b3480156108b557600080fd5b50610359611f5d565b3480156108ca57600080fd5b506103596108d9366004613289565b611fbc565b3480156108ea57600080fd5b506103596108f93660046135bc565b611fc9565b34801561090a57600080fd5b50610359612233565b34801561091f57600080fd5b5061035961092e3660046135e3565b612292565b34801561093f57600080fd5b5061036c61094e36600461363b565b6122a9565b34801561095f57600080fd5b5061070b61096e36600461315c565b612379565b610359610981366004613672565b612389565b34801561099257600080fd5b506103596109a13660046136d2565b61243d565b3480156109b257600080fd5b5061036c600b5481565b3480156109c857600080fd5b5061036c6109d736600461379e565b612522565b3480156109e857600080fd5b506103596109f7366004613570565b612784565b348015610a0857600080fd5b50610359610a1736600461315c565b612862565b348015610a2857600080fd5b5061036c610a3736600461315c565b612ac6565b600080600080610a4c8833612ada565b93509350935093506001600160701b038460000151886001600160801b0316610a7591906137fa565b610a7f9190613819565b83548490601090610a9b908490600160801b9004600f0b61383b565b82546101009290920a6001600160801b0381810219909316918316021790915584548992508591600091610ad19185911661388b565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550600060048981548110610b0a57610b0a6138b3565b6000918252602090912001546001600160a01b031690508015610be5578354604051633164b15160e11b8152600481018b90526001600160801b03808b16602483015290911660448201523360648201526001600160a01b0388811660848301528216906362c962a29060a401600060405180830381600087803b158015610b9157600080fd5b505af1925050508015610ba2575060015b610be5573d808015610bd0576040519150601f19603f3d011682016040523d82523d6000602084013e610bd5565b606091505b5086610be357805181602001fd5b505b610c2287896001600160801b031660038c81548110610c0657610c066138b3565b6000918252602090912001546001600160a01b03169190612b78565b6040516001600160801b03891681526001600160a01b038816908a9033907f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21329060200160405180910390a4505050505050505050565b6000818152600560209081526040808320338085529252822080549091610cad9185916001600160801b039091169080612522565b9392505050565b610cbf828233610d89565b5050565b60028181548110610cd357600080fd5b6000918252602090912060029091020180546001909101549091506001600160401b0380821691600160401b90041683565b6000610cad838360006122a9565b610d208585856000610a3c565b6040516398ee833d60e01b81526001600160a01b038416906398ee833d90610d50908790869086906004016138c9565b600060405180830381600087803b158015610d6a57600080fd5b505af1158015610d7e573d6000803e3d6000fd5b505050505050505050565b600154600160a01b900460ff1615610ddb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b6000610de684611264565b60008581526005602090815260408083206001600160a01b0387168452909152812080549293509185918391610e269084906001600160801b0316613908565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555060006001600160701b038360000151866001600160801b0316610e6d91906137fa565b610e779190613819565b825490915081908390601090610e98908490600160801b9004600f0b613933565b92506101000a8154816001600160801b030219169083600f0b6001600160801b03160217905550600060048781548110610ed457610ed46138b3565b6000918252602090912001546001600160a01b031690508015610f74578254604051635df3856760e11b8152600481018990526001600160801b03808916602483015290911660448201523360648201526001600160a01b03868116608483015282169063bbe70ace9060a401600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b505050505b610fb33330886001600160801b031660038b81548110610f9657610f966138b3565b6000918252602090912001546001600160a01b0316929190612c93565b6040516001600160801b03871681526001600160a01b03861690889033907f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b479060200160405180910390a450505050505050565b611012868686610d89565b604051632c6616f960e21b81526001600160a01b0384169063b1985be490611042908890869086906004016138c9565b600060405180830381600087803b15801561105c57600080fd5b505af1158015611070573d6000803e3d6000fd5b50505050505050505050565b6000610cad83833333612522565b600082815260056020908152604080832033845290915281208054828255600480546001600160801b039092169391869081106110c9576110c96138b3565b6000918252602090912001546001600160a01b03169050801561115757604051633164b15160e11b81526004810186905260248101849052600060448201523360648201526001600160a01b0385811660848301528216906362c962a29060a401600060405180830381600087803b15801561114457600080fd5b505af1925050508015611155575060015b505b61116f848460038881548110610c0657610c066138b3565b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b866040516111b591815260200190565b60405180910390a4505092915050565b60405163d505accf60e01b81526001600160a01b0388811660048301528781166024830152604482018790526064820186905260ff8516608483015260a4820184905260c4820183905289169063d505accf9060e401600060405180830381600087803b15801561123557600080fd5b505af1158015611249573d6000803e3d6000fd5b505050505050505050505050565b610cbf8282336000610a3c565b604080516060810182526000808252602082018190529181019190915260028281548110611294576112946138b3565b600091825260209182902060408051606081018252600290930290910180548352600101546001600160401b03808216948401859052600160401b90910416908201529150421115611534576000600383815481106112f5576112f56138b3565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136a9190613982565b905060008111801561137e57506000600754115b1561146a57600a546000906001600160401b03164211156113e757600a5460208401516001600160401b03918216911610156113df576020830151600a546113cf91906001600160401b031661399b565b6001600160401b03169050611402565b506000611402565b60208301516113ff906001600160401b0316426139bb565b90505b600060075484604001516001600160401b03166008548461142391906137fa565b61142d91906137fa565b6114379190613819565b90508261144b6001600160701b03836137fa565b6114559190613819565b845185906114649083906139d2565b90525050505b6001600160401b03421660208301526002805483919085908110611490576114906138b3565b600091825260209182902083516002929092020190815582820151600190910180546040948501516001600160401b03908116600160401b026fffffffffffffffffffffffffffffffff199092169381169390931717905584820151855184519190921681529182018490529181019190915283907f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad3539060600160405180910390a2505b919050565b8060005b8181101561157b57600061156885858481811061155c5761155c6138b3565b90506020020135611264565b506115749050816139ea565b905061153d565b50505050565b60005b8181101561164357600080308585858181106115a2576115a26138b3565b90506020028101906115b49190613a05565b6040516115c2929190613a4b565b600060405180830381855af49150503d80600081146115fd576040519150601f19603f3d011682016040523d82523d6000602084013e611602565b606091505b50915091508161162e5761161581612daf565b60405162461bcd60e51b8152600401610dd29190613a87565b5050808061163b906139ea565b915050611584565b505050565b3361165b6000546001600160a01b031690565b6001600160a01b03161461169f5760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b80600283815481106116b3576116b36138b3565b9060005260206000209060020201818161157b9190613aba565b600387815481106116e0576116e06138b3565b60009182526020909120015460405163d505accf60e01b81523360048201523060248201526001600160801b03881660448201526064810186905260ff8516608482015260a4810184905260c481018390526001600160a01b039091169063d505accf9060e401600060405180830381600087803b15801561176157600080fd5b505af1158015611775573d6000803e3d6000fd5b50505050611784878787610d89565b50505050505050565b336117a06000546001600160a01b031690565b6001600160a01b0316146117e45760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b6117ee6000612e0e565b565b336118036000546001600160a01b031690565b6001600160a01b0316146118475760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b60009283526005602090815260408085206001600160a01b039094168552929052912080546001600160801b03928316600160801b029216919091179055565b60003361189c6000546001600160a01b031690565b6001600160a01b0316146118e05760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b81611970576040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196d9190613982565b91505b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156119df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a039190613b29565b611a0c57600080fd5b50919050565b60038181548110611a2257600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03163314611a965760405162461bcd60e51b815260206004820152601b60248201527f4f776e61626c653a2073656e64657220213d206e65774f776e657200000000006044820152606401610dd2565b6117ee33612e0e565b6000611aad87878787612522565b6040516398ee833d60e01b81529091506001600160a01b038616906398ee833d90611ae0908990879087906004016138c9565b600060405180830381600087803b158015611afa57600080fd5b505af1158015611b0e573d6000803e3d6000fd5b505050509695505050505050565b33611b2f6000546001600160a01b031690565b6001600160a01b031614611b735760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b8260028581548110611b8757611b876138b3565b6000918252602090912060029091020160010154600754611bb891600160401b90046001600160401b0316906139bb565b611bc291906139d2565b6007819055508260028581548110611bdc57611bdc6138b3565b906000526020600020906002020160010160086101000a8154816001600160401b0302191690836001600160401b031602179055508015611c5a578160048581548110611c2b57611c2b6138b3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80611c8c5760048481548110611c7257611c726138b3565b6000918252602090912001546001600160a01b0316611c8e565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e18658584604051611cd49291909182521515602082015260400190565b60405180910390a350505050565b6000818152600560209081526040808320338085529252822080549092610cbf9285926001600160801b031691610a3c565b60008060028481548110611d2a57611d2a6138b3565b6000918252602080832060408051606081018252600290940290910180548452600101546001600160401b0380821685850152600160401b9091041683820152878452600582528084206001600160a01b038816855290915282208151600380549395509193909290919088908110611da557611da56138b3565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a9190613982565b9050600081118015611e2e57506000600754115b15611f1457600a546000906001600160401b0316421115611e9757600a5460208601516001600160401b0391821691161015611e8f576020850151600a54611e7f91906001600160401b031661399b565b6001600160401b03169050611eb2565b506000611eb2565b6020850151611eaf906001600160401b0316426139bb565b90505b600060075486604001516001600160401b031660085484611ed391906137fa565b611edd91906137fa565b611ee79190613819565b905082611efb6001600160701b03836137fa565b611f059190613819565b611f0f90856139d2565b935050505b8254600160801b8104600f0b906001600160701b0390611f3e9085906001600160801b03166137fa565b611f489190613819565b611f529190613b46565b979650505050505050565b33611f706000546001600160a01b031690565b6001600160a01b031614611fb45760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b6117ee612e5e565b6116438383836000610a3c565b33611fdc6000546001600160a01b031690565b6001600160a01b0316146120205760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b6001600160a01b03821660009081526006602052604090205460ff16156120895760405162461bcd60e51b815260206004820152601360248201527f546f6b656e20616c7265616479206164646564000000000000000000000000006044820152606401610dd2565b826007600082825461209b91906139d2565b909155505060038054600181810183557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b038087166001600160a01b03199283168117909355600480548086019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180549187169190921681179091556040805160608101825260008082526001600160401b0342811660208481019182528c831685870190815260028054808c018255818752965196027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81019690965591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf909501805492518416600160401b026fffffffffffffffffffffffffffffffff199093169590931694909417179055848152600690915220805460ff191684179055925490916121fb916139bb565b6040518681527f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e59060200160405180910390a4505050565b336122466000546001600160a01b031690565b6001600160a01b03161461228a5760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b6117ee612f03565b6122a1868633878787876116cd565b505050505050565b600154600090600160a01b900460ff16156122f95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610dd2565b6000806000806123098833612ada565b82546001600160801b03808416600160801b0291161783559296509094509250905061233788888389612f90565b604051818152889033907f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae06609249549060200160405180910390a3979650505050505050565b60048181548110611a2257600080fd5b60005b8281101561157b57600080308686858181106123aa576123aa6138b3565b90506020028101906123bc9190613a05565b6040516123ca929190613a4b565b600060405180830381855af49150503d8060008114612405576040519150601f19603f3d011682016040523d82523d6000602084013e61240a565b606091505b50915091508115801561241a5750835b156124285761161581612daf565b50508080612435906139ea565b91505061238c565b336124506000546001600160a01b031690565b6001600160a01b0316146124945760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b8a156124a05760088c90555b88156124c357600a805467ffffffffffffffff19166001600160401b038c161790555b86156124f457600a80546fffffffffffffffff00000000000000001916600160401b6001600160401b038b16021790555b841561250057600b8690555b821561250c5760098490555b8015611249575060075550505050505050505050565b600154600090600160a01b900460ff16156125725760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610dd2565b6000806000806125828933612ada565b93509350935093506001600160701b038460000151896001600160801b03166125ab91906137fa565b6125b59190613819565b6125bf9083613b46565b83546001600160801b03918216600160801b0290821681811786558a9286926000926125ee928692161761388b565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555061261f8987836000612f90565b600060048a81548110612634576126346138b3565b6000918252602090912001546001600160a01b0316905080156126d4578354604051633164b15160e11b8152600481018c90526001600160801b03808c16602483015290911660448201523360648201526001600160a01b0389811660848301528216906362c962a29060a401600060405180830381600087803b1580156126bb57600080fd5b505af11580156126cf573d6000803e3d6000fd5b505050505b6126f5888a6001600160801b031660038d81548110610c0657610c066138b3565b6040516001600160801b038a1681526001600160a01b038916908b9033907f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21329060200160405180910390a46040518281528a9033907f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae06609249549060200160405180910390a35098975050505050505050565b336127976000546001600160a01b031690565b6001600160a01b0316146127db5760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b6001600160a01b0381166128405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dd2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336128756000546001600160a01b031690565b6001600160a01b0316146128b95760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b600a546001600160401b0316421161291157600a546128e890600160401b90046001600160401b0316426139bb565b6008546128f591906137fa565b600b600082825461290691906139d2565b9091555061297a9050565b600a546001600160401b03808216600160401b90920416101561297a57600a5461294d906001600160401b03600160401b82048116911661399b565b6001600160401b031660085461296391906137fa565b600b600082825461297491906139d2565b90915550505b6000600954600b5461298c91906139bb565b6040516370a0823160e01b815230600482015290915060009082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156129f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1c9190613982565b612a2691906139bb565b90506000612a348483613819565b9050612a408483613819565b612a4a90426139d2565b600a80546008879055426001600160401b03908116600160401b026fffffffffffffffffffffffffffffffff199092169316929092179190911790556040517f95cfd9f2f74d54d4a4a8089f6253fb10b4fee5b577229663c42034159469988890612ab89086815260200190565b60405180910390a150505050565b6000612ad4823360006122a9565b92915050565b60408051606081018252600080825260208201819052918101829052908080612b0286611264565b60008781526005602090815260408083206001600160a01b038a1684529091529020815181549296509094506001600160701b0391612b4a91906001600160801b03166137fa565b612b549190613819565b8354909250612b6d90600160801b9004600f0b83613b46565b905092959194509250565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612bd49190613b9e565b6000604051808303816000865af19150503d8060008114612c11576040519150601f19603f3d011682016040523d82523d6000602084013e612c16565b606091505b5091509150818015612c40575080511580612c40575080806020019051810190612c409190613b29565b612c8c5760405162461bcd60e51b815260206004820152601c60248201527f426f72696e6745524332303a205472616e73666572206661696c6564000000006044820152606401610dd2565b5050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612cf79190613b9e565b6000604051808303816000865af19150503d8060008114612d34576040519150601f19603f3d011682016040523d82523d6000602084013e612d39565b606091505b5091509150818015612d63575080511580612d63575080806020019051810190612d639190613b29565b6122a15760405162461bcd60e51b815260206004820181905260248201527f426f72696e6745524332303a205472616e7366657246726f6d206661696c65646044820152606401610dd2565b6060604482511015612df457505060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000602082015290565b60048201915081806020019051810190612ad49190613bd0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600154600160a01b900460ff1615612eab5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610dd2565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612ee63390565b6040516001600160a01b03909116815260200160405180910390a1565b600154600160a01b900460ff16612f5c5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610dd2565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612ee6565b8115612fe2578160096000828254612fa891906139d2565b90915550612fe290506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168484612b78565b600060048581548110612ff757612ff76138b3565b6000918252602090912001546001600160a01b031690508015612c8c57604051634364cab560e11b815260048101869052602481018490523360448201526001600160a01b0385811660648301528216906386c9956a90608401600060405180830381600087803b15801561306b57600080fd5b505af192505050801561307c575060015b612c8c573d8080156130aa576040519150601f19603f3d011682016040523d82523d6000602084013e6130af565b606091505b50826130bd57805181602001fd5b50612c8c565b80356001600160801b038116811461153457600080fd5b6001600160a01b03811681146130ef57600080fd5b50565b80151581146130ef57600080fd5b8035611534816130f2565b6000806000806080858703121561312157600080fd5b84359350613131602086016130c3565b92506040850135613141816130da565b91506060850135613151816130f2565b939692955090935050565b60006020828403121561316e57600080fd5b5035919050565b6000806040838503121561318857600080fd5b82359150613198602084016130c3565b90509250929050565b600080604083850312156131b457600080fd5b8235915060208301356131c6816130da565b809150509250929050565b60008083601f8401126131e357600080fd5b5081356001600160401b038111156131fa57600080fd5b60208301915083602082850101111561321257600080fd5b9250929050565b60008060008060006080868803121561323157600080fd5b85359450613241602087016130c3565b93506040860135613251816130da565b925060608601356001600160401b0381111561326c57600080fd5b613278888289016131d1565b969995985093965092949392505050565b60008060006060848603121561329e57600080fd5b833592506132ae602085016130c3565b915060408401356132be816130da565b809150509250925092565b60008060008060008060a087890312156132e257600080fd5b863595506132f2602088016130c3565b94506040870135613302816130da565b93506060870135613312816130da565b925060808701356001600160401b0381111561332d57600080fd5b61333989828a016131d1565b979a9699509497509295939492505050565b803560ff8116811461153457600080fd5b600080600080600080600080610100898b03121561337957600080fd5b8835613384816130da565b97506020890135613394816130da565b965060408901356133a4816130da565b955060608901359450608089013593506133c060a08a0161334b565b925060c0890135915060e089013590509295985092959890939650565b60008083601f8401126133ef57600080fd5b5081356001600160401b0381111561340657600080fd5b6020830191508360208260051b850101111561321257600080fd5b6000806020838503121561343457600080fd5b82356001600160401b0381111561344a57600080fd5b613456858286016133dd565b90969095509350505050565b600080828403608081121561347657600080fd5b833592506060601f198201121561348c57600080fd5b506020830190509250929050565b600080600080600080600060e0888a0312156134b557600080fd5b873596506134c5602089016130c3565b955060408801356134d5816130da565b9450606088013593506134ea6080890161334b565b925060a0880135915060c0880135905092959891949750929550565b60008060006060848603121561351b57600080fd5b83359250602084013561352d816130da565b91506040840135600f81900b81146132be57600080fd5b6000806040838503121561355757600080fd5b8235613562816130da565b946020939093013593505050565b60006020828403121561358257600080fd5b8135610cad816130da565b600080600080608085870312156135a357600080fd5b84359350602085013592506040850135613141816130da565b6000806000606084860312156135d157600080fd5b8335925060208401356132ae816130da565b60008060008060008060c087890312156135fc57600080fd5b8635955061360c602088016130c3565b9450604087013593506136216060880161334b565b92506080870135915060a087013590509295509295509295565b60008060006060848603121561365057600080fd5b833592506020840135613662816130da565b915060408401356132be816130f2565b60008060006040848603121561368757600080fd5b83356001600160401b0381111561369d57600080fd5b6136a9868287016133dd565b90945092505060208401356132be816130f2565b6001600160401b03811681146130ef57600080fd5b6000806000806000806000806000806000806101808d8f0312156136f557600080fd5b8c359b5060208d0135613707816130f2565b9a5060408d0135613717816136bd565b995060608d0135613727816130f2565b985060808d0135613737816136bd565b975060a08d0135613747816130f2565b965060c08d0135955060e08d013561375e816130f2565b94506101008d013593506137756101208e01613100565b92506101408d0135915061378c6101608e01613100565b90509295989b509295989b509295989b565b600080600080608085870312156137b457600080fd5b843593506137c4602086016130c3565b925060408501356137d4816130da565b91506060850135613151816130da565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613814576138146137e4565b500290565b60008261383657634e487b7160e01b600052601260045260246000fd5b500490565b600081600f0b83600f0b600081128160016001607f1b031901831281151615613866576138666137e4565b8160016001607f1b03018313811615613881576138816137e4565b5090039392505050565b60006001600160801b03838116908316818110156138ab576138ab6137e4565b039392505050565b634e487b7160e01b600052603260045260246000fd5b6001600160801b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006001600160801b0380831681851680830382111561392a5761392a6137e4565b01949350505050565b600081600f0b83600f0b600082128260016001607f1b030382138115161561395d5761395d6137e4565b8260016001607f1b0319038212811615613979576139796137e4565b50019392505050565b60006020828403121561399457600080fd5b5051919050565b60006001600160401b03838116908316818110156138ab576138ab6137e4565b6000828210156139cd576139cd6137e4565b500390565b600082198211156139e5576139e56137e4565b500190565b60006000198214156139fe576139fe6137e4565b5060010190565b6000808335601e19843603018112613a1c57600080fd5b8301803591506001600160401b03821115613a3657600080fd5b60200191503681900382131561321257600080fd5b8183823760009101908152919050565b60005b83811015613a76578181015183820152602001613a5e565b8381111561157b5750506000910152565b6020815260008251806020840152613aa6816040850160208701613a5b565b601f01601f19169190910160400192915050565b81358155600181016020830135613ad0816136bd565b6001600160401b03811690508154816001600160401b031982161783556040850135613afb816136bd565b6fffffffffffffffff00000000000000008160401b16836001600160801b0319841617178455505050505050565b600060208284031215613b3b57600080fd5b8151610cad816130f2565b60008083128015600160ff1b850184121615613b6457613b646137e4565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615613b9857613b986137e4565b50500390565b60008251613bb0818460208701613a5b565b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613be257600080fd5b81516001600160401b0380821115613bf957600080fd5b818401915084601f830112613c0d57600080fd5b815181811115613c1f57613c1f613bba565b604051601f8201601f19908116603f01168101908382118183101715613c4757613c47613bba565b81604052828152876020848701011115613c6057600080fd5b611f52836020830160208801613a5b56fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220a03de4131a6d30808db82b276914915e0cdfdf70921726ce59ac5ee449423c1364736f6c634300080b0033000000000000000000000000fa436399d0458dbe8ab890c3441256e3e09022a8
Deployed Bytecode
0x6080604052600436106103345760003560e01c8063771df2eb116101b05780639fa8511c116100ec578063d2423b5111610095578063efab81101161006f578063efab8110146109bc578063f2fde38b146109dc578063f345b9ed146109fc578063fa50ce1914610a1c57600080fd5b8063d2423b5114610973578063e007237214610986578063e4438ce7146109a657600080fd5b8063aed7cac2116100c6578063aed7cac214610913578063b4ce511514610933578063c346253d1461095357600080fd5b80639fa8511c146108be578063ab7de098146108de578063acbe766c146108fe57600080fd5b80638529ba011161015957806393f1a40b1161013357806393f1a40b146107fa578063958e2d311461086957806398969e82146108895780639eb80667146108a957600080fd5b80638529ba011461079c57806388bba42f146107bc5780638da5cb5b146107dc57600080fd5b806379ba50971161018a57806379ba50971461072357806379d12ffb146107385780637f37b4101461076857600080fd5b8063771df2eb146106ab57806378c5a65f146106cb57806378ed5d1f146106eb57600080fd5b80632fadcb681161027f57806357a5b58c11610228578063660c1ab011610202578063660c1ab014610643578063681e1144146106565780636b90191a14610676578063715018a61461069657600080fd5b806357a5b58c146105d15780635c975abb146105f15780635ce31d0b1461061c57600080fd5b80634491632411610259578063449163241461055257806351eb05a61461056857806355f6b7d3146105bb57600080fd5b80632fadcb68146104da578063348d748f146104fa578063425d1c991461051a57600080fd5b806318fccc76116102e15780632dd20051116102bb5780632dd200511461047a5780632df978061461049a5780632f940c70146104ba57600080fd5b806318fccc761461041a5780631e21fe4e1461043a5780631e708c8a1461045a57600080fd5b80630e06346e116103125780630e06346e1461039f5780631526fe27146103bf57806317caf6f11461040457600080fd5b806302bc19ab14610339578063081e3eda1461035b5780630892c74f1461037f575b600080fd5b34801561034557600080fd5b5061035961035436600461310b565b610a3c565b005b34801561036757600080fd5b506002545b6040519081526020015b60405180910390f35b34801561038b57600080fd5b5061036c61039a36600461315c565b610c78565b3480156103ab57600080fd5b506103596103ba366004613175565b610cb4565b3480156103cb57600080fd5b506103df6103da36600461315c565b610cc3565b604080519384526001600160401b039283166020850152911690820152606001610376565b34801561041057600080fd5b5061036c60075481565b34801561042657600080fd5b5061036c6104353660046131a1565b610d05565b34801561044657600080fd5b50610359610455366004613219565b610d13565b34801561046657600080fd5b50610359610475366004613289565b610d89565b34801561048657600080fd5b506103596104953660046132c9565b611007565b3480156104a657600080fd5b5061036c6104b5366004613175565b61107c565b3480156104c657600080fd5b5061036c6104d53660046131a1565b61108a565b3480156104e657600080fd5b506103596104f536600461335c565b6111c5565b34801561050657600080fd5b50610359610515366004613175565b611257565b34801561052657600080fd5b50600a5461053a906001600160401b031681565b6040516001600160401b039091168152602001610376565b34801561055e57600080fd5b5061036c60085481565b34801561057457600080fd5b5061058861058336600461315c565b611264565b60408051825181526020808401516001600160401b03908116918301919091529282015190921690820152606001610376565b3480156105c757600080fd5b5061036c60095481565b3480156105dd57600080fd5b506103596105ec366004613421565b611539565b3480156105fd57600080fd5b50600154600160a01b900460ff165b6040519015158152602001610376565b34801561062857600080fd5b50600a5461053a90600160401b90046001600160401b031681565b610359610651366004613421565b611581565b34801561066257600080fd5b50610359610671366004613462565b611648565b34801561068257600080fd5b5061035961069136600461349a565b6116cd565b3480156106a257600080fd5b5061035961178d565b3480156106b757600080fd5b506103596106c6366004613506565b6117f0565b3480156106d757600080fd5b5061036c6106e6366004613544565b611887565b3480156106f757600080fd5b5061070b61070636600461315c565b611a12565b6040516001600160a01b039091168152602001610376565b34801561072f57600080fd5b50610359611a3c565b34801561074457600080fd5b5061060c610753366004613570565b60066020526000908152604090205460ff1681565b34801561077457600080fd5b5061070b7f000000000000000000000000fa436399d0458dbe8ab890c3441256e3e09022a881565b3480156107a857600080fd5b5061036c6107b73660046132c9565b611a9f565b3480156107c857600080fd5b506103596107d736600461358d565b611b1c565b3480156107e857600080fd5b506000546001600160a01b031661070b565b34801561080657600080fd5b506108476108153660046131a1565b60056020908152600092835260408084209091529082529020546001600160801b03811690600160801b9004600f0b82565b604080516001600160801b039093168352600f9190910b602083015201610376565b34801561087557600080fd5b5061035961088436600461315c565b611ce2565b34801561089557600080fd5b5061036c6108a43660046131a1565b611d14565b3480156108b557600080fd5b50610359611f5d565b3480156108ca57600080fd5b506103596108d9366004613289565b611fbc565b3480156108ea57600080fd5b506103596108f93660046135bc565b611fc9565b34801561090a57600080fd5b50610359612233565b34801561091f57600080fd5b5061035961092e3660046135e3565b612292565b34801561093f57600080fd5b5061036c61094e36600461363b565b6122a9565b34801561095f57600080fd5b5061070b61096e36600461315c565b612379565b610359610981366004613672565b612389565b34801561099257600080fd5b506103596109a13660046136d2565b61243d565b3480156109b257600080fd5b5061036c600b5481565b3480156109c857600080fd5b5061036c6109d736600461379e565b612522565b3480156109e857600080fd5b506103596109f7366004613570565b612784565b348015610a0857600080fd5b50610359610a1736600461315c565b612862565b348015610a2857600080fd5b5061036c610a3736600461315c565b612ac6565b600080600080610a4c8833612ada565b93509350935093506001600160701b038460000151886001600160801b0316610a7591906137fa565b610a7f9190613819565b83548490601090610a9b908490600160801b9004600f0b61383b565b82546101009290920a6001600160801b0381810219909316918316021790915584548992508591600091610ad19185911661388b565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550600060048981548110610b0a57610b0a6138b3565b6000918252602090912001546001600160a01b031690508015610be5578354604051633164b15160e11b8152600481018b90526001600160801b03808b16602483015290911660448201523360648201526001600160a01b0388811660848301528216906362c962a29060a401600060405180830381600087803b158015610b9157600080fd5b505af1925050508015610ba2575060015b610be5573d808015610bd0576040519150601f19603f3d011682016040523d82523d6000602084013e610bd5565b606091505b5086610be357805181602001fd5b505b610c2287896001600160801b031660038c81548110610c0657610c066138b3565b6000918252602090912001546001600160a01b03169190612b78565b6040516001600160801b03891681526001600160a01b038816908a9033907f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21329060200160405180910390a4505050505050505050565b6000818152600560209081526040808320338085529252822080549091610cad9185916001600160801b039091169080612522565b9392505050565b610cbf828233610d89565b5050565b60028181548110610cd357600080fd5b6000918252602090912060029091020180546001909101549091506001600160401b0380821691600160401b90041683565b6000610cad838360006122a9565b610d208585856000610a3c565b6040516398ee833d60e01b81526001600160a01b038416906398ee833d90610d50908790869086906004016138c9565b600060405180830381600087803b158015610d6a57600080fd5b505af1158015610d7e573d6000803e3d6000fd5b505050505050505050565b600154600160a01b900460ff1615610ddb5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b6000610de684611264565b60008581526005602090815260408083206001600160a01b0387168452909152812080549293509185918391610e269084906001600160801b0316613908565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555060006001600160701b038360000151866001600160801b0316610e6d91906137fa565b610e779190613819565b825490915081908390601090610e98908490600160801b9004600f0b613933565b92506101000a8154816001600160801b030219169083600f0b6001600160801b03160217905550600060048781548110610ed457610ed46138b3565b6000918252602090912001546001600160a01b031690508015610f74578254604051635df3856760e11b8152600481018990526001600160801b03808916602483015290911660448201523360648201526001600160a01b03868116608483015282169063bbe70ace9060a401600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b505050505b610fb33330886001600160801b031660038b81548110610f9657610f966138b3565b6000918252602090912001546001600160a01b0316929190612c93565b6040516001600160801b03871681526001600160a01b03861690889033907f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b479060200160405180910390a450505050505050565b611012868686610d89565b604051632c6616f960e21b81526001600160a01b0384169063b1985be490611042908890869086906004016138c9565b600060405180830381600087803b15801561105c57600080fd5b505af1158015611070573d6000803e3d6000fd5b50505050505050505050565b6000610cad83833333612522565b600082815260056020908152604080832033845290915281208054828255600480546001600160801b039092169391869081106110c9576110c96138b3565b6000918252602090912001546001600160a01b03169050801561115757604051633164b15160e11b81526004810186905260248101849052600060448201523360648201526001600160a01b0385811660848301528216906362c962a29060a401600060405180830381600087803b15801561114457600080fd5b505af1925050508015611155575060015b505b61116f848460038881548110610c0657610c066138b3565b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b866040516111b591815260200190565b60405180910390a4505092915050565b60405163d505accf60e01b81526001600160a01b0388811660048301528781166024830152604482018790526064820186905260ff8516608483015260a4820184905260c4820183905289169063d505accf9060e401600060405180830381600087803b15801561123557600080fd5b505af1158015611249573d6000803e3d6000fd5b505050505050505050505050565b610cbf8282336000610a3c565b604080516060810182526000808252602082018190529181019190915260028281548110611294576112946138b3565b600091825260209182902060408051606081018252600290930290910180548352600101546001600160401b03808216948401859052600160401b90910416908201529150421115611534576000600383815481106112f5576112f56138b3565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136a9190613982565b905060008111801561137e57506000600754115b1561146a57600a546000906001600160401b03164211156113e757600a5460208401516001600160401b03918216911610156113df576020830151600a546113cf91906001600160401b031661399b565b6001600160401b03169050611402565b506000611402565b60208301516113ff906001600160401b0316426139bb565b90505b600060075484604001516001600160401b03166008548461142391906137fa565b61142d91906137fa565b6114379190613819565b90508261144b6001600160701b03836137fa565b6114559190613819565b845185906114649083906139d2565b90525050505b6001600160401b03421660208301526002805483919085908110611490576114906138b3565b600091825260209182902083516002929092020190815582820151600190910180546040948501516001600160401b03908116600160401b026fffffffffffffffffffffffffffffffff199092169381169390931717905584820151855184519190921681529182018490529181019190915283907f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad3539060600160405180910390a2505b919050565b8060005b8181101561157b57600061156885858481811061155c5761155c6138b3565b90506020020135611264565b506115749050816139ea565b905061153d565b50505050565b60005b8181101561164357600080308585858181106115a2576115a26138b3565b90506020028101906115b49190613a05565b6040516115c2929190613a4b565b600060405180830381855af49150503d80600081146115fd576040519150601f19603f3d011682016040523d82523d6000602084013e611602565b606091505b50915091508161162e5761161581612daf565b60405162461bcd60e51b8152600401610dd29190613a87565b5050808061163b906139ea565b915050611584565b505050565b3361165b6000546001600160a01b031690565b6001600160a01b03161461169f5760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b80600283815481106116b3576116b36138b3565b9060005260206000209060020201818161157b9190613aba565b600387815481106116e0576116e06138b3565b60009182526020909120015460405163d505accf60e01b81523360048201523060248201526001600160801b03881660448201526064810186905260ff8516608482015260a4810184905260c481018390526001600160a01b039091169063d505accf9060e401600060405180830381600087803b15801561176157600080fd5b505af1158015611775573d6000803e3d6000fd5b50505050611784878787610d89565b50505050505050565b336117a06000546001600160a01b031690565b6001600160a01b0316146117e45760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b6117ee6000612e0e565b565b336118036000546001600160a01b031690565b6001600160a01b0316146118475760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b60009283526005602090815260408085206001600160a01b039094168552929052912080546001600160801b03928316600160801b029216919091179055565b60003361189c6000546001600160a01b031690565b6001600160a01b0316146118e05760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b81611970576040516370a0823160e01b81523060048201527f000000000000000000000000fa436399d0458dbe8ab890c3441256e3e09022a86001600160a01b0316906370a0823190602401602060405180830381865afa158015611949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196d9190613982565b91505b60405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490527f000000000000000000000000fa436399d0458dbe8ab890c3441256e3e09022a8169063a9059cbb906044016020604051808303816000875af11580156119df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a039190613b29565b611a0c57600080fd5b50919050565b60038181548110611a2257600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03163314611a965760405162461bcd60e51b815260206004820152601b60248201527f4f776e61626c653a2073656e64657220213d206e65774f776e657200000000006044820152606401610dd2565b6117ee33612e0e565b6000611aad87878787612522565b6040516398ee833d60e01b81529091506001600160a01b038616906398ee833d90611ae0908990879087906004016138c9565b600060405180830381600087803b158015611afa57600080fd5b505af1158015611b0e573d6000803e3d6000fd5b505050509695505050505050565b33611b2f6000546001600160a01b031690565b6001600160a01b031614611b735760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b8260028581548110611b8757611b876138b3565b6000918252602090912060029091020160010154600754611bb891600160401b90046001600160401b0316906139bb565b611bc291906139d2565b6007819055508260028581548110611bdc57611bdc6138b3565b906000526020600020906002020160010160086101000a8154816001600160401b0302191690836001600160401b031602179055508015611c5a578160048581548110611c2b57611c2b6138b3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80611c8c5760048481548110611c7257611c726138b3565b6000918252602090912001546001600160a01b0316611c8e565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e18658584604051611cd49291909182521515602082015260400190565b60405180910390a350505050565b6000818152600560209081526040808320338085529252822080549092610cbf9285926001600160801b031691610a3c565b60008060028481548110611d2a57611d2a6138b3565b6000918252602080832060408051606081018252600290940290910180548452600101546001600160401b0380821685850152600160401b9091041683820152878452600582528084206001600160a01b038816855290915282208151600380549395509193909290919088908110611da557611da56138b3565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1a9190613982565b9050600081118015611e2e57506000600754115b15611f1457600a546000906001600160401b0316421115611e9757600a5460208601516001600160401b0391821691161015611e8f576020850151600a54611e7f91906001600160401b031661399b565b6001600160401b03169050611eb2565b506000611eb2565b6020850151611eaf906001600160401b0316426139bb565b90505b600060075486604001516001600160401b031660085484611ed391906137fa565b611edd91906137fa565b611ee79190613819565b905082611efb6001600160701b03836137fa565b611f059190613819565b611f0f90856139d2565b935050505b8254600160801b8104600f0b906001600160701b0390611f3e9085906001600160801b03166137fa565b611f489190613819565b611f529190613b46565b979650505050505050565b33611f706000546001600160a01b031690565b6001600160a01b031614611fb45760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b6117ee612e5e565b6116438383836000610a3c565b33611fdc6000546001600160a01b031690565b6001600160a01b0316146120205760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b6001600160a01b03821660009081526006602052604090205460ff16156120895760405162461bcd60e51b815260206004820152601360248201527f546f6b656e20616c7265616479206164646564000000000000000000000000006044820152606401610dd2565b826007600082825461209b91906139d2565b909155505060038054600181810183557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b038087166001600160a01b03199283168117909355600480548086019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180549187169190921681179091556040805160608101825260008082526001600160401b0342811660208481019182528c831685870190815260028054808c018255818752965196027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81019690965591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf909501805492518416600160401b026fffffffffffffffffffffffffffffffff199093169590931694909417179055848152600690915220805460ff191684179055925490916121fb916139bb565b6040518681527f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e59060200160405180910390a4505050565b336122466000546001600160a01b031690565b6001600160a01b03161461228a5760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b6117ee612f03565b6122a1868633878787876116cd565b505050505050565b600154600090600160a01b900460ff16156122f95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610dd2565b6000806000806123098833612ada565b82546001600160801b03808416600160801b0291161783559296509094509250905061233788888389612f90565b604051818152889033907f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae06609249549060200160405180910390a3979650505050505050565b60048181548110611a2257600080fd5b60005b8281101561157b57600080308686858181106123aa576123aa6138b3565b90506020028101906123bc9190613a05565b6040516123ca929190613a4b565b600060405180830381855af49150503d8060008114612405576040519150601f19603f3d011682016040523d82523d6000602084013e61240a565b606091505b50915091508115801561241a5750835b156124285761161581612daf565b50508080612435906139ea565b91505061238c565b336124506000546001600160a01b031690565b6001600160a01b0316146124945760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b8a156124a05760088c90555b88156124c357600a805467ffffffffffffffff19166001600160401b038c161790555b86156124f457600a80546fffffffffffffffff00000000000000001916600160401b6001600160401b038b16021790555b841561250057600b8690555b821561250c5760098490555b8015611249575060075550505050505050505050565b600154600090600160a01b900460ff16156125725760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610dd2565b6000806000806125828933612ada565b93509350935093506001600160701b038460000151896001600160801b03166125ab91906137fa565b6125b59190613819565b6125bf9083613b46565b83546001600160801b03918216600160801b0290821681811786558a9286926000926125ee928692161761388b565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555061261f8987836000612f90565b600060048a81548110612634576126346138b3565b6000918252602090912001546001600160a01b0316905080156126d4578354604051633164b15160e11b8152600481018c90526001600160801b03808c16602483015290911660448201523360648201526001600160a01b0389811660848301528216906362c962a29060a401600060405180830381600087803b1580156126bb57600080fd5b505af11580156126cf573d6000803e3d6000fd5b505050505b6126f5888a6001600160801b031660038d81548110610c0657610c066138b3565b6040516001600160801b038a1681526001600160a01b038916908b9033907f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21329060200160405180910390a46040518281528a9033907f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae06609249549060200160405180910390a35098975050505050505050565b336127976000546001600160a01b031690565b6001600160a01b0316146127db5760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b6001600160a01b0381166128405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610dd2565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b336128756000546001600160a01b031690565b6001600160a01b0316146128b95760405162461bcd60e51b81526020600482018190526024820152600080516020613c728339815191526044820152606401610dd2565b600a546001600160401b0316421161291157600a546128e890600160401b90046001600160401b0316426139bb565b6008546128f591906137fa565b600b600082825461290691906139d2565b9091555061297a9050565b600a546001600160401b03808216600160401b90920416101561297a57600a5461294d906001600160401b03600160401b82048116911661399b565b6001600160401b031660085461296391906137fa565b600b600082825461297491906139d2565b90915550505b6000600954600b5461298c91906139bb565b6040516370a0823160e01b815230600482015290915060009082906001600160a01b037f000000000000000000000000fa436399d0458dbe8ab890c3441256e3e09022a816906370a0823190602401602060405180830381865afa1580156129f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1c9190613982565b612a2691906139bb565b90506000612a348483613819565b9050612a408483613819565b612a4a90426139d2565b600a80546008879055426001600160401b03908116600160401b026fffffffffffffffffffffffffffffffff199092169316929092179190911790556040517f95cfd9f2f74d54d4a4a8089f6253fb10b4fee5b577229663c42034159469988890612ab89086815260200190565b60405180910390a150505050565b6000612ad4823360006122a9565b92915050565b60408051606081018252600080825260208201819052918101829052908080612b0286611264565b60008781526005602090815260408083206001600160a01b038a1684529091529020815181549296509094506001600160701b0391612b4a91906001600160801b03166137fa565b612b549190613819565b8354909250612b6d90600160801b9004600f0b83613b46565b905092959194509250565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691612bd49190613b9e565b6000604051808303816000865af19150503d8060008114612c11576040519150601f19603f3d011682016040523d82523d6000602084013e612c16565b606091505b5091509150818015612c40575080511580612c40575080806020019051810190612c409190613b29565b612c8c5760405162461bcd60e51b815260206004820152601c60248201527f426f72696e6745524332303a205472616e73666572206661696c6564000000006044820152606401610dd2565b5050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612cf79190613b9e565b6000604051808303816000865af19150503d8060008114612d34576040519150601f19603f3d011682016040523d82523d6000602084013e612d39565b606091505b5091509150818015612d63575080511580612d63575080806020019051810190612d639190613b29565b6122a15760405162461bcd60e51b815260206004820181905260248201527f426f72696e6745524332303a205472616e7366657246726f6d206661696c65646044820152606401610dd2565b6060604482511015612df457505060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000602082015290565b60048201915081806020019051810190612ad49190613bd0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600154600160a01b900460ff1615612eab5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610dd2565b6001805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612ee63390565b6040516001600160a01b03909116815260200160405180910390a1565b600154600160a01b900460ff16612f5c5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610dd2565b6001805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612ee6565b8115612fe2578160096000828254612fa891906139d2565b90915550612fe290506001600160a01b037f000000000000000000000000fa436399d0458dbe8ab890c3441256e3e09022a8168484612b78565b600060048581548110612ff757612ff76138b3565b6000918252602090912001546001600160a01b031690508015612c8c57604051634364cab560e11b815260048101869052602481018490523360448201526001600160a01b0385811660648301528216906386c9956a90608401600060405180830381600087803b15801561306b57600080fd5b505af192505050801561307c575060015b612c8c573d8080156130aa576040519150601f19603f3d011682016040523d82523d6000602084013e6130af565b606091505b50826130bd57805181602001fd5b50612c8c565b80356001600160801b038116811461153457600080fd5b6001600160a01b03811681146130ef57600080fd5b50565b80151581146130ef57600080fd5b8035611534816130f2565b6000806000806080858703121561312157600080fd5b84359350613131602086016130c3565b92506040850135613141816130da565b91506060850135613151816130f2565b939692955090935050565b60006020828403121561316e57600080fd5b5035919050565b6000806040838503121561318857600080fd5b82359150613198602084016130c3565b90509250929050565b600080604083850312156131b457600080fd5b8235915060208301356131c6816130da565b809150509250929050565b60008083601f8401126131e357600080fd5b5081356001600160401b038111156131fa57600080fd5b60208301915083602082850101111561321257600080fd5b9250929050565b60008060008060006080868803121561323157600080fd5b85359450613241602087016130c3565b93506040860135613251816130da565b925060608601356001600160401b0381111561326c57600080fd5b613278888289016131d1565b969995985093965092949392505050565b60008060006060848603121561329e57600080fd5b833592506132ae602085016130c3565b915060408401356132be816130da565b809150509250925092565b60008060008060008060a087890312156132e257600080fd5b863595506132f2602088016130c3565b94506040870135613302816130da565b93506060870135613312816130da565b925060808701356001600160401b0381111561332d57600080fd5b61333989828a016131d1565b979a9699509497509295939492505050565b803560ff8116811461153457600080fd5b600080600080600080600080610100898b03121561337957600080fd5b8835613384816130da565b97506020890135613394816130da565b965060408901356133a4816130da565b955060608901359450608089013593506133c060a08a0161334b565b925060c0890135915060e089013590509295985092959890939650565b60008083601f8401126133ef57600080fd5b5081356001600160401b0381111561340657600080fd5b6020830191508360208260051b850101111561321257600080fd5b6000806020838503121561343457600080fd5b82356001600160401b0381111561344a57600080fd5b613456858286016133dd565b90969095509350505050565b600080828403608081121561347657600080fd5b833592506060601f198201121561348c57600080fd5b506020830190509250929050565b600080600080600080600060e0888a0312156134b557600080fd5b873596506134c5602089016130c3565b955060408801356134d5816130da565b9450606088013593506134ea6080890161334b565b925060a0880135915060c0880135905092959891949750929550565b60008060006060848603121561351b57600080fd5b83359250602084013561352d816130da565b91506040840135600f81900b81146132be57600080fd5b6000806040838503121561355757600080fd5b8235613562816130da565b946020939093013593505050565b60006020828403121561358257600080fd5b8135610cad816130da565b600080600080608085870312156135a357600080fd5b84359350602085013592506040850135613141816130da565b6000806000606084860312156135d157600080fd5b8335925060208401356132ae816130da565b60008060008060008060c087890312156135fc57600080fd5b8635955061360c602088016130c3565b9450604087013593506136216060880161334b565b92506080870135915060a087013590509295509295509295565b60008060006060848603121561365057600080fd5b833592506020840135613662816130da565b915060408401356132be816130f2565b60008060006040848603121561368757600080fd5b83356001600160401b0381111561369d57600080fd5b6136a9868287016133dd565b90945092505060208401356132be816130f2565b6001600160401b03811681146130ef57600080fd5b6000806000806000806000806000806000806101808d8f0312156136f557600080fd5b8c359b5060208d0135613707816130f2565b9a5060408d0135613717816136bd565b995060608d0135613727816130f2565b985060808d0135613737816136bd565b975060a08d0135613747816130f2565b965060c08d0135955060e08d013561375e816130f2565b94506101008d013593506137756101208e01613100565b92506101408d0135915061378c6101608e01613100565b90509295989b509295989b509295989b565b600080600080608085870312156137b457600080fd5b843593506137c4602086016130c3565b925060408501356137d4816130da565b91506060850135613151816130da565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613814576138146137e4565b500290565b60008261383657634e487b7160e01b600052601260045260246000fd5b500490565b600081600f0b83600f0b600081128160016001607f1b031901831281151615613866576138666137e4565b8160016001607f1b03018313811615613881576138816137e4565b5090039392505050565b60006001600160801b03838116908316818110156138ab576138ab6137e4565b039392505050565b634e487b7160e01b600052603260045260246000fd5b6001600160801b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006001600160801b0380831681851680830382111561392a5761392a6137e4565b01949350505050565b600081600f0b83600f0b600082128260016001607f1b030382138115161561395d5761395d6137e4565b8260016001607f1b0319038212811615613979576139796137e4565b50019392505050565b60006020828403121561399457600080fd5b5051919050565b60006001600160401b03838116908316818110156138ab576138ab6137e4565b6000828210156139cd576139cd6137e4565b500390565b600082198211156139e5576139e56137e4565b500190565b60006000198214156139fe576139fe6137e4565b5060010190565b6000808335601e19843603018112613a1c57600080fd5b8301803591506001600160401b03821115613a3657600080fd5b60200191503681900382131561321257600080fd5b8183823760009101908152919050565b60005b83811015613a76578181015183820152602001613a5e565b8381111561157b5750506000910152565b6020815260008251806020840152613aa6816040850160208701613a5b565b601f01601f19169190910160400192915050565b81358155600181016020830135613ad0816136bd565b6001600160401b03811690508154816001600160401b031982161783556040850135613afb816136bd565b6fffffffffffffffff00000000000000008160401b16836001600160801b0319841617178455505050505050565b600060208284031215613b3b57600080fd5b8151610cad816130f2565b60008083128015600160ff1b850184121615613b6457613b646137e4565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615613b9857613b986137e4565b50500390565b60008251613bb0818460208701613a5b565b9190910192915050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613be257600080fd5b81516001600160401b0380821115613bf957600080fd5b818401915084601f830112613c0d57600080fd5b815181811115613c1f57613c1f613bba565b604051601f8201601f19908116603f01168101908382118183101715613c4757613c47613bba565b81604052828152876020848701011115613c6057600080fd5b611f52836020830160208801613a5b56fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220a03de4131a6d30808db82b276914915e0cdfdf70921726ce59ac5ee449423c1364736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fa436399d0458dbe8ab890c3441256e3e09022a8
-----Decoded View---------------
Arg [0] : _zipToken (address): 0xFA436399d0458Dbe8aB890c3441256E3E09022a8
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa436399d0458dbe8ab890c3441256e3e09022a8
Deployed Bytecode Sourcemap
18326:2823:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8067:906;;;;;;;;;;-1:-1:-1;8067:906:7;;;;;:::i;:::-;;:::i;:::-;;3844:98;;;;;;;;;;-1:-1:-1;3920:8:7;:15;3844:98;;;1298:25:8;;;1286:2;1271:18;3844:98:7;;;;;;;;20542:212;;;;;;;;;;-1:-1:-1;20542:212:7;;;;;:::i;:::-;;:::i;18696:106::-;;;;;;;;;;-1:-1:-1;18696:106:7;;;;;:::i;:::-;;:::i;1906:26::-;;;;;;;;;;-1:-1:-1;1906:26:7;;;;;:::i;:::-;;:::i;:::-;;;;1976:25:8;;;-1:-1:-1;;;;;2074:15:8;;;2069:2;2054:18;;2047:43;2126:15;;2106:18;;;2099:43;1964:2;1949:18;1906:26:7;1778:370:8;2410:27:7;;;;;;;;;;;;;;;;20129:114;;;;;;;;;;-1:-1:-1;20129:114:7;;;;;:::i;:::-;;:::i;19318:214::-;;;;;;;;;;-1:-1:-1;19318:214:7;;;;;:::i;:::-;;:::i;7114:675::-;;;;;;;;;;-1:-1:-1;7114:675:7;;;;;:::i;:::-;;:::i;18470:220::-;;;;;;;;;;-1:-1:-1;18470:220:7;;;;;:::i;:::-;;:::i;20370:166::-;;;;;;;;;;-1:-1:-1;20370:166:7;;;;;:::i;:::-;;:::i;11850:612::-;;;;;;;;;;-1:-1:-1;11850:612:7;;;;;:::i;:::-;;:::i;2620:274:0:-;;;;;;;;;;-1:-1:-1;2620:274:0;;;;;:::i;:::-;;:::i;19662:119:7:-;;;;;;;;;;-1:-1:-1;19662:119:7;;;;;:::i;:::-;;:::i;2813:33::-;;;;;;;;;;-1:-1:-1;2813:33:7;;;;-1:-1:-1;;;;;2813:33:7;;;;;;-1:-1:-1;;;;;5990:31:8;;;5972:50;;5960:2;5945:18;2813:33:7;5828:200:8;2444:24:7;;;;;;;;;;;;;;;;5389:1112;;;;;;;;;;-1:-1:-1;5389:1112:7;;;;;:::i;:::-;;:::i;:::-;;;;6249:13:8;;6231:32;;6310:4;6298:17;;;6292:24;-1:-1:-1;;;;;6391:21:8;;;6369:20;;;6362:51;;;;6461:17;;;6455:24;6451:33;;;6429:20;;;6422:63;6219:2;6204:18;5389:1112:7;6033:458:8;2716:28:7;;;;;;;;;;;;;;;;6679:202;;;;;;;;;;-1:-1:-1;6679:202:7;;;;;:::i;:::-;;:::i;1089:84:6:-;;;;;;;;;;-1:-1:-1;1159:7:6;;-1:-1:-1;;;1159:7:6;;;;1089:84;;;7475:14:8;;7468:22;7450:41;;7438:2;7423:18;1089:84:6;7310:187:8;14704:53:7;;;;;;;;;;-1:-1:-1;14704:53:7;;;;-1:-1:-1;;;14704:53:7;;-1:-1:-1;;;;;14704:53:7;;;1812:416:0;;;;;;:::i;:::-;;:::i;17517:136:7:-;;;;;;;;;;-1:-1:-1;17517:136:7;;;;;:::i;:::-;;:::i;18808:242::-;;;;;;;;;;-1:-1:-1;18808:242:7;;;;;:::i;:::-;;:::i;1102:101:5:-;;;;;;;;;;;;;:::i;17659:194:7:-;;;;;;;;;;-1:-1:-1;17659:194:7;;;;;:::i;:::-;;:::i;17859:277::-;;;;;;;;;;-1:-1:-1;17859:277:7;;;;;:::i;:::-;;:::i;1993:23::-;;;;;;;;;;-1:-1:-1;1993:23:7;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9959:55:8;;;9941:74;;9929:2;9914:18;1993:23:7;9781:240:8;1550:161:5;;;;;;;;;;;;;:::i;2266:44:7:-;;;;;;;;;;-1:-1:-1;2266:44:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;1832:32;;;;;;;;;;;;;;;20825:322;;;;;;;;;;-1:-1:-1;20825:322:7;;;;;:::i;:::-;;:::i;14305:393::-;;;;;;;;;;-1:-1:-1;14305:393:7;;;;;:::i;:::-;;:::i;472:85:5:-;;;;;;;;;;-1:-1:-1;518:7:5;544:6;-1:-1:-1;;;;;544:6:5;472:85;;2167:66:7;;;;;;;;;;-1:-1:-1;2167:66:7;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2167:66:7;;;-1:-1:-1;;;2167:66:7;;;;;;;;;;-1:-1:-1;;;;;12075:47:8;;;12057:66;;12170:2;12159:22;;;;12154:2;12139:18;;12132:50;12030:18;2167:66:7;11885:303:8;19787:165:7;;;;;;;;;;-1:-1:-1;19787:165:7;;;;;:::i;:::-;;:::i;4170:1040::-;;;;;;;;;;-1:-1:-1;4170:1040:7;;;;;:::i;:::-;;:::i;18142:85::-;;;;;;;;;;;;;:::i;19538:118::-;;;;;;;;;;-1:-1:-1;19538:118:7;;;;;:::i;:::-;;:::i;13333:582::-;;;;;;;;;;-1:-1:-1;13333:582:7;;;;;:::i;:::-;;:::i;18233:89::-;;;;;;;;;;;;;:::i;19056:191::-;;;;;;;;;;-1:-1:-1;19056:191:7;;;;;:::i;:::-;;:::i;8979:447::-;;;;;;;;;;-1:-1:-1;8979:447:7;;;;;:::i;:::-;;:::i;2076:27::-;;;;;;;;;;-1:-1:-1;2076:27:7;;;;;:::i;:::-;;:::i;1468:338:0:-;;;;;;:::i;:::-;;:::i;16363:1148:7:-;;;;;;;;;;-1:-1:-1;16363:1148:7;;;;;:::i;:::-;;:::i;14763:38::-;;;;;;;;;;;;;;;;9730:863;;;;;;;;;;-1:-1:-1;9730:863:7;;;;;:::i;:::-;;:::i;1352:192:5:-;;;;;;;;;;-1:-1:-1;1352:192:5;;;;;:::i;:::-;;:::i;14993:1070:7:-;;;;;;;;;;-1:-1:-1;14993:1070:7;;;;;:::i;:::-;;:::i;20249:115::-;;;;;;;;;;-1:-1:-1;20249:115:7;;;;;:::i;:::-;;:::i;8067:906::-;8169:20;8191:21;8214:19;8235:15;8254:38;8276:3;8281:10;8254:21;:38::i;:::-;8168:124;;;;;;;;-1:-1:-1;;;;;8350:4:7;:19;;;8342:6;-1:-1:-1;;;;;8337:12:7;:32;;;;:::i;:::-;:52;;;;:::i;:::-;8303:88;;:4;;:15;;:88;;;;-1:-1:-1;;;8303:88:7;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;8303:88:7;;;;;;;;;;;;;;;8401:21;;8416:6;;-1:-1:-1;8401:21:7;;-1:-1:-1;;8401:21:7;;8416:6;;8401:21;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;8401:21:7;;;;;-1:-1:-1;;;;;8401:21:7;;;;;;8450:19;8472:8;8481:3;8472:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;8472:13:7;;-1:-1:-1;8499:32:7;;8495:371;;8594:11;;8551:71;;-1:-1:-1;;;8551:71:7;;;;;18100:25:8;;;-1:-1:-1;;;;;18214:15:8;;;18194:18;;;18187:43;8594:11:7;;;18246:18:8;;;18239:43;8607:10:7;18359:18:8;;;18352:43;-1:-1:-1;;;;;18432:15:8;;;18411:19;;;18404:44;8551:29:7;;;;;18072:19:8;;8551:71:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8547:309;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8688:17;8684:158;;8794:6;8788:13;8779:6;8775:2;8771:15;8764:38;8684:158;8638:218;8547:309;8876:37;8902:2;8906:6;-1:-1:-1;;;;;8876:37:7;:7;8884:3;8876:12;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;8876:12:7;;:37;:25;:37::i;:::-;8929;;-1:-1:-1;;;;;18623:47:8;;18605:66;;-1:-1:-1;;;;;8929:37:7;;;8950:3;;8938:10;;8929:37;;18593:2:8;18578:18;8929:37:7;;;;;;;8158:815;;;;;8067:906;;;;:::o;20542:212::-;20601:4;20641:13;;;:8;:13;;;;;;;;20655:10;20641:25;;;;;;;20711:11;;20641:25;;20683:64;;20650:3;;-1:-1:-1;;;;;20711:11:7;;;;20655:10;20683:22;:64::i;:::-;20676:71;20542:212;-1:-1:-1;;;20542:212:7:o;18696:106::-;18763:32;18771:3;18776:6;18784:10;18763:7;:32::i;:::-;18696:106;;:::o;1906:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1906:26:7;;;;-1:-1:-1;;;1906:26:7;;;;:::o;20129:114::-;20186:4;20209:27;20221:3;20226:2;20230:5;20209:11;:27::i;19318:214::-;19420:36;19433:3;19438:6;19446:2;19450:5;19420:12;:36::i;:::-;19466:59;;-1:-1:-1;;;19466:59:7;;-1:-1:-1;;;;;19466:45:7;;;;;:59;;19512:6;;19520:4;;;;19466:59;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19318:214;;;;;:::o;7114:675::-;1159:7:6;;-1:-1:-1;;;1159:7:6;;;;1402:9;1394:38;;;;-1:-1:-1;;;1394:38:6;;19389:2:8;1394:38:6;;;19371:21:8;19428:2;19408:18;;;19401:30;-1:-1:-1;;;19447:18:8;;;19440:46;19503:18;;1394:38:6;;;;;;;;;7200:20:7::1;7223:15;7234:3;7223:10;:15::i;:::-;7248:21;7272:13:::0;;;:8:::1;:13;::::0;;;;;;;-1:-1:-1;;;;;7272:17:7;::::1;::::0;;;;;;;7300:21;;7200:38;;-1:-1:-1;7272:17:7;7315:6;;7272:17;;7300:21:::1;::::0;7315:6;;-1:-1:-1;;;;;7300:21:7::1;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;7300:21:7::1;;;;;-1:-1:-1::0;;;;;7300:21:7::1;;;;;;7331;-1:-1:-1::0;;;;;7368:4:7::1;:19;;;7360:6;-1:-1:-1::0;;;;;7355:12:7::1;:32;;;;:::i;:::-;:52;;;;:::i;:::-;7417::::0;;7331:76;;-1:-1:-1;7331:76:7;;7417:4;;:15:::1;::::0;:52:::1;::::0;7331:76;;-1:-1:-1;;;7417:52:7;::::1;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;7417:52:7::1;;;;;;;-1:-1:-1::0;;;;;7417:52:7::1;;;;;;7480:19;7502:8;7511:3;7502:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;7502:13:7::1;::::0;-1:-1:-1;7529:32:7;;7525:131:::1;;7617:11:::0;;7577:68:::1;::::0;-1:-1:-1;;;7577:68:7;;::::1;::::0;::::1;18100:25:8::0;;;-1:-1:-1;;;;;18214:15:8;;;18194:18;;;18187:43;7617:11:7;;::::1;18246:18:8::0;;;18239:43;7630:10:7::1;18359:18:8::0;;;18352:43;-1:-1:-1;;;;;18432:15:8;;;18411:19;;;18404:44;7577:26:7;::::1;::::0;::::1;::::0;18072:19:8;;7577:68:7::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7525:131;7666:64;7696:10;7716:4;7723:6;-1:-1:-1::0;;;;;7666:64:7::1;:7;7674:3;7666:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;7666:12:7::1;::::0;:64;;:29:::1;:64::i;:::-;7746:36;::::0;-1:-1:-1;;;;;18623:47:8;;18605:66;;-1:-1:-1;;;;;7746:36:7;::::1;::::0;7766:3;;7754:10:::1;::::0;7746:36:::1;::::0;18593:2:8;18578:18;7746:36:7::1;;;;;;;7190:599;;;;7114:675:::0;;;:::o;18470:220::-;18605:24;18613:3;18618:6;18626:2;18605:7;:24::i;:::-;18639:44;;-1:-1:-1;;;18639:44:7;;-1:-1:-1;;;;;18639:30:7;;;;;:44;;18670:6;;18678:4;;;;18639:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18470:220;;;;;;:::o;20370:166::-;20447:4;20470:59;20493:3;20498:6;20506:10;20518;20470:22;:59::i;11850:612::-;11917:11;11964:13;;;:8;:13;;;;;;;;11978:10;11964:25;;;;;;;12008:11;;12054:19;;;12106:8;:13;;-1:-1:-1;;;;;12008:11:7;;;;11917;11973:3;;12106:13;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;12106:13:7;;-1:-1:-1;12133:32:7;;12129:151;;12185:61;;-1:-1:-1;;;12185:61:7;;;;;20458:25:8;;;20499:18;;;20492:34;;;12228:1:7;20542:18:8;;;20535:34;12231:10:7;20646:18:8;;;20639:43;-1:-1:-1;;;;;20719:15:8;;;20698:19;;;20691:44;12185:29:7;;;;;20430:19:8;;12185:61:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12181:89;;12357:37;12383:2;12387:6;12357:7;12365:3;12357:12;;;;;;;;:::i;:37::-;12452:2;-1:-1:-1;;;;;12409:46:7;12439:3;12427:10;-1:-1:-1;;;;;12409:46:7;;12444:6;12409:46;;;;1298:25:8;;1286:2;1271:18;;1152:177;12409:46:7;;;;;;;;11930:532;;11850:612;;;;:::o;2620:274:0:-;2838:49;;-1:-1:-1;;;2838:49:0;;-1:-1:-1;;;;;21136:15:8;;;2838:49:0;;;21118:34:8;21188:15;;;21168:18;;;21161:43;21220:18;;;21213:34;;;21263:18;;;21256:34;;;21339:4;21327:17;;21306:19;;;21299:46;21361:19;;;21354:35;;;21405:19;;;21398:35;;;2838:12:0;;;;;21029:19:8;;2838:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2620:274;;;;;;;;:::o;19662:119:7:-;19730:44;19743:3;19748:6;19756:10;19768:5;19730:12;:44::i;5389:1112::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;5474:8:7;5483:3;5474:13;;;;;;;;:::i;:::-;;;;;;;;;;5467:20;;;;;;;;5474:13;;;;;;;5467:20;;;;;;;-1:-1:-1;;;;;5467:20:7;;;;;;;;;-1:-1:-1;;;5467:20:7;;;;;;;;;-1:-1:-1;5501:15:7;:37;5497:998;;;5554:13;5570:7;5578:3;5570:12;;;;;;;;:::i;:::-;;;;;;;;;;;:37;;-1:-1:-1;;;5570:37:7;;5601:4;5570:37;;;9941:74:8;-1:-1:-1;;;;;5570:12:7;;;;:22;;9914:18:8;;5570:37:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5554:53;;5636:1;5625:8;:12;:35;;;;;5659:1;5641:15;;:19;5625:35;5621:682;;;5728:19;;5680:9;;-1:-1:-1;;;;;5728:19:7;5710:15;:37;5707:415;;;5796:19;;5774;;;;-1:-1:-1;;;;;5796:19:7;;;5774:41;;;5771:226;;;5872:19;;;;5850;;:41;;5872:19;-1:-1:-1;;;;;5850:19:7;:41;:::i;:::-;-1:-1:-1;;;;;5843:48:7;;;5707:415;;5771:226;-1:-1:-1;5973:1:7;5707:415;;;6084:19;;;;6066:37;;-1:-1:-1;;;;;6066:37:7;:15;:37;:::i;:::-;6059:44;;5707:415;6139:16;6192:15;;6176:4;:15;;;-1:-1:-1;;;;;6158:33:7;6163:12;;6158:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;:49;;;;:::i;:::-;6139:68;-1:-1:-1;6280:8:7;6248:29;-1:-1:-1;;;;;6139:68:7;6248:29;:::i;:::-;:40;;;;:::i;:::-;6225:63;;:4;;:63;;;;;:::i;:::-;;;-1:-1:-1;;;5621:682:7;-1:-1:-1;;;;;6345:15:7;6316:45;:19;;;:45;6375:8;:13;;6316:4;;6375:8;6384:3;;6375:13;;;;;;:::i;:::-;;;;;;;;;;:20;;:13;;;;;;:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6375:20:7;;;-1:-1:-1;;;6375:20:7;-1:-1:-1;;6375:20:7;;;;;;;;;;;;;6433:19;;;;6464;;6414:70;;22348:31:8;;;;22330:50;;22396:18;;;22389:34;;;22439:18;;;22432:34;;;;6428:3:7;;6414:70;;22318:2:8;22303:18;6414:70:7;;;;;;;5540:955;5497:998;5389:1112;;;:::o;6679:202::-;6756:4;6745:8;6777:98;6798:3;6794:1;:7;6777:98;;;6822:20;6845:19;6856:4;;6861:1;6856:7;;;;;;;:::i;:::-;;;;;;;6845:10;:19::i;:::-;-1:-1:-1;6803:3:7;;-1:-1:-1;6803:3:7;;:::i;:::-;;;6777:98;;;;6735:146;6679:202;;:::o;1812:416:0:-;1996:9;1991:231;2011:16;;;1991:231;;;2049:12;;2094:4;2113:5;;2119:1;2113:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;2086:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2048:74;;;;2141:7;2136:76;;2175:21;2189:6;2175:13;:21::i;:::-;2168:29;;-1:-1:-1;;;2168:29:0;;;;;;;;:::i;2136:76::-;2034:188;;2029:3;;;;;:::i;:::-;;;;1991:231;;;;1812:416;;:::o;17517:136:7:-;695:10:5;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;17635:11:7::1;17619:8;17628:3;17619:13;;;;;;;;:::i;:::-;;;;;;;;;;;:27;;;;;;:::i;18808:242::-:0;18936:7;18944:3;18936:12;;;;;;;;:::i;:::-;;;;;;;;;;;:73;;-1:-1:-1;;;18936:73:7;;18956:10;18936:73;;;25515:34:8;18976:4:7;25565:18:8;;;25558:43;-1:-1:-1;;;;;25637:47:8;;25617:18;;;25610:75;25701:18;;;25694:34;;;25777:4;25765:17;;25744:19;;;25737:46;25799:19;;;25792:35;;;25843:19;;;25836:35;;;-1:-1:-1;;;;;18936:12:7;;;;:19;;25426::8;;18936:73:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19019:24;19027:3;19032:6;19040:2;19019:7;:24::i;:::-;18808:242;;;;;;;:::o;1102:101:5:-;695:10;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;1166:30:::1;1193:1;1166:18;:30::i;:::-;1102:101::o:0;17659:194:7:-;695:10:5;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;17766:21:7::1;17790:13:::0;;;:8:::1;:13;::::0;;;;;;;-1:-1:-1;;;;;17790:18:7;;::::1;::::0;;;;;;;17818:28;;-1:-1:-1;;;;;17818:28:7;;;-1:-1:-1;;;17818:28:7::1;::::0;::::1;::::0;;;::::1;::::0;;17659:194::o;17859:277::-;17953:4;695:10:5;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;17972:11:7;17969:83:::1;;18008:33;::::0;-1:-1:-1;;;18008:33:7;;18035:4:::1;18008:33;::::0;::::1;9941:74:8::0;18008:8:7::1;-1:-1:-1::0;;;;;18008:18:7::1;::::0;::::1;::::0;9914::8;;18008:33:7::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17999:42;;17969:83;18069:36;::::0;-1:-1:-1;;;18069:36:7;;-1:-1:-1;;;;;26074:55:8;;;18069:36:7::1;::::0;::::1;26056:74:8::0;26146:18;;;26139:34;;;18069:8:7::1;:17;::::0;::::1;::::0;26029:18:8;;18069:36:7::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18061:45;;;::::0;::::1;;-1:-1:-1::0;18123:6:7;17859:277;-1:-1:-1;17859:277:7:o;1993:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1993:23:7;;-1:-1:-1;1993:23:7;:::o;1550:161:5:-;1624:8;;-1:-1:-1;;;;;1624:8:5;1610:10;:22;1602:62;;;;-1:-1:-1;;;1602:62:5;;26636:2:8;1602:62:5;;;26618:21:8;26675:2;26655:18;;;26648:30;26714:29;26694:18;;;26687:57;26761:18;;1602:62:5;26434:351:8;1602:62:5;1674:30;1693:10;1674:18;:30::i;20825:322:7:-;20965:17;21009:56;21032:3;21037:6;21045:8;21055:9;21009:22;:56::i;:::-;21075:65;;-1:-1:-1;;;21075:65:7;;20994:71;;-1:-1:-1;;;;;;21075:51:7;;;;;:65;;21127:6;;21135:4;;;;21075:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20825:322;;;;;;;;:::o;14305:393::-;695:10:5;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;14473:11:7::1;14447:8;14456:4;14447:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:25;;::::0;14431:15:::1;::::0;:41:::1;::::0;-1:-1:-1;;;14447:25:7;::::1;-1:-1:-1::0;;;;;14447:25:7::1;::::0;14431:41:::1;:::i;:::-;:53;;;;:::i;:::-;14413:15;:71;;;;14529:11;14494:8;14503:4;14494:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;:47;;;;;-1:-1:-1::0;;;;;14494:47:7::1;;;;;-1:-1:-1::0;;;;;14494:47:7::1;;;;;;14555:9;14551:46;;;14585:9;14568:8;14577:4;14568:14;;;;;;;;:::i;:::-;;;;;;;;;:26;;;;;-1:-1:-1::0;;;;;14568:26:7::1;;;;;-1:-1:-1::0;;;;;14568:26:7::1;;;;;;14551:46;14641:9;:38;;14665:8;14674:4;14665:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;14665:14:7::1;14641:38;;;14653:9;14641:38;-1:-1:-1::0;;;;;14611:80:7::1;14622:4;14611:80;14628:11;14681:9;14611:80;;;;;;26958:25:8::0;;;27026:14;27019:22;27014:2;26999:18;;26992:50;26946:2;26931:18;;26790:258;14611:80:7::1;;;;;;;;14305:393:::0;;;;:::o;19787:165::-;19837:21;19861:13;;;:8;:13;;;;;;;;19875:10;19861:25;;;;;;;19914:11;;19861:25;;19896:49;;19870:3;;-1:-1:-1;;;;;19914:11:7;;19896:12;:49::i;4170:1040::-;4242:12;4266:20;4289:8;4298:4;4289:14;;;;;;;;:::i;:::-;;;;;;;;;4266:37;;;;;;;;4289:14;;;;;;;4266:37;;;;;;;-1:-1:-1;;;;;4266:37:7;;;;;;;-1:-1:-1;;;4266:37:7;;;;;;;;4337:14;;;:8;:14;;;;;-1:-1:-1;;;;;4337:21:7;;;;;;;;;4390:19;;4435:7;:13;;4266:37;;-1:-1:-1;4337:21:7;;4390:19;;4289:14;;4435:7;4346:4;;4435:13;;;;;;:::i;:::-;;;;;;;;;;;:38;;-1:-1:-1;;;4435:38:7;;4467:4;4435:38;;;9941:74:8;-1:-1:-1;;;;;4435:13:7;;;;:23;;9914:18:8;;4435:38:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4419:54;;4499:1;4488:8;:12;:35;;;;;4522:1;4504:15;;:19;4488:35;4484:621;;;4583:19;;4539:9;;-1:-1:-1;;;;;4583:19:7;4565:15;:37;4562:379;;;4647:19;;4625;;;;-1:-1:-1;;;;;4647:19:7;;;4625:41;;;4622:206;;;4719:19;;;;4697;;:41;;4719:19;-1:-1:-1;;;;;4697:19:7;:41;:::i;:::-;-1:-1:-1;;;;;4690:48:7;;;4562:379;;4622:206;-1:-1:-1;4808:1:7;4562:379;;;4907:19;;;;4889:37;;-1:-1:-1;;;;;4889:37:7;:15;:37;:::i;:::-;4882:44;;4562:379;4954:16;5007:15;;4991:4;:15;;;-1:-1:-1;;;;;4973:33:7;4978:12;;4973:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;:49;;;;:::i;:::-;4954:68;-1:-1:-1;5086:8:7;5054:29;-1:-1:-1;;;;;4954:68:7;5054:29;:::i;:::-;:40;;;;:::i;:::-;5036:58;;;;:::i;:::-;;;4525:580;;4484:621;5187:15;;-1:-1:-1;;;5187:15:7;;;;;-1:-1:-1;;;;;2702:8:7;5133:32;;5151:14;;-1:-1:-1;;;;;5138:11:7;5133:32;:::i;:::-;:50;;;;:::i;:::-;5129:73;;;;:::i;:::-;5114:89;4170:1040;-1:-1:-1;;;;;;;4170:1040:7:o;18142:85::-;695:10:5;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;18212:8:7::1;:6;:8::i;19538:118::-:0;19613:36;19626:3;19631:6;19639:2;19643:5;19613:12;:36::i;13333:582::-;695:10:5;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;-1:-1:-1;;;;;13438:30:7;::::1;;::::0;;;:11:::1;:30;::::0;;;;;::::1;;:39;13430:71;;;::::0;-1:-1:-1;;;13430:71:7;;27574:2:8;13430:71:7::1;::::0;::::1;27556:21:8::0;27613:2;27593:18;;;27586:30;27652:21;27632:18;;;27625:49;27691:18;;13430:71:7::1;27372:343:8::0;13430:71:7::1;13530:10;13511:15;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;13550:7:7::1;:22:::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;13550:22:7;;::::1;-1:-1:-1::0;;;;;;13550:22:7;;::::1;::::0;::::1;::::0;;;13582:8:::1;:24:::0;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;13631:148:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;13631:148:7;;;-1:-1:-1;;;;;13721:15:7::1;13631:148:::0;::::1;13550:22;13631:148:::0;;::::1;::::0;;;;;::::1;::::0;;;;;;13617:8:::1;:163:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;::::1;-1:-1:-1::0;;;13617:163:7::1;-1:-1:-1::0;;13617:163:7;;;;;;::::1;::::0;;;;::::1;::::0;;13790:30;;;:11:::1;:30:::0;;;;:37;;-1:-1:-1;;13790:37:7::1;::::0;::::1;::::0;;13858:14;;13550:22;;13858:16:::1;::::0;::::1;:::i;:::-;13842:66;::::0;1298:25:8;;;13842:66:7::1;::::0;1286:2:8;1271:18;13842:66:7::1;;;;;;;13333:582:::0;;;:::o;18233:89::-;695:10:5;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;18305:10:7::1;:8;:10::i;19056:191::-:0;19179:61;19197:3;19202:6;19210:10;19222:8;19232:1;19235;19238;19179:17;:61::i;:::-;19056:191;;;;;;:::o;8979:447::-;1159:7:6;;9076:4:7;;-1:-1:-1;;;1159:7:6;;;;1402:9;1394:38;;;;-1:-1:-1;;;1394:38:6;;19389:2:8;1394:38:6;;;19371:21:8;19428:2;19408:18;;;19401:30;-1:-1:-1;;;19447:18:8;;;19440:46;19503:18;;1394:38:6;19187:340:8;1394:38:6;9093:20:7::1;9115:21:::0;9138:19:::1;9159:15:::0;9178:38:::1;9200:3;9205:10;9178:21;:38::i;:::-;9227:49:::0;;-1:-1:-1;;;;;9227:49:7;;;-1:-1:-1;;;9227:49:7::1;::::0;::::1;;::::0;;9092:124;;-1:-1:-1;9092:124:7;;-1:-1:-1;9092:124:7;-1:-1:-1;9092:124:7;-1:-1:-1;9286:54:7::1;9301:3:::0;9306:2;9092:124;9322:17;9286:14:::1;:54::i;:::-;9356:36;::::0;1298:25:8;;;9376:3:7;;9364:10:::1;::::0;9356:36:::1;::::0;1286:2:8;1271:18;9356:36:7::1;;;;;;;9409:10:::0;8979:447;-1:-1:-1;;;;;;;8979:447:7:o;2076:27::-;;;;;;;;;;;;1468:338:0;1558:9;1553:247;1573:16;;;1553:247;;;1611:12;;1656:4;1675:5;;1681:1;1675:8;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;1648:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1610:74;;;;1703:7;1702:8;:24;;;;;1714:12;1702:24;1698:92;;;1753:21;1767:6;1753:13;:21::i;1698:92::-;1596:204;;1591:3;;;;;:::i;:::-;;;;1553:247;;16363:1148:7;695:10:5;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;16842:18:7::1;16839:78;;;16876:12;:30:::0;;;16839:78:::1;16929:22;16926:96;;;16967:19;:44:::0;;-1:-1:-1;;16967:44:7::1;-1:-1:-1::0;;;;;16967:44:7;::::1;;::::0;;16926:96:::1;17034:42;17031:156;;;17092:39;:84:::0;;-1:-1:-1;;17092:84:7::1;-1:-1:-1::0;;;;;;;;17092:84:7;::::1;;;::::0;;17031:156:::1;17199:29;17196:117;;;17244:26;:58:::0;;;17196:117:::1;17325:22;17322:90;;;17363:16;:38:::0;;;17322:90:::1;17424:18;17421:84;;;-1:-1:-1::0;17458:15:7::1;:36:::0;-1:-1:-1;;;;;;;;;;16363:1148:7:o;9730:863::-;1159:7:6;;9855:4:7;;-1:-1:-1;;;1159:7:6;;;;1402:9;1394:38;;;;-1:-1:-1;;;1394:38:6;;19389:2:8;1394:38:6;;;19371:21:8;19428:2;19408:18;;;19401:30;-1:-1:-1;;;19447:18:8;;;19440:46;19503:18;;1394:38:6;19187:340:8;1394:38:6;9872:20:7::1;9894:21:::0;9917:19:::1;9938:15:::0;9957:38:::1;9979:3;9984:10;9957:21;:38::i;:::-;9871:124;;;;;;;;-1:-1:-1::0;;;;;10068:4:7::1;:19;;;10060:6;-1:-1:-1::0;;;;;10055:12:7::1;:32;;;;:::i;:::-;:52;;;;:::i;:::-;10031:77;::::0;10035:14;10031:77:::1;:::i;:::-;10006:103:::0;;-1:-1:-1;;;;;10006:103:7;;;-1:-1:-1;;;10006:103:7::1;::::0;;::::1;::::0;;::::1;::::0;;10134:6;;10006:4;;:15:::1;::::0;10119:21:::1;::::0;10134:6;;10119:21;;::::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;10119:21:7::1;;;;;-1:-1:-1::0;;;;;10119:21:7::1;;;;;;10151:49;10166:3;10171:9;10182:10;10194:5;10151:14;:49::i;:::-;10211:19;10233:8;10242:3;10233:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;10233:13:7::1;::::0;-1:-1:-1;10260:32:7;;10256:140:::1;;10351:11:::0;;10308:77:::1;::::0;-1:-1:-1;;;10308:77:7;;::::1;::::0;::::1;18100:25:8::0;;;-1:-1:-1;;;;;18214:15:8;;;18194:18;;;18187:43;10351:11:7;;::::1;18246:18:8::0;;;18239:43;10364:10:7::1;18359:18:8::0;;;18352:43;-1:-1:-1;;;;;18432:15:8;;;18411:19;;;18404:44;10308:29:7;::::1;::::0;::::1;::::0;18072:19:8;;10308:77:7::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;10256:140;10406:43;10432:8;10442:6;-1:-1:-1::0;;;;;10406:43:7::1;:7;10414:3;10406:12;;;;;;;;:::i;:43::-;10465;::::0;-1:-1:-1;;;;;18623:47:8;;18605:66;;-1:-1:-1;;;;;10465:43:7;::::1;::::0;10486:3;;10474:10:::1;::::0;10465:43:::1;::::0;18593:2:8;18578:18;10465:43:7::1;;;;;;;10523:36;::::0;1298:25:8;;;10543:3:7;;10531:10:::1;::::0;10523:36:::1;::::0;1286:2:8;1271:18;10523:36:7::1;;;;;;;-1:-1:-1::0;10576:10:7;9730:863;-1:-1:-1;;;;;;;;9730:863:7:o;1352:192:5:-;695:10;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;-1:-1:-1;;;;;1441:23:5;::::1;1433:74;;;::::0;-1:-1:-1;;;1433:74:5;;27922:2:8;1433:74:5::1;::::0;::::1;27904:21:8::0;27961:2;27941:18;;;27934:30;28000:34;27980:18;;;27973:62;-1:-1:-1;;;28051:18:8;;;28044:36;28097:19;;1433:74:5::1;27720:402:8::0;1433:74:5::1;1517:8;:20:::0;;-1:-1:-1;;;;;;1517:20:5::1;-1:-1:-1::0;;;;;1517:20:5;;;::::1;::::0;;;::::1;::::0;;1352:192::o;14993:1070:7:-;695:10:5;684:7;518;544:6;-1:-1:-1;;;;;544:6:5;;472:85;684:7;-1:-1:-1;;;;;684:21:5;;676:66;;;;-1:-1:-1;;;676:66:5;;24272:2:8;676:66:5;;;24254:21:8;;;24291:18;;;24284:30;-1:-1:-1;;;;;;;;;;;24330:18:8;;;24323:62;24402:18;;676:66:5;24070:356:8;676:66:5;15091:19:7::1;::::0;-1:-1:-1;;;;;15091:19:7::1;15072:15;:38;15069:514;;15240:39;::::0;15219:61:::1;::::0;-1:-1:-1;;;15240:39:7;::::1;-1:-1:-1::0;;;;;15240:39:7::1;15219:15;:61;:::i;:::-;15205:12;;:76;;;;:::i;:::-;15175:26;;:106;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;15069:514:7::1;::::0;-1:-1:-1;15069:514:7::1;;15411:19;::::0;-1:-1:-1;;;;;15411:19:7;;::::1;-1:-1:-1::0;;;15369:39:7;;::::1;;:61;15366:207;;;15518:39;::::0;15498:59:::1;::::0;-1:-1:-1;;;;;;;;15518:39:7;::::1;::::0;::::1;::::0;15498:19:::1;:59;:::i;:::-;-1:-1:-1::0;;;;;15493:65:7::1;15480:12;;:78;;;;:::i;:::-;15450:26;;:108;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;15366:207:7::1;15592:17;15639:16;;15612:26;;:43;;;;:::i;:::-;15689:33;::::0;-1:-1:-1;;;15689:33:7;;15716:4:::1;15689:33;::::0;::::1;9941:74:8::0;15592:63:7;;-1:-1:-1;15665:21:7::1;::::0;15592:63;;-1:-1:-1;;;;;15689:8:7::1;:18;::::0;::::1;::::0;9914::8;;15689:33:7::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;;:::i;:::-;15665:70:::0;-1:-1:-1;15745:26:7::1;15774:32;15791:15:::0;15665:70;15774:32:::1;:::i;:::-;15745:61:::0;-1:-1:-1;15861:32:7::1;15878:15:::0;15861:16;:32:::1;:::i;:::-;15845:48;::::0;:15:::1;:48;:::i;:::-;15816:19;:78:::0;;15904:12:::1;:30:::0;;;15993:15:::1;-1:-1:-1::0;;;;;15944:65:7;;::::1;-1:-1:-1::0;;;15944:65:7::1;-1:-1:-1::0;;15944:65:7;;;15816:78;::::1;15944:65:::0;;;;;;;::::1;::::0;;16024:32:::1;::::0;::::1;::::0;::::1;::::0;15919:15;1298:25:8;;1286:2;1271:18;;1152:177;16024:32:7::1;;;;;;;;15059:1004;;;14993:1070:::0;:::o;20249:115::-;20299:4;20322:35;20334:3;20339:10;20351:5;20322:11;:35::i;:::-;20315:42;20249:115;-1:-1:-1;;20249:115:7:o;11288:382::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;11460:15:7;11471:3;11460:10;:15::i;:::-;11492:13;;;;:8;:13;;;;;;;;-1:-1:-1;;;;;11492:18:7;;;;;;;;;11555:19;;11542:11;;11453:22;;-1:-1:-1;11492:18:7;;-1:-1:-1;;;;;;2702:8:7;11537:37;;11555:19;-1:-1:-1;;;;;11542:11:7;11537:37;:::i;:::-;:57;;;;:::i;:::-;11646:15;;11520:74;;-1:-1:-1;11622:40:7;;-1:-1:-1;;;11646:15:7;;;;11520:74;11622:40;:::i;:::-;11604:59;;11288:382;;;;;;;:::o;3507:333:1:-;3676:48;;;-1:-1:-1;;;;;26074:55:8;;;3676:48:1;;;26056:74:8;26146:18;;;;26139:34;;;3676:48:1;;;;;;;;;;26029:18:8;;;;3676:48:1;;;;;;;-1:-1:-1;;;;;3676:48:1;-1:-1:-1;;;3676:48:1;;;3656:69;;-1:-1:-1;;;;3656:19:1;;;;:69;;3676:48;3656:69;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3620:105;;;;3743:7;:57;;;;-1:-1:-1;3755:11:1;;:16;;:44;;;3786:4;3775:24;;;;;;;;;;;;:::i;:::-;3735:98;;;;-1:-1:-1;;;3735:98:1;;28608:2:8;3735:98:1;;;28590:21:8;28647:2;28627:18;;;28620:30;28686;28666:18;;;28659:58;28734:18;;3735:98:1;28406:352:8;3735:98:1;3610:230;;3507:333;;;:::o;4155:374::-;4350:59;;;-1:-1:-1;;;;;29044:15:8;;;4350:59:1;;;29026:34:8;29096:15;;;29076:18;;;29069:43;29128:18;;;;29121:34;;;4350:59:1;;;;;;;;;;28938:18:8;;;;4350:59:1;;;;;;;-1:-1:-1;;;;;4350:59:1;-1:-1:-1;;;4350:59:1;;;4330:80;;-1:-1:-1;;;;4330:19:1;;;;:80;;4350:59;4330:80;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4294:116;;;;4428:7;:57;;;;-1:-1:-1;4440:11:1;;:16;;:44;;;4471:4;4460:24;;;;;;;;;;;;:::i;:::-;4420:102;;;;-1:-1:-1;;;4420:102:1;;29368:2:8;4420:102:1;;;29350:21:8;;;29387:18;;;29380:30;29446:34;29426:18;;;29419:62;29498:18;;4420:102:1;29166:356:8;360:487:0;432:13;593:2;572:11;:18;:23;568:67;;;-1:-1:-1;;597:38:0;;;;;;;;;;;;;;;;;;360:487::o;568:67::-;735:4;722:11;718:22;703:37;;777:11;766:33;;;;;;;;;;;;:::i;1865:190:5:-;1939:16;1958:6;;-1:-1:-1;;;;;1974:18:5;;;-1:-1:-1;;;;;;1974:18:5;;;;;;2007:41;;1958:6;;;;;;;2007:41;;1939:16;2007:41;1929:126;1865:190;:::o;1854:115:6:-;1159:7;;-1:-1:-1;;;1159:7:6;;;;1402:9;1394:38;;;;-1:-1:-1;;;1394:38:6;;19389:2:8;1394:38:6;;;19371:21:8;19428:2;19408:18;;;19401:30;-1:-1:-1;;;19447:18:8;;;19440:46;19503:18;;1394:38:6;19187:340:8;1394:38:6;1923:4:::1;1913:14:::0;;-1:-1:-1;;;;1913:14:6::1;-1:-1:-1::0;;;1913:14:6::1;::::0;;1942:20:::1;1949:12;719:10:2::0;;640:96;1949:12:6::1;1942:20;::::0;-1:-1:-1;;;;;9959:55:8;;;9941:74;;9929:2;9914:18;1942:20:6::1;;;;;;;1854:115::o:0;2101:117::-;1159:7;;-1:-1:-1;;;1159:7:6;;;;1660:41;;;;-1:-1:-1;;;1660:41:6;;30750:2:8;1660:41:6;;;30732:21:8;30789:2;30769:18;;;30762:30;30828:22;30808:18;;;30801:50;30868:18;;1660:41:6;30548:344:8;1660:41:6;2159:7:::1;:15:::0;;-1:-1:-1;;;;2159:15:6::1;::::0;;2189:22:::1;719:10:2::0;2198:12:6::1;640:96:2::0;10599:683:7;10717:17;;10714:139;;10770:12;10750:16;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;10796:46:7;;-1:-1:-1;;;;;;10796:8:7;:21;10818:9;10829:12;10796:21;:46::i;:::-;10863:19;10885:8;10894:3;10885:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;10885:13:7;;-1:-1:-1;10912:32:7;;10908:368;;10964:68;;-1:-1:-1;;;10964:68:7;;;;;31128:25:8;;;31169:18;;;31162:34;;;11010:10:7;31273:18:8;;;31266:43;-1:-1:-1;;;;;31345:15:8;;;31325:18;;;31318:43;10964:26:7;;;;;31100:19:8;;10964:68:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10960:306;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11098:17;11094:158;;11204:6;11198:13;11189:6;11185:2;11181:15;11174:38;11094:158;11048:218;10960:306;;14:188:8;82:20;;-1:-1:-1;;;;;131:46:8;;121:57;;111:85;;192:1;189;182:12;207:154;-1:-1:-1;;;;;286:5:8;282:54;275:5;272:65;262:93;;351:1;348;341:12;262:93;207:154;:::o;366:118::-;452:5;445:13;438:21;431:5;428:32;418:60;;474:1;471;464:12;489:128;554:20;;583:28;554:20;583:28;:::i;622:525::-;705:6;713;721;729;782:3;770:9;761:7;757:23;753:33;750:53;;;799:1;796;789:12;750:53;835:9;822:23;812:33;;864:38;898:2;887:9;883:18;864:38;:::i;:::-;854:48;;952:2;941:9;937:18;924:32;965:31;990:5;965:31;:::i;:::-;1015:5;-1:-1:-1;1072:2:8;1057:18;;1044:32;1085:30;1044:32;1085:30;:::i;:::-;622:525;;;;-1:-1:-1;622:525:8;;-1:-1:-1;;622:525:8:o;1334:180::-;1393:6;1446:2;1434:9;1425:7;1421:23;1417:32;1414:52;;;1462:1;1459;1452:12;1414:52;-1:-1:-1;1485:23:8;;1334:180;-1:-1:-1;1334:180:8:o;1519:254::-;1587:6;1595;1648:2;1636:9;1627:7;1623:23;1619:32;1616:52;;;1664:1;1661;1654:12;1616:52;1700:9;1687:23;1677:33;;1729:38;1763:2;1752:9;1748:18;1729:38;:::i;:::-;1719:48;;1519:254;;;;;:::o;2153:315::-;2221:6;2229;2282:2;2270:9;2261:7;2257:23;2253:32;2250:52;;;2298:1;2295;2288:12;2250:52;2334:9;2321:23;2311:33;;2394:2;2383:9;2379:18;2366:32;2407:31;2432:5;2407:31;:::i;:::-;2457:5;2447:15;;;2153:315;;;;;:::o;2473:347::-;2524:8;2534:6;2588:3;2581:4;2573:6;2569:17;2565:27;2555:55;;2606:1;2603;2596:12;2555:55;-1:-1:-1;2629:20:8;;-1:-1:-1;;;;;2661:30:8;;2658:50;;;2704:1;2701;2694:12;2658:50;2741:4;2733:6;2729:17;2717:29;;2793:3;2786:4;2777:6;2769;2765:19;2761:30;2758:39;2755:59;;;2810:1;2807;2800:12;2755:59;2473:347;;;;;:::o;2825:687::-;2922:6;2930;2938;2946;2954;3007:3;2995:9;2986:7;2982:23;2978:33;2975:53;;;3024:1;3021;3014:12;2975:53;3060:9;3047:23;3037:33;;3089:38;3123:2;3112:9;3108:18;3089:38;:::i;:::-;3079:48;;3177:2;3166:9;3162:18;3149:32;3190:31;3215:5;3190:31;:::i;:::-;3240:5;-1:-1:-1;3296:2:8;3281:18;;3268:32;-1:-1:-1;;;;;3312:30:8;;3309:50;;;3355:1;3352;3345:12;3309:50;3394:58;3444:7;3435:6;3424:9;3420:22;3394:58;:::i;:::-;2825:687;;;;-1:-1:-1;2825:687:8;;-1:-1:-1;3471:8:8;;3368:84;2825:687;-1:-1:-1;;;2825:687:8:o;3517:389::-;3594:6;3602;3610;3663:2;3651:9;3642:7;3638:23;3634:32;3631:52;;;3679:1;3676;3669:12;3631:52;3715:9;3702:23;3692:33;;3744:38;3778:2;3767:9;3763:18;3744:38;:::i;:::-;3734:48;;3832:2;3821:9;3817:18;3804:32;3845:31;3870:5;3845:31;:::i;:::-;3895:5;3885:15;;;3517:389;;;;;:::o;3911:856::-;4044:6;4052;4060;4068;4076;4084;4137:3;4125:9;4116:7;4112:23;4108:33;4105:53;;;4154:1;4151;4144:12;4105:53;4190:9;4177:23;4167:33;;4219:38;4253:2;4242:9;4238:18;4219:38;:::i;:::-;4209:48;;4307:2;4296:9;4292:18;4279:32;4320:31;4345:5;4320:31;:::i;:::-;4370:5;-1:-1:-1;4427:2:8;4412:18;;4399:32;4440:33;4399:32;4440:33;:::i;:::-;4492:7;-1:-1:-1;4550:3:8;4535:19;;4522:33;-1:-1:-1;;;;;4567:30:8;;4564:50;;;4610:1;4607;4600:12;4564:50;4649:58;4699:7;4690:6;4679:9;4675:22;4649:58;:::i;:::-;3911:856;;;;-1:-1:-1;3911:856:8;;-1:-1:-1;3911:856:8;;4726:8;;3911:856;-1:-1:-1;;;3911:856:8:o;4772:156::-;4838:20;;4898:4;4887:16;;4877:27;;4867:55;;4918:1;4915;4908:12;4933:890;5067:6;5075;5083;5091;5099;5107;5115;5123;5176:3;5164:9;5155:7;5151:23;5147:33;5144:53;;;5193:1;5190;5183:12;5144:53;5232:9;5219:23;5251:31;5276:5;5251:31;:::i;:::-;5301:5;-1:-1:-1;5358:2:8;5343:18;;5330:32;5371:33;5330:32;5371:33;:::i;:::-;5423:7;-1:-1:-1;5482:2:8;5467:18;;5454:32;5495:33;5454:32;5495:33;:::i;:::-;5547:7;-1:-1:-1;5601:2:8;5586:18;;5573:32;;-1:-1:-1;5652:3:8;5637:19;;5624:33;;-1:-1:-1;5676:37:8;5708:3;5693:19;;5676:37;:::i;:::-;5666:47;;5760:3;5749:9;5745:19;5732:33;5722:43;;5812:3;5801:9;5797:19;5784:33;5774:43;;4933:890;;;;;;;;;;;:::o;6496:367::-;6559:8;6569:6;6623:3;6616:4;6608:6;6604:17;6600:27;6590:55;;6641:1;6638;6631:12;6590:55;-1:-1:-1;6664:20:8;;-1:-1:-1;;;;;6696:30:8;;6693:50;;;6739:1;6736;6729:12;6693:50;6776:4;6768:6;6764:17;6752:29;;6836:3;6829:4;6819:6;6816:1;6812:14;6804:6;6800:27;6796:38;6793:47;6790:67;;;6853:1;6850;6843:12;6868:437;6954:6;6962;7015:2;7003:9;6994:7;6990:23;6986:32;6983:52;;;7031:1;7028;7021:12;6983:52;7071:9;7058:23;-1:-1:-1;;;;;7096:6:8;7093:30;7090:50;;;7136:1;7133;7126:12;7090:50;7175:70;7237:7;7228:6;7217:9;7213:22;7175:70;:::i;:::-;7264:8;;7149:96;;-1:-1:-1;6868:437:8;-1:-1:-1;;;;6868:437:8:o;7955:338::-;8051:6;8059;8103:9;8094:7;8090:23;8133:3;8129:2;8125:12;8122:32;;;8150:1;8147;8140:12;8122:32;8173:23;;;-1:-1:-1;8230:2:8;-1:-1:-1;;8212:16:8;;8208:25;8205:45;;;8246:1;8243;8236:12;8205:45;;8284:2;8273:9;8269:18;8259:28;;7955:338;;;;;:::o;8298:667::-;8409:6;8417;8425;8433;8441;8449;8457;8510:3;8498:9;8489:7;8485:23;8481:33;8478:53;;;8527:1;8524;8517:12;8478:53;8563:9;8550:23;8540:33;;8592:38;8626:2;8615:9;8611:18;8592:38;:::i;:::-;8582:48;;8680:2;8669:9;8665:18;8652:32;8693:31;8718:5;8693:31;:::i;:::-;8743:5;-1:-1:-1;8795:2:8;8780:18;;8767:32;;-1:-1:-1;8818:37:8;8850:3;8835:19;;8818:37;:::i;:::-;8808:47;;8902:3;8891:9;8887:19;8874:33;8864:43;;8954:3;8943:9;8939:19;8926:33;8916:43;;8298:667;;;;;;;;;;:::o;8970:486::-;9046:6;9054;9062;9115:2;9103:9;9094:7;9090:23;9086:32;9083:52;;;9131:1;9128;9121:12;9083:52;9167:9;9154:23;9144:33;;9227:2;9216:9;9212:18;9199:32;9240:31;9265:5;9240:31;:::i;:::-;9290:5;-1:-1:-1;9347:2:8;9332:18;;9319:32;9393:2;9382:23;;;9370:36;;9360:64;;9420:1;9417;9410:12;9461:315;9529:6;9537;9590:2;9578:9;9569:7;9565:23;9561:32;9558:52;;;9606:1;9603;9596:12;9558:52;9645:9;9632:23;9664:31;9689:5;9664:31;:::i;:::-;9714:5;9766:2;9751:18;;;;9738:32;;-1:-1:-1;;;9461:315:8:o;10026:247::-;10085:6;10138:2;10126:9;10117:7;10113:23;10109:32;10106:52;;;10154:1;10151;10144:12;10106:52;10193:9;10180:23;10212:31;10237:5;10212:31;:::i;11112:537::-;11213:6;11221;11229;11237;11290:3;11278:9;11269:7;11265:23;11261:33;11258:53;;;11307:1;11304;11297:12;11258:53;11343:9;11330:23;11320:33;;11400:2;11389:9;11385:18;11372:32;11362:42;;11454:2;11443:9;11439:18;11426:32;11467:31;11492:5;11467:31;:::i;12193:488::-;12302:6;12310;12318;12371:2;12359:9;12350:7;12346:23;12342:32;12339:52;;;12387:1;12384;12377:12;12339:52;12423:9;12410:23;12400:33;;12483:2;12472:9;12468:18;12455:32;12496:31;12521:5;12496:31;:::i;12686:531::-;12788:6;12796;12804;12812;12820;12828;12881:3;12869:9;12860:7;12856:23;12852:33;12849:53;;;12898:1;12895;12888:12;12849:53;12934:9;12921:23;12911:33;;12963:38;12997:2;12986:9;12982:18;12963:38;:::i;:::-;12953:48;;13048:2;13037:9;13033:18;13020:32;13010:42;;13071:36;13103:2;13092:9;13088:18;13071:36;:::i;:::-;13061:46;;13154:3;13143:9;13139:19;13126:33;13116:43;;13206:3;13195:9;13191:19;13178:33;13168:43;;12686:531;;;;;;;;:::o;13222:450::-;13296:6;13304;13312;13365:2;13353:9;13344:7;13340:23;13336:32;13333:52;;;13381:1;13378;13371:12;13333:52;13417:9;13404:23;13394:33;;13477:2;13466:9;13462:18;13449:32;13490:31;13515:5;13490:31;:::i;:::-;13540:5;-1:-1:-1;13597:2:8;13582:18;;13569:32;13610:30;13569:32;13610:30;:::i;13926:577::-;14029:6;14037;14045;14098:2;14086:9;14077:7;14073:23;14069:32;14066:52;;;14114:1;14111;14104:12;14066:52;14154:9;14141:23;-1:-1:-1;;;;;14179:6:8;14176:30;14173:50;;;14219:1;14216;14209:12;14173:50;14258:70;14320:7;14311:6;14300:9;14296:22;14258:70;:::i;:::-;14347:8;;-1:-1:-1;14232:96:8;-1:-1:-1;;14432:2:8;14417:18;;14404:32;14445:28;14404:32;14445:28;:::i;14508:129::-;-1:-1:-1;;;;;14586:5:8;14582:30;14575:5;14572:41;14562:69;;14627:1;14624;14617:12;14642:1345;14780:6;14788;14796;14804;14812;14820;14828;14836;14844;14852;14860:7;14869;14923:3;14911:9;14902:7;14898:23;14894:33;14891:53;;;14940:1;14937;14930:12;14891:53;14976:9;14963:23;14953:33;;15036:2;15025:9;15021:18;15008:32;15049:28;15071:5;15049:28;:::i;:::-;15096:5;-1:-1:-1;15153:2:8;15138:18;;15125:32;15166;15125;15166;:::i;:::-;15217:7;-1:-1:-1;15276:2:8;15261:18;;15248:32;15289:30;15248:32;15289:30;:::i;:::-;15338:7;-1:-1:-1;15397:3:8;15382:19;;15369:33;15411:32;15369:33;15411:32;:::i;:::-;15462:7;-1:-1:-1;15521:3:8;15506:19;;15493:33;15535:30;15493:33;15535:30;:::i;:::-;15584:7;-1:-1:-1;15638:3:8;15623:19;;15610:33;;-1:-1:-1;15695:3:8;15680:19;;15667:33;15709:30;15667:33;15709:30;:::i;:::-;15758:7;-1:-1:-1;15812:3:8;15797:19;;15784:33;;-1:-1:-1;15836:36:8;15867:3;15852:19;;15836:36;:::i;:::-;15826:46;;15920:3;15909:9;15905:19;15892:33;15881:44;;15945:36;15976:3;15965:9;15961:19;15945:36;:::i;:::-;15934:47;;14642:1345;;;;;;;;;;;;;;:::o;15992:531::-;16078:6;16086;16094;16102;16155:3;16143:9;16134:7;16130:23;16126:33;16123:53;;;16172:1;16169;16162:12;16123:53;16208:9;16195:23;16185:33;;16237:38;16271:2;16260:9;16256:18;16237:38;:::i;:::-;16227:48;;16325:2;16314:9;16310:18;16297:32;16338:31;16363:5;16338:31;:::i;:::-;16388:5;-1:-1:-1;16445:2:8;16430:18;;16417:32;16458:33;16417:32;16458:33;:::i;16528:127::-;16589:10;16584:3;16580:20;16577:1;16570:31;16620:4;16617:1;16610:15;16644:4;16641:1;16634:15;16660:168;16700:7;16766:1;16762;16758:6;16754:14;16751:1;16748:21;16743:1;16736:9;16729:17;16725:45;16722:71;;;16773:18;;:::i;:::-;-1:-1:-1;16813:9:8;;16660:168::o;16833:217::-;16873:1;16899;16889:132;;16943:10;16938:3;16934:20;16931:1;16924:31;16978:4;16975:1;16968:15;17006:4;17003:1;16996:15;16889:132;-1:-1:-1;17035:9:8;;16833:217::o;17055:398::-;17094:4;17139:1;17135:2;17124:17;17176:1;17172:2;17161:17;17206:1;17201:3;17197:11;17290:3;-1:-1:-1;;;;;17249:39:8;17245:49;17240:3;17236:59;17231:2;17224:10;17220:76;17217:102;;;17299:18;;:::i;:::-;17388:3;-1:-1:-1;;;;;17348:44:8;17343:3;17339:54;17335:2;17331:63;17328:89;;;17397:18;;:::i;:::-;-1:-1:-1;17434:13:8;;;17055:398;-1:-1:-1;;;17055:398:8:o;17458:246::-;17498:4;-1:-1:-1;;;;;17611:10:8;;;;17581;;17633:12;;;17630:38;;;17648:18;;:::i;:::-;17685:13;;17458:246;-1:-1:-1;;;17458:246:8:o;17709:127::-;17770:10;17765:3;17761:20;17758:1;17751:31;17801:4;17798:1;17791:15;17825:4;17822:1;17815:15;18682:500;-1:-1:-1;;;;;18871:6:8;18867:47;18856:9;18849:66;18951:2;18946;18935:9;18931:18;18924:30;18990:6;18985:2;18974:9;18970:18;18963:34;19047:6;19039;19034:2;19023:9;19019:18;19006:48;19103:1;19074:22;;;19098:2;19070:31;;;19063:42;;;;19166:2;19145:15;;;-1:-1:-1;;19141:29:8;19126:45;19122:54;;18682:500;-1:-1:-1;;18682:500:8:o;19532:253::-;19572:3;-1:-1:-1;;;;;19661:2:8;19658:1;19654:10;19691:2;19688:1;19684:10;19722:3;19718:2;19714:12;19709:3;19706:21;19703:47;;;19730:18;;:::i;:::-;19766:13;;19532:253;-1:-1:-1;;;;19532:253:8:o;19790:396::-;19829:3;19873:1;19869:2;19858:17;19910:1;19906:2;19895:17;19940:1;19935:3;19931:11;20019:3;-1:-1:-1;;;;;19979:44:8;19974:3;19970:54;19965:2;19958:10;19954:71;19951:97;;;20028:18;;:::i;:::-;20122:3;-1:-1:-1;;;;;20081:39:8;20077:49;20072:3;20068:59;20064:2;20060:68;20057:94;;;20131:18;;:::i;:::-;-1:-1:-1;20167:13:8;;19790:396;-1:-1:-1;;;19790:396:8:o;21444:184::-;21514:6;21567:2;21555:9;21546:7;21542:23;21538:32;21535:52;;;21583:1;21580;21573:12;21535:52;-1:-1:-1;21606:16:8;;21444:184;-1:-1:-1;21444:184:8:o;21633:229::-;21672:4;-1:-1:-1;;;;;21769:10:8;;;;21739;;21791:12;;;21788:38;;;21806:18;;:::i;21867:125::-;21907:4;21935:1;21932;21929:8;21926:34;;;21940:18;;:::i;:::-;-1:-1:-1;21977:9:8;;21867:125::o;21997:128::-;22037:3;22068:1;22064:6;22061:1;22058:13;22055:39;;;22074:18;;:::i;:::-;-1:-1:-1;22110:9:8;;21997:128::o;22477:135::-;22516:3;-1:-1:-1;;22537:17:8;;22534:43;;;22557:18;;:::i;:::-;-1:-1:-1;22604:1:8;22593:13;;22477:135::o;22617:521::-;22694:4;22700:6;22760:11;22747:25;22854:2;22850:7;22839:8;22823:14;22819:29;22815:43;22795:18;22791:68;22781:96;;22873:1;22870;22863:12;22781:96;22900:33;;22952:20;;;-1:-1:-1;;;;;;22984:30:8;;22981:50;;;23027:1;23024;23017:12;22981:50;23060:4;23048:17;;-1:-1:-1;23091:14:8;23087:27;;;23077:38;;23074:58;;;23128:1;23125;23118:12;23143:271;23326:6;23318;23313:3;23300:33;23282:3;23352:16;;23377:13;;;23352:16;23143:271;-1:-1:-1;23143:271:8:o;23419:258::-;23491:1;23501:113;23515:6;23512:1;23509:13;23501:113;;;23591:11;;;23585:18;23572:11;;;23565:39;23537:2;23530:10;23501:113;;;23632:6;23629:1;23626:13;23623:48;;;-1:-1:-1;;23667:1:8;23649:16;;23642:27;23419:258::o;23682:383::-;23831:2;23820:9;23813:21;23794:4;23863:6;23857:13;23906:6;23901:2;23890:9;23886:18;23879:34;23922:66;23981:6;23976:2;23965:9;23961:18;23956:2;23948:6;23944:15;23922:66;:::i;:::-;24049:2;24028:15;-1:-1:-1;;24024:29:8;24009:45;;;;24056:2;24005:54;;23682:383;-1:-1:-1;;23682:383:8:o;24431:707::-;24596:5;24583:19;24577:4;24570:33;24640:1;24634:4;24630:12;24690:2;24683:5;24679:14;24666:28;24703:32;24727:7;24703:32;:::i;:::-;-1:-1:-1;;;;;24758:7:8;24754:32;24744:42;;24811:10;24805:17;24887:2;-1:-1:-1;;;;;24861:23:8;24857:2;24853:32;24850:40;24838:10;24831:60;24939:2;24932:5;24928:14;24915:28;24952:32;24976:7;24952:32;:::i;:::-;25095:34;25085:7;25081:2;25077:16;25073:57;25068:2;-1:-1:-1;;;;;25026:39:8;25022:2;25018:48;25015:56;25012:119;25000:10;24993:139;;;;;24431:707;;:::o;26184:245::-;26251:6;26304:2;26292:9;26283:7;26279:23;26275:32;26272:52;;;26320:1;26317;26310:12;26272:52;26352:9;26346:16;26371:28;26393:5;26371:28;:::i;27053:314::-;27092:4;27121:9;;;27146:10;;-1:-1:-1;;;27165:19:8;;27158:27;;27142:44;27139:70;;;27189:18;;:::i;:::-;27308:1;27240:66;27236:74;27233:1;27229:82;27225:2;27221:91;27218:117;;;27315:18;;:::i;:::-;-1:-1:-1;;27352:9:8;;27053:314::o;28127:274::-;28256:3;28294:6;28288:13;28310:53;28356:6;28351:3;28344:4;28336:6;28332:17;28310:53;:::i;:::-;28379:16;;;;;28127:274;-1:-1:-1;;28127:274:8:o;29527:127::-;29588:10;29583:3;29579:20;29576:1;29569:31;29619:4;29616:1;29609:15;29643:4;29640:1;29633:15;29659:884;29739:6;29792:2;29780:9;29771:7;29767:23;29763:32;29760:52;;;29808:1;29805;29798:12;29760:52;29841:9;29835:16;-1:-1:-1;;;;;29911:2:8;29903:6;29900:14;29897:34;;;29927:1;29924;29917:12;29897:34;29965:6;29954:9;29950:22;29940:32;;30010:7;30003:4;29999:2;29995:13;29991:27;29981:55;;30032:1;30029;30022:12;29981:55;30061:2;30055:9;30083:2;30079;30076:10;30073:36;;;30089:18;;:::i;:::-;30164:2;30158:9;30132:2;30218:13;;-1:-1:-1;;30214:22:8;;;30238:2;30210:31;30206:40;30194:53;;;30262:18;;;30282:22;;;30259:46;30256:72;;;30308:18;;:::i;:::-;30348:10;30344:2;30337:22;30383:2;30375:6;30368:18;30423:7;30418:2;30413;30409;30405:11;30401:20;30398:33;30395:53;;;30444:1;30441;30434:12;30395:53;30457:55;30509:2;30504;30496:6;30492:15;30487:2;30483;30479:11;30457:55;:::i
Swarm Source
ipfs://a03de4131a6d30808db82b276914915e0cdfdf70921726ce59ac5ee449423c13
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$1,198.93
Net Worth in ETH
0.527434
Token Allocations
ZIP
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| OP | 100.00% | $0.012247 | 97,898.7301 | $1,198.93 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.