Source Code
Latest 25 from a total of 2,307 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Emergency Unstak... | 24165420 | 68 days ago | IN | 0 ETH | 0.00003431 | ||||
| Emergency Unstak... | 24165415 | 68 days ago | IN | 0 ETH | 0.00002594 | ||||
| Emergency Unstak... | 24165327 | 68 days ago | IN | 0 ETH | 0.00002089 | ||||
| Emergency Unstak... | 24165316 | 68 days ago | IN | 0 ETH | 0.00002862 | ||||
| Sweep Remaining ... | 22675905 | 276 days ago | IN | 0 ETH | 0.00017121 | ||||
| Emergency Unstak... | 22498844 | 301 days ago | IN | 0 ETH | 0.00029016 | ||||
| Sweep Remaining ... | 22463325 | 306 days ago | IN | 0 ETH | 0.00004257 | ||||
| Sweep Remaining ... | 22463325 | 306 days ago | IN | 0 ETH | 0.00004257 | ||||
| Sweep Remaining ... | 22463323 | 306 days ago | IN | 0 ETH | 0.0000402 | ||||
| Unstake | 22454265 | 307 days ago | IN | 0 ETH | 0.00088268 | ||||
| Claim Reward | 22454258 | 307 days ago | IN | 0 ETH | 0.0004971 | ||||
| Unstake | 22442539 | 309 days ago | IN | 0 ETH | 0.00070659 | ||||
| Unstake | 22440713 | 309 days ago | IN | 0 ETH | 0.00228106 | ||||
| Unstake | 22433894 | 310 days ago | IN | 0 ETH | 0.0002816 | ||||
| Unstake | 22433138 | 310 days ago | IN | 0 ETH | 0.00051389 | ||||
| Unstake | 22430580 | 311 days ago | IN | 0 ETH | 0.00021725 | ||||
| Unstake | 22429922 | 311 days ago | IN | 0 ETH | 0.00020299 | ||||
| Unstake | 22429693 | 311 days ago | IN | 0 ETH | 0.00024618 | ||||
| Unstake | 22428690 | 311 days ago | IN | 0 ETH | 0.00009582 | ||||
| Unstake | 22428632 | 311 days ago | IN | 0 ETH | 0.00020053 | ||||
| Unstake | 22427927 | 311 days ago | IN | 0 ETH | 0.00034042 | ||||
| Unstake | 22427923 | 311 days ago | IN | 0 ETH | 0.00034372 | ||||
| Claim Reward | 22427920 | 311 days ago | IN | 0 ETH | 0.00016512 | ||||
| Claim Reward | 22427916 | 311 days ago | IN | 0 ETH | 0.00019034 | ||||
| Unstake | 22427689 | 311 days ago | IN | 0 ETH | 0.00023953 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DogeFatherStaking
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-03-30
*/
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
library SafeERC20 {
error SafeERC20FailedOperation(address token);
error SafeERC20FailedDecreaseAllowance(
address spender,
uint256 currentAllowance,
uint256 requestedDecrease
);
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(
token,
abi.encodeCall(token.transferFrom, (from, to, value))
);
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 requestedDecrease
) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(
spender,
currentAllowance,
requestedDecrease
);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
function forceApprove(
IERC20 token,
address spender,
uint256 value
) internal {
bytes memory approvalCall = abi.encodeCall(
token.approve,
(spender, value)
);
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(
token,
abi.encodeCall(token.approve, (spender, 0))
);
_callOptionalReturn(token, approvalCall);
}
}
function transferAndCallRelaxed(
IERC1363 token,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
safeTransfer(token, to, value);
} else if (!token.transferAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
function transferFromAndCallRelaxed(
IERC1363 token,
address from,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
safeTransferFrom(token, from, to, value);
} else if (!token.transferFromAndCall(from, to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
function approveAndCallRelaxed(
IERC1363 token,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
forceApprove(token, to, value);
} else if (!token.approveAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
uint256 returnSize;
uint256 returnValue;
assembly ("memory-safe") {
let success := call(
gas(),
token,
0,
add(data, 0x20),
mload(data),
0,
0x20
)
// bubble errors
if iszero(success) {
let ptr := mload(0x40)
returndatacopy(ptr, 0, returndatasize())
revert(ptr, returndatasize())
}
returnSize := returndatasize()
returnValue := mload(0)
}
if (
returnSize == 0 ? address(token).code.length == 0 : returnValue != 1
) {
revert SafeERC20FailedOperation(address(token));
}
}
function _callOptionalReturnBool(
IERC20 token,
bytes memory data
) private returns (bool) {
bool success;
uint256 returnSize;
uint256 returnValue;
assembly ("memory-safe") {
success := call(
gas(),
token,
0,
add(data, 0x20),
mload(data),
0,
0x20
)
returnSize := returndatasize()
returnValue := mload(0)
}
return
success &&
(
returnSize == 0
? address(token).code.length > 0
: returnValue == 1
);
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
}
interface IERC1363 is IERC20, IERC165 {
function transferAndCall(address to, uint256 value) external returns (bool);
function transferAndCall(
address to,
uint256 value,
bytes calldata data
) external returns (bool);
function transferFromAndCall(
address from,
address to,
uint256 value
) external returns (bool);
function transferFromAndCall(
address from,
address to,
uint256 value,
bytes calldata data
) external returns (bool);
function approveAndCall(
address spender,
uint256 value
) external returns (bool);
function approveAndCall(
address spender,
uint256 value,
bytes calldata data
) external returns (bool);
}
abstract contract Ownable is Context {
address private _owner;
error OwnableUnauthorizedAccount(address account);
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
abstract contract ReentrancyGuard {
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
_status = ENTERED;
}
function _nonReentrantAfter() private {
_status = NOT_ENTERED;
}
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}
contract DogeFatherStaking is ReentrancyGuard, Ownable {
using SafeERC20 for IERC20;
// --- Tokens ---
IERC20 public stakingToken;
IERC20 public rewardToken;
// --- Lock-up Periods ---
uint256 public constant SEVEN_DAYS = 7 days; // 7 days
uint256 public constant FIVETEEN_DAYS = 15 days; // 15 days
uint256 public constant THIRTY_DAYS = 30 days; // 30 days
// --- APRs (in basis points, e.g., 2500 = 25.00%) ---
uint256 public constant sevenDaysAPR = 2000;
uint256 public constant fiveteenDaysAPR = 4000;
uint256 public constant thirtyDaysAPR = 6000;
// reward tracking
uint256 public totalDistributedRewards;
// --- Global Staking State ---
uint256 public totalStakedAmount;
uint256 public totalWeightedStake;
address private penaltyRecipient;
address private penaltyRecipient2;
uint256 public constant SWEEP_GRACE_PERIOD = 40 days;
// --- Injection Parameters ---
uint256 public monthlyDistributionAmount;
uint256 public DISTRIBUTION_INTERVAL = THIRTY_DAYS;
// --- Reward Accumulator ---
uint256 public constant PRECISION = 1e18;
uint256 public accRewardPerWeight;
uint256 public lastRewardUpdate;
// --- Staking Deadline ---
uint256 public stakingStartTime;
uint256 public constant STAKING_DEADLINE = THIRTY_DAYS;
// --- Stake Data ---
struct Stake {
uint256 amount;
uint256 startTime;
uint256 lockUpPeriod;
uint256 apr;
uint256 weightedStake;
uint256 rewardDebt;
}
mapping(address => Stake[]) public stakes;
// --- History ---
struct History {
uint256 time;
uint256 totalWeightedStake;
uint256 accRewardPerWeight;
}
History[] public history;
// --- Events ---
event Staked(
address indexed user,
uint256 amount,
uint256 lockUpPeriod,
uint256 apr
);
event Unstaked(address indexed user, uint256 amount, uint256 reward);
event RewardClaimed(address indexed user, uint256 reward);
event EmergencyUnstaked(
address indexed user,
uint256 amount,
uint256 penalty
);
event RewardTokenSweep(address indexed owner, uint256 amount);
// --- Constructor ---
constructor(
address _stakingToken,
address _rewardToken,
uint256 _monthlyDistributionAmount,
address _penaltyRecipient,
address _penaltyRecipient2
) Ownable(msg.sender) {
require(_stakingToken != address(0), "Zero staking token address");
require(_rewardToken != address(0), "Zero reward token address");
require(_penaltyRecipient != address(0), "Zero address is not allowed");
require(
_penaltyRecipient2 != address(0),
"Zero address is not allowed"
);
stakingToken = IERC20(_stakingToken);
rewardToken = IERC20(_rewardToken);
require(_monthlyDistributionAmount > 0, "Invalid amount");
penaltyRecipient = _penaltyRecipient;
penaltyRecipient2 = _penaltyRecipient2;
// Initialize history time
history.push(History(block.timestamp, 0, 0));
monthlyDistributionAmount = _monthlyDistributionAmount;
stakingStartTime = 0;
renounceOwnership();
}
modifier updateRewards() {
_updateAccumulator();
_;
}
function _updateAccumulator() internal {
if (
block.timestamp <= stakingStartTime + STAKING_DEADLINE &&
totalWeightedStake > 0
) {
uint256 timeDelta = block.timestamp - lastRewardUpdate;
uint256 rewardDelta = (monthlyDistributionAmount *
timeDelta *
PRECISION) / (totalWeightedStake * DISTRIBUTION_INTERVAL);
accRewardPerWeight += rewardDelta;
}
lastRewardUpdate = block.timestamp;
}
function _updateHistory() internal {
if (
history.length > 0 &&
history[history.length - 1].time == block.timestamp
) {
history[history.length - 1].totalWeightedStake = totalWeightedStake;
history[history.length - 1].accRewardPerWeight = accRewardPerWeight;
} else {
history.push(
History(block.timestamp, totalWeightedStake, accRewardPerWeight)
);
}
}
function getAccRewardPerWeightAt(
uint256 targetTime
) internal view returns (uint256) {
if (history.length == 0) return 0;
// Binary search to find the last entry where time <= targetTime
uint256 left = 0;
uint256 right = history.length - 1;
while (left < right) {
uint256 mid = left + (right - left + 1) / 2;
if (history[mid].time <= targetTime) {
left = mid;
} else {
right = mid - 1;
}
}
History memory h = history[left];
if (h.time > targetTime) return 0; // Before first update
if (h.totalWeightedStake == 0) return h.accRewardPerWeight;
uint256 timeDelta = targetTime - h.time;
uint256 rewardDelta = (monthlyDistributionAmount *
timeDelta *
PRECISION) / (h.totalWeightedStake * DISTRIBUTION_INTERVAL);
return h.accRewardPerWeight + rewardDelta;
}
function stake(
uint256 amount,
uint256 lockUpPeriod
) external nonReentrant updateRewards {
require(
stakingStartTime > 0 && block.timestamp >= stakingStartTime,
"Staking has not started yet"
);
// Check if staking is still allowed (within 30 days of deployment)
require(
block.timestamp <= stakingStartTime + STAKING_DEADLINE,
"Staking period has ended"
);
require(amount > 0, "Cannot stake zero tokens");
uint256 minStake = 1000 * (10 ** 9);
require(
amount >= minStake,
"Amount must be greater than or equal to 1000"
);
require(stakes[msg.sender].length < 15, "Maximum stakes reached");
require(
lockUpPeriod == SEVEN_DAYS ||
lockUpPeriod == FIVETEEN_DAYS ||
lockUpPeriod == THIRTY_DAYS,
"Invalid lock-up period"
);
uint256 apr = getAPRForLockupPeriod(lockUpPeriod);
uint256 weighted = (amount * apr) / 10000;
stakes[msg.sender].push(
Stake({
amount: amount,
startTime: block.timestamp,
lockUpPeriod: lockUpPeriod,
apr: apr,
weightedStake: weighted,
rewardDebt: accRewardPerWeight
})
);
totalStakedAmount += amount;
totalWeightedStake += weighted;
_updateHistory();
stakingToken.safeTransferFrom(msg.sender, address(this), amount);
emit Staked(msg.sender, amount, lockUpPeriod, apr);
}
function unstake(uint256 index) external updateRewards nonReentrant {
require(index < stakes[msg.sender].length, "Invalid stake index");
Stake memory userStake = stakes[msg.sender][index];
uint256 stakeEndTime = userStake.startTime + userStake.lockUpPeriod;
require(
block.timestamp >= stakeEndTime,
"Lock-up period not completed"
);
uint256 stakingPeriodEnd = stakingStartTime + STAKING_DEADLINE;
// Determine the reward end time (earlier of stakeEndTime or stakingPeriodEnd)
uint256 rewardEndTime = stakeEndTime < stakingPeriodEnd
? stakeEndTime
: stakingPeriodEnd;
// Since unstaking is only allowed after stakeEndTime, and rewardEndTime <= stakeEndTime,
// we can directly use the accumulator at rewardEndTime
uint256 accAtEnd = getAccRewardPerWeightAt(rewardEndTime);
uint256 reward = (userStake.weightedStake *
(accAtEnd - userStake.rewardDebt)) / PRECISION;
require(
reward <= rewardToken.balanceOf(address(this)),
"Insufficient rewards pool"
);
totalStakedAmount -= userStake.amount;
if (totalWeightedStake > 0) {
totalWeightedStake -= userStake.weightedStake;
}
if (index != stakes[msg.sender].length - 1) {
stakes[msg.sender][index] = stakes[msg.sender][
stakes[msg.sender].length - 1
];
}
stakes[msg.sender].pop();
_updateHistory();
_updateRewardDistributeTracker(reward);
// Transfer staked tokens and rewards to user
stakingToken.safeTransfer(msg.sender, userStake.amount);
rewardToken.safeTransfer(msg.sender, reward);
emit Unstaked(msg.sender, userStake.amount, reward);
}
function claimReward(uint256 index) external nonReentrant updateRewards {
require(index < stakes[msg.sender].length, "Invalid stake index");
Stake storage userStake = stakes[msg.sender][index];
uint256 stakeEndTime = userStake.startTime + userStake.lockUpPeriod;
uint256 stakingPeriodEnd = stakingStartTime + STAKING_DEADLINE;
// Determine the reward end time (earlier of stakeEndTime or stakingPeriodEnd)
uint256 rewardEndTime = stakeEndTime < stakingPeriodEnd
? stakeEndTime
: stakingPeriodEnd;
uint256 effectiveAcc;
if (block.timestamp >= rewardEndTime) {
effectiveAcc = getAccRewardPerWeightAt(rewardEndTime);
} else {
effectiveAcc = accRewardPerWeight;
}
// Calculate pending reward
uint256 reward = (userStake.weightedStake *
(effectiveAcc - userStake.rewardDebt)) / PRECISION;
require(reward > 0, "No rewards to claim");
require(
reward <= rewardToken.balanceOf(address(this)),
"Insufficient rewards pool"
);
_updateRewardDistributeTracker(reward);
// Update rewardDebt to prevent double-claiming
userStake.rewardDebt = effectiveAcc;
// Transfer reward to user
rewardToken.safeTransfer(msg.sender, reward);
emit RewardClaimed(msg.sender, reward);
}
// For frontend
function calculateReward(
Stake memory userStake
) public view returns (uint256) {
uint256 stakeEndTime = userStake.startTime + userStake.lockUpPeriod;
uint256 stakingPeriodEnd = stakingStartTime + STAKING_DEADLINE;
// Determine the reward end time (earlier of stakeEndTime or stakingPeriodEnd)
uint256 rewardEndTime = stakeEndTime < stakingPeriodEnd
? stakeEndTime
: stakingPeriodEnd;
uint256 effectiveAcc;
if (block.timestamp >= rewardEndTime) {
// If current time is past the reward end time, use the accumulator at rewardEndTime
effectiveAcc = getAccRewardPerWeightAt(rewardEndTime);
} else {
// Otherwise, use the current accumulator and add any pending rewards up to the current time
effectiveAcc = accRewardPerWeight;
if (
block.timestamp > lastRewardUpdate &&
totalWeightedStake > 0 &&
block.timestamp <= stakingPeriodEnd
) {
uint256 timeDelta = block.timestamp - lastRewardUpdate;
uint256 pending = (monthlyDistributionAmount *
timeDelta *
PRECISION) / (totalWeightedStake * DISTRIBUTION_INTERVAL);
effectiveAcc += pending;
}
}
return
(userStake.weightedStake * (effectiveAcc - userStake.rewardDebt)) /
PRECISION;
}
function emergencyUnstake(
uint256 stakeIndex
) external nonReentrant updateRewards {
require(stakeIndex < stakes[msg.sender].length, "Invalid stake index");
Stake memory userStake = stakes[msg.sender][stakeIndex];
uint256 penaltyPercent = 2000; // 20%
uint256 totalPenalty = (userStake.amount * penaltyPercent) / 10000;
uint256 penaltyRecipientPortion = (totalPenalty * 75) / 100;
uint256 remainingPenalty = totalPenalty - penaltyRecipientPortion;
stakingToken.safeTransfer(msg.sender, userStake.amount - totalPenalty);
stakingToken.safeTransfer(penaltyRecipient, penaltyRecipientPortion);
stakingToken.safeTransfer(penaltyRecipient2, remainingPenalty);
// Update global staking totals
totalStakedAmount -= userStake.amount;
if (totalWeightedStake > 0) {
totalWeightedStake -= userStake.weightedStake;
}
// Remove the stake
uint256 lastIndex = stakes[msg.sender].length - 1;
if (stakeIndex != lastIndex) {
stakes[msg.sender][stakeIndex] = stakes[msg.sender][lastIndex];
}
stakes[msg.sender].pop();
_updateHistory();
emit EmergencyUnstaked(
msg.sender,
userStake.amount - totalPenalty,
totalPenalty
);
}
function startStaking() external {
require(msg.sender == penaltyRecipient, "Unknow caller");
require(stakingStartTime == 0, "Staking already started");
stakingStartTime = block.timestamp;
lastRewardUpdate = block.timestamp;
}
function _updateRewardDistributeTracker(uint256 rewardAmount) internal {
totalDistributedRewards += rewardAmount;
}
function getStakeCount(address user) external view returns (uint256) {
return stakes[user].length;
}
function getAPRForLockupPeriod(
uint256 lockupPeriod
) public pure returns (uint256) {
if (lockupPeriod == SEVEN_DAYS) return sevenDaysAPR;
if (lockupPeriod == FIVETEEN_DAYS) return fiveteenDaysAPR;
if (lockupPeriod == THIRTY_DAYS) return thirtyDaysAPR;
return 0;
}
function recoverERC20(address token, uint256 amount) external {
require(msg.sender == penaltyRecipient, "Unknow caller");
require(
token != address(stakingToken) && token != address(rewardToken),
"Cannot recover staking/reward tokens"
);
IERC20(token).safeTransfer(msg.sender, amount);
}
function getRewardPoolBalance() public view returns (uint256) {
return rewardToken.balanceOf(address(this));
}
function sweepRemainingRewardTokens() external {
require(msg.sender == penaltyRecipient, "Unknow caller");
uint256 sweepUnlockTime = stakingStartTime +
STAKING_DEADLINE +
SWEEP_GRACE_PERIOD;
require(
block.timestamp > sweepUnlockTime,
"Sweep grace period not yet ended"
);
uint256 remainingBalance = rewardToken.balanceOf(address(this));
require(remainingBalance > 0, "No reward tokens to sweep");
rewardToken.safeTransfer(msg.sender, remainingBalance);
emit RewardTokenSweep(msg.sender, remainingBalance);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_stakingToken","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_monthlyDistributionAmount","type":"uint256"},{"internalType":"address","name":"_penaltyRecipient","type":"address"},{"internalType":"address","name":"_penaltyRecipient2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"}],"name":"EmergencyUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardTokenSweep","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lockUpPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"apr","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"DISTRIBUTION_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FIVETEEN_DAYS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRECISION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SEVEN_DAYS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_DEADLINE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWEEP_GRACE_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"THIRTY_DAYS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accRewardPerWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"lockUpPeriod","type":"uint256"},{"internalType":"uint256","name":"apr","type":"uint256"},{"internalType":"uint256","name":"weightedStake","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"internalType":"struct DogeFatherStaking.Stake","name":"userStake","type":"tuple"}],"name":"calculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeIndex","type":"uint256"}],"name":"emergencyUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fiveteenDaysAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockupPeriod","type":"uint256"}],"name":"getAPRForLockupPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getRewardPoolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStakeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"history","outputs":[{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"totalWeightedStake","type":"uint256"},{"internalType":"uint256","name":"accRewardPerWeight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"monthlyDistributionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sevenDaysAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"lockUpPeriod","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"lockUpPeriod","type":"uint256"},{"internalType":"uint256","name":"apr","type":"uint256"},{"internalType":"uint256","name":"weightedStake","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sweepRemainingRewardTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thirtyDaysAPR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWeightedStake","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":"index","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405262278d00600a55348015610016575f5ffd5b50604051613f12380380613f128339818101604052810190610038919061067c565b3360015f819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100b0575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100a79190610702565b60405180910390fd5b6100bf8161044160201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361012e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012590610775565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361019c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610193906107dd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361020a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020190610845565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026f90610845565b60405180910390fd5b8460025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f831161033a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610331906108ad565b60405180910390fd5b8160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60405180606001604052804281526020015f81526020015f815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f015560208201518160010155604082015181600201555050826009819055505f600d8190555061043761050460201b60201c565b50505050506108cb565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61051261052360201b60201c565b6105215f61044160201b60201c565b565b6105316105bc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166105556105c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146105ba5761057e6105bc60201b60201c565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016105b19190610702565b60405180910390fd5b565b5f33905090565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610618826105ef565b9050919050565b6106288161060e565b8114610632575f5ffd5b50565b5f815190506106438161061f565b92915050565b5f819050919050565b61065b81610649565b8114610665575f5ffd5b50565b5f8151905061067681610652565b92915050565b5f5f5f5f5f60a08688031215610695576106946105eb565b5b5f6106a288828901610635565b95505060206106b388828901610635565b94505060406106c488828901610668565b93505060606106d588828901610635565b92505060806106e688828901610635565b9150509295509295909350565b6106fc8161060e565b82525050565b5f6020820190506107155f8301846106f3565b92915050565b5f82825260208201905092915050565b7f5a65726f207374616b696e6720746f6b656e20616464726573730000000000005f82015250565b5f61075f601a8361071b565b915061076a8261072b565b602082019050919050565b5f6020820190508181035f83015261078c81610753565b9050919050565b7f5a65726f2072657761726420746f6b656e2061646472657373000000000000005f82015250565b5f6107c760198361071b565b91506107d282610793565b602082019050919050565b5f6020820190508181035f8301526107f4816107bb565b9050919050565b7f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000005f82015250565b5f61082f601b8361071b565b915061083a826107fb565b602082019050919050565b5f6020820190508181035f83015261085c81610823565b9050919050565b7f496e76616c696420616d6f756e740000000000000000000000000000000000005f82015250565b5f610897600e8361071b565b91506108a282610863565b602082019050919050565b5f6020820190508181035f8301526108c48161088b565b9050919050565b61363a806108d85f395ff3fe608060405234801561000f575f5ffd5b506004361061020f575f3560e01c80637b0472f011610123578063ae169a50116100ab578063df674ac51161007a578063df674ac5146105b2578063eed9da1f146105d0578063f2fde38b146105ee578063f7c618c11461060a578063fd26eaa1146106285761020f565b8063ae169a501461052a578063b0e380dd14610546578063cf57ee6914610564578063d854fb75146105945761020f565b8063a3c2710d116100f2578063a3c2710d14610480578063a7a38f0b1461049e578063a87df832146104d0578063aa6bb09a146104ee578063aaf5eb681461050c5761020f565b80637b0472f01461040c5780638980f11f146104285780638da5cb5b14610444578063a21df9f0146104625761020f565b80632e17de78116101a65780635be6d82a116101755780635be6d82a1461039e5780636abfd183146103bc578063715018a6146103da57806371b0cbfa146103e457806372f702f3146103ee5761020f565b80632e17de78146103115780633b84b5081461032d578063567e98f91461034b578063584b62a1146103695761020f565b8063199aca60116101e2578063199aca60146102875780631c407718146102a557806321741f0e146102d55780632412b762146102f35761020f565b8063012ce50114610213578063060164801461022f57806308b26b751461025f5780631061311d1461027d575b5f5ffd5b61022d6004803603810190610228919061296b565b610646565b005b61024960048036038101906102449190612abf565b610b91565b6040516102569190612af9565b60405180910390f35b610267610cad565b6040516102749190612af9565b60405180910390f35b610285610cb3565b005b61028f610f22565b60405161029c9190612af9565b60405180910390f35b6102bf60048036038101906102ba919061296b565b610f29565b6040516102cc9190612af9565b60405180910390f35b6102dd610f6f565b6040516102ea9190612af9565b60405180910390f35b6102fb610f75565b6040516103089190612af9565b60405180910390f35b61032b6004803603810190610326919061296b565b610f7c565b005b6103356115c0565b6040516103429190612af9565b60405180910390f35b6103536115c6565b6040516103609190612af9565b60405180910390f35b610383600480360381019061037e9190612b6c565b6115cc565b60405161039596959493929190612baa565b60405180910390f35b6103a661161e565b6040516103b39190612af9565b60405180910390f35b6103c4611624565b6040516103d19190612af9565b60405180910390f35b6103e261162a565b005b6103ec61163d565b005b6103f6611720565b6040516104039190612c64565b60405180910390f35b61042660048036038101906104219190612c7d565b611745565b005b610442600480360381019061043d9190612b6c565b611b47565b005b61044c611cee565b6040516104599190612cca565b60405180910390f35b61046a611d16565b6040516104779190612af9565b60405180910390f35b610488611d1d565b6040516104959190612af9565b60405180910390f35b6104b860048036038101906104b3919061296b565b611d23565b6040516104c793929190612ce3565b60405180910390f35b6104d8611d58565b6040516104e59190612af9565b60405180910390f35b6104f6611d5e565b6040516105039190612af9565b60405180910390f35b610514611d64565b6040516105219190612af9565b60405180910390f35b610544600480360381019061053f919061296b565b611d70565b005b61054e6120ca565b60405161055b9190612af9565b60405180910390f35b61057e60048036038101906105799190612d18565b6120d1565b60405161058b9190612af9565b60405180910390f35b61059c61211a565b6040516105a99190612af9565b60405180910390f35b6105ba6121b9565b6040516105c79190612af9565b60405180910390f35b6105d86121bf565b6040516105e59190612af9565b60405180910390f35b61060860048036038101906106039190612d18565b6121c5565b005b610612612249565b60405161061f9190612c64565b60405180910390f35b61063061226e565b60405161063d9190612af9565b60405180910390f35b61064e612275565b6106566122b9565b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905081106106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90612d9d565b60405180910390fd5b5f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061072857610727612dbb565b5b905f5260205f2090600602016040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505090505f6107d090505f61271082845f01516107959190612e15565b61079f9190612e83565b90505f6064604b836107b19190612e15565b6107bb9190612e83565b90505f81836107ca9190612eb3565b90506108263384875f01516107df9190612eb3565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b61089360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b61090060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b845f015160055f8282546109149190612eb3565b925050819055505f600654111561094257846080015160065f82825461093a9190612eb3565b925050819055505b5f6001600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506109909190612eb3565b9050808714610a8d57600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081815481106109e8576109e7612dbb565b5b905f5260205f209060060201600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208881548110610a4357610a42612dbb565b5b905f5260205f2090600602015f820154815f015560018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501559050505b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610ada57610ad9612ee6565b5b600190038181905f5260205f2090600602015f5f82015f9055600182015f9055600282015f9055600382015f9055600482015f9055600582015f905550509055610b226123d1565b3373ffffffffffffffffffffffffffffffffffffffff167f3b1e93c4be42a439cdb9e768b998c1f8181a04e2a02607a8dbc6c64b1ed5662585885f0151610b699190612eb3565b86604051610b78929190612f13565b60405180910390a2505050505050610b8e6124ff565b50565b5f5f82604001518360200151610ba79190612f3a565b90505f62278d00600d54610bbb9190612f3a565b90505f818310610bcb5781610bcd565b825b90505f814210610be757610be082612508565b9050610c70565b600b549050600c5442118015610bfe57505f600654115b8015610c0a5750824211155b15610c6f575f600c5442610c1e9190612eb3565b90505f600a54600654610c319190612e15565b670de0b6b3a764000083600954610c489190612e15565b610c529190612e15565b610c5c9190612e83565b90508083610c6a9190612f3a565b925050505b5b670de0b6b3a76400008660a0015182610c899190612eb3565b8760800151610c989190612e15565b610ca29190612e83565b945050505050919050565b600a5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990612fb7565b60405180910390fd5b5f6234bc0062278d00600d54610d589190612f3a565b610d629190612f3a565b9050804211610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d9061301f565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e019190612cca565b602060405180830381865afa158015610e1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e409190613051565b90505f8111610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906130c6565b60405180910390fd5b610ed0338260035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f28f7085edc4326842bba65e64a665381cb385e4cde79258f8ba6d9ebe43bdc2482604051610f169190612af9565b60405180910390a25050565b62278d0081565b5f62093a808203610f3e576107d09050610f6a565b6213c6808203610f5257610fa09050610f6a565b62278d008203610f66576117709050610f6a565b5f90505b919050565b60095481565b6234bc0081565b610f846122b9565b610f8c612275565b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050811061100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590612d9d565b60405180910390fd5b5f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061105e5761105d612dbb565b5b905f5260205f2090600602016040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505090505f816040015182602001516110c79190612f3a565b90508042101561110c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111039061312e565b60405180910390fd5b5f62278d00600d5461111e9190612f3a565b90505f81831061112e5781611130565b825b90505f61113c82612508565b90505f670de0b6b3a76400008660a00151836111589190612eb3565b87608001516111679190612e15565b6111719190612e83565b905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111cd9190612cca565b602060405180830381865afa1580156111e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120c9190613051565b81111561124e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124590613196565b60405180910390fd5b855f015160055f8282546112629190612eb3565b925050819055505f600654111561129057856080015160065f8282546112889190612eb3565b925050819055505b6001600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506112dd9190612eb3565b871461142357600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061136d9190612eb3565b8154811061137e5761137d612dbb565b5b905f5260205f209060060201600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2088815481106113d9576113d8612dbb565b5b905f5260205f2090600602015f820154815f015560018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501559050505b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806114705761146f612ee6565b5b600190038181905f5260205f2090600602015f5f82015f9055600182015f9055600282015f9055600382015f9055600482015f9055600582015f9055505090556114b86123d1565b6114c1816126a2565b61151033875f015160025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b61155c338260035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e875f0151836040516115a7929190612f13565b60405180910390a25050505050506115bd6124ff565b50565b610fa081565b60055481565b600e602052815f5260405f2081815481106115e5575f80fd5b905f5260205f2090600602015f9150915050805f0154908060010154908060020154908060030154908060040154908060050154905086565b61177081565b600d5481565b6116326126bd565b61163b5f612744565b565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390612fb7565b60405180910390fd5b5f600d5414611710576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611707906131fe565b60405180910390fd5b42600d8190555042600c81905550565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61174d612275565b6117556122b9565b5f600d541180156117685750600d544210155b6117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90613266565b60405180910390fd5b62278d00600d546117b89190612f3a565b4211156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f1906132ce565b60405180910390fd5b5f821161183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390613336565b60405180910390fd5b5f64e8d4a51000905080831015611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f906133c4565b60405180910390fd5b600f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490501061190b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119029061342c565b60405180910390fd5b62093a8082148061191e57506213c68082145b8061192b575062278d0082145b61196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190613494565b60405180910390fd5b5f61197483610f29565b90505f61271082866119869190612e15565b6119909190612e83565b9050600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060c00160405280878152602001428152602001868152602001848152602001838152602001600b54815250908060018154018082558091505060019003905f5260205f2090600602015f909190919091505f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015550508460055f828254611a719190612f3a565b925050819055508060065f828254611a899190612f3a565b92505081905550611a986123d1565b611ae633308760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612807909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed868685604051611b3093929190612ce3565b60405180910390a2505050611b436124ff565b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd90612fb7565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611c80575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690613522565b60405180910390fd5b611cea33828473ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b5050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62278d0081565b600c5481565b600f8181548110611d32575f80fd5b905f5260205f2090600302015f91509050805f0154908060010154908060020154905083565b60045481565b600b5481565b670de0b6b3a764000081565b611d78612275565b611d806122b9565b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490508110611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990612d9d565b60405180910390fd5b5f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110611e5257611e51612dbb565b5b905f5260205f20906006020190505f81600201548260010154611e759190612f3a565b90505f62278d00600d54611e899190612f3a565b90505f818310611e995781611e9b565b825b90505f814210611eb557611eae82612508565b9050611ebb565b600b5490505b5f670de0b6b3a7640000866005015483611ed59190612eb3565b8760040154611ee49190612e15565b611eee9190612e83565b90505f8111611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061358a565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f8c9190612cca565b602060405180830381865afa158015611fa7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fcb9190613051565b81111561200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490613196565b60405180910390fd5b612016816126a2565b81866005018190555061206b338260035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f7241826040516120b19190612af9565b60405180910390a25050505050506120c76124ff565b50565b6213c68081565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121759190612cca565b602060405180830381865afa158015612190573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b49190613051565b905090565b6107d081565b60065481565b6121cd6126bd565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361223d575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016122349190612cca565b60405180910390fd5b61224681612744565b50565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b62093a8081565b60025f54036122b0576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b62278d00600d546122ca9190612f3a565b42111580156122da57505f600654115b15612349575f600c54426122ee9190612eb3565b90505f600a546006546123019190612e15565b670de0b6b3a7640000836009546123189190612e15565b6123229190612e15565b61232c9190612e83565b905080600b5f82825461233f9190612f3a565b9250508190555050505b42600c81905550565b6123cc838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016123859291906135a8565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612889565b505050565b5f600f80549050118015612417575042600f6001600f805490506123f59190612eb3565b8154811061240657612405612dbb565b5b905f5260205f2090600302015f0154145b1561249757600654600f6001600f805490506124339190612eb3565b8154811061244457612443612dbb565b5b905f5260205f20906003020160010181905550600b54600f6001600f8054905061246e9190612eb3565b8154811061247f5761247e612dbb565b5b905f5260205f209060030201600201819055506124fd565b600f60405180606001604052804281526020016006548152602001600b54815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f0155602082015181600101556040820151816002015550505b565b60015f81905550565b5f5f600f805490500361251d575f905061269d565b5f5f90505f6001600f805490506125349190612eb3565b90505b808210156125b8575f6002600184846125509190612eb3565b61255a9190612f3a565b6125649190612e83565b8361256f9190612f3a565b905084600f828154811061258657612585612dbb565b5b905f5260205f2090600302015f0154116125a2578092506125b2565b6001816125af9190612eb3565b91505b50612537565b5f600f83815481106125cd576125cc612dbb565b5b905f5260205f2090600302016040518060600160405290815f820154815260200160018201548152602001600282015481525050905084815f01511115612619575f935050505061269d565b5f816020015103612633578060400151935050505061269d565b5f815f0151866126439190612eb3565b90505f600a5483602001516126589190612e15565b670de0b6b3a76400008360095461266f9190612e15565b6126799190612e15565b6126839190612e83565b90508083604001516126959190612f3a565b955050505050505b919050565b8060045f8282546126b39190612f3a565b9250508190555050565b6126c5612924565b73ffffffffffffffffffffffffffffffffffffffff166126e3611cee565b73ffffffffffffffffffffffffffffffffffffffff161461274257612706612924565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016127399190612cca565b60405180910390fd5b565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612883848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161283c939291906135cf565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612889565b50505050565b5f5f60205f8451602086015f885af1806128a8576040513d5f823e3d81fd5b3d92505f519150505f82146128c15760018114156128dc565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561291e57836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016129159190612cca565b60405180910390fd5b50505050565b5f33905090565b5f604051905090565b5f5ffd5b5f819050919050565b61294a81612938565b8114612954575f5ffd5b50565b5f8135905061296581612941565b92915050565b5f602082840312156129805761297f612934565b5b5f61298d84828501612957565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6129e08261299a565b810181811067ffffffffffffffff821117156129ff576129fe6129aa565b5b80604052505050565b5f612a1161292b565b9050612a1d82826129d7565b919050565b5f60c08284031215612a3757612a36612996565b5b612a4160c0612a08565b90505f612a5084828501612957565b5f830152506020612a6384828501612957565b6020830152506040612a7784828501612957565b6040830152506060612a8b84828501612957565b6060830152506080612a9f84828501612957565b60808301525060a0612ab384828501612957565b60a08301525092915050565b5f60c08284031215612ad457612ad3612934565b5b5f612ae184828501612a22565b91505092915050565b612af381612938565b82525050565b5f602082019050612b0c5f830184612aea565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b3b82612b12565b9050919050565b612b4b81612b31565b8114612b55575f5ffd5b50565b5f81359050612b6681612b42565b92915050565b5f5f60408385031215612b8257612b81612934565b5b5f612b8f85828601612b58565b9250506020612ba085828601612957565b9150509250929050565b5f60c082019050612bbd5f830189612aea565b612bca6020830188612aea565b612bd76040830187612aea565b612be46060830186612aea565b612bf16080830185612aea565b612bfe60a0830184612aea565b979650505050505050565b5f819050919050565b5f612c2c612c27612c2284612b12565b612c09565b612b12565b9050919050565b5f612c3d82612c12565b9050919050565b5f612c4e82612c33565b9050919050565b612c5e81612c44565b82525050565b5f602082019050612c775f830184612c55565b92915050565b5f5f60408385031215612c9357612c92612934565b5b5f612ca085828601612957565b9250506020612cb185828601612957565b9150509250929050565b612cc481612b31565b82525050565b5f602082019050612cdd5f830184612cbb565b92915050565b5f606082019050612cf65f830186612aea565b612d036020830185612aea565b612d106040830184612aea565b949350505050565b5f60208284031215612d2d57612d2c612934565b5b5f612d3a84828501612b58565b91505092915050565b5f82825260208201905092915050565b7f496e76616c6964207374616b6520696e646578000000000000000000000000005f82015250565b5f612d87601383612d43565b9150612d9282612d53565b602082019050919050565b5f6020820190508181035f830152612db481612d7b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612e1f82612938565b9150612e2a83612938565b9250828202612e3881612938565b91508282048414831517612e4f57612e4e612de8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612e8d82612938565b9150612e9883612938565b925082612ea857612ea7612e56565b5b828204905092915050565b5f612ebd82612938565b9150612ec883612938565b9250828203905081811115612ee057612edf612de8565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f604082019050612f265f830185612aea565b612f336020830184612aea565b9392505050565b5f612f4482612938565b9150612f4f83612938565b9250828201905080821115612f6757612f66612de8565b5b92915050565b7f556e6b6e6f772063616c6c6572000000000000000000000000000000000000005f82015250565b5f612fa1600d83612d43565b9150612fac82612f6d565b602082019050919050565b5f6020820190508181035f830152612fce81612f95565b9050919050565b7f537765657020677261636520706572696f64206e6f742079657420656e6465645f82015250565b5f613009602083612d43565b915061301482612fd5565b602082019050919050565b5f6020820190508181035f83015261303681612ffd565b9050919050565b5f8151905061304b81612941565b92915050565b5f6020828403121561306657613065612934565b5b5f6130738482850161303d565b91505092915050565b7f4e6f2072657761726420746f6b656e7320746f207377656570000000000000005f82015250565b5f6130b0601983612d43565b91506130bb8261307c565b602082019050919050565b5f6020820190508181035f8301526130dd816130a4565b9050919050565b7f4c6f636b2d757020706572696f64206e6f7420636f6d706c65746564000000005f82015250565b5f613118601c83612d43565b9150613123826130e4565b602082019050919050565b5f6020820190508181035f8301526131458161310c565b9050919050565b7f496e73756666696369656e74207265776172647320706f6f6c000000000000005f82015250565b5f613180601983612d43565b915061318b8261314c565b602082019050919050565b5f6020820190508181035f8301526131ad81613174565b9050919050565b7f5374616b696e6720616c726561647920737461727465640000000000000000005f82015250565b5f6131e8601783612d43565b91506131f3826131b4565b602082019050919050565b5f6020820190508181035f830152613215816131dc565b9050919050565b7f5374616b696e6720686173206e6f7420737461727465642079657400000000005f82015250565b5f613250601b83612d43565b915061325b8261321c565b602082019050919050565b5f6020820190508181035f83015261327d81613244565b9050919050565b7f5374616b696e6720706572696f642068617320656e64656400000000000000005f82015250565b5f6132b8601883612d43565b91506132c382613284565b602082019050919050565b5f6020820190508181035f8301526132e5816132ac565b9050919050565b7f43616e6e6f74207374616b65207a65726f20746f6b656e7300000000000000005f82015250565b5f613320601883612d43565b915061332b826132ec565b602082019050919050565b5f6020820190508181035f83015261334d81613314565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e206f7220655f8201527f7175616c20746f20313030300000000000000000000000000000000000000000602082015250565b5f6133ae602c83612d43565b91506133b982613354565b604082019050919050565b5f6020820190508181035f8301526133db816133a2565b9050919050565b7f4d6178696d756d207374616b65732072656163686564000000000000000000005f82015250565b5f613416601683612d43565b9150613421826133e2565b602082019050919050565b5f6020820190508181035f8301526134438161340a565b9050919050565b7f496e76616c6964206c6f636b2d757020706572696f64000000000000000000005f82015250565b5f61347e601683612d43565b91506134898261344a565b602082019050919050565b5f6020820190508181035f8301526134ab81613472565b9050919050565b7f43616e6e6f74207265636f766572207374616b696e672f72657761726420746f5f8201527f6b656e7300000000000000000000000000000000000000000000000000000000602082015250565b5f61350c602483612d43565b9150613517826134b2565b604082019050919050565b5f6020820190508181035f83015261353981613500565b9050919050565b7f4e6f207265776172647320746f20636c61696d000000000000000000000000005f82015250565b5f613574601383612d43565b915061357f82613540565b602082019050919050565b5f6020820190508181035f8301526135a181613568565b9050919050565b5f6040820190506135bb5f830185612cbb565b6135c86020830184612aea565b9392505050565b5f6060820190506135e25f830186612cbb565b6135ef6020830185612cbb565b6135fc6040830184612aea565b94935050505056fea264697066735822122027f08ca993022cf6dd7f4714ac2e7973b2f2d7b8ade855dc53673748bae9878e64736f6c634300081c0033000000000000000000000000ebb66a88cedd12bfe3a289df6dfee377f2963f12000000000000000000000000a18b488216235135842478b76acd910787e93a7f000000000000000000000000000000000000000000001483edf5ea768b240000000000000000000000000000a1722996300315f4d6ecd2b46b1f7af2d1ecbc5a0000000000000000000000000ac2b95ab3c988f413fa90d1bea5e7a1028d0540
Deployed Bytecode
0x608060405234801561000f575f5ffd5b506004361061020f575f3560e01c80637b0472f011610123578063ae169a50116100ab578063df674ac51161007a578063df674ac5146105b2578063eed9da1f146105d0578063f2fde38b146105ee578063f7c618c11461060a578063fd26eaa1146106285761020f565b8063ae169a501461052a578063b0e380dd14610546578063cf57ee6914610564578063d854fb75146105945761020f565b8063a3c2710d116100f2578063a3c2710d14610480578063a7a38f0b1461049e578063a87df832146104d0578063aa6bb09a146104ee578063aaf5eb681461050c5761020f565b80637b0472f01461040c5780638980f11f146104285780638da5cb5b14610444578063a21df9f0146104625761020f565b80632e17de78116101a65780635be6d82a116101755780635be6d82a1461039e5780636abfd183146103bc578063715018a6146103da57806371b0cbfa146103e457806372f702f3146103ee5761020f565b80632e17de78146103115780633b84b5081461032d578063567e98f91461034b578063584b62a1146103695761020f565b8063199aca60116101e2578063199aca60146102875780631c407718146102a557806321741f0e146102d55780632412b762146102f35761020f565b8063012ce50114610213578063060164801461022f57806308b26b751461025f5780631061311d1461027d575b5f5ffd5b61022d6004803603810190610228919061296b565b610646565b005b61024960048036038101906102449190612abf565b610b91565b6040516102569190612af9565b60405180910390f35b610267610cad565b6040516102749190612af9565b60405180910390f35b610285610cb3565b005b61028f610f22565b60405161029c9190612af9565b60405180910390f35b6102bf60048036038101906102ba919061296b565b610f29565b6040516102cc9190612af9565b60405180910390f35b6102dd610f6f565b6040516102ea9190612af9565b60405180910390f35b6102fb610f75565b6040516103089190612af9565b60405180910390f35b61032b6004803603810190610326919061296b565b610f7c565b005b6103356115c0565b6040516103429190612af9565b60405180910390f35b6103536115c6565b6040516103609190612af9565b60405180910390f35b610383600480360381019061037e9190612b6c565b6115cc565b60405161039596959493929190612baa565b60405180910390f35b6103a661161e565b6040516103b39190612af9565b60405180910390f35b6103c4611624565b6040516103d19190612af9565b60405180910390f35b6103e261162a565b005b6103ec61163d565b005b6103f6611720565b6040516104039190612c64565b60405180910390f35b61042660048036038101906104219190612c7d565b611745565b005b610442600480360381019061043d9190612b6c565b611b47565b005b61044c611cee565b6040516104599190612cca565b60405180910390f35b61046a611d16565b6040516104779190612af9565b60405180910390f35b610488611d1d565b6040516104959190612af9565b60405180910390f35b6104b860048036038101906104b3919061296b565b611d23565b6040516104c793929190612ce3565b60405180910390f35b6104d8611d58565b6040516104e59190612af9565b60405180910390f35b6104f6611d5e565b6040516105039190612af9565b60405180910390f35b610514611d64565b6040516105219190612af9565b60405180910390f35b610544600480360381019061053f919061296b565b611d70565b005b61054e6120ca565b60405161055b9190612af9565b60405180910390f35b61057e60048036038101906105799190612d18565b6120d1565b60405161058b9190612af9565b60405180910390f35b61059c61211a565b6040516105a99190612af9565b60405180910390f35b6105ba6121b9565b6040516105c79190612af9565b60405180910390f35b6105d86121bf565b6040516105e59190612af9565b60405180910390f35b61060860048036038101906106039190612d18565b6121c5565b005b610612612249565b60405161061f9190612c64565b60405180910390f35b61063061226e565b60405161063d9190612af9565b60405180910390f35b61064e612275565b6106566122b9565b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905081106106d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cf90612d9d565b60405180910390fd5b5f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061072857610727612dbb565b5b905f5260205f2090600602016040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505090505f6107d090505f61271082845f01516107959190612e15565b61079f9190612e83565b90505f6064604b836107b19190612e15565b6107bb9190612e83565b90505f81836107ca9190612eb3565b90506108263384875f01516107df9190612eb3565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b61089360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b61090060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b845f015160055f8282546109149190612eb3565b925050819055505f600654111561094257846080015160065f82825461093a9190612eb3565b925050819055505b5f6001600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506109909190612eb3565b9050808714610a8d57600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081815481106109e8576109e7612dbb565b5b905f5260205f209060060201600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208881548110610a4357610a42612dbb565b5b905f5260205f2090600602015f820154815f015560018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501559050505b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480610ada57610ad9612ee6565b5b600190038181905f5260205f2090600602015f5f82015f9055600182015f9055600282015f9055600382015f9055600482015f9055600582015f905550509055610b226123d1565b3373ffffffffffffffffffffffffffffffffffffffff167f3b1e93c4be42a439cdb9e768b998c1f8181a04e2a02607a8dbc6c64b1ed5662585885f0151610b699190612eb3565b86604051610b78929190612f13565b60405180910390a2505050505050610b8e6124ff565b50565b5f5f82604001518360200151610ba79190612f3a565b90505f62278d00600d54610bbb9190612f3a565b90505f818310610bcb5781610bcd565b825b90505f814210610be757610be082612508565b9050610c70565b600b549050600c5442118015610bfe57505f600654115b8015610c0a5750824211155b15610c6f575f600c5442610c1e9190612eb3565b90505f600a54600654610c319190612e15565b670de0b6b3a764000083600954610c489190612e15565b610c529190612e15565b610c5c9190612e83565b90508083610c6a9190612f3a565b925050505b5b670de0b6b3a76400008660a0015182610c899190612eb3565b8760800151610c989190612e15565b610ca29190612e83565b945050505050919050565b600a5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990612fb7565b60405180910390fd5b5f6234bc0062278d00600d54610d589190612f3a565b610d629190612f3a565b9050804211610da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9d9061301f565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e019190612cca565b602060405180830381865afa158015610e1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e409190613051565b90505f8111610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906130c6565b60405180910390fd5b610ed0338260035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f28f7085edc4326842bba65e64a665381cb385e4cde79258f8ba6d9ebe43bdc2482604051610f169190612af9565b60405180910390a25050565b62278d0081565b5f62093a808203610f3e576107d09050610f6a565b6213c6808203610f5257610fa09050610f6a565b62278d008203610f66576117709050610f6a565b5f90505b919050565b60095481565b6234bc0081565b610f846122b9565b610f8c612275565b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2080549050811061100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590612d9d565b60405180910390fd5b5f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20828154811061105e5761105d612dbb565b5b905f5260205f2090600602016040518060c00160405290815f82015481526020016001820154815260200160028201548152602001600382015481526020016004820154815260200160058201548152505090505f816040015182602001516110c79190612f3a565b90508042101561110c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111039061312e565b60405180910390fd5b5f62278d00600d5461111e9190612f3a565b90505f81831061112e5781611130565b825b90505f61113c82612508565b90505f670de0b6b3a76400008660a00151836111589190612eb3565b87608001516111679190612e15565b6111719190612e83565b905060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111cd9190612cca565b602060405180830381865afa1580156111e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120c9190613051565b81111561124e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124590613196565b60405180910390fd5b855f015160055f8282546112629190612eb3565b925050819055505f600654111561129057856080015160065f8282546112889190612eb3565b925050819055505b6001600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490506112dd9190612eb3565b871461142357600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054905061136d9190612eb3565b8154811061137e5761137d612dbb565b5b905f5260205f209060060201600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2088815481106113d9576113d8612dbb565b5b905f5260205f2090600602015f820154815f015560018201548160010155600282015481600201556003820154816003015560048201548160040155600582015481600501559050505b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208054806114705761146f612ee6565b5b600190038181905f5260205f2090600602015f5f82015f9055600182015f9055600282015f9055600382015f9055600482015f9055600582015f9055505090556114b86123d1565b6114c1816126a2565b61151033875f015160025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b61155c338260035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e875f0151836040516115a7929190612f13565b60405180910390a25050505050506115bd6124ff565b50565b610fa081565b60055481565b600e602052815f5260405f2081815481106115e5575f80fd5b905f5260205f2090600602015f9150915050805f0154908060010154908060020154908060030154908060040154908060050154905086565b61177081565b600d5481565b6116326126bd565b61163b5f612744565b565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390612fb7565b60405180910390fd5b5f600d5414611710576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611707906131fe565b60405180910390fd5b42600d8190555042600c81905550565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61174d612275565b6117556122b9565b5f600d541180156117685750600d544210155b6117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90613266565b60405180910390fd5b62278d00600d546117b89190612f3a565b4211156117fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f1906132ce565b60405180910390fd5b5f821161183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390613336565b60405180910390fd5b5f64e8d4a51000905080831015611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f906133c4565b60405180910390fd5b600f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490501061190b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119029061342c565b60405180910390fd5b62093a8082148061191e57506213c68082145b8061192b575062278d0082145b61196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190613494565b60405180910390fd5b5f61197483610f29565b90505f61271082866119869190612e15565b6119909190612e83565b9050600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060c00160405280878152602001428152602001868152602001848152602001838152602001600b54815250908060018154018082558091505060019003905f5260205f2090600602015f909190919091505f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015550508460055f828254611a719190612f3a565b925050819055508060065f828254611a899190612f3a565b92505081905550611a986123d1565b611ae633308760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612807909392919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed868685604051611b3093929190612ce3565b60405180910390a2505050611b436124ff565b5050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd90612fb7565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611c80575060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb690613522565b60405180910390fd5b611cea33828473ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b5050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62278d0081565b600c5481565b600f8181548110611d32575f80fd5b905f5260205f2090600302015f91509050805f0154908060010154908060020154905083565b60045481565b600b5481565b670de0b6b3a764000081565b611d78612275565b611d806122b9565b600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490508110611e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df990612d9d565b60405180910390fd5b5f600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208281548110611e5257611e51612dbb565b5b905f5260205f20906006020190505f81600201548260010154611e759190612f3a565b90505f62278d00600d54611e899190612f3a565b90505f818310611e995781611e9b565b825b90505f814210611eb557611eae82612508565b9050611ebb565b600b5490505b5f670de0b6b3a7640000866005015483611ed59190612eb3565b8760040154611ee49190612e15565b611eee9190612e83565b90505f8111611f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f299061358a565b60405180910390fd5b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f8c9190612cca565b602060405180830381865afa158015611fa7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fcb9190613051565b81111561200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200490613196565b60405180910390fd5b612016816126a2565b81866005018190555061206b338260035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123529092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f7241826040516120b19190612af9565b60405180910390a25050505050506120c76124ff565b50565b6213c68081565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805490509050919050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121759190612cca565b602060405180830381865afa158015612190573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b49190613051565b905090565b6107d081565b60065481565b6121cd6126bd565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361223d575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016122349190612cca565b60405180910390fd5b61224681612744565b50565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b62093a8081565b60025f54036122b0576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b62278d00600d546122ca9190612f3a565b42111580156122da57505f600654115b15612349575f600c54426122ee9190612eb3565b90505f600a546006546123019190612e15565b670de0b6b3a7640000836009546123189190612e15565b6123229190612e15565b61232c9190612e83565b905080600b5f82825461233f9190612f3a565b9250508190555050505b42600c81905550565b6123cc838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016123859291906135a8565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612889565b505050565b5f600f80549050118015612417575042600f6001600f805490506123f59190612eb3565b8154811061240657612405612dbb565b5b905f5260205f2090600302015f0154145b1561249757600654600f6001600f805490506124339190612eb3565b8154811061244457612443612dbb565b5b905f5260205f20906003020160010181905550600b54600f6001600f8054905061246e9190612eb3565b8154811061247f5761247e612dbb565b5b905f5260205f209060030201600201819055506124fd565b600f60405180606001604052804281526020016006548152602001600b54815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f0155602082015181600101556040820151816002015550505b565b60015f81905550565b5f5f600f805490500361251d575f905061269d565b5f5f90505f6001600f805490506125349190612eb3565b90505b808210156125b8575f6002600184846125509190612eb3565b61255a9190612f3a565b6125649190612e83565b8361256f9190612f3a565b905084600f828154811061258657612585612dbb565b5b905f5260205f2090600302015f0154116125a2578092506125b2565b6001816125af9190612eb3565b91505b50612537565b5f600f83815481106125cd576125cc612dbb565b5b905f5260205f2090600302016040518060600160405290815f820154815260200160018201548152602001600282015481525050905084815f01511115612619575f935050505061269d565b5f816020015103612633578060400151935050505061269d565b5f815f0151866126439190612eb3565b90505f600a5483602001516126589190612e15565b670de0b6b3a76400008360095461266f9190612e15565b6126799190612e15565b6126839190612e83565b90508083604001516126959190612f3a565b955050505050505b919050565b8060045f8282546126b39190612f3a565b9250508190555050565b6126c5612924565b73ffffffffffffffffffffffffffffffffffffffff166126e3611cee565b73ffffffffffffffffffffffffffffffffffffffff161461274257612706612924565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016127399190612cca565b60405180910390fd5b565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612883848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161283c939291906135cf565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612889565b50505050565b5f5f60205f8451602086015f885af1806128a8576040513d5f823e3d81fd5b3d92505f519150505f82146128c15760018114156128dc565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561291e57836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016129159190612cca565b60405180910390fd5b50505050565b5f33905090565b5f604051905090565b5f5ffd5b5f819050919050565b61294a81612938565b8114612954575f5ffd5b50565b5f8135905061296581612941565b92915050565b5f602082840312156129805761297f612934565b5b5f61298d84828501612957565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6129e08261299a565b810181811067ffffffffffffffff821117156129ff576129fe6129aa565b5b80604052505050565b5f612a1161292b565b9050612a1d82826129d7565b919050565b5f60c08284031215612a3757612a36612996565b5b612a4160c0612a08565b90505f612a5084828501612957565b5f830152506020612a6384828501612957565b6020830152506040612a7784828501612957565b6040830152506060612a8b84828501612957565b6060830152506080612a9f84828501612957565b60808301525060a0612ab384828501612957565b60a08301525092915050565b5f60c08284031215612ad457612ad3612934565b5b5f612ae184828501612a22565b91505092915050565b612af381612938565b82525050565b5f602082019050612b0c5f830184612aea565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b3b82612b12565b9050919050565b612b4b81612b31565b8114612b55575f5ffd5b50565b5f81359050612b6681612b42565b92915050565b5f5f60408385031215612b8257612b81612934565b5b5f612b8f85828601612b58565b9250506020612ba085828601612957565b9150509250929050565b5f60c082019050612bbd5f830189612aea565b612bca6020830188612aea565b612bd76040830187612aea565b612be46060830186612aea565b612bf16080830185612aea565b612bfe60a0830184612aea565b979650505050505050565b5f819050919050565b5f612c2c612c27612c2284612b12565b612c09565b612b12565b9050919050565b5f612c3d82612c12565b9050919050565b5f612c4e82612c33565b9050919050565b612c5e81612c44565b82525050565b5f602082019050612c775f830184612c55565b92915050565b5f5f60408385031215612c9357612c92612934565b5b5f612ca085828601612957565b9250506020612cb185828601612957565b9150509250929050565b612cc481612b31565b82525050565b5f602082019050612cdd5f830184612cbb565b92915050565b5f606082019050612cf65f830186612aea565b612d036020830185612aea565b612d106040830184612aea565b949350505050565b5f60208284031215612d2d57612d2c612934565b5b5f612d3a84828501612b58565b91505092915050565b5f82825260208201905092915050565b7f496e76616c6964207374616b6520696e646578000000000000000000000000005f82015250565b5f612d87601383612d43565b9150612d9282612d53565b602082019050919050565b5f6020820190508181035f830152612db481612d7b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612e1f82612938565b9150612e2a83612938565b9250828202612e3881612938565b91508282048414831517612e4f57612e4e612de8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612e8d82612938565b9150612e9883612938565b925082612ea857612ea7612e56565b5b828204905092915050565b5f612ebd82612938565b9150612ec883612938565b9250828203905081811115612ee057612edf612de8565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f604082019050612f265f830185612aea565b612f336020830184612aea565b9392505050565b5f612f4482612938565b9150612f4f83612938565b9250828201905080821115612f6757612f66612de8565b5b92915050565b7f556e6b6e6f772063616c6c6572000000000000000000000000000000000000005f82015250565b5f612fa1600d83612d43565b9150612fac82612f6d565b602082019050919050565b5f6020820190508181035f830152612fce81612f95565b9050919050565b7f537765657020677261636520706572696f64206e6f742079657420656e6465645f82015250565b5f613009602083612d43565b915061301482612fd5565b602082019050919050565b5f6020820190508181035f83015261303681612ffd565b9050919050565b5f8151905061304b81612941565b92915050565b5f6020828403121561306657613065612934565b5b5f6130738482850161303d565b91505092915050565b7f4e6f2072657761726420746f6b656e7320746f207377656570000000000000005f82015250565b5f6130b0601983612d43565b91506130bb8261307c565b602082019050919050565b5f6020820190508181035f8301526130dd816130a4565b9050919050565b7f4c6f636b2d757020706572696f64206e6f7420636f6d706c65746564000000005f82015250565b5f613118601c83612d43565b9150613123826130e4565b602082019050919050565b5f6020820190508181035f8301526131458161310c565b9050919050565b7f496e73756666696369656e74207265776172647320706f6f6c000000000000005f82015250565b5f613180601983612d43565b915061318b8261314c565b602082019050919050565b5f6020820190508181035f8301526131ad81613174565b9050919050565b7f5374616b696e6720616c726561647920737461727465640000000000000000005f82015250565b5f6131e8601783612d43565b91506131f3826131b4565b602082019050919050565b5f6020820190508181035f830152613215816131dc565b9050919050565b7f5374616b696e6720686173206e6f7420737461727465642079657400000000005f82015250565b5f613250601b83612d43565b915061325b8261321c565b602082019050919050565b5f6020820190508181035f83015261327d81613244565b9050919050565b7f5374616b696e6720706572696f642068617320656e64656400000000000000005f82015250565b5f6132b8601883612d43565b91506132c382613284565b602082019050919050565b5f6020820190508181035f8301526132e5816132ac565b9050919050565b7f43616e6e6f74207374616b65207a65726f20746f6b656e7300000000000000005f82015250565b5f613320601883612d43565b915061332b826132ec565b602082019050919050565b5f6020820190508181035f83015261334d81613314565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e206f7220655f8201527f7175616c20746f20313030300000000000000000000000000000000000000000602082015250565b5f6133ae602c83612d43565b91506133b982613354565b604082019050919050565b5f6020820190508181035f8301526133db816133a2565b9050919050565b7f4d6178696d756d207374616b65732072656163686564000000000000000000005f82015250565b5f613416601683612d43565b9150613421826133e2565b602082019050919050565b5f6020820190508181035f8301526134438161340a565b9050919050565b7f496e76616c6964206c6f636b2d757020706572696f64000000000000000000005f82015250565b5f61347e601683612d43565b91506134898261344a565b602082019050919050565b5f6020820190508181035f8301526134ab81613472565b9050919050565b7f43616e6e6f74207265636f766572207374616b696e672f72657761726420746f5f8201527f6b656e7300000000000000000000000000000000000000000000000000000000602082015250565b5f61350c602483612d43565b9150613517826134b2565b604082019050919050565b5f6020820190508181035f83015261353981613500565b9050919050565b7f4e6f207265776172647320746f20636c61696d000000000000000000000000005f82015250565b5f613574601383612d43565b915061357f82613540565b602082019050919050565b5f6020820190508181035f8301526135a181613568565b9050919050565b5f6040820190506135bb5f830185612cbb565b6135c86020830184612aea565b9392505050565b5f6060820190506135e25f830186612cbb565b6135ef6020830185612cbb565b6135fc6040830184612aea565b94935050505056fea264697066735822122027f08ca993022cf6dd7f4714ac2e7973b2f2d7b8ade855dc53673748bae9878e64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ebb66a88cedd12bfe3a289df6dfee377f2963f12000000000000000000000000a18b488216235135842478b76acd910787e93a7f000000000000000000000000000000000000000000001483edf5ea768b240000000000000000000000000000a1722996300315f4d6ecd2b46b1f7af2d1ecbc5a0000000000000000000000000ac2b95ab3c988f413fa90d1bea5e7a1028d0540
-----Decoded View---------------
Arg [0] : _stakingToken (address): 0xeBb66a88cEdd12bfE3a289df6DFEe377F2963F12
Arg [1] : _rewardToken (address): 0xA18B488216235135842478b76ACD910787e93a7f
Arg [2] : _monthlyDistributionAmount (uint256): 96881000000000000000000
Arg [3] : _penaltyRecipient (address): 0xa1722996300315f4d6eCd2b46b1F7af2d1ecBc5A
Arg [4] : _penaltyRecipient2 (address): 0x0Ac2b95aB3C988f413fA90D1bea5e7a1028d0540
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000ebb66a88cedd12bfe3a289df6dfee377f2963f12
Arg [1] : 000000000000000000000000a18b488216235135842478b76acd910787e93a7f
Arg [2] : 000000000000000000000000000000000000000000001483edf5ea768b240000
Arg [3] : 000000000000000000000000a1722996300315f4d6ecd2b46b1f7af2d1ecbc5a
Arg [4] : 0000000000000000000000000ac2b95ab3c988f413fa90d1bea5e7a1028d0540
Deployed Bytecode Sourcemap
9166:15559:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21324:1390;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19797:1519;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10208:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24077:645;;;:::i;:::-;;10500:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23255:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10161:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10063:52;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16409:1895;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9687:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9901:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10784:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;9740:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10462:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7858:103;;;:::i;:::-;;22722:266;;;:::i;:::-;;9286:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14711:1690;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23583:354;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7589:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9512:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10389:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10984:24;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;9817:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10349:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10302:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18312:1456;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9447:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23133:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23945:124;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9637:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9940:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7969:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9319:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9387:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21324:1390;8702:21;:19;:21::i;:::-;12636:20:::1;:18;:20::i;:::-;21454:6:::2;:18;21461:10;21454:18;;;;;;;;;;;;;;;:25;;;;21441:10;:38;21433:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;21514:22;21539:6;:18;21546:10;21539:18;;;;;;;;;;;;;;;21558:10;21539:30;;;;;;;;:::i;:::-;;;;;;;;;;;;21514:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;21582:22;21607:4;21582:29;;21631:20;21692:5;21674:14;21655:9;:16;;;:33;;;;:::i;:::-;21654:43;;;;:::i;:::-;21631:66;;21708:31;21764:3;21758:2;21743:12;:17;;;;:::i;:::-;21742:25;;;;:::i;:::-;21708:59;;21778:24;21820:23;21805:12;:38;;;;:::i;:::-;21778:65;;21856:70;21882:10;21913:12;21894:9;:16;;;:31;;;;:::i;:::-;21856:12;;;;;;;;;;;:25;;;;:70;;;;;:::i;:::-;21937:68;21963:16;;;;;;;;;;;21981:23;21937:12;;;;;;;;;;;:25;;;;:68;;;;;:::i;:::-;22016:62;22042:17;;;;;;;;;;;22061:16;22016:12;;;;;;;;;;;:25;;;;:62;;;;;:::i;:::-;22153:9;:16;;;22132:17;;:37;;;;;;;:::i;:::-;;;;;;;;22205:1;22184:18;;:22;22180:100;;;22245:9;:23;;;22223:18;;:45;;;;;;;:::i;:::-;;;;;;;;22180:100;22321:17;22369:1;22341:6;:18;22348:10;22341:18;;;;;;;;;;;;;;;:25;;;;:29;;;;:::i;:::-;22321:49;;22399:9;22385:10;:23;22381:118;;22458:6;:18;22465:10;22458:18;;;;;;;;;;;;;;;22477:9;22458:29;;;;;;;;:::i;:::-;;;;;;;;;;;;22425:6;:18;22432:10;22425:18;;;;;;;;;;;;;;;22444:10;22425:30;;;;;;;;:::i;:::-;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22381:118;22509:6;:18;22516:10;22509:18;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22546:16;:14;:16::i;:::-;22612:10;22580:126;;;22656:12;22637:9;:16;;;:31;;;;:::i;:::-;22683:12;22580:126;;;;;;;:::i;:::-;;;;;;;;21422:1292;;;;;;8746:20:::0;:18;:20::i;:::-;21324:1390;:::o;19797:1519::-;19883:7;19903:20;19948:9;:22;;;19926:9;:19;;;:44;;;;:::i;:::-;19903:67;;19981:24;9550:7;20008:16;;:35;;;;:::i;:::-;19981:62;;20144:21;20183:16;20168:12;:31;:91;;20243:16;20168:91;;;20215:12;20168:91;20144:115;;20272:20;20328:13;20309:15;:32;20305:881;;20471:38;20495:13;20471:23;:38::i;:::-;20456:53;;20305:881;;;20663:18;;20648:33;;20736:16;;20718:15;:34;:77;;;;;20794:1;20773:18;;:22;20718:77;:133;;;;;20835:16;20816:15;:35;;20718:133;20696:479;;;20886:17;20924:16;;20906:15;:34;;;;:::i;:::-;20886:54;;20959:15;21095:21;;21074:18;;:42;;;;:::i;:::-;10338:4;21027:9;20978:25;;:58;;;;:::i;:::-;:91;;;;:::i;:::-;20977:140;;;;:::i;:::-;20959:158;;21152:7;21136:23;;;;;:::i;:::-;;;20867:308;;20696:479;20305:881;10338:4;21261:9;:20;;;21246:12;:35;;;;:::i;:::-;21219:9;:23;;;:63;;;;:::i;:::-;21218:90;;;;:::i;:::-;21198:110;;;;;;19797:1519;;;:::o;10208:50::-;;;;:::o;24077:645::-;24157:16;;;;;;;;;;;24143:30;;:10;:30;;;24135:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24202:23;10108:7;9550;24228:16;;:48;;;;:::i;:::-;:82;;;;:::i;:::-;24202:108;;24363:15;24345;:33;24323:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;24451:24;24478:11;;;;;;;;;;;:21;;;24508:4;24478:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24451:63;;24552:1;24533:16;:20;24525:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24596:54;24621:10;24633:16;24596:11;;;;;;;;;;;:24;;;;:54;;;;;:::i;:::-;24685:10;24668:46;;;24697:16;24668:46;;;;;;:::i;:::-;;;;;;;;24124:598;;24077:645::o;10500:54::-;9550:7;10500:54;:::o;23255:320::-;23345:7;9424:6;23369:12;:26;23365:51;;9676:4;23397:19;;;;23365:51;9487:7;23431:12;:29;23427:57;;9729:4;23462:22;;;;23427:57;9550:7;23499:12;:27;23495:53;;9780:4;23528:20;;;;23495:53;23566:1;23559:8;;23255:320;;;;:::o;10161:40::-;;;;:::o;10063:52::-;10108:7;10063:52;:::o;16409:1895::-;12636:20;:18;:20::i;:::-;8702:21:::1;:19;:21::i;:::-;16504:6:::2;:18;16511:10;16504:18;;;;;;;;;;;;;;;:25;;;;16496:5;:33;16488:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;16564:22;16589:6;:18;16596:10;16589:18;;;;;;;;;;;;;;;16608:5;16589:25;;;;;;;;:::i;:::-;;;;;;;;;;;;16564:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;16627:20;16672:9;:22;;;16650:9;:19;;;:44;;;;:::i;:::-;16627:67;;16746:12;16727:15;:31;;16705:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;16827:24;9550:7;16854:16;;:35;;;;:::i;:::-;16827:62;;16990:21;17029:16;17014:12;:31;:91;;17089:16;17014:91;;;17061:12;17014:91;16990:115;;17282:16;17301:38;17325:13;17301:23;:38::i;:::-;17282:57;;17352:14;10338:4;17421:9;:20;;;17410:8;:31;;;;:::i;:::-;17370:9;:23;;;:72;;;;:::i;:::-;17369:86;;;;:::i;:::-;17352:103;;17500:11;;;;;;;;;;;:21;;;17530:4;17500:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17490:6;:46;;17468:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;17623:9;:16;;;17602:17;;:37;;;;;;;:::i;:::-;;;;;;;;17675:1;17654:18;;:22;17650:100;;;17715:9;:23;;;17693:18;;:45;;;;;;;:::i;:::-;;;;;;;;17650:100;17803:1;17775:6;:18;17782:10;17775:18;;;;;;;;;;;;;;;:25;;;;:29;;;;:::i;:::-;17766:5;:38;17762:180;;17849:6;:18;17856:10;17849:18;;;;;;;;;;;;;;;17914:1;17886:6;:18;17893:10;17886:18;;;;;;;;;;;;;;;:25;;;;:29;;;;:::i;:::-;17849:81;;;;;;;;:::i;:::-;;;;;;;;;;;;17821:6;:18;17828:10;17821:18;;;;;;;;;;;;;;;17840:5;17821:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17762:180;17952:6;:18;17959:10;17952:18;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17989:16;:14;:16::i;:::-;18016:38;18047:6;18016:30;:38::i;:::-;18122:55;18148:10;18160:9;:16;;;18122:12;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;18188:44;18213:10;18225:6;18188:11;;;;;;;;;;;:24;;;;:44;;;;;:::i;:::-;18259:10;18250:46;;;18271:9;:16;;;18289:6;18250:46;;;;;;;:::i;:::-;;;;;;;;16477:1827;;;;;;8746:20:::1;:18;:20::i;:::-;16409:1895:::0;:::o;9687:46::-;9729:4;9687:46;:::o;9901:32::-;;;;:::o;10784:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9740:44::-;9780:4;9740:44;:::o;10462:31::-;;;;:::o;7858:103::-;7548:13;:11;:13::i;:::-;7923:30:::1;7950:1;7923:18;:30::i;:::-;7858:103::o:0;22722:266::-;22788:16;;;;;;;;;;;22774:30;;:10;:30;;;22766:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22861:1;22841:16;;:21;22833:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22920:15;22901:16;:34;;;;22965:15;22946:16;:34;;;;22722:266::o;9286:26::-;;;;;;;;;;;;;:::o;14711:1690::-;8702:21;:19;:21::i;:::-;12636:20:::1;:18;:20::i;:::-;14877:1:::2;14858:16;;:20;:59;;;;;14901:16;;14882:15;:35;;14858:59;14836:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;9550:7;15101:16;;:35;;;;:::i;:::-;15082:15;:54;;15060:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;15216:1;15207:6;:10;15199:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;15257:16;15276;15257:35;;15335:8;15325:6;:18;;15303:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;15464:2;15436:6;:18;15443:10;15436:18;;;;;;;;;;;;;;;:25;;;;:30;15428:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;9424:6;15528:12;:26;:76;;;;9487:7;15575:12;:29;15528:76;:124;;;;9550:7;15625:12;:27;15528:124;15506:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;15715:11;15729:35;15751:12;15729:21;:35::i;:::-;15715:49;;15777:16;15813:5;15806:3;15797:6;:12;;;;:::i;:::-;15796:22;;;;:::i;:::-;15777:41;;15831:6;:18;15838:10;15831:18;;;;;;;;;;;;;;;15869:263;;;;;;;;15902:6;15869:263;;;;15938:15;15869:263;;;;15986:12;15869:263;;;;16022:3;15869:263;;;;16059:8;15869:263;;;;16098:18;;15869:263;;::::0;15831:312:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16177:6;16156:17;;:27;;;;;;;:::i;:::-;;;;;;;;16216:8;16194:18;;:30;;;;;;;:::i;:::-;;;;;;;;16237:16;:14;:16::i;:::-;16266:64;16296:10;16316:4;16323:6;16266:12;;;;;;;;;;;:29;;;;:64;;;;;;:::i;:::-;16355:10;16348:45;;;16367:6;16375:12;16389:3;16348:45;;;;;;;;:::i;:::-;;;;;;;;14825:1576;;;8746:20:::0;:18;:20::i;:::-;14711:1690;;:::o;23583:354::-;23678:16;;;;;;;;;;;23664:30;;:10;:30;;;23656:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;23762:12;;;;;;;;;;;23745:30;;:5;:30;;;;:63;;;;;23796:11;;;;;;;;;;;23779:29;;:5;:29;;;;23745:63;23723:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;23883:46;23910:10;23922:6;23890:5;23883:26;;;;:46;;;;;:::i;:::-;23583:354;;:::o;7589:87::-;7635:7;7662:6;;;;;;;;;;;7655:13;;7589:87;:::o;9512:45::-;9550:7;9512:45;:::o;10389:31::-;;;;:::o;10984:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9817:38::-;;;;:::o;10349:33::-;;;;:::o;10302:40::-;10338:4;10302:40;:::o;18312:1456::-;8702:21;:19;:21::i;:::-;12636:20:::1;:18;:20::i;:::-;18411:6:::2;:18;18418:10;18411:18;;;;;;;;;;;;;;;:25;;;;18403:5;:33;18395:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;18471:23;18497:6;:18;18504:10;18497:18;;;;;;;;;;;;;;;18516:5;18497:25;;;;;;;;:::i;:::-;;;;;;;;;;;;18471:51;;18535:20;18580:9;:22;;;18558:9;:19;;;:44;;;;:::i;:::-;18535:67;;18613:24;9550:7;18640:16;;:35;;;;:::i;:::-;18613:62;;18776:21;18815:16;18800:12;:31;:91;;18875:16;18800:91;;;18847:12;18800:91;18776:115;;18904:20;18960:13;18941:15;:32;18937:184;;19005:38;19029:13;19005:23;:38::i;:::-;18990:53;;18937:184;;;19091:18;;19076:33;;18937:184;19168:14;10338:4;19241:9;:20;;;19226:12;:35;;;;:::i;:::-;19186:9;:23;;;:76;;;;:::i;:::-;19185:90;;;;:::i;:::-;19168:107;;19303:1;19294:6;:10;19286:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;19371:11;;;;;;;;;;;:21;;;19401:4;19371:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19361:6;:46;;19339:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;19473:38;19504:6;19473:30;:38::i;:::-;19604:12;19581:9;:20;;:35;;;;19665:44;19690:10;19702:6;19665:11;;;;;;;;;;;:24;;;;:44;;;;;:::i;:::-;19741:10;19727:33;;;19753:6;19727:33;;;;;;:::i;:::-;;;;;;;;18384:1384;;;;;;8746:20:::0;:18;:20::i;:::-;18312:1456;:::o;9447:47::-;9487:7;9447:47;:::o;23133:114::-;23193:7;23220:6;:12;23227:4;23220:12;;;;;;;;;;;;;;;:19;;;;23213:26;;23133:114;;;:::o;23945:124::-;23998:7;24025:11;;;;;;;;;;;:21;;;24055:4;24025:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24018:43;;23945:124;:::o;9637:43::-;9676:4;9637:43;:::o;9940:33::-;;;;:::o;7969:220::-;7548:13;:11;:13::i;:::-;8074:1:::1;8054:22;;:8;:22;;::::0;8050:93:::1;;8128:1;8100:31;;;;;;;;;;;:::i;:::-;;;;;;;;8050:93;8153:28;8172:8;8153:18;:28::i;:::-;7969:220:::0;:::o;9319:25::-;;;;;;;;;;;;;:::o;9387:43::-;9424:6;9387:43;:::o;8782:175::-;8518:1;8836:7;;:18;8832:88;;8878:30;;;;;;;;;;;;;;8832:88;8518:1;8932:7;:17;;;;8782:175::o;12684:523::-;9550:7;12771:16;;:35;;;;:::i;:::-;12752:15;:54;;:93;;;;;12844:1;12823:18;;:22;12752:93;12734:421;;;12872:17;12910:16;;12892:15;:34;;;;:::i;:::-;12872:54;;12941:19;13073:21;;13052:18;;:42;;;;:::i;:::-;10338:4;13009:9;12964:25;;:54;;;;:::i;:::-;:83;;;;:::i;:::-;12963:132;;;;:::i;:::-;12941:154;;13132:11;13110:18;;:33;;;;;;;:::i;:::-;;;;;;;;12857:298;;12734:421;13184:15;13165:16;:34;;;;12684:523::o;398:162::-;481:71;501:5;523;:14;;;540:2;544:5;508:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;481:19;:71::i;:::-;398:162;;;:::o;13215:488::-;13296:1;13279:7;:14;;;;:18;:86;;;;;13350:15;13314:7;13339:1;13322:7;:14;;;;:18;;;;:::i;:::-;13314:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;;:51;13279:86;13261:435;;;13441:18;;13392:7;13417:1;13400:7;:14;;;;:18;;;;:::i;:::-;13392:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:46;;:67;;;;13523:18;;13474:7;13499:1;13482:7;:14;;;;:18;;;;:::i;:::-;13474:27;;;;;;;;:::i;:::-;;;;;;;;;;;;:46;;:67;;;;13261:435;;;13574:7;13605:64;;;;;;;;13613:15;13605:64;;;;13630:18;;13605:64;;;;13650:18;;13605:64;;;13574:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13261:435;13215:488::o;8965:78::-;8475:1;9014:7;:21;;;;8965:78::o;13711:992::-;13803:7;13845:1;13827:7;:14;;;;:19;13823:33;;13855:1;13848:8;;;;13823:33;13941:12;13956:1;13941:16;;13968:13;14001:1;13984:7;:14;;;;:18;;;;:::i;:::-;13968:34;;14013:243;14027:5;14020:4;:12;14013:243;;;14049:11;14091:1;14086;14079:4;14071:5;:12;;;;:::i;:::-;:16;;;;:::i;:::-;14070:22;;;;:::i;:::-;14063:4;:29;;;;:::i;:::-;14049:43;;14132:10;14111:7;14119:3;14111:12;;;;;;;;:::i;:::-;;;;;;;;;;;;:17;;;:31;14107:138;;14170:3;14163:10;;14107:138;;;14228:1;14222:3;:7;;;;:::i;:::-;14214:15;;14107:138;14034:222;14013:243;;;14266:16;14285:7;14293:4;14285:13;;;;;;;;:::i;:::-;;;;;;;;;;;;14266:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14322:10;14313:1;:6;;;:19;14309:33;;;14341:1;14334:8;;;;;;;14309:33;14404:1;14380;:20;;;:25;14376:58;;14414:1;:20;;;14407:27;;;;;;;14376:58;14445:17;14478:1;:6;;;14465:10;:19;;;;:::i;:::-;14445:39;;14495:19;14621:21;;14598:1;:20;;;:44;;;;:::i;:::-;10338:4;14559:9;14518:25;;:50;;;;:::i;:::-;:75;;;;:::i;:::-;14517:126;;;;:::i;:::-;14495:148;;14684:11;14661:1;:20;;;:34;;;;:::i;:::-;14654:41;;;;;;;13711:992;;;;:::o;22996:129::-;23105:12;23078:23;;:39;;;;;;;:::i;:::-;;;;;;;;22996:129;:::o;7684:166::-;7755:12;:10;:12::i;:::-;7744:23;;:7;:5;:7::i;:::-;:23;;;7740:103;;7818:12;:10;:12::i;:::-;7791:40;;;;;;;;;;;:::i;:::-;;;;;;;;7740:103;7684:166::o;8197:191::-;8271:16;8290:6;;;;;;;;;;;8271:25;;8316:8;8307:6;;:17;;;;;;;;;;;;;;;;;;8371:8;8340:40;;8361:8;8340:40;;;;;;;;;;;;8260:128;8197:191;:::o;568:270::-;712:118;746:5;781;:18;;;802:4;808:2;812:5;766:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;712:19;:118::i;:::-;568:270;;;;:::o;3413:896::-;3494:18;3523:19;3783:4;3763:1;3739:4;3733:11;3709:4;3703;3699:15;3679:1;3655:5;3631;3608:194;3856:7;3846:180;;3901:4;3895:11;3947:16;3944:1;3939:3;3924:40;3994:16;3989:3;3982:29;3846:180;4054:16;4040:30;;4105:1;4099:8;4084:23;;3578:540;4162:1;4148:10;:15;:68;;4215:1;4200:11;:16;;4148:68;;;4196:1;4174:5;4166:26;;;:31;4148:68;4130:172;;;4283:5;4250:40;;;;;;;;;;;:::i;:::-;;;;;;;;4130:172;3483:826;;3413:896;;:::o;5106:98::-;5159:7;5186:10;5179:17;;5106:98;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:117::-;1134:1;1131;1124:12;1148:102;1189:6;1240:2;1236:7;1231:2;1224:5;1220:14;1216:28;1206:38;;1148:102;;;:::o;1256:180::-;1304:77;1301:1;1294:88;1401:4;1398:1;1391:15;1425:4;1422:1;1415:15;1442:281;1525:27;1547:4;1525:27;:::i;:::-;1517:6;1513:40;1655:6;1643:10;1640:22;1619:18;1607:10;1604:34;1601:62;1598:88;;;1666:18;;:::i;:::-;1598:88;1706:10;1702:2;1695:22;1485:238;1442:281;;:::o;1729:129::-;1763:6;1790:20;;:::i;:::-;1780:30;;1819:33;1847:4;1839:6;1819:33;:::i;:::-;1729:129;;;:::o;2025:1246::-;2096:5;2140:4;2128:9;2123:3;2119:19;2115:30;2112:117;;;2148:79;;:::i;:::-;2112:117;2247:21;2263:4;2247:21;:::i;:::-;2238:30;;2329:1;2369:49;2414:3;2405:6;2394:9;2390:22;2369:49;:::i;:::-;2362:4;2355:5;2351:16;2344:75;2278:152;2494:2;2535:49;2580:3;2571:6;2560:9;2556:22;2535:49;:::i;:::-;2528:4;2521:5;2517:16;2510:75;2440:156;2663:2;2704:49;2749:3;2740:6;2729:9;2725:22;2704:49;:::i;:::-;2697:4;2690:5;2686:16;2679:75;2606:159;2823:2;2864:49;2909:3;2900:6;2889:9;2885:22;2864:49;:::i;:::-;2857:4;2850:5;2846:16;2839:75;2775:150;2993:3;3035:49;3080:3;3071:6;3060:9;3056:22;3035:49;:::i;:::-;3028:4;3021:5;3017:16;3010:75;2935:161;3161:3;3203:49;3248:3;3239:6;3228:9;3224:22;3203:49;:::i;:::-;3196:4;3189:5;3185:16;3178:75;3106:158;2025:1246;;;;:::o;3277:374::-;3358:6;3407:3;3395:9;3386:7;3382:23;3378:33;3375:120;;;3414:79;;:::i;:::-;3375:120;3534:1;3559:75;3626:7;3617:6;3606:9;3602:22;3559:75;:::i;:::-;3549:85;;3505:139;3277:374;;;;:::o;3657:118::-;3744:24;3762:5;3744:24;:::i;:::-;3739:3;3732:37;3657:118;;:::o;3781:222::-;3874:4;3912:2;3901:9;3897:18;3889:26;;3925:71;3993:1;3982:9;3978:17;3969:6;3925:71;:::i;:::-;3781:222;;;;:::o;4009:126::-;4046:7;4086:42;4079:5;4075:54;4064:65;;4009:126;;;:::o;4141:96::-;4178:7;4207:24;4225:5;4207:24;:::i;:::-;4196:35;;4141:96;;;:::o;4243:122::-;4316:24;4334:5;4316:24;:::i;:::-;4309:5;4306:35;4296:63;;4355:1;4352;4345:12;4296:63;4243:122;:::o;4371:139::-;4417:5;4455:6;4442:20;4433:29;;4471:33;4498:5;4471:33;:::i;:::-;4371:139;;;;:::o;4516:474::-;4584:6;4592;4641:2;4629:9;4620:7;4616:23;4612:32;4609:119;;;4647:79;;:::i;:::-;4609:119;4767:1;4792:53;4837:7;4828:6;4817:9;4813:22;4792:53;:::i;:::-;4782:63;;4738:117;4894:2;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4865:118;4516:474;;;;;:::o;4996:775::-;5229:4;5267:3;5256:9;5252:19;5244:27;;5281:71;5349:1;5338:9;5334:17;5325:6;5281:71;:::i;:::-;5362:72;5430:2;5419:9;5415:18;5406:6;5362:72;:::i;:::-;5444;5512:2;5501:9;5497:18;5488:6;5444:72;:::i;:::-;5526;5594:2;5583:9;5579:18;5570:6;5526:72;:::i;:::-;5608:73;5676:3;5665:9;5661:19;5652:6;5608:73;:::i;:::-;5691;5759:3;5748:9;5744:19;5735:6;5691:73;:::i;:::-;4996:775;;;;;;;;;:::o;5777:60::-;5805:3;5826:5;5819:12;;5777:60;;;:::o;5843:142::-;5893:9;5926:53;5944:34;5953:24;5971:5;5953:24;:::i;:::-;5944:34;:::i;:::-;5926:53;:::i;:::-;5913:66;;5843:142;;;:::o;5991:126::-;6041:9;6074:37;6105:5;6074:37;:::i;:::-;6061:50;;5991:126;;;:::o;6123:140::-;6187:9;6220:37;6251:5;6220:37;:::i;:::-;6207:50;;6123:140;;;:::o;6269:159::-;6370:51;6415:5;6370:51;:::i;:::-;6365:3;6358:64;6269:159;;:::o;6434:250::-;6541:4;6579:2;6568:9;6564:18;6556:26;;6592:85;6674:1;6663:9;6659:17;6650:6;6592:85;:::i;:::-;6434:250;;;;:::o;6690:474::-;6758:6;6766;6815:2;6803:9;6794:7;6790:23;6786:32;6783:119;;;6821:79;;:::i;:::-;6783:119;6941:1;6966:53;7011:7;7002:6;6991:9;6987:22;6966:53;:::i;:::-;6956:63;;6912:117;7068:2;7094:53;7139:7;7130:6;7119:9;7115:22;7094:53;:::i;:::-;7084:63;;7039:118;6690:474;;;;;:::o;7170:118::-;7257:24;7275:5;7257:24;:::i;:::-;7252:3;7245:37;7170:118;;:::o;7294:222::-;7387:4;7425:2;7414:9;7410:18;7402:26;;7438:71;7506:1;7495:9;7491:17;7482:6;7438:71;:::i;:::-;7294:222;;;;:::o;7522:442::-;7671:4;7709:2;7698:9;7694:18;7686:26;;7722:71;7790:1;7779:9;7775:17;7766:6;7722:71;:::i;:::-;7803:72;7871:2;7860:9;7856:18;7847:6;7803:72;:::i;:::-;7885;7953:2;7942:9;7938:18;7929:6;7885:72;:::i;:::-;7522:442;;;;;;:::o;7970:329::-;8029:6;8078:2;8066:9;8057:7;8053:23;8049:32;8046:119;;;8084:79;;:::i;:::-;8046:119;8204:1;8229:53;8274:7;8265:6;8254:9;8250:22;8229:53;:::i;:::-;8219:63;;8175:117;7970:329;;;;:::o;8305:169::-;8389:11;8423:6;8418:3;8411:19;8463:4;8458:3;8454:14;8439:29;;8305:169;;;;:::o;8480:::-;8620:21;8616:1;8608:6;8604:14;8597:45;8480:169;:::o;8655:366::-;8797:3;8818:67;8882:2;8877:3;8818:67;:::i;:::-;8811:74;;8894:93;8983:3;8894:93;:::i;:::-;9012:2;9007:3;9003:12;8996:19;;8655:366;;;:::o;9027:419::-;9193:4;9231:2;9220:9;9216:18;9208:26;;9280:9;9274:4;9270:20;9266:1;9255:9;9251:17;9244:47;9308:131;9434:4;9308:131;:::i;:::-;9300:139;;9027:419;;;:::o;9452:180::-;9500:77;9497:1;9490:88;9597:4;9594:1;9587:15;9621:4;9618:1;9611:15;9638:180;9686:77;9683:1;9676:88;9783:4;9780:1;9773:15;9807:4;9804:1;9797:15;9824:410;9864:7;9887:20;9905:1;9887:20;:::i;:::-;9882:25;;9921:20;9939:1;9921:20;:::i;:::-;9916:25;;9976:1;9973;9969:9;9998:30;10016:11;9998:30;:::i;:::-;9987:41;;10177:1;10168:7;10164:15;10161:1;10158:22;10138:1;10131:9;10111:83;10088:139;;10207:18;;:::i;:::-;10088:139;9872:362;9824:410;;;;:::o;10240:180::-;10288:77;10285:1;10278:88;10385:4;10382:1;10375:15;10409:4;10406:1;10399:15;10426:185;10466:1;10483:20;10501:1;10483:20;:::i;:::-;10478:25;;10517:20;10535:1;10517:20;:::i;:::-;10512:25;;10556:1;10546:35;;10561:18;;:::i;:::-;10546:35;10603:1;10600;10596:9;10591:14;;10426:185;;;;:::o;10617:194::-;10657:4;10677:20;10695:1;10677:20;:::i;:::-;10672:25;;10711:20;10729:1;10711:20;:::i;:::-;10706:25;;10755:1;10752;10748:9;10740:17;;10779:1;10773:4;10770:11;10767:37;;;10784:18;;:::i;:::-;10767:37;10617:194;;;;:::o;10817:180::-;10865:77;10862:1;10855:88;10962:4;10959:1;10952:15;10986:4;10983:1;10976:15;11003:332;11124:4;11162:2;11151:9;11147:18;11139:26;;11175:71;11243:1;11232:9;11228:17;11219:6;11175:71;:::i;:::-;11256:72;11324:2;11313:9;11309:18;11300:6;11256:72;:::i;:::-;11003:332;;;;;:::o;11341:191::-;11381:3;11400:20;11418:1;11400:20;:::i;:::-;11395:25;;11434:20;11452:1;11434:20;:::i;:::-;11429:25;;11477:1;11474;11470:9;11463:16;;11498:3;11495:1;11492:10;11489:36;;;11505:18;;:::i;:::-;11489:36;11341:191;;;;:::o;11538:163::-;11678:15;11674:1;11666:6;11662:14;11655:39;11538:163;:::o;11707:366::-;11849:3;11870:67;11934:2;11929:3;11870:67;:::i;:::-;11863:74;;11946:93;12035:3;11946:93;:::i;:::-;12064:2;12059:3;12055:12;12048:19;;11707:366;;;:::o;12079:419::-;12245:4;12283:2;12272:9;12268:18;12260:26;;12332:9;12326:4;12322:20;12318:1;12307:9;12303:17;12296:47;12360:131;12486:4;12360:131;:::i;:::-;12352:139;;12079:419;;;:::o;12504:182::-;12644:34;12640:1;12632:6;12628:14;12621:58;12504:182;:::o;12692:366::-;12834:3;12855:67;12919:2;12914:3;12855:67;:::i;:::-;12848:74;;12931:93;13020:3;12931:93;:::i;:::-;13049:2;13044:3;13040:12;13033:19;;12692:366;;;:::o;13064:419::-;13230:4;13268:2;13257:9;13253:18;13245:26;;13317:9;13311:4;13307:20;13303:1;13292:9;13288:17;13281:47;13345:131;13471:4;13345:131;:::i;:::-;13337:139;;13064:419;;;:::o;13489:143::-;13546:5;13577:6;13571:13;13562:22;;13593:33;13620:5;13593:33;:::i;:::-;13489:143;;;;:::o;13638:351::-;13708:6;13757:2;13745:9;13736:7;13732:23;13728:32;13725:119;;;13763:79;;:::i;:::-;13725:119;13883:1;13908:64;13964:7;13955:6;13944:9;13940:22;13908:64;:::i;:::-;13898:74;;13854:128;13638:351;;;;:::o;13995:175::-;14135:27;14131:1;14123:6;14119:14;14112:51;13995:175;:::o;14176:366::-;14318:3;14339:67;14403:2;14398:3;14339:67;:::i;:::-;14332:74;;14415:93;14504:3;14415:93;:::i;:::-;14533:2;14528:3;14524:12;14517:19;;14176:366;;;:::o;14548:419::-;14714:4;14752:2;14741:9;14737:18;14729:26;;14801:9;14795:4;14791:20;14787:1;14776:9;14772:17;14765:47;14829:131;14955:4;14829:131;:::i;:::-;14821:139;;14548:419;;;:::o;14973:178::-;15113:30;15109:1;15101:6;15097:14;15090:54;14973:178;:::o;15157:366::-;15299:3;15320:67;15384:2;15379:3;15320:67;:::i;:::-;15313:74;;15396:93;15485:3;15396:93;:::i;:::-;15514:2;15509:3;15505:12;15498:19;;15157:366;;;:::o;15529:419::-;15695:4;15733:2;15722:9;15718:18;15710:26;;15782:9;15776:4;15772:20;15768:1;15757:9;15753:17;15746:47;15810:131;15936:4;15810:131;:::i;:::-;15802:139;;15529:419;;;:::o;15954:175::-;16094:27;16090:1;16082:6;16078:14;16071:51;15954:175;:::o;16135:366::-;16277:3;16298:67;16362:2;16357:3;16298:67;:::i;:::-;16291:74;;16374:93;16463:3;16374:93;:::i;:::-;16492:2;16487:3;16483:12;16476:19;;16135:366;;;:::o;16507:419::-;16673:4;16711:2;16700:9;16696:18;16688:26;;16760:9;16754:4;16750:20;16746:1;16735:9;16731:17;16724:47;16788:131;16914:4;16788:131;:::i;:::-;16780:139;;16507:419;;;:::o;16932:173::-;17072:25;17068:1;17060:6;17056:14;17049:49;16932:173;:::o;17111:366::-;17253:3;17274:67;17338:2;17333:3;17274:67;:::i;:::-;17267:74;;17350:93;17439:3;17350:93;:::i;:::-;17468:2;17463:3;17459:12;17452:19;;17111:366;;;:::o;17483:419::-;17649:4;17687:2;17676:9;17672:18;17664:26;;17736:9;17730:4;17726:20;17722:1;17711:9;17707:17;17700:47;17764:131;17890:4;17764:131;:::i;:::-;17756:139;;17483:419;;;:::o;17908:177::-;18048:29;18044:1;18036:6;18032:14;18025:53;17908:177;:::o;18091:366::-;18233:3;18254:67;18318:2;18313:3;18254:67;:::i;:::-;18247:74;;18330:93;18419:3;18330:93;:::i;:::-;18448:2;18443:3;18439:12;18432:19;;18091:366;;;:::o;18463:419::-;18629:4;18667:2;18656:9;18652:18;18644:26;;18716:9;18710:4;18706:20;18702:1;18691:9;18687:17;18680:47;18744:131;18870:4;18744:131;:::i;:::-;18736:139;;18463:419;;;:::o;18888:174::-;19028:26;19024:1;19016:6;19012:14;19005:50;18888:174;:::o;19068:366::-;19210:3;19231:67;19295:2;19290:3;19231:67;:::i;:::-;19224:74;;19307:93;19396:3;19307:93;:::i;:::-;19425:2;19420:3;19416:12;19409:19;;19068:366;;;:::o;19440:419::-;19606:4;19644:2;19633:9;19629:18;19621:26;;19693:9;19687:4;19683:20;19679:1;19668:9;19664:17;19657:47;19721:131;19847:4;19721:131;:::i;:::-;19713:139;;19440:419;;;:::o;19865:174::-;20005:26;20001:1;19993:6;19989:14;19982:50;19865:174;:::o;20045:366::-;20187:3;20208:67;20272:2;20267:3;20208:67;:::i;:::-;20201:74;;20284:93;20373:3;20284:93;:::i;:::-;20402:2;20397:3;20393:12;20386:19;;20045:366;;;:::o;20417:419::-;20583:4;20621:2;20610:9;20606:18;20598:26;;20670:9;20664:4;20660:20;20656:1;20645:9;20641:17;20634:47;20698:131;20824:4;20698:131;:::i;:::-;20690:139;;20417:419;;;:::o;20842:231::-;20982:34;20978:1;20970:6;20966:14;20959:58;21051:14;21046:2;21038:6;21034:15;21027:39;20842:231;:::o;21079:366::-;21221:3;21242:67;21306:2;21301:3;21242:67;:::i;:::-;21235:74;;21318:93;21407:3;21318:93;:::i;:::-;21436:2;21431:3;21427:12;21420:19;;21079:366;;;:::o;21451:419::-;21617:4;21655:2;21644:9;21640:18;21632:26;;21704:9;21698:4;21694:20;21690:1;21679:9;21675:17;21668:47;21732:131;21858:4;21732:131;:::i;:::-;21724:139;;21451:419;;;:::o;21876:172::-;22016:24;22012:1;22004:6;22000:14;21993:48;21876:172;:::o;22054:366::-;22196:3;22217:67;22281:2;22276:3;22217:67;:::i;:::-;22210:74;;22293:93;22382:3;22293:93;:::i;:::-;22411:2;22406:3;22402:12;22395:19;;22054:366;;;:::o;22426:419::-;22592:4;22630:2;22619:9;22615:18;22607:26;;22679:9;22673:4;22669:20;22665:1;22654:9;22650:17;22643:47;22707:131;22833:4;22707:131;:::i;:::-;22699:139;;22426:419;;;:::o;22851:172::-;22991:24;22987:1;22979:6;22975:14;22968:48;22851:172;:::o;23029:366::-;23171:3;23192:67;23256:2;23251:3;23192:67;:::i;:::-;23185:74;;23268:93;23357:3;23268:93;:::i;:::-;23386:2;23381:3;23377:12;23370:19;;23029:366;;;:::o;23401:419::-;23567:4;23605:2;23594:9;23590:18;23582:26;;23654:9;23648:4;23644:20;23640:1;23629:9;23625:17;23618:47;23682:131;23808:4;23682:131;:::i;:::-;23674:139;;23401:419;;;:::o;23826:223::-;23966:34;23962:1;23954:6;23950:14;23943:58;24035:6;24030:2;24022:6;24018:15;24011:31;23826:223;:::o;24055:366::-;24197:3;24218:67;24282:2;24277:3;24218:67;:::i;:::-;24211:74;;24294:93;24383:3;24294:93;:::i;:::-;24412:2;24407:3;24403:12;24396:19;;24055:366;;;:::o;24427:419::-;24593:4;24631:2;24620:9;24616:18;24608:26;;24680:9;24674:4;24670:20;24666:1;24655:9;24651:17;24644:47;24708:131;24834:4;24708:131;:::i;:::-;24700:139;;24427:419;;;:::o;24852:169::-;24992:21;24988:1;24980:6;24976:14;24969:45;24852:169;:::o;25027:366::-;25169:3;25190:67;25254:2;25249:3;25190:67;:::i;:::-;25183:74;;25266:93;25355:3;25266:93;:::i;:::-;25384:2;25379:3;25375:12;25368:19;;25027:366;;;:::o;25399:419::-;25565:4;25603:2;25592:9;25588:18;25580:26;;25652:9;25646:4;25642:20;25638:1;25627:9;25623:17;25616:47;25680:131;25806:4;25680:131;:::i;:::-;25672:139;;25399:419;;;:::o;25824:332::-;25945:4;25983:2;25972:9;25968:18;25960:26;;25996:71;26064:1;26053:9;26049:17;26040:6;25996:71;:::i;:::-;26077:72;26145:2;26134:9;26130:18;26121:6;26077:72;:::i;:::-;25824:332;;;;;:::o;26162:442::-;26311:4;26349:2;26338:9;26334:18;26326:26;;26362:71;26430:1;26419:9;26415:17;26406:6;26362:71;:::i;:::-;26443:72;26511:2;26500:9;26496:18;26487:6;26443:72;:::i;:::-;26525;26593:2;26582:9;26578:18;26569:6;26525:72;:::i;:::-;26162:442;;;;;;:::o
Swarm Source
ipfs://27f08ca993022cf6dd7f4714ac2e7973b2f2d7b8ade855dc53673748bae9878e
Loading...
Loading
Loading...
Loading
Net Worth in USD
$4.19
Net Worth in ETH
0.002017
Token Allocations
OSCAR
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.001053 | 3,973 | $4.19 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.