Source Code
Latest 25 from a total of 6,345,104 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Claim | 29942641 | 6 days ago | IN | 0 ETH | 0.00000005 | ||||
| Claim | 29849463 | 8 days ago | IN | 0 ETH | 0.00000044 | ||||
| Claim | 29829096 | 9 days ago | IN | 0 ETH | 0.00000358 | ||||
| Claim | 29826922 | 9 days ago | IN | 0 ETH | 0.00000067 | ||||
| Claim | 29808820 | 9 days ago | IN | 0 ETH | 0.00000052 | ||||
| Claim | 29800677 | 9 days ago | IN | 0 ETH | 0.00004736 | ||||
| Claim | 29781479 | 10 days ago | IN | 0 ETH | 0.00000008 | ||||
| Claim | 29725053 | 11 days ago | IN | 0 ETH | 0.0000007 | ||||
| Claim | 29725047 | 11 days ago | IN | 0 ETH | 0.00000069 | ||||
| Claim | 29724839 | 11 days ago | IN | 0 ETH | 0.00000089 | ||||
| Claim Treasury | 29685800 | 12 days ago | IN | 0 ETH | 0.00000069 | ||||
| Claim | 29685793 | 12 days ago | IN | 0 ETH | 0.00000086 | ||||
| Claim | 29606978 | 14 days ago | IN | 0 ETH | 0.00000078 | ||||
| Claim | 29559827 | 15 days ago | IN | 0 ETH | 0.00000084 | ||||
| Claim | 29529689 | 16 days ago | IN | 0 ETH | 0.00000166 | ||||
| Claim | 29529272 | 16 days ago | IN | 0 ETH | 0.00000699 | ||||
| Claim | 29506817 | 16 days ago | IN | 0 ETH | 0.00000238 | ||||
| Claim | 29447424 | 18 days ago | IN | 0 ETH | 0.00000238 | ||||
| Claim | 29445921 | 18 days ago | IN | 0 ETH | 0.0000003 | ||||
| Claim | 29438572 | 18 days ago | IN | 0 ETH | 0.00000007 | ||||
| Claim Treasury | 29435824 | 18 days ago | IN | 0 ETH | 0.00000004 | ||||
| Claim | 29365628 | 20 days ago | IN | 0 ETH | 0.00000011 | ||||
| Claim | 29353893 | 20 days ago | IN | 0 ETH | 0.00000008 | ||||
| Claim | 29329350 | 20 days ago | IN | 0 ETH | 0.00000146 | ||||
| Claim | 29249285 | 22 days ago | IN | 0 ETH | 0.00000009 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 29942641 | 6 days ago | 0.02117914 ETH | ||||
| 29849463 | 8 days ago | 0.02053333 ETH | ||||
| 29829096 | 9 days ago | 0.01747494 ETH | ||||
| 29826922 | 9 days ago | 0.01907027 ETH | ||||
| 29808820 | 9 days ago | 0.0603431 ETH | ||||
| 29800677 | 9 days ago | 0.01814814 ETH | ||||
| 29781479 | 10 days ago | 0.01903846 ETH | ||||
| 29725053 | 11 days ago | 0.0196 ETH | ||||
| 29725047 | 11 days ago | 0.01715 ETH | ||||
| 29724839 | 11 days ago | 0.01998811 ETH | ||||
| 29606978 | 14 days ago | 0.05226666 ETH | ||||
| 29559827 | 15 days ago | 0.01870909 ETH | ||||
| 29529689 | 16 days ago | 0.018718 ETH | ||||
| 29529272 | 16 days ago | 0.019675 ETH | ||||
| 29447424 | 18 days ago | 0.021324 ETH | ||||
| 29445921 | 18 days ago | 0.021 ETH | ||||
| 29438572 | 18 days ago | 0.01915372 ETH | ||||
| 29365628 | 20 days ago | 0.02071176 ETH | ||||
| 29353893 | 20 days ago | 0.01997692 ETH | ||||
| 29329350 | 20 days ago | 0.01915269 ETH | ||||
| 29249285 | 22 days ago | 0.02314827 ETH | ||||
| 29238598 | 22 days ago | 0.01926206 ETH | ||||
| 29190758 | 24 days ago | 0.01881 ETH | ||||
| 29183633 | 24 days ago | 0.03605414 ETH | ||||
| 29158117 | 24 days ago | 0.01890509 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BlastMoonOrDoomNativeToken
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
import {MoonOrDoomNativeToken} from "./MoonOrDoomNativeToken.sol";
import {IBlast, YieldMode, GasMode} from "./interfaces/IBlast.sol";
import {IBlastPoints} from "./interfaces/IBlastPoints.sol";
/**
* @title BlastMoonOrDoomNativeToken
*/
contract BlastMoonOrDoomNativeToken is MoonOrDoomNativeToken {
/**
* @notice Constructor
* @param _oracleAddress: oracle address
* @param _adminAddress: admin address
* @param _operatorAddress: operator address
* @param _intervalSeconds: number of time within an interval
* @param _bufferSeconds: buffer of time for resolution of price
* @param _minEntry: minimum entry (in wei)
* @param _oracleUpdateAllowance: oracle update allowance
* @param _treasuryFee: treasury fee (1000 = 10%)
* @param _ethYieldConfiguration Blast's ETH yield configuration address
* @param _blastPoints The Blast points configuration.
* @param _blastPointsOperator The Blast points operator.
*/
constructor(
address _oracleAddress,
address _adminAddress,
address _operatorAddress,
uint256 _intervalSeconds,
uint256 _bufferSeconds,
uint256 _minEntry,
uint256 _oracleUpdateAllowance,
uint256 _treasuryFee,
address _ethYieldConfiguration,
address _blastPoints,
address _blastPointsOperator
)
MoonOrDoomNativeToken(
_oracleAddress,
_adminAddress,
_operatorAddress,
_intervalSeconds,
_bufferSeconds,
_minEntry,
_oracleUpdateAllowance,
_treasuryFee
)
{
IBlast(_ethYieldConfiguration).configure(YieldMode.CLAIMABLE, GasMode.CLAIMABLE, _adminAddress);
IBlastPoints(_blastPoints).configurePointsOperator(_blastPointsOperator);
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
import {LowLevelETHTransfer} from "@looksrare/contracts-libs/contracts/lowLevelCallers/LowLevelETHTransfer.sol";
import {LowLevelERC20Transfer} from "@looksrare/contracts-libs/contracts/lowLevelCallers/LowLevelERC20Transfer.sol";
/**
* @title MoonOrDoomNativeToken
*/
contract MoonOrDoomNativeToken is Ownable, Pausable, ReentrancyGuard, LowLevelETHTransfer, LowLevelERC20Transfer {
AggregatorV3Interface public oracle;
bool public genesisLockOnce = false;
bool public genesisStartOnce = false;
address public adminAddress; // address of the admin
address public operatorAddress; // address of the operator
uint256 public bufferSeconds; // number of seconds for valid execution of a moon or doom round
uint256 public intervalSeconds; // interval in seconds between two moon or doom rounds
uint256 public minEntry; // minimum enter amount (denominated in wei)
uint256 public treasuryFee; // treasury rate (e.g. 200 = 2%, 150 = 1.50%)
uint256 public treasuryAmount; // treasury amount that was not claimed
uint256 public currentEpoch; // current epoch for moon or doom round
uint256 public oracleLatestRoundId; // converted from uint80 (Chainlink)
uint256 public oracleUpdateAllowance; // seconds
uint256 public constant MAX_TREASURY_FEE = 1000; // 10%
mapping(uint256 => mapping(address => EnterInfo)) public ledger;
mapping(uint256 => Round) public rounds;
mapping(address => uint256[]) public userRounds;
enum Position {
Moon,
Doom
}
struct Round {
uint256 epoch;
uint256 startTimestamp;
uint256 lockTimestamp;
uint256 closeTimestamp;
int256 lockPrice;
int256 closePrice;
uint256 lockOracleId;
uint256 closeOracleId;
uint256 totalAmount;
uint256 moonAmount;
uint256 doomAmount;
uint256 rewardBaseCalAmount;
uint256 rewardAmount;
bool oracleCalled;
}
struct EnterInfo {
Position position;
uint256 amount;
bool claimed; // default false
}
event EnterDoom(address indexed sender, uint256 indexed epoch, uint256 amount);
event EnterMoon(address indexed sender, uint256 indexed epoch, uint256 amount);
event Claim(address indexed sender, uint256 indexed epoch, uint256 amount);
event EndRound(uint256 indexed epoch, uint256 indexed roundId, int256 price);
event LockRound(uint256 indexed epoch, uint256 indexed roundId, int256 price);
event NewAdminAddress(address admin);
event NewBufferAndIntervalSeconds(uint256 bufferSeconds, uint256 intervalSeconds);
event NewMinEntry(uint256 indexed epoch, uint256 minEntry);
event NewTreasuryFee(uint256 indexed epoch, uint256 treasuryFee);
event NewOperatorAddress(address operator);
event NewOracle(address oracle);
event NewOracleUpdateAllowance(uint256 oracleUpdateAllowance);
event Pause(uint256 indexed epoch);
event RewardsCalculated(
uint256 indexed epoch,
uint256 rewardBaseCalAmount,
uint256 rewardAmount,
uint256 treasuryAmount
);
event StartRound(uint256 indexed epoch);
event TokenRecovery(address indexed token, uint256 amount);
event TreasuryClaim(uint256 amount);
event Unpause(uint256 indexed epoch);
modifier onlyAdmin() {
require(msg.sender == adminAddress, "Not admin");
_;
}
modifier onlyAdminOrOperator() {
require(msg.sender == adminAddress || msg.sender == operatorAddress, "Not operator/admin");
_;
}
modifier onlyOperator() {
require(msg.sender == operatorAddress, "Not operator");
_;
}
modifier notContract() {
require(!_isContract(msg.sender), "Contract not allowed");
require(msg.sender == tx.origin, "Proxy contract not allowed");
_;
}
/**
* @notice Constructor
* @param _oracleAddress: oracle address
* @param _adminAddress: admin address
* @param _operatorAddress: operator address
* @param _intervalSeconds: number of time within an interval
* @param _bufferSeconds: buffer of time for resolution of price
* @param _minEntry: minimum entry (in wei)
* @param _oracleUpdateAllowance: oracle update allowance
* @param _treasuryFee: treasury fee (1000 = 10%)
*/
constructor(
address _oracleAddress,
address _adminAddress,
address _operatorAddress,
uint256 _intervalSeconds,
uint256 _bufferSeconds,
uint256 _minEntry,
uint256 _oracleUpdateAllowance,
uint256 _treasuryFee
) {
require(_treasuryFee <= MAX_TREASURY_FEE, "Treasury fee too high");
oracle = AggregatorV3Interface(_oracleAddress);
adminAddress = _adminAddress;
operatorAddress = _operatorAddress;
intervalSeconds = _intervalSeconds;
bufferSeconds = _bufferSeconds;
minEntry = _minEntry;
oracleUpdateAllowance = _oracleUpdateAllowance;
treasuryFee = _treasuryFee;
}
/**
* @notice Enter doom position
* @param epoch: epoch
*/
function enterDoom(uint256 epoch) external payable whenNotPaused nonReentrant notContract {
require(epoch == currentEpoch, "Too early/late");
require(_enterable(epoch), "Round not enterable");
require(msg.value >= minEntry, "Entry must be greater than minEntry");
require(ledger[epoch][msg.sender].amount == 0, "Can only enter once per round");
// Update round data
Round storage round = rounds[epoch];
round.totalAmount = round.totalAmount + msg.value;
round.doomAmount = round.doomAmount + msg.value;
// Update user data
EnterInfo storage enterInfo = ledger[epoch][msg.sender];
enterInfo.position = Position.Doom;
enterInfo.amount = msg.value;
userRounds[msg.sender].push(epoch);
emit EnterDoom(msg.sender, epoch, msg.value);
}
/**
* @notice Enter moon position
* @param epoch: epoch
*/
function enterMoon(uint256 epoch) external payable whenNotPaused nonReentrant notContract {
require(epoch == currentEpoch, "Too early/late");
require(_enterable(epoch), "Round not enterable");
require(msg.value >= minEntry, "Entry must be greater than minEntry");
require(ledger[epoch][msg.sender].amount == 0, "Can only enter once per round");
// Update round data
Round storage round = rounds[epoch];
round.totalAmount = round.totalAmount + msg.value;
round.moonAmount = round.moonAmount + msg.value;
// Update user data
EnterInfo storage enterInfo = ledger[epoch][msg.sender];
enterInfo.position = Position.Moon;
enterInfo.amount = msg.value;
userRounds[msg.sender].push(epoch);
emit EnterMoon(msg.sender, epoch, msg.value);
}
/**
* @notice Claim reward for an array of epochs
* @param epochs: array of epochs
*/
function claim(uint256[] calldata epochs) external nonReentrant notContract {
uint256 reward; // Initializes reward
for (uint256 i = 0; i < epochs.length; i++) {
require(rounds[epochs[i]].startTimestamp != 0, "Round has not started");
require(block.timestamp > rounds[epochs[i]].closeTimestamp, "Round has not ended");
uint256 addedReward = 0;
// Round valid, claim rewards
if (rounds[epochs[i]].oracleCalled) {
require(claimable(epochs[i], msg.sender), "Not eligible for claim");
Round memory round = rounds[epochs[i]];
addedReward = (ledger[epochs[i]][msg.sender].amount * round.rewardAmount) / round.rewardBaseCalAmount;
}
// Round invalid, refund entry
else {
require(refundable(epochs[i], msg.sender), "Not eligible for refund");
addedReward = ledger[epochs[i]][msg.sender].amount;
}
ledger[epochs[i]][msg.sender].claimed = true;
reward += addedReward;
emit Claim(msg.sender, epochs[i], addedReward);
}
if (reward > 0) {
_transferETH(msg.sender, reward);
}
}
/**
* @notice Start the next round n, lock price for round n-1, end round n-2
* @dev Callable by operator
*/
function executeRound() external whenNotPaused onlyOperator {
require(
genesisStartOnce && genesisLockOnce,
"Can only run after genesisStartRound and genesisLockRound is triggered"
);
(uint80 currentRoundId, int256 currentPrice) = _getPriceFromOracle();
oracleLatestRoundId = uint256(currentRoundId);
// CurrentEpoch refers to previous round (n-1)
_safeLockRound(currentEpoch, currentRoundId, currentPrice);
_safeEndRound(currentEpoch - 1, currentRoundId, currentPrice);
_calculateRewards(currentEpoch - 1);
// Increment currentEpoch to current round (n)
currentEpoch = currentEpoch + 1;
_safeStartRound(currentEpoch);
}
/**
* @notice Lock genesis round
* @dev Callable by operator
*/
function genesisLockRound() external whenNotPaused onlyOperator {
require(genesisStartOnce, "Can only run after genesisStartRound is triggered");
require(!genesisLockOnce, "Can only run genesisLockRound once");
(uint80 currentRoundId, int256 currentPrice) = _getPriceFromOracle();
oracleLatestRoundId = uint256(currentRoundId);
_safeLockRound(currentEpoch, currentRoundId, currentPrice);
currentEpoch = currentEpoch + 1;
_startRound(currentEpoch);
genesisLockOnce = true;
}
/**
* @notice Start genesis round
* @dev Callable by operator
*/
function genesisStartRound() external whenNotPaused onlyOperator {
require(!genesisStartOnce, "Can only run genesisStartRound once");
currentEpoch = currentEpoch + 1;
_startRound(currentEpoch);
genesisStartOnce = true;
}
/**
* @notice called by the admin to pause, triggers stopped state
* @dev Callable by admin or operator
*/
function pause() external whenNotPaused onlyAdminOrOperator {
_pause();
emit Pause(currentEpoch);
}
/**
* @notice Claim all rewards in treasury
* @dev Callable by admin
*/
function claimTreasury() external nonReentrant onlyAdmin {
uint256 currentTreasuryAmount = treasuryAmount;
treasuryAmount = 0;
_transferETH(adminAddress, currentTreasuryAmount);
emit TreasuryClaim(currentTreasuryAmount);
}
/**
* @notice called by the admin to unpause, returns to normal state
* Reset genesis state. Once paused, the rounds would need to be kickstarted by genesis
* @dev Callable by admin or operator
*/
function unpause() external whenPaused onlyAdminOrOperator {
genesisStartOnce = false;
genesisLockOnce = false;
_unpause();
emit Unpause(currentEpoch);
}
/**
* @notice Set buffer and interval (in seconds)
* @dev Callable by admin
*/
function setBufferAndIntervalSeconds(uint256 _bufferSeconds, uint256 _intervalSeconds)
external
whenPaused
onlyAdmin
{
require(_bufferSeconds < _intervalSeconds, "bufferSeconds must be inferior to intervalSeconds");
bufferSeconds = _bufferSeconds;
intervalSeconds = _intervalSeconds;
emit NewBufferAndIntervalSeconds(_bufferSeconds, _intervalSeconds);
}
/**
* @notice Set minEntry
* @dev Callable by admin
*/
function setMinEntry(uint256 _minEntry) external whenPaused onlyAdmin {
require(_minEntry != 0, "Must be superior to 0");
minEntry = _minEntry;
emit NewMinEntry(currentEpoch, minEntry);
}
/**
* @notice Set operator address
* @dev Callable by admin
*/
function setOperator(address _operatorAddress) external onlyAdmin {
require(_operatorAddress != address(0), "Cannot be zero address");
operatorAddress = _operatorAddress;
emit NewOperatorAddress(_operatorAddress);
}
/**
* @notice Set Oracle address
* @dev Callable by admin
*/
function setOracle(address _oracle) external whenPaused onlyAdmin {
require(_oracle != address(0), "Cannot be zero address");
oracleLatestRoundId = 0;
oracle = AggregatorV3Interface(_oracle);
// Dummy check to make sure the interface implements this function properly
oracle.latestRoundData();
emit NewOracle(_oracle);
}
/**
* @notice Set oracle update allowance
* @dev Callable by admin
*/
function setOracleUpdateAllowance(uint256 _oracleUpdateAllowance) external whenPaused onlyAdmin {
oracleUpdateAllowance = _oracleUpdateAllowance;
emit NewOracleUpdateAllowance(_oracleUpdateAllowance);
}
/**
* @notice Set treasury fee
* @dev Callable by admin
*/
function setTreasuryFee(uint256 _treasuryFee) external whenPaused onlyAdmin {
require(_treasuryFee <= MAX_TREASURY_FEE, "Treasury fee too high");
treasuryFee = _treasuryFee;
emit NewTreasuryFee(currentEpoch, treasuryFee);
}
/**
* @notice It allows the owner to recover tokens sent to the contract by mistake
* @param _token: token address
* @param _amount: token amount
* @dev Callable by owner
*/
function recoverToken(address _token, uint256 _amount) external onlyOwner {
_executeERC20DirectTransfer(_token, msg.sender, _amount);
emit TokenRecovery(_token, _amount);
}
/**
* @notice Set admin address
* @dev Callable by owner
*/
function setAdmin(address _adminAddress) external onlyOwner {
require(_adminAddress != address(0), "Cannot be zero address");
adminAddress = _adminAddress;
emit NewAdminAddress(_adminAddress);
}
/**
* @notice Returns round epochs and entry information for a user that has participated
* @param user: user address
* @param cursor: cursor
* @param size: size
*/
function getUserRounds(
address user,
uint256 cursor,
uint256 size
)
external
view
returns (
uint256[] memory,
EnterInfo[] memory,
uint256
)
{
uint256 length = size;
if (length > userRounds[user].length - cursor) {
length = userRounds[user].length - cursor;
}
uint256[] memory values = new uint256[](length);
EnterInfo[] memory enterInfo = new EnterInfo[](length);
for (uint256 i = 0; i < length; i++) {
values[i] = userRounds[user][cursor + i];
enterInfo[i] = ledger[values[i]][user];
}
return (values, enterInfo, cursor + length);
}
/**
* @notice Returns round epochs length
* @param user: user address
*/
function getUserRoundsLength(address user) external view returns (uint256) {
return userRounds[user].length;
}
/**
* @notice Get the claimable stats of specific epoch and user account
* @param epoch: epoch
* @param user: user address
*/
function claimable(uint256 epoch, address user) public view returns (bool) {
EnterInfo memory enterInfo = ledger[epoch][user];
Round memory round = rounds[epoch];
if (round.lockPrice == round.closePrice) {
return false;
}
return
round.oracleCalled &&
enterInfo.amount != 0 &&
!enterInfo.claimed &&
((round.closePrice > round.lockPrice && enterInfo.position == Position.Moon) ||
(round.closePrice < round.lockPrice && enterInfo.position == Position.Doom));
}
/**
* @notice Get the refundable stats of specific epoch and user account
* @param epoch: epoch
* @param user: user address
*/
function refundable(uint256 epoch, address user) public view returns (bool) {
EnterInfo memory enterInfo = ledger[epoch][user];
Round memory round = rounds[epoch];
return
!round.oracleCalled &&
!enterInfo.claimed &&
block.timestamp > round.closeTimestamp + bufferSeconds &&
enterInfo.amount != 0;
}
/**
* @notice Calculate rewards for round
* @param epoch: epoch
*/
function _calculateRewards(uint256 epoch) internal {
require(rounds[epoch].rewardBaseCalAmount == 0 && rounds[epoch].rewardAmount == 0, "Rewards calculated");
Round storage round = rounds[epoch];
uint256 rewardBaseCalAmount;
uint256 treasuryAmt;
uint256 rewardAmount;
// Moon wins
if (round.closePrice > round.lockPrice) {
rewardBaseCalAmount = round.moonAmount;
// no winner, house win
if (rewardBaseCalAmount == 0) {
treasuryAmt = round.totalAmount;
} else {
treasuryAmt = (round.totalAmount * treasuryFee) / 10000;
}
rewardAmount = round.totalAmount - treasuryAmt;
}
// Doom wins
else if (round.closePrice < round.lockPrice) {
rewardBaseCalAmount = round.doomAmount;
// no winner, house win
if (rewardBaseCalAmount == 0) {
treasuryAmt = round.totalAmount;
} else {
treasuryAmt = (round.totalAmount * treasuryFee) / 10000;
}
rewardAmount = round.totalAmount - treasuryAmt;
}
// House wins
else {
rewardBaseCalAmount = 0;
rewardAmount = 0;
treasuryAmt = round.totalAmount;
}
round.rewardBaseCalAmount = rewardBaseCalAmount;
round.rewardAmount = rewardAmount;
// Add to treasury
treasuryAmount += treasuryAmt;
emit RewardsCalculated(epoch, rewardBaseCalAmount, rewardAmount, treasuryAmt);
}
/**
* @notice End round
* @param epoch: epoch
* @param roundId: roundId
* @param price: price of the round
*/
function _safeEndRound(
uint256 epoch,
uint256 roundId,
int256 price
) internal {
require(rounds[epoch].lockTimestamp != 0, "Can only end round after round has locked");
require(block.timestamp >= rounds[epoch].closeTimestamp, "Can only end round after closeTimestamp");
require(
block.timestamp <= rounds[epoch].closeTimestamp + bufferSeconds,
"Can only end round within bufferSeconds"
);
Round storage round = rounds[epoch];
round.closePrice = price;
round.closeOracleId = roundId;
round.oracleCalled = true;
emit EndRound(epoch, roundId, round.closePrice);
}
/**
* @notice Lock round
* @param epoch: epoch
* @param roundId: roundId
* @param price: price of the round
*/
function _safeLockRound(
uint256 epoch,
uint256 roundId,
int256 price
) internal {
require(rounds[epoch].startTimestamp != 0, "Can only lock round after round has started");
require(block.timestamp >= rounds[epoch].lockTimestamp, "Can only lock round after lockTimestamp");
require(
block.timestamp <= rounds[epoch].lockTimestamp + bufferSeconds,
"Can only lock round within bufferSeconds"
);
Round storage round = rounds[epoch];
round.closeTimestamp = block.timestamp + intervalSeconds;
round.lockPrice = price;
round.lockOracleId = roundId;
emit LockRound(epoch, roundId, round.lockPrice);
}
/**
* @notice Start round
* Previous round n-2 must end
* @param epoch: epoch
*/
function _safeStartRound(uint256 epoch) internal {
require(genesisStartOnce, "Can only run after genesisStartRound is triggered");
require(rounds[epoch - 2].closeTimestamp != 0, "Can only start round after round n-2 has ended");
require(
block.timestamp >= rounds[epoch - 2].closeTimestamp,
"Can only start new round after round n-2 closeTimestamp"
);
_startRound(epoch);
}
/**
* @notice Start round
* Previous round n-2 must end
* @param epoch: epoch
*/
function _startRound(uint256 epoch) internal {
Round storage round = rounds[epoch];
round.startTimestamp = block.timestamp;
round.lockTimestamp = block.timestamp + intervalSeconds;
round.closeTimestamp = block.timestamp + (2 * intervalSeconds);
round.epoch = epoch;
round.totalAmount = 0;
emit StartRound(epoch);
}
/**
* @notice Determine if a round is valid for receiving entries
* Round must have started and locked
* Current timestamp must be within startTimestamp and closeTimestamp
*/
function _enterable(uint256 epoch) internal view returns (bool) {
return
rounds[epoch].startTimestamp != 0 &&
rounds[epoch].lockTimestamp != 0 &&
block.timestamp > rounds[epoch].startTimestamp &&
block.timestamp < rounds[epoch].lockTimestamp;
}
/**
* @notice Get latest recorded price from oracle
* If it falls below allowed buffer or has not updated, it would be invalid.
*/
function _getPriceFromOracle() internal view returns (uint80, int256) {
uint256 leastAllowedTimestamp = block.timestamp - oracleUpdateAllowance;
(uint80 roundId, int256 price, , uint256 timestamp, ) = oracle.latestRoundData();
require(timestamp >= leastAllowedTimestamp, "Oracle update exceeded max timestamp allowance");
require(
uint256(roundId) > oracleLatestRoundId,
"Oracle update roundId must be larger than oracleLatestRoundId"
);
return (roundId, price);
}
/**
* @notice Returns true if `account` is a contract.
* @param account: account address
*/
function _isContract(address account) internal view returns (bool) {
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
enum YieldMode {
AUTOMATIC,
VOID,
CLAIMABLE
}
enum GasMode {
VOID,
CLAIMABLE
}
interface IBlast {
// configure
function configureContract(
address contractAddress,
YieldMode _yield,
GasMode gasMode,
address governor
) external;
function configure(
YieldMode _yield,
GasMode gasMode,
address governor
) external;
// base configuration options
function configureClaimableYield() external;
function configureClaimableYieldOnBehalf(address contractAddress) external;
function configureAutomaticYield() external;
function configureAutomaticYieldOnBehalf(address contractAddress) external;
function configureVoidYield() external;
function configureVoidYieldOnBehalf(address contractAddress) external;
function configureClaimableGas() external;
function configureClaimableGasOnBehalf(address contractAddress) external;
function configureVoidGas() external;
function configureVoidGasOnBehalf(address contractAddress) external;
function configureGovernor(address _governor) external;
function configureGovernorOnBehalf(address _newGovernor, address contractAddress) external;
// claim yield
function claimYield(
address contractAddress,
address recipientOfYield,
uint256 amount
) external returns (uint256);
function claimAllYield(address contractAddress, address recipientOfYield) external returns (uint256);
// claim gas
function claimAllGas(address contractAddress, address recipientOfGas) external returns (uint256);
function claimGasAtMinClaimRate(
address contractAddress,
address recipientOfGas,
uint256 minClaimRateBips
) external returns (uint256);
function claimMaxGas(address contractAddress, address recipientOfGas) external returns (uint256);
function claimGas(
address contractAddress,
address recipientOfGas,
uint256 gasToClaim,
uint256 gasSecondsToConsume
) external returns (uint256);
// read functions
function readClaimableYield(address contractAddress) external view returns (uint256);
function readYieldConfiguration(address contractAddress) external view returns (uint8);
function readGasParams(address contractAddress)
external
view
returns (
uint256 etherSeconds,
uint256 etherBalance,
uint256 lastUpdated,
GasMode
);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
interface IBlastPoints {
function configurePointsOperator(address operator) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
require(!paused(), "Pausable: paused");
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
require(paused(), "Pausable: not paused");
_;
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface AggregatorV3Interface {
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function version() external view returns (uint256);
function getRoundData(uint80 _roundId)
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
// Assembly constants
import {ETHTransferFail_error_selector, ETHTransferFail_error_length, Error_selector_offset} from "../constants/AssemblyConstants.sol";
/**
* @title LowLevelETHTransfer
* @notice This contract contains a low-level transfer function for ETH.
* @author LooksRare protocol team (👀,💎)
*/
contract LowLevelETHTransfer {
/**
* @notice It transfers ETH to a recipient address.
* @param _to Recipient address
* @param _amount Amount to transfer
* @dev It reverts if amount is equal to 0.
*/
function _transferETH(address _to, uint256 _amount) internal {
assembly {
let status := call(gas(), _to, _amount, 0, 0, 0, 0)
if iszero(status) {
mstore(0x00, ETHTransferFail_error_selector)
revert(Error_selector_offset, ETHTransferFail_error_length)
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
// Interfaces
import {IERC20} from "../interfaces/generic/IERC20.sol";
// Errors
import {ERC20TransferFail, ERC20TransferFromFail} from "../errors/LowLevelErrors.sol";
import {NotAContract} from "../errors/GenericErrors.sol";
/**
* @title LowLevelERC20Transfer
* @notice This contract contains low-level calls to transfer ERC20 tokens.
* @author LooksRare protocol team (👀,💎)
*/
contract LowLevelERC20Transfer {
/**
* @notice Execute ERC20 transferFrom
* @param currency Currency address
* @param from Sender address
* @param to Recipient address
* @param amount Amount to transfer
*/
function _executeERC20TransferFrom(address currency, address from, address to, uint256 amount) internal {
if (currency.code.length == 0) {
revert NotAContract();
}
(bool status, bytes memory data) = currency.call(abi.encodeCall(IERC20.transferFrom, (from, to, amount)));
if (!status) {
revert ERC20TransferFromFail();
}
if (data.length > 0) {
if (!abi.decode(data, (bool))) {
revert ERC20TransferFromFail();
}
}
}
/**
* @notice Execute ERC20 (direct) transfer
* @param currency Currency address
* @param to Recipient address
* @param amount Amount to transfer
*/
function _executeERC20DirectTransfer(address currency, address to, uint256 amount) internal {
if (currency.code.length == 0) {
revert NotAContract();
}
(bool status, bytes memory data) = currency.call(abi.encodeCall(IERC20.transfer, (to, amount)));
if (!status) {
revert ERC20TransferFail();
}
if (data.length > 0) {
if (!abi.decode(data, (bool))) {
revert ERC20TransferFail();
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; /* * @dev error ETHTransferFail() * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant ETHTransferFail_error_selector = 0x07246cf4; uint256 constant ETHTransferFail_error_length = 0x04; uint256 constant Error_selector_offset = 0x1c;
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
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 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; /** * @notice It is emitted if the ETH transfer fails. */ error ETHTransferFail(); /** * @notice It is emitted if the ERC20 approval fails. */ error ERC20ApprovalFail(); /** * @notice It is emitted if the ERC20 transfer fails. */ error ERC20TransferFail(); /** * @notice It is emitted if the ERC20 transferFrom fails. */ error ERC20TransferFromFail(); /** * @notice It is emitted if the ERC721 transferFrom fails. */ error ERC721TransferFromFail(); /** * @notice It is emitted if the ERC1155 safeTransferFrom fails. */ error ERC1155SafeTransferFromFail(); /** * @notice It is emitted if the ERC1155 safeBatchTransferFrom fails. */ error ERC1155SafeBatchTransferFromFail();
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; /** * @notice It is emitted if the call recipient is not a contract. */ error NotAContract();
{
"remappings": [
"@chainlink/=node_modules/@chainlink/",
"@ensdomains/=node_modules/@ensdomains/",
"@eth-optimism/=node_modules/@eth-optimism/",
"@looksrare/=node_modules/@looksrare/",
"@openzeppelin/=node_modules/@openzeppelin/",
"@pythnetwork/=node_modules/@pythnetwork/",
"ds-test/=lib/ds-test/src/",
"eth-gas-reporter/=node_modules/eth-gas-reporter/",
"forge-std/=lib/forge-std/src/",
"hardhat/=node_modules/hardhat/",
"solmate/=node_modules/solmate/"
],
"optimizer": {
"enabled": true,
"runs": 888888
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"evmVersion": "paris",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_oracleAddress","type":"address"},{"internalType":"address","name":"_adminAddress","type":"address"},{"internalType":"address","name":"_operatorAddress","type":"address"},{"internalType":"uint256","name":"_intervalSeconds","type":"uint256"},{"internalType":"uint256","name":"_bufferSeconds","type":"uint256"},{"internalType":"uint256","name":"_minEntry","type":"uint256"},{"internalType":"uint256","name":"_oracleUpdateAllowance","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"address","name":"_ethYieldConfiguration","type":"address"},{"internalType":"address","name":"_blastPoints","type":"address"},{"internalType":"address","name":"_blastPointsOperator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ERC20TransferFail","type":"error"},{"inputs":[],"name":"NotAContract","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"int256","name":"price","type":"int256"}],"name":"EndRound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EnterDoom","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EnterMoon","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"int256","name":"price","type":"int256"}],"name":"LockRound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"NewAdminAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"bufferSeconds","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"intervalSeconds","type":"uint256"}],"name":"NewBufferAndIntervalSeconds","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minEntry","type":"uint256"}],"name":"NewMinEntry","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"}],"name":"NewOperatorAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oracle","type":"address"}],"name":"NewOracle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oracleUpdateAllowance","type":"uint256"}],"name":"NewOracleUpdateAllowance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryFee","type":"uint256"}],"name":"NewTreasuryFee","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":"uint256","name":"epoch","type":"uint256"}],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardBaseCalAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryAmount","type":"uint256"}],"name":"RewardsCalculated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"StartRound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenRecovery","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TreasuryClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_TREASURY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bufferSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"epochs","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"claimable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"enterDoom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"enterMoon","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"executeRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesisLockOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesisLockRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"genesisStartOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesisStartRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"cursor","type":"uint256"},{"internalType":"uint256","name":"size","type":"uint256"}],"name":"getUserRounds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"components":[{"internalType":"enum MoonOrDoomNativeToken.Position","name":"position","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"}],"internalType":"struct MoonOrDoomNativeToken.EnterInfo[]","name":"","type":"tuple[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserRoundsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"intervalSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"ledger","outputs":[{"internalType":"enum MoonOrDoomNativeToken.Position","name":"position","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minEntry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleLatestRoundId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleUpdateAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"refundable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rounds","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"lockTimestamp","type":"uint256"},{"internalType":"uint256","name":"closeTimestamp","type":"uint256"},{"internalType":"int256","name":"lockPrice","type":"int256"},{"internalType":"int256","name":"closePrice","type":"int256"},{"internalType":"uint256","name":"lockOracleId","type":"uint256"},{"internalType":"uint256","name":"closeOracleId","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"moonAmount","type":"uint256"},{"internalType":"uint256","name":"doomAmount","type":"uint256"},{"internalType":"uint256","name":"rewardBaseCalAmount","type":"uint256"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"bool","name":"oracleCalled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_adminAddress","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bufferSeconds","type":"uint256"},{"internalType":"uint256","name":"_intervalSeconds","type":"uint256"}],"name":"setBufferAndIntervalSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minEntry","type":"uint256"}],"name":"setMinEntry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operatorAddress","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_oracleUpdateAllowance","type":"uint256"}],"name":"setOracleUpdateAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"setTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userRounds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526002805461ffff60a01b191690553480156200001f57600080fd5b50604051620051b9380380620051b98339810160408190526200004291620002a0565b8a8a8a8a8a8a8a8a620000553362000233565b6000805460ff60a01b19169055600180556103e8811115620000bd5760405162461bcd60e51b815260206004820152601560248201527f54726561737572792066656520746f6f20686967680000000000000000000000604482015260640160405180910390fd5b87600260006101000a8154816001600160a01b0302191690836001600160a01b0316021790555086600360006101000a8154816001600160a01b0302191690836001600160a01b0316021790555085600460006101000a8154816001600160a01b0302191690836001600160a01b0316021790555084600681905550836005819055508260078190555081600c81905550806008819055505050505050505050826001600160a01b031663c8992e61600260018d6040518463ffffffff1660e01b815260040162000191939291906200036c565b600060405180830381600087803b158015620001ac57600080fd5b505af1158015620001c1573d6000803e3d6000fd5b50506040516336b91f2b60e01b81526001600160a01b038481166004830152851692506336b91f2b9150602401600060405180830381600087803b1580156200020957600080fd5b505af11580156200021e573d6000803e3d6000fd5b505050505050505050505050505050620003b8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200029b57600080fd5b919050565b60008060008060008060008060008060006101608c8e031215620002c357600080fd5b620002ce8c62000283565b9a50620002de60208d0162000283565b9950620002ee60408d0162000283565b985060608c0151975060808c0151965060a08c0151955060c08c0151945060e08c01519350620003226101008d0162000283565b9250620003336101208d0162000283565b9150620003446101408d0162000283565b90509295989b509295989b9093969950565b634e487b7160e01b600052602160045260246000fd5b606081016003851062000383576200038362000356565b8482526002841062000399576200039962000356565b60208201939093526001600160a01b0391909116604090910152919050565b614df180620003c86000396000f3fe6080604052600436106102d05760003560e01c80637d1cd04f11610179578063cc32d176116100d6578063eaba23611161008a578063f2fde38b11610064578063f2fde38b146108c7578063f7fdec28146108e7578063fc6f94681461091a57600080fd5b8063eaba236114610885578063ec3247031461089b578063f2b3c809146108b157600080fd5b8063d9d55eac116100bb578063d9d55eac1461083d578063dbb12a2b14610852578063dd1f75961461086557600080fd5b8063cc32d17614610807578063cf2f50391461081d57600080fd5b80638da5cb5b1161012d578063a0c7f71c11610112578063a0c7f71c146107a7578063b29a8140146107c7578063b3ab15fb146107e757600080fd5b80638da5cb5b1461074d578063951fd6001461077857600080fd5b80638456cb591161015e5780638456cb5914610623578063890dc766146106385780638c65c81f1461065857600080fd5b80637d1cd04f146105e05780637dc0d1d0146105f657600080fd5b80636ba4c1381161023257806377e741c7116101e65780637b3205f5116101c05780637b3205f51461058b5780637be79cf6146105a05780637bf41254146105c057600080fd5b806377e741c71461053557806378652e09146105555780637adbf9731461056b57600080fd5b8063715018a611610217578063715018a6146104af5780637285c58b146104c4578063766718081461051f57600080fd5b80636ba4c1381461046f578063704b6c021461048f57600080fd5b80633f4ba83a11610289578063452fd75a1161026e578063452fd75a146104145780635c975abb14610429578063605540111461045957600080fd5b80633f4ba83a146103ec578063406fd6771461040157600080fd5b8063127effb2116102ba578063127effb214610333578063273867d414610385578063368acb09146103d657600080fd5b80623bdc74146102d55780630f74174f146102ec575b600080fd5b3480156102e157600080fd5b506102ea610947565b005b3480156102f857600080fd5b5060025461031e9074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b34801561033f57600080fd5b506004546103609073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032a565b34801561039157600080fd5b506103c86103a036600461496f565b73ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205490565b60405190815260200161032a565b3480156103e257600080fd5b506103c860095481565b3480156103f857600080fd5b506102ea610aa4565b6102ea61040f366004614991565b610c29565b34801561042057600080fd5b506102ea6110bc565b34801561043557600080fd5b5060005474010000000000000000000000000000000000000000900460ff1661031e565b34801561046557600080fd5b506103c8600c5481565b34801561047b57600080fd5b506102ea61048a3660046149aa565b6112cc565b34801561049b57600080fd5b506102ea6104aa36600461496f565b611978565b3480156104bb57600080fd5b506102ea611af0565b3480156104d057600080fd5b506105106104df366004614a1f565b600d60209081526000928352604080842090915290825290208054600182015460029092015460ff91821692911683565b60405161032a93929190614ab5565b34801561052b57600080fd5b506103c8600a5481565b34801561054157600080fd5b506102ea610550366004614991565b611b7d565b34801561056157600080fd5b506103c860075481565b34801561057757600080fd5b506102ea61058636600461496f565b611d2d565b34801561059757600080fd5b506102ea611fbc565b3480156105ac57600080fd5b506102ea6105bb366004614991565b612250565b3480156105cc57600080fd5b5061031e6105db366004614a1f565b6123f7565b3480156105ec57600080fd5b506103c860065481565b34801561060257600080fd5b506002546103609073ffffffffffffffffffffffffffffffffffffffff1681565b34801561062f57600080fd5b506102ea612574565b34801561064457600080fd5b506102ea610653366004614ad9565b6126d2565b34801561066457600080fd5b506106e3610673366004614991565b600e60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c8d0154600d909d01549b9c9a9b999a98999798969795969495939492939192909160ff168e565b604080519e8f5260208f019d909d529b8d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e088015261010087015261012086015261014085015261016084015261018083015215156101a08201526101c00161032a565b34801561075957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610360565b34801561078457600080fd5b50610798610793366004614afb565b6128ad565b60405161032a93929190614b2e565b3480156107b357600080fd5b5061031e6107c2366004614a1f565b612b4b565b3480156107d357600080fd5b506102ea6107e2366004614bd1565b612d20565b3480156107f357600080fd5b506102ea61080236600461496f565b612e00565b34801561081357600080fd5b506103c860085481565b34801561082957600080fd5b506102ea610838366004614991565b612f71565b34801561084957600080fd5b506102ea6130ab565b6102ea610860366004614991565b6133a1565b34801561087157600080fd5b506103c8610880366004614bd1565b613826565b34801561089157600080fd5b506103c860055481565b3480156108a757600080fd5b506103c8600b5481565b3480156108bd57600080fd5b506103c86103e881565b3480156108d357600080fd5b506102ea6108e236600461496f565b613857565b3480156108f357600080fd5b5060025461031e907501000000000000000000000000000000000000000000900460ff1681565b34801561092657600080fd5b506003546103609073ffffffffffffffffffffffffffffffffffffffff1681565b6002600154036109b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260015560035473ffffffffffffffffffffffffffffffffffffffff163314610a3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b600980546000909155600354610a6a9073ffffffffffffffffffffffffffffffffffffffff1682613987565b6040518181527fb9197c6b8e21274bd1e2d9c956a88af5cfee510f630fab3f046300f88b4223619060200160405180910390a15060018055565b60005474010000000000000000000000000000000000000000900460ff16610b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff16331480610b65575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f74206f70657261746f722f61646d696e000000000000000000000000000060448201526064016109af565b600280547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff169055610bfb6139a9565b600a546040517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab790600090a2565b60005474010000000000000000000000000000000000000000900460ff1615610cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b600260015403610d1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109af565b6002600155333b15610d88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109af565b333214610df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109af565b600a548114610e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f546f6f206561726c792f6c61746500000000000000000000000000000000000060448201526064016109af565b610e6581613aa2565b610ecb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f526f756e64206e6f7420656e74657261626c650000000000000000000000000060448201526064016109af565b600754341015610f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f456e747279206d7573742062652067726561746572207468616e206d696e456e60448201527f747279000000000000000000000000000000000000000000000000000000000060648201526084016109af565b6000818152600d6020908152604080832033845290915290206001015415610fe1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43616e206f6e6c7920656e746572206f6e63652070657220726f756e6400000060448201526064016109af565b6000818152600e602052604090206008810154610fff903490614c2a565b6008820155600a810154611014903490614c2a565b600a8201556000828152600d602090815260408083203380855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117825534818301819055600f865284872080549283018155875295859020018790559151938452909285927fd63b8da4d354e3b7b933761d564d3f17070134d43c981eb109c7c35f87932d2991015b60405180910390a350506001805550565b60005474010000000000000000000000000000000000000000900460ff1615611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b60045473ffffffffffffffffffffffffffffffffffffffff1633146111c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109af565b6002547501000000000000000000000000000000000000000000900460ff161561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f43616e206f6e6c792072756e2067656e657369735374617274526f756e64206f60448201527f6e6365000000000000000000000000000000000000000000000000000000000060648201526084016109af565b600a5461127c906001614c2a565b600a81905561128a90613b0d565b600280547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b600260015403611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109af565b6002600155333b156113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109af565b33321461140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109af565b6000805b8281101561195e57600e600085858481811061143157611431614c3d565b905060200201358152602001908152602001600020600101546000036114b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f526f756e6420686173206e6f742073746172746564000000000000000000000060448201526064016109af565b600e60008585848181106114c9576114c9614c3d565b90506020020135815260200190815260200160002060030154421161154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f526f756e6420686173206e6f7420656e6465640000000000000000000000000060448201526064016109af565b6000600e600086868581811061156257611562614c3d565b60209081029290920135835250810191909152604001600020600d015460ff161561177b576115a985858481811061159c5761159c614c3d565b9050602002013533612b4b565b61160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f7420656c696769626c6520666f7220636c61696d0000000000000000000060448201526064016109af565b6000600e600087878681811061162757611627614c3d565b905060200201358152602001908152602001600020604051806101c001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820160009054906101000a900460ff1615151515815250509050806101600151816101800151600d600089898881811061170957611709614c3d565b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546117699190614c6c565b6117739190614c83565b915050611872565b61179d85858481811061179057611790614c3d565b90506020020135336123f7565b611803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420656c696769626c6520666f7220726566756e6400000000000000000060448201526064016109af565b600d600086868581811061181957611819614c3d565b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490505b6001600d600087878681811061188a5761188a614c3d565b602090810292909201358352508181019290925260409081016000908120338252909252902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556118ea8184614c2a565b92508484838181106118fe576118fe614c3d565b905060200201353373ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf78360405161194d91815260200190565b60405180910390a350600101611413565b50801561196f5761196f3382613987565b50506001805550565b60005473ffffffffffffffffffffffffffffffffffffffff1633146119f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109af565b73ffffffffffffffffffffffffffffffffffffffff8116611a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109af565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f137b621413925496477d46e5055ac0d56178bdd724ba8bf843afceef18268ba3906020015b60405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109af565b611b7b6000613b8b565b565b60005474010000000000000000000000000000000000000000900460ff16611c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff163314611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b6103e8811115611cee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f54726561737572792066656520746f6f2068696768000000000000000000000060448201526064016109af565b6008819055600a546040518281527fb1c4ee38d35556741133da7ff9b6f7ab0fa88d0406133126ff128f635490a857906020015b60405180910390a250565b60005474010000000000000000000000000000000000000000900460ff16611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff163314611e32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b73ffffffffffffffffffffffffffffffffffffffff8116611eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109af565b6000600b55600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517ffeaf968c000000000000000000000000000000000000000000000000000000008152905163feaf968c9160048082019260a0929091908290030181865afa158015611f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6f9190614cd8565b505060405173ffffffffffffffffffffffffffffffffffffffff851681527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e93506020019150611ae59050565b60005474010000000000000000000000000000000000000000900460ff1615612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b60045473ffffffffffffffffffffffffffffffffffffffff1633146120c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109af565b6002547501000000000000000000000000000000000000000000900460ff168015612107575060025474010000000000000000000000000000000000000000900460ff165b6121b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e6420616e642067656e657369734c6f636b526f756e642069732074726960648201527f6767657265640000000000000000000000000000000000000000000000000000608482015260a4016109af565b6000806121c4613c00565b915091508169ffffffffffffffffffff16600b819055506121f4600a548369ffffffffffffffffffff1683613deb565b6122196001600a546122069190614d28565b8369ffffffffffffffffffff1683614046565b6122306001600a5461222b9190614d28565b6142b5565b600a5461223e906001614c2a565b600a81905561224c9061446c565b5050565b60005474010000000000000000000000000000000000000000900460ff166122d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff163314612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b806000036123bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d757374206265207375706572696f7220746f2030000000000000000000000060448201526064016109af565b6007819055600a546040518281527ff0a10ae7e0bc8374a43aa397e798b1f4c2e9ddbbff84878eed8f0ae3ed3207c790602001611d22565b6000828152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152808220815160608101909252805483929190829060ff16600181111561244c5761244c614a4b565b600181111561245d5761245d614a4b565b815260018281015460208084019190915260029384015460ff908116151560409485015260008a8152600e835284902084516101c08101865281548152938101549284019290925293810154928201929092526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d909101549091161580156101a08301819052929350909161253e57508160400151155b801561255a575060055481606001516125579190614c2a565b42115b80156125695750602082015115155b925050505b92915050565b60005474010000000000000000000000000000000000000000900460ff16156125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff16331480612636575060045473ffffffffffffffffffffffffffffffffffffffff1633145b61269c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f74206f70657261746f722f61646d696e000000000000000000000000000060448201526064016109af565b6126a4614680565b600a546040517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d90600090a2565b60005474010000000000000000000000000000000000000000900460ff16612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff1633146127d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b808210612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f6275666665725365636f6e6473206d75737420626520696e666572696f72207460448201527f6f20696e74657276616c5365636f6e647300000000000000000000000000000060648201526084016109af565b6005829055600681905560408051838152602081018390527fe60149e0431fec12df63dfab5fce2a9cefe9a4d3df5f41cb626f579ae1f2b91a910160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040812054606091829184906128e5908790614d28565b8111156129205773ffffffffffffffffffffffffffffffffffffffff87166000908152600f602052604090205461291d908790614d28565b90505b60008167ffffffffffffffff81111561293b5761293b614d3b565b604051908082528060200260200182016040528015612964578160200160208202803683370190505b50905060008267ffffffffffffffff81111561298257612982614d3b565b6040519080825280602002602001820160405280156129eb57816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816129a05790505b50905060005b83811015612b2c5773ffffffffffffffffffffffffffffffffffffffff8a166000908152600f60205260409020612a28828b614c2a565b81548110612a3857612a38614c3d565b9060005260206000200154838281518110612a5557612a55614c3d565b602002602001018181525050600d6000848381518110612a7757612a77614c3d565b6020908102919091018101518252818101929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8e168252909252908190208151606081019092528054829060ff166001811115612ad757612ad7614a4b565b6001811115612ae857612ae8614a4b565b81526001820154602082015260029091015460ff1615156040909101528251839083908110612b1957612b19614c3d565b60209081029190910101526001016129f1565b508181612b39858b614c2a565b95509550955050505093509350939050565b6000828152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152808220815160608101909252805483929190829060ff166001811115612ba057612ba0614a4b565b6001811115612bb157612bb1614a4b565b815260018281015460208084019190915260029384015460ff908116151560409485015260008a8152600e835284902084516101c081018652815481529381015492840192909252938101549282019290925260038201546060820152600482015460808201819052600583015460a08301819052600684015460c0840152600784015460e084015260088401546101008401526009840154610120840152600a840154610140840152600b840154610160840152600c840154610180840152600d9093015490931615156101a08201529293509003612c965760009250505061256e565b806101a001518015612cab5750602082015115155b8015612cb957508160400151155b8015612569575080608001518160a00151138015612ce95750600082516001811115612ce757612ce7614a4b565b145b80612569575080608001518160a001511280156125695750600182516001811115612d1657612d16614a4b565b1495945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612da1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109af565b612dac82338361476c565b8173ffffffffffffffffffffffffffffffffffffffff167f14f11966a996e0629572e51064726d2057a80fbd34efc066682c06a71dbb6e9882604051612df491815260200190565b60405180910390a25050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b73ffffffffffffffffffffffffffffffffffffffff8116612efe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109af565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fc47d127c07bdd56c5ccba00463ce3bd3c1bca71b4670eea6e5d0c02e4aa156e290602001611ae5565b60005474010000000000000000000000000000000000000000900460ff16612ff5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff163314613076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b600c8190556040518181527f93ccaceac092ffb842c46b8718667a13a80e9058dcd0bd403d0b47215b30da0790602001611ae5565b60005474010000000000000000000000000000000000000000900460ff1615613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b60045473ffffffffffffffffffffffffffffffffffffffff1633146131b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109af565b6002547501000000000000000000000000000000000000000000900460ff1661325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e642069732074726967676572656400000000000000000000000000000060648201526084016109af565b60025474010000000000000000000000000000000000000000900460ff1615613307576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f43616e206f6e6c792072756e2067656e657369734c6f636b526f756e64206f6e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016109af565b600080613312613c00565b915091508169ffffffffffffffffffff16600b81905550613342600a548369ffffffffffffffffffff1683613deb565b600a54613350906001614c2a565b600a81905561335e90613b0d565b5050600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b60005474010000000000000000000000000000000000000000900460ff1615613426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b600260015403613492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109af565b6002600155333b15613500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109af565b333214613569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109af565b600a5481146135d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f546f6f206561726c792f6c61746500000000000000000000000000000000000060448201526064016109af565b6135dd81613aa2565b613643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f526f756e64206e6f7420656e74657261626c650000000000000000000000000060448201526064016109af565b6007543410156136d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f456e747279206d7573742062652067726561746572207468616e206d696e456e60448201527f747279000000000000000000000000000000000000000000000000000000000060648201526084016109af565b6000818152600d6020908152604080832033845290915290206001015415613759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43616e206f6e6c7920656e746572206f6e63652070657220726f756e6400000060448201526064016109af565b6000818152600e602052604090206008810154613777903490614c2a565b6008820155600981015461378c903490614c2a565b60098201556000828152600d602090815260408083203380855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168155346001808301829055600f8652848720805491820181558752958590209095018790559151938452909285927fe0498ef6c8973f40195b2ced16991e2e7cba0d33e6a5e42a2e7797d156c874a391016110ab565b600f602052816000526040600020818154811061384257600080fd5b90600052602060002001600091509150505481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146138d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109af565b73ffffffffffffffffffffffffffffffffffffffff811661397b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109af565b61398481613b8b565b50565b60008060008084865af1806139a4576307246cf46000526004601cfd5b505050565b60005474010000000000000000000000000000000000000000900460ff16613a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000818152600e602052604081206001015415801590613ad257506000828152600e602052604090206002015415155b8015613aee57506000828152600e602052604090206001015442115b801561256e5750506000908152600e6020526040902060020154421090565b6000818152600e602052604090204260018201819055600654613b2f91614c2a565b600280830191909155600654613b4491614c6c565b613b4e9042614c2a565b600382015581815560006008820181905560405183917f939f42374aa9bf1d8d8cd56d8a9110cb040cd8dfeae44080c6fcf2645e51b45291a25050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000600c5442613c139190614d28565b90506000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cab9190614cd8565b509350509250925083811015613d43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7261636c6520757064617465206578636565646564206d61782074696d657360448201527f74616d7020616c6c6f77616e636500000000000000000000000000000000000060648201526084016109af565b600b548369ffffffffffffffffffff1611613de0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4f7261636c652075706461746520726f756e644964206d757374206265206c6160448201527f72676572207468616e206f7261636c654c6174657374526f756e64496400000060648201526084016109af565b509094909350915050565b6000838152600e60205260408120600101549003613e8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e206f6e6c79206c6f636b20726f756e6420616674657220726f756e642060448201527f686173207374617274656400000000000000000000000000000000000000000060648201526084016109af565b6000838152600e6020526040902060020154421015613f2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c79206c6f636b20726f756e64206166746572206c6f636b546960448201527f6d657374616d700000000000000000000000000000000000000000000000000060648201526084016109af565b6005546000848152600e6020526040902060020154613f4b9190614c2a565b421115613fda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f43616e206f6e6c79206c6f636b20726f756e642077697468696e20627566666560448201527f725365636f6e647300000000000000000000000000000000000000000000000060648201526084016109af565b6000838152600e60205260409020600654613ff59042614c2a565b60038201556004810182905560068101839055604051828152839085907f482e76a65b448a42deef26e99e58fb20c85e26f075defff8df6aa80459b39006906020015b60405180910390a350505050565b6000838152600e602052604081206002015490036140e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f43616e206f6e6c7920656e6420726f756e6420616674657220726f756e64206860448201527f6173206c6f636b6564000000000000000000000000000000000000000000000060648201526084016109af565b6000838152600e6020526040902060030154421015614187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c7920656e6420726f756e6420616674657220636c6f7365546960448201527f6d657374616d700000000000000000000000000000000000000000000000000060648201526084016109af565b6005546000848152600e60205260409020600301546141a69190614c2a565b421115614235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c7920656e6420726f756e642077697468696e2062756666657260448201527f5365636f6e64730000000000000000000000000000000000000000000000000060648201526084016109af565b6000838152600e6020526040908190206005810183905560078101849055600d810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559051839085907fb6ff1fe915db84788cbbbc017f0d2bef9485fad9fd0bd8ce9340fde0d8410dd8906140389086815260200190565b6000818152600e60205260409020600b01541580156142e357506000818152600e60205260409020600c0154155b614349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526577617264732063616c63756c61746564000000000000000000000000000060448201526064016109af565b6000818152600e60205260408120600481015460058201549192918291829113156143c257836009015492508260000361438957836008015491506143ab565b612710600854856008015461439e9190614c6c565b6143a89190614c83565b91505b8184600801546143bb9190614d28565b90506143fa565b8360040154846005015412156143ed5783600a015492508260000361438957836008015491506143ab565b5050506008810154600090815b600b8401839055600c84018190556009805483919060009061441d908490614c2a565b9091555050604080518481526020810183905290810183905285907f6dfdfcb09c8804d0058826cd2539f1acfbe3cb887c9be03d928035bce0f1a58d9060600160405180910390a25050505050565b6002547501000000000000000000000000000000000000000000900460ff16614517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e642069732074726967676572656400000000000000000000000000000060648201526084016109af565b600e6000614526600284614d28565b8152602001908152602001600020600301546000036145c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f43616e206f6e6c7920737461727420726f756e6420616674657220726f756e6460448201527f206e2d322068617320656e64656400000000000000000000000000000000000060648201526084016109af565b600e60006145d6600284614d28565b815260200190815260200160002060030154421015614677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43616e206f6e6c79207374617274206e657720726f756e64206166746572207260448201527f6f756e64206e2d3220636c6f736554696d657374616d7000000000000000000060648201526084016109af565b61398481613b0d565b60005474010000000000000000000000000000000000000000900460ff1615614705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613a783390565b8273ffffffffffffffffffffffffffffffffffffffff163b6000036147bd576040517f09ee12d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526000918291861690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052516148709190614d6a565b6000604051808303816000865af19150503d80600081146148ad576040519150601f19603f3d011682016040523d82523d6000602084013e6148b2565b606091505b5091509150816148ee576040517ff1568f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80511561493f57808060200190518101906149099190614d99565b61493f576040517ff1568f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461496a57600080fd5b919050565b60006020828403121561498157600080fd5b61498a82614946565b9392505050565b6000602082840312156149a357600080fd5b5035919050565b600080602083850312156149bd57600080fd5b823567ffffffffffffffff808211156149d557600080fd5b818501915085601f8301126149e957600080fd5b8135818111156149f857600080fd5b8660208260051b8501011115614a0d57600080fd5b60209290920196919550909350505050565b60008060408385031215614a3257600080fd5b82359150614a4260208401614946565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110614ab1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60608101614ac38286614a7a565b8360208301528215156040830152949350505050565b60008060408385031215614aec57600080fd5b50508035926020909101359150565b600080600060608486031215614b1057600080fd5b614b1984614946565b95602085013595506040909401359392505050565b60608082528451828201819052600091906020906080850190828901855b82811015614b6857815184529284019290840190600101614b4c565b5050508481038286015286518082528783019183019060005b81811015614bba578351614b96848251614a7a565b80860151848701526040908101511515908401529284019291850191600101614b81565b505080945050505050826040830152949350505050565b60008060408385031215614be457600080fd5b614bed83614946565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561256e5761256e614bfb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b808202811582820484141761256e5761256e614bfb565b600082614cb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff8116811461496a57600080fd5b600080600080600060a08688031215614cf057600080fd5b614cf986614cbe565b9450602086015193506040860151925060608601519150614d1c60808701614cbe565b90509295509295909350565b8181038181111561256e5761256e614bfb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000825160005b81811015614d8b5760208186018101518583015201614d71565b506000920191825250919050565b600060208284031215614dab57600080fd5b8151801515811461498a57600080fdfea26469706673582212202200b1b9aa716e5236fcf49394373088cebe8a5ee5cbabac29d062ce75d509fa64736f6c634300081700330000000000000000000000006a53c1c24f433f055cd3f056ab5fd9cde8f298560000000000000000000000006b86ff7863e27d1c8ccf05df9cb03b8efaa52125000000000000000000000000f83493045bc4a21d3be8095bc93abbad7d216916000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000006400000000000000000000000043000000000000000000000000000000000000020000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8000000000000000000000000004066b9bd584b5fa88897194dabe3a37883ac35f7
Deployed Bytecode
0x6080604052600436106102d05760003560e01c80637d1cd04f11610179578063cc32d176116100d6578063eaba23611161008a578063f2fde38b11610064578063f2fde38b146108c7578063f7fdec28146108e7578063fc6f94681461091a57600080fd5b8063eaba236114610885578063ec3247031461089b578063f2b3c809146108b157600080fd5b8063d9d55eac116100bb578063d9d55eac1461083d578063dbb12a2b14610852578063dd1f75961461086557600080fd5b8063cc32d17614610807578063cf2f50391461081d57600080fd5b80638da5cb5b1161012d578063a0c7f71c11610112578063a0c7f71c146107a7578063b29a8140146107c7578063b3ab15fb146107e757600080fd5b80638da5cb5b1461074d578063951fd6001461077857600080fd5b80638456cb591161015e5780638456cb5914610623578063890dc766146106385780638c65c81f1461065857600080fd5b80637d1cd04f146105e05780637dc0d1d0146105f657600080fd5b80636ba4c1381161023257806377e741c7116101e65780637b3205f5116101c05780637b3205f51461058b5780637be79cf6146105a05780637bf41254146105c057600080fd5b806377e741c71461053557806378652e09146105555780637adbf9731461056b57600080fd5b8063715018a611610217578063715018a6146104af5780637285c58b146104c4578063766718081461051f57600080fd5b80636ba4c1381461046f578063704b6c021461048f57600080fd5b80633f4ba83a11610289578063452fd75a1161026e578063452fd75a146104145780635c975abb14610429578063605540111461045957600080fd5b80633f4ba83a146103ec578063406fd6771461040157600080fd5b8063127effb2116102ba578063127effb214610333578063273867d414610385578063368acb09146103d657600080fd5b80623bdc74146102d55780630f74174f146102ec575b600080fd5b3480156102e157600080fd5b506102ea610947565b005b3480156102f857600080fd5b5060025461031e9074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020015b60405180910390f35b34801561033f57600080fd5b506004546103609073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161032a565b34801561039157600080fd5b506103c86103a036600461496f565b73ffffffffffffffffffffffffffffffffffffffff166000908152600f602052604090205490565b60405190815260200161032a565b3480156103e257600080fd5b506103c860095481565b3480156103f857600080fd5b506102ea610aa4565b6102ea61040f366004614991565b610c29565b34801561042057600080fd5b506102ea6110bc565b34801561043557600080fd5b5060005474010000000000000000000000000000000000000000900460ff1661031e565b34801561046557600080fd5b506103c8600c5481565b34801561047b57600080fd5b506102ea61048a3660046149aa565b6112cc565b34801561049b57600080fd5b506102ea6104aa36600461496f565b611978565b3480156104bb57600080fd5b506102ea611af0565b3480156104d057600080fd5b506105106104df366004614a1f565b600d60209081526000928352604080842090915290825290208054600182015460029092015460ff91821692911683565b60405161032a93929190614ab5565b34801561052b57600080fd5b506103c8600a5481565b34801561054157600080fd5b506102ea610550366004614991565b611b7d565b34801561056157600080fd5b506103c860075481565b34801561057757600080fd5b506102ea61058636600461496f565b611d2d565b34801561059757600080fd5b506102ea611fbc565b3480156105ac57600080fd5b506102ea6105bb366004614991565b612250565b3480156105cc57600080fd5b5061031e6105db366004614a1f565b6123f7565b3480156105ec57600080fd5b506103c860065481565b34801561060257600080fd5b506002546103609073ffffffffffffffffffffffffffffffffffffffff1681565b34801561062f57600080fd5b506102ea612574565b34801561064457600080fd5b506102ea610653366004614ad9565b6126d2565b34801561066457600080fd5b506106e3610673366004614991565b600e60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007880154600889015460098a0154600a8b0154600b8c0154600c8d0154600d909d01549b9c9a9b999a98999798969795969495939492939192909160ff168e565b604080519e8f5260208f019d909d529b8d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e088015261010087015261012086015261014085015261016084015261018083015215156101a08201526101c00161032a565b34801561075957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610360565b34801561078457600080fd5b50610798610793366004614afb565b6128ad565b60405161032a93929190614b2e565b3480156107b357600080fd5b5061031e6107c2366004614a1f565b612b4b565b3480156107d357600080fd5b506102ea6107e2366004614bd1565b612d20565b3480156107f357600080fd5b506102ea61080236600461496f565b612e00565b34801561081357600080fd5b506103c860085481565b34801561082957600080fd5b506102ea610838366004614991565b612f71565b34801561084957600080fd5b506102ea6130ab565b6102ea610860366004614991565b6133a1565b34801561087157600080fd5b506103c8610880366004614bd1565b613826565b34801561089157600080fd5b506103c860055481565b3480156108a757600080fd5b506103c8600b5481565b3480156108bd57600080fd5b506103c86103e881565b3480156108d357600080fd5b506102ea6108e236600461496f565b613857565b3480156108f357600080fd5b5060025461031e907501000000000000000000000000000000000000000000900460ff1681565b34801561092657600080fd5b506003546103609073ffffffffffffffffffffffffffffffffffffffff1681565b6002600154036109b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260015560035473ffffffffffffffffffffffffffffffffffffffff163314610a3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b600980546000909155600354610a6a9073ffffffffffffffffffffffffffffffffffffffff1682613987565b6040518181527fb9197c6b8e21274bd1e2d9c956a88af5cfee510f630fab3f046300f88b4223619060200160405180910390a15060018055565b60005474010000000000000000000000000000000000000000900460ff16610b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff16331480610b65575060045473ffffffffffffffffffffffffffffffffffffffff1633145b610bcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f74206f70657261746f722f61646d696e000000000000000000000000000060448201526064016109af565b600280547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff169055610bfb6139a9565b600a546040517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab790600090a2565b60005474010000000000000000000000000000000000000000900460ff1615610cae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b600260015403610d1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109af565b6002600155333b15610d88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109af565b333214610df1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109af565b600a548114610e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f546f6f206561726c792f6c61746500000000000000000000000000000000000060448201526064016109af565b610e6581613aa2565b610ecb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f526f756e64206e6f7420656e74657261626c650000000000000000000000000060448201526064016109af565b600754341015610f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f456e747279206d7573742062652067726561746572207468616e206d696e456e60448201527f747279000000000000000000000000000000000000000000000000000000000060648201526084016109af565b6000818152600d6020908152604080832033845290915290206001015415610fe1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43616e206f6e6c7920656e746572206f6e63652070657220726f756e6400000060448201526064016109af565b6000818152600e602052604090206008810154610fff903490614c2a565b6008820155600a810154611014903490614c2a565b600a8201556000828152600d602090815260408083203380855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117825534818301819055600f865284872080549283018155875295859020018790559151938452909285927fd63b8da4d354e3b7b933761d564d3f17070134d43c981eb109c7c35f87932d2991015b60405180910390a350506001805550565b60005474010000000000000000000000000000000000000000900460ff1615611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b60045473ffffffffffffffffffffffffffffffffffffffff1633146111c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109af565b6002547501000000000000000000000000000000000000000000900460ff161561126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f43616e206f6e6c792072756e2067656e657369735374617274526f756e64206f60448201527f6e6365000000000000000000000000000000000000000000000000000000000060648201526084016109af565b600a5461127c906001614c2a565b600a81905561128a90613b0d565b600280547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000179055565b600260015403611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109af565b6002600155333b156113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109af565b33321461140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109af565b6000805b8281101561195e57600e600085858481811061143157611431614c3d565b905060200201358152602001908152602001600020600101546000036114b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f526f756e6420686173206e6f742073746172746564000000000000000000000060448201526064016109af565b600e60008585848181106114c9576114c9614c3d565b90506020020135815260200190815260200160002060030154421161154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f526f756e6420686173206e6f7420656e6465640000000000000000000000000060448201526064016109af565b6000600e600086868581811061156257611562614c3d565b60209081029290920135835250810191909152604001600020600d015460ff161561177b576115a985858481811061159c5761159c614c3d565b9050602002013533612b4b565b61160f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4e6f7420656c696769626c6520666f7220636c61696d0000000000000000000060448201526064016109af565b6000600e600087878681811061162757611627614c3d565b905060200201358152602001908152602001600020604051806101c001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d820160009054906101000a900460ff1615151515815250509050806101600151816101800151600d600089898881811061170957611709614c3d565b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546117699190614c6c565b6117739190614c83565b915050611872565b61179d85858481811061179057611790614c3d565b90506020020135336123f7565b611803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420656c696769626c6520666f7220726566756e6400000000000000000060448201526064016109af565b600d600086868581811061181957611819614c3d565b90506020020135815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490505b6001600d600087878681811061188a5761188a614c3d565b602090810292909201358352508181019290925260409081016000908120338252909252902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556118ea8184614c2a565b92508484838181106118fe576118fe614c3d565b905060200201353373ffffffffffffffffffffffffffffffffffffffff167f34fcbac0073d7c3d388e51312faf357774904998eeb8fca628b9e6f65ee1cbf78360405161194d91815260200190565b60405180910390a350600101611413565b50801561196f5761196f3382613987565b50506001805550565b60005473ffffffffffffffffffffffffffffffffffffffff1633146119f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109af565b73ffffffffffffffffffffffffffffffffffffffff8116611a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109af565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f137b621413925496477d46e5055ac0d56178bdd724ba8bf843afceef18268ba3906020015b60405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109af565b611b7b6000613b8b565b565b60005474010000000000000000000000000000000000000000900460ff16611c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff163314611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b6103e8811115611cee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f54726561737572792066656520746f6f2068696768000000000000000000000060448201526064016109af565b6008819055600a546040518281527fb1c4ee38d35556741133da7ff9b6f7ab0fa88d0406133126ff128f635490a857906020015b60405180910390a250565b60005474010000000000000000000000000000000000000000900460ff16611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff163314611e32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b73ffffffffffffffffffffffffffffffffffffffff8116611eaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109af565b6000600b55600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517ffeaf968c000000000000000000000000000000000000000000000000000000008152905163feaf968c9160048082019260a0929091908290030181865afa158015611f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6f9190614cd8565b505060405173ffffffffffffffffffffffffffffffffffffffff851681527fb3eacd0e351fafdfefdec84e1cd19679b38dbcd63ea7c2c24da17fd2bc3b3c0e93506020019150611ae59050565b60005474010000000000000000000000000000000000000000900460ff1615612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b60045473ffffffffffffffffffffffffffffffffffffffff1633146120c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109af565b6002547501000000000000000000000000000000000000000000900460ff168015612107575060025474010000000000000000000000000000000000000000900460ff165b6121b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e6420616e642067656e657369734c6f636b526f756e642069732074726960648201527f6767657265640000000000000000000000000000000000000000000000000000608482015260a4016109af565b6000806121c4613c00565b915091508169ffffffffffffffffffff16600b819055506121f4600a548369ffffffffffffffffffff1683613deb565b6122196001600a546122069190614d28565b8369ffffffffffffffffffff1683614046565b6122306001600a5461222b9190614d28565b6142b5565b600a5461223e906001614c2a565b600a81905561224c9061446c565b5050565b60005474010000000000000000000000000000000000000000900460ff166122d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff163314612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b806000036123bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d757374206265207375706572696f7220746f2030000000000000000000000060448201526064016109af565b6007819055600a546040518281527ff0a10ae7e0bc8374a43aa397e798b1f4c2e9ddbbff84878eed8f0ae3ed3207c790602001611d22565b6000828152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152808220815160608101909252805483929190829060ff16600181111561244c5761244c614a4b565b600181111561245d5761245d614a4b565b815260018281015460208084019190915260029384015460ff908116151560409485015260008a8152600e835284902084516101c08101865281548152938101549284019290925293810154928201929092526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d909101549091161580156101a08301819052929350909161253e57508160400151155b801561255a575060055481606001516125579190614c2a565b42115b80156125695750602082015115155b925050505b92915050565b60005474010000000000000000000000000000000000000000900460ff16156125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff16331480612636575060045473ffffffffffffffffffffffffffffffffffffffff1633145b61269c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f74206f70657261746f722f61646d696e000000000000000000000000000060448201526064016109af565b6126a4614680565b600a546040517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d90600090a2565b60005474010000000000000000000000000000000000000000900460ff16612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff1633146127d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b808210612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f6275666665725365636f6e6473206d75737420626520696e666572696f72207460448201527f6f20696e74657276616c5365636f6e647300000000000000000000000000000060648201526084016109af565b6005829055600681905560408051838152602081018390527fe60149e0431fec12df63dfab5fce2a9cefe9a4d3df5f41cb626f579ae1f2b91a910160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f6020526040812054606091829184906128e5908790614d28565b8111156129205773ffffffffffffffffffffffffffffffffffffffff87166000908152600f602052604090205461291d908790614d28565b90505b60008167ffffffffffffffff81111561293b5761293b614d3b565b604051908082528060200260200182016040528015612964578160200160208202803683370190505b50905060008267ffffffffffffffff81111561298257612982614d3b565b6040519080825280602002602001820160405280156129eb57816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816129a05790505b50905060005b83811015612b2c5773ffffffffffffffffffffffffffffffffffffffff8a166000908152600f60205260409020612a28828b614c2a565b81548110612a3857612a38614c3d565b9060005260206000200154838281518110612a5557612a55614c3d565b602002602001018181525050600d6000848381518110612a7757612a77614c3d565b6020908102919091018101518252818101929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8e168252909252908190208151606081019092528054829060ff166001811115612ad757612ad7614a4b565b6001811115612ae857612ae8614a4b565b81526001820154602082015260029091015460ff1615156040909101528251839083908110612b1957612b19614c3d565b60209081029190910101526001016129f1565b508181612b39858b614c2a565b95509550955050505093509350939050565b6000828152600d6020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152808220815160608101909252805483929190829060ff166001811115612ba057612ba0614a4b565b6001811115612bb157612bb1614a4b565b815260018281015460208084019190915260029384015460ff908116151560409485015260008a8152600e835284902084516101c081018652815481529381015492840192909252938101549282019290925260038201546060820152600482015460808201819052600583015460a08301819052600684015460c0840152600784015460e084015260088401546101008401526009840154610120840152600a840154610140840152600b840154610160840152600c840154610180840152600d9093015490931615156101a08201529293509003612c965760009250505061256e565b806101a001518015612cab5750602082015115155b8015612cb957508160400151155b8015612569575080608001518160a00151138015612ce95750600082516001811115612ce757612ce7614a4b565b145b80612569575080608001518160a001511280156125695750600182516001811115612d1657612d16614a4b565b1495945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612da1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109af565b612dac82338361476c565b8173ffffffffffffffffffffffffffffffffffffffff167f14f11966a996e0629572e51064726d2057a80fbd34efc066682c06a71dbb6e9882604051612df491815260200190565b60405180910390a25050565b60035473ffffffffffffffffffffffffffffffffffffffff163314612e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b73ffffffffffffffffffffffffffffffffffffffff8116612efe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f74206265207a65726f20616464726573730000000000000000000060448201526064016109af565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fc47d127c07bdd56c5ccba00463ce3bd3c1bca71b4670eea6e5d0c02e4aa156e290602001611ae5565b60005474010000000000000000000000000000000000000000900460ff16612ff5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b60035473ffffffffffffffffffffffffffffffffffffffff163314613076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f742061646d696e000000000000000000000000000000000000000000000060448201526064016109af565b600c8190556040518181527f93ccaceac092ffb842c46b8718667a13a80e9058dcd0bd403d0b47215b30da0790602001611ae5565b60005474010000000000000000000000000000000000000000900460ff1615613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b60045473ffffffffffffffffffffffffffffffffffffffff1633146131b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f74206f70657261746f72000000000000000000000000000000000000000060448201526064016109af565b6002547501000000000000000000000000000000000000000000900460ff1661325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e642069732074726967676572656400000000000000000000000000000060648201526084016109af565b60025474010000000000000000000000000000000000000000900460ff1615613307576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f43616e206f6e6c792072756e2067656e657369734c6f636b526f756e64206f6e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016109af565b600080613312613c00565b915091508169ffffffffffffffffffff16600b81905550613342600a548369ffffffffffffffffffff1683613deb565b600a54613350906001614c2a565b600a81905561335e90613b0d565b5050600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b60005474010000000000000000000000000000000000000000900460ff1615613426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b600260015403613492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016109af565b6002600155333b15613500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f436f6e7472616374206e6f7420616c6c6f77656400000000000000000000000060448201526064016109af565b333214613569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f50726f787920636f6e7472616374206e6f7420616c6c6f77656400000000000060448201526064016109af565b600a5481146135d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f546f6f206561726c792f6c61746500000000000000000000000000000000000060448201526064016109af565b6135dd81613aa2565b613643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f526f756e64206e6f7420656e74657261626c650000000000000000000000000060448201526064016109af565b6007543410156136d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f456e747279206d7573742062652067726561746572207468616e206d696e456e60448201527f747279000000000000000000000000000000000000000000000000000000000060648201526084016109af565b6000818152600d6020908152604080832033845290915290206001015415613759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f43616e206f6e6c7920656e746572206f6e63652070657220726f756e6400000060448201526064016109af565b6000818152600e602052604090206008810154613777903490614c2a565b6008820155600981015461378c903490614c2a565b60098201556000828152600d602090815260408083203380855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168155346001808301829055600f8652848720805491820181558752958590209095018790559151938452909285927fe0498ef6c8973f40195b2ced16991e2e7cba0d33e6a5e42a2e7797d156c874a391016110ab565b600f602052816000526040600020818154811061384257600080fd5b90600052602060002001600091509150505481565b60005473ffffffffffffffffffffffffffffffffffffffff1633146138d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109af565b73ffffffffffffffffffffffffffffffffffffffff811661397b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109af565b61398481613b8b565b50565b60008060008084865af1806139a4576307246cf46000526004601cfd5b505050565b60005474010000000000000000000000000000000000000000900460ff16613a2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016109af565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000818152600e602052604081206001015415801590613ad257506000828152600e602052604090206002015415155b8015613aee57506000828152600e602052604090206001015442115b801561256e5750506000908152600e6020526040902060020154421090565b6000818152600e602052604090204260018201819055600654613b2f91614c2a565b600280830191909155600654613b4491614c6c565b613b4e9042614c2a565b600382015581815560006008820181905560405183917f939f42374aa9bf1d8d8cd56d8a9110cb040cd8dfeae44080c6fcf2645e51b45291a25050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000600c5442613c139190614d28565b90506000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613c87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cab9190614cd8565b509350509250925083811015613d43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7261636c6520757064617465206578636565646564206d61782074696d657360448201527f74616d7020616c6c6f77616e636500000000000000000000000000000000000060648201526084016109af565b600b548369ffffffffffffffffffff1611613de0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4f7261636c652075706461746520726f756e644964206d757374206265206c6160448201527f72676572207468616e206f7261636c654c6174657374526f756e64496400000060648201526084016109af565b509094909350915050565b6000838152600e60205260408120600101549003613e8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f43616e206f6e6c79206c6f636b20726f756e6420616674657220726f756e642060448201527f686173207374617274656400000000000000000000000000000000000000000060648201526084016109af565b6000838152600e6020526040902060020154421015613f2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c79206c6f636b20726f756e64206166746572206c6f636b546960448201527f6d657374616d700000000000000000000000000000000000000000000000000060648201526084016109af565b6005546000848152600e6020526040902060020154613f4b9190614c2a565b421115613fda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f43616e206f6e6c79206c6f636b20726f756e642077697468696e20627566666560448201527f725365636f6e647300000000000000000000000000000000000000000000000060648201526084016109af565b6000838152600e60205260409020600654613ff59042614c2a565b60038201556004810182905560068101839055604051828152839085907f482e76a65b448a42deef26e99e58fb20c85e26f075defff8df6aa80459b39006906020015b60405180910390a350505050565b6000838152600e602052604081206002015490036140e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f43616e206f6e6c7920656e6420726f756e6420616674657220726f756e64206860448201527f6173206c6f636b6564000000000000000000000000000000000000000000000060648201526084016109af565b6000838152600e6020526040902060030154421015614187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c7920656e6420726f756e6420616674657220636c6f7365546960448201527f6d657374616d700000000000000000000000000000000000000000000000000060648201526084016109af565b6005546000848152600e60205260409020600301546141a69190614c2a565b421115614235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43616e206f6e6c7920656e6420726f756e642077697468696e2062756666657260448201527f5365636f6e64730000000000000000000000000000000000000000000000000060648201526084016109af565b6000838152600e6020526040908190206005810183905560078101849055600d810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559051839085907fb6ff1fe915db84788cbbbc017f0d2bef9485fad9fd0bd8ce9340fde0d8410dd8906140389086815260200190565b6000818152600e60205260409020600b01541580156142e357506000818152600e60205260409020600c0154155b614349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526577617264732063616c63756c61746564000000000000000000000000000060448201526064016109af565b6000818152600e60205260408120600481015460058201549192918291829113156143c257836009015492508260000361438957836008015491506143ab565b612710600854856008015461439e9190614c6c565b6143a89190614c83565b91505b8184600801546143bb9190614d28565b90506143fa565b8360040154846005015412156143ed5783600a015492508260000361438957836008015491506143ab565b5050506008810154600090815b600b8401839055600c84018190556009805483919060009061441d908490614c2a565b9091555050604080518481526020810183905290810183905285907f6dfdfcb09c8804d0058826cd2539f1acfbe3cb887c9be03d928035bce0f1a58d9060600160405180910390a25050505050565b6002547501000000000000000000000000000000000000000000900460ff16614517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f43616e206f6e6c792072756e2061667465722067656e6573697353746172745260448201527f6f756e642069732074726967676572656400000000000000000000000000000060648201526084016109af565b600e6000614526600284614d28565b8152602001908152602001600020600301546000036145c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f43616e206f6e6c7920737461727420726f756e6420616674657220726f756e6460448201527f206e2d322068617320656e64656400000000000000000000000000000000000060648201526084016109af565b600e60006145d6600284614d28565b815260200190815260200160002060030154421015614677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43616e206f6e6c79207374617274206e657720726f756e64206166746572207260448201527f6f756e64206e2d3220636c6f736554696d657374616d7000000000000000000060648201526084016109af565b61398481613b0d565b60005474010000000000000000000000000000000000000000900460ff1615614705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016109af565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613a783390565b8273ffffffffffffffffffffffffffffffffffffffff163b6000036147bd576040517f09ee12d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390526000918291861690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052516148709190614d6a565b6000604051808303816000865af19150503d80600081146148ad576040519150601f19603f3d011682016040523d82523d6000602084013e6148b2565b606091505b5091509150816148ee576040517ff1568f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80511561493f57808060200190518101906149099190614d99565b61493f576040517ff1568f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461496a57600080fd5b919050565b60006020828403121561498157600080fd5b61498a82614946565b9392505050565b6000602082840312156149a357600080fd5b5035919050565b600080602083850312156149bd57600080fd5b823567ffffffffffffffff808211156149d557600080fd5b818501915085601f8301126149e957600080fd5b8135818111156149f857600080fd5b8660208260051b8501011115614a0d57600080fd5b60209290920196919550909350505050565b60008060408385031215614a3257600080fd5b82359150614a4260208401614946565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110614ab1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60608101614ac38286614a7a565b8360208301528215156040830152949350505050565b60008060408385031215614aec57600080fd5b50508035926020909101359150565b600080600060608486031215614b1057600080fd5b614b1984614946565b95602085013595506040909401359392505050565b60608082528451828201819052600091906020906080850190828901855b82811015614b6857815184529284019290840190600101614b4c565b5050508481038286015286518082528783019183019060005b81811015614bba578351614b96848251614a7a565b80860151848701526040908101511515908401529284019291850191600101614b81565b505080945050505050826040830152949350505050565b60008060408385031215614be457600080fd5b614bed83614946565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561256e5761256e614bfb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b808202811582820484141761256e5761256e614bfb565b600082614cb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b805169ffffffffffffffffffff8116811461496a57600080fd5b600080600080600060a08688031215614cf057600080fd5b614cf986614cbe565b9450602086015193506040860151925060608601519150614d1c60808701614cbe565b90509295509295909350565b8181038181111561256e5761256e614bfb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000825160005b81811015614d8b5760208186018101518583015201614d71565b506000920191825250919050565b600060208284031215614dab57600080fd5b8151801515811461498a57600080fdfea26469706673582212202200b1b9aa716e5236fcf49394373088cebe8a5ee5cbabac29d062ce75d509fa64736f6c63430008170033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006a53c1c24f433f055cd3f056ab5fd9cde8f298560000000000000000000000006b86ff7863e27d1c8ccf05df9cb03b8efaa52125000000000000000000000000f83493045bc4a21d3be8095bc93abbad7d216916000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000006400000000000000000000000043000000000000000000000000000000000000020000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8000000000000000000000000004066b9bd584b5fa88897194dabe3a37883ac35f7
-----Decoded View---------------
Arg [0] : _oracleAddress (address): 0x6a53C1c24f433F055cd3F056Ab5Fd9CDE8f29856
Arg [1] : _adminAddress (address): 0x6b86fF7863e27d1C8CCf05dF9cB03b8eFaA52125
Arg [2] : _operatorAddress (address): 0xf83493045Bc4a21D3Be8095bc93AbbaD7d216916
Arg [3] : _intervalSeconds (uint256): 60
Arg [4] : _bufferSeconds (uint256): 30
Arg [5] : _minEntry (uint256): 10000000000000000
Arg [6] : _oracleUpdateAllowance (uint256): 60
Arg [7] : _treasuryFee (uint256): 100
Arg [8] : _ethYieldConfiguration (address): 0x4300000000000000000000000000000000000002
Arg [9] : _blastPoints (address): 0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800
Arg [10] : _blastPointsOperator (address): 0x4066b9BD584b5FA88897194dAbE3a37883AC35F7
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000006a53c1c24f433f055cd3f056ab5fd9cde8f29856
Arg [1] : 0000000000000000000000006b86ff7863e27d1c8ccf05df9cb03b8efaa52125
Arg [2] : 000000000000000000000000f83493045bc4a21d3be8095bc93abbad7d216916
Arg [3] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [4] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [5] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [6] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [8] : 0000000000000000000000004300000000000000000000000000000000000002
Arg [9] : 0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800
Arg [10] : 0000000000000000000000004066b9bd584b5fa88897194dabe3a37883ac35f7
Deployed Bytecode Sourcemap
298:1598:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10888:258:1;;;;;;;;;;;;;:::i;:::-;;821:35;;;;;;;;;;-1:-1:-1;821:35:1;;;;;;;;;;;;;;179:14:15;;172:22;154:41;;142:2;127:18;821:35:1;;;;;;;;962:30;;;;;;;;;;-1:-1:-1;962:30:1;;;;;;;;;;;382:42:15;370:55;;;352:74;;340:2;325:18;962:30:1;206:226:15;15577:122:1;;;;;;;;;;-1:-1:-1;15577:122:1;;;;;:::i;:::-;15669:16;;15643:7;15669:16;;;:10;:16;;;;;:23;;15577:122;;;;975:25:15;;;963:2;948:18;15577:122:1;829:177:15;1369:29:1;;;;;;;;;;;;;;;;11373:190;;;;;;;;;;;;;:::i;5544:848::-;;;;;;:::i;:::-;;:::i;10282:257::-;;;;;;;;;;;;;:::i;1041:84:12:-;;;;;;;;;;-1:-1:-1;1088:4:12;1111:7;;;;;;1041:84;;1596:36:1;;;;;;;;;;;;;;;;7435:1249;;;;;;;;;;-1:-1:-1;7435:1249:1;;;;;:::i;:::-;;:::i;14314:223::-;;;;;;;;;;-1:-1:-1;14314:223:1;;;;;:::i;:::-;;:::i;1605:92:11:-;;;;;;;;;;;;;:::i;1711:63:1:-;;;;;;;;;;-1:-1:-1;1711:63:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1445:27::-;;;;;;;;;;;;;;;;13575:252;;;;;;;;;;-1:-1:-1;13575:252:1;;;;;:::i;:::-;;:::i;1217:23::-;;;;;;;;;;;;;;;;12799:374;;;;;;;;;;-1:-1:-1;12799:374:1;;;;;:::i;:::-;;:::i;8818:740::-;;;;;;;;;;;;;:::i;12165:216::-;;;;;;;;;;-1:-1:-1;12165:216:1;;;;;:::i;:::-;;:::i;16589:374::-;;;;;;;;;;-1:-1:-1;16589:374:1;;;;;:::i;:::-;;:::i;1125:30::-;;;;;;;;;;;;;;;;779:35;;;;;;;;;;-1:-1:-1;779:35:1;;;;;;;;10671:120;;;;;;;;;;;;;:::i;11667:418::-;;;;;;;;;;-1:-1:-1;11667:418:1;;;;;:::i;:::-;;:::i;1780:39::-;;;;;;;;;;-1:-1:-1;1780:39:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3943:25:15;;;3999:2;3984:18;;3977:34;;;;4027:18;;;4020:34;;;;4085:2;4070:18;;4063:34;;;;4128:3;4113:19;;4106:35;;;;4172:3;4157:19;;4150:35;;;;4216:3;4201:19;;4194:35;;;;4260:3;4245:19;;4238:35;4304:3;4289:19;;4282:35;4348:3;4333:19;;4326:35;4392:3;4377:19;;4370:36;4437:3;4422:19;;4415:36;4482:3;4467:19;;4460:36;4540:15;4533:23;4527:3;4512:19;;4505:52;3930:3;3915:19;1780:39:1;3438:1125:15;973:85:11;;;;;;;;;;-1:-1:-1;1019:7:11;1045:6;;;973:85;;14737:742:1;;;;;;;;;;-1:-1:-1;14737:742:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;15855:577::-;;;;;;;;;;-1:-1:-1;15855:577:1;;;;;:::i;:::-;;:::i;14036:193::-;;;;;;;;;;-1:-1:-1;14036:193:1;;;;;:::i;:::-;;:::i;12469:244::-;;;;;;;;;;-1:-1:-1;12469:244:1;;;;;:::i;:::-;;:::i;1291:26::-;;;;;;;;;;;;;;;;13268:223;;;;;;;;;;-1:-1:-1;13268:223:1;;;;;:::i;:::-;;:::i;9647:545::-;;;;;;;;;;;;;:::i;6476:848::-;;;;;;:::i;:::-;;:::i;1825:47::-;;;;;;;;;;-1:-1:-1;1825:47:1;;;;;:::i;:::-;;:::i;1026:28::-;;;;;;;;;;;;;;;;1519:34;;;;;;;;;;;;;;;;1650:47;;;;;;;;;;;;1693:4;1650:47;;1846:189:11;;;;;;;;;;-1:-1:-1;1846:189:11;;;;;:::i;:::-;;:::i;862:36:1:-;;;;;;;;;;-1:-1:-1;862:36:1;;;;;;;;;;;905:27;;;;;;;;;;-1:-1:-1;905:27:1;;;;;;;;10888:258;1680:1:13;2259:7;;:19;2251:63;;;;;;;6863:2:15;2251:63:13;;;6845:21:15;6902:2;6882:18;;;6875:30;6941:33;6921:18;;;6914:61;6992:18;;2251:63:13;;;;;;;;;1680:1;2389:7;:18;3772:12:1::1;::::0;::::1;;3758:10;:26;3750:48;;;::::0;::::1;::::0;;7223:2:15;3750:48:1::1;::::0;::::1;7205:21:15::0;7262:1;7242:18;;;7235:29;7300:11;7280:18;;;7273:39;7329:18;;3750:48:1::1;7021:332:15::0;3750:48:1::1;10987:14:::2;::::0;;10955:29:::2;11011:18:::0;;;11052:12:::2;::::0;11039:49:::2;::::0;11052:12:::2;;10987:14:::0;11039:12:::2;:49::i;:::-;11103:36;::::0;975:25:15;;;11103:36:1::2;::::0;963:2:15;948:18;11103:36:1::2;;;;;;;-1:-1:-1::0;1637:1:13;2562:22;;10888:258:1:o;11373:190::-;1088:4:12;1111:7;;;;;;1612:41;;;;;;;7560:2:15;1612:41:12;;;7542:21:15;7599:2;7579:18;;;7572:30;7638:22;7618:18;;;7611:50;7678:18;;1612:41:12;7358:344:15;1612:41:12;3885:12:1::1;::::0;::::1;;3871:10;:26;::::0;:59:::1;;-1:-1:-1::0;3915:15:1::1;::::0;::::1;;3901:10;:29;3871:59;3863:90;;;::::0;::::1;::::0;;7909:2:15;3863:90:1::1;::::0;::::1;7891:21:15::0;7948:2;7928:18;;;7921:30;7987:20;7967:18;;;7960:48;8025:18;;3863:90:1::1;7707:342:15::0;3863:90:1::1;11442:16:::2;:24:::0;;11476:23;;;;11509:10:::2;:8;:10::i;:::-;11543:12;::::0;11535:21:::2;::::0;::::2;::::0;;;::::2;11373:190::o:0;5544:848::-;1088:4:12;1111:7;;;;;;1354:9;1346:38;;;;;;;8256:2:15;1346:38:12;;;8238:21:15;8295:2;8275:18;;;8268:30;8334:18;8314;;;8307:46;8370:18;;1346:38:12;8054:340:15;1346:38:12;1680:1:13::1;2259:7;;:19:::0;2251:63:::1;;;::::0;::::1;::::0;;6863:2:15;2251:63:13::1;::::0;::::1;6845:21:15::0;6902:2;6882:18;;;6875:30;6941:33;6921:18;;;6914:61;6992:18;;2251:63:13::1;6661:355:15::0;2251:63:13::1;1680:1;2389:7;:18:::0;4143:10:1::2;22841:20:::0;22887:8;4122:57:::2;;;::::0;::::2;::::0;;8601:2:15;4122:57:1::2;::::0;::::2;8583:21:15::0;8640:2;8620:18;;;8613:30;8679:22;8659:18;;;8652:50;8719:18;;4122:57:1::2;8399:344:15::0;4122:57:1::2;4197:10;4211:9;4197:23;4189:62;;;::::0;::::2;::::0;;8950:2:15;4189:62:1::2;::::0;::::2;8932:21:15::0;8989:2;8969:18;;;8962:30;9028:28;9008:18;;;9001:56;9074:18;;4189:62:1::2;8748:350:15::0;4189:62:1::2;5661:12:::3;;5652:5;:21;5644:48;;;::::0;::::3;::::0;;9305:2:15;5644:48:1::3;::::0;::::3;9287:21:15::0;9344:2;9324:18;;;9317:30;9383:16;9363:18;;;9356:44;9417:18;;5644:48:1::3;9103:338:15::0;5644:48:1::3;5710:17;5721:5;5710:10;:17::i;:::-;5702:49;;;::::0;::::3;::::0;;9648:2:15;5702:49:1::3;::::0;::::3;9630:21:15::0;9687:2;9667:18;;;9660:30;9726:21;9706:18;;;9699:49;9765:18;;5702:49:1::3;9446:343:15::0;5702:49:1::3;5782:8;;5769:9;:21;;5761:69;;;::::0;::::3;::::0;;9996:2:15;5761:69:1::3;::::0;::::3;9978:21:15::0;10035:2;10015:18;;;10008:30;10074:34;10054:18;;;10047:62;10145:5;10125:18;;;10118:33;10168:19;;5761:69:1::3;9794:399:15::0;5761:69:1::3;5848:13;::::0;;;:6:::3;:13;::::0;;;;;;;5862:10:::3;5848:25:::0;;;;;;;:32:::3;;::::0;:37;5840:79:::3;;;::::0;::::3;::::0;;10400:2:15;5840:79:1::3;::::0;::::3;10382:21:15::0;10439:2;10419:18;;;10412:30;10478:31;10458:18;;;10451:59;10527:18;;5840:79:1::3;10198:353:15::0;5840:79:1::3;5959:19;5981:13:::0;;;:6:::3;:13;::::0;;;;6024:17:::3;::::0;::::3;::::0;:29:::3;::::0;6044:9:::3;::::0;6024:29:::3;:::i;:::-;6004:17;::::0;::::3;:49:::0;6082:16:::3;::::0;::::3;::::0;:28:::3;::::0;6101:9:::3;::::0;6082:28:::3;:::i;:::-;6063:16;::::0;::::3;:47:::0;6149:27:::3;6179:13:::0;;;:6:::3;:13;::::0;;;;;;;6193:10:::3;6179:25:::0;;;;;;;;;6214:34;;;::::3;6235:13;6214:34:::0;;::::3;::::0;;6277:9:::3;6258:16:::0;;::::3;:28:::0;;;6296:10:::3;:22:::0;;;;;:34;;;;::::3;::::0;;;;;;;;::::3;::::0;;;6346:39;;975:25:15;;;6179::1;;:13;;6346:39:::3;::::0;948:18:15;6346:39:1::3;;;;;;;;-1:-1:-1::0;;1637:1:13::1;2562:22:::0;;-1:-1:-1;5544:848:1:o;10282:257::-;1088:4:12;1111:7;;;;;;1354:9;1346:38;;;;;;;8256:2:15;1346:38:12;;;8238:21:15;8295:2;8275:18;;;8268:30;8334:18;8314;;;8307:46;8370:18;;1346:38:12;8054:340:15;1346:38:12;4033:15:1::1;::::0;::::1;;4019:10;:29;4011:54;;;::::0;::::1;::::0;;11077:2:15;4011:54:1::1;::::0;::::1;11059:21:15::0;11116:2;11096:18;;;11089:30;11155:14;11135:18;;;11128:42;11187:18;;4011:54:1::1;10875:336:15::0;4011:54:1::1;10366:16:::2;::::0;;;::::2;;;10365:17;10357:65;;;::::0;::::2;::::0;;11418:2:15;10357:65:1::2;::::0;::::2;11400:21:15::0;11457:2;11437:18;;;11430:30;11496:34;11476:18;;;11469:62;11567:5;11547:18;;;11540:33;11590:19;;10357:65:1::2;11216:399:15::0;10357:65:1::2;10448:12;::::0;:16:::2;::::0;10463:1:::2;10448:16;:::i;:::-;10433:12;:31:::0;;;10474:25:::2;::::0;:11:::2;:25::i;:::-;10509:16;:23:::0;;;::::2;::::0;::::2;::::0;;10282:257::o;7435:1249::-;1680:1:13;2259:7;;:19;2251:63;;;;;;;6863:2:15;2251:63:13;;;6845:21:15;6902:2;6882:18;;;6875:30;6941:33;6921:18;;;6914:61;6992:18;;2251:63:13;6661:355:15;2251:63:13;1680:1;2389:7;:18;4143:10:1::1;22841:20:::0;22887:8;4122:57:::1;;;::::0;::::1;::::0;;8601:2:15;4122:57:1::1;::::0;::::1;8583:21:15::0;8640:2;8620:18;;;8613:30;8679:22;8659:18;;;8652:50;8719:18;;4122:57:1::1;8399:344:15::0;4122:57:1::1;4197:10;4211:9;4197:23;4189:62;;;::::0;::::1;::::0;;8950:2:15;4189:62:1::1;::::0;::::1;8932:21:15::0;8989:2;8969:18;;;8962:30;9028:28;9008:18;;;9001:56;9074:18;;4189:62:1::1;8748:350:15::0;4189:62:1::1;7521:14:::2;::::0;7568:1027:::2;7588:17:::0;;::::2;7568:1027;;;7634:6;:17;7641:6;;7648:1;7641:9;;;;;;;:::i;:::-;;;;;;;7634:17;;;;;;;;;;;:32;;;7670:1;7634:37:::0;7626:71:::2;;;::::0;::::2;::::0;;12011:2:15;7626:71:1::2;::::0;::::2;11993:21:15::0;12050:2;12030:18;;;12023:30;12089:23;12069:18;;;12062:51;12130:18;;7626:71:1::2;11809:345:15::0;7626:71:1::2;7737:6;:17;7744:6;;7751:1;7744:9;;;;;;;:::i;:::-;;;;;;;7737:17;;;;;;;;;;;:32;;;7719:15;:50;7711:82;;;::::0;::::2;::::0;;12361:2:15;7711:82:1::2;::::0;::::2;12343:21:15::0;12400:2;12380:18;;;12373:30;12439:21;12419:18;;;12412:49;12478:18;;7711:82:1::2;12159:343:15::0;7711:82:1::2;7808:19;7892:6;:17;7899:6;;7906:1;7899:9;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;::::2;;7892:17:::0;;-1:-1:-1;7892:17:1;::::2;::::0;;;;;;-1:-1:-1;7892:17:1;:30:::2;;::::0;::::2;;7888:542;;;7950:32;7960:6;;7967:1;7960:9;;;;;;;:::i;:::-;;;;;;;7971:10;7950:9;:32::i;:::-;7942:67;;;::::0;::::2;::::0;;12709:2:15;7942:67:1::2;::::0;::::2;12691:21:15::0;12748:2;12728:18;;;12721:30;12787:24;12767:18;;;12760:52;12829:18;;7942:67:1::2;12507:346:15::0;7942:67:1::2;8027:18;8048:6;:17;8055:6;;8062:1;8055:9;;;;;;;:::i;:::-;;;;;;;8048:17;;;;;;;;;;;8027:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;8159:5;:25;;;8137:5;:18;;;8098:6;:17;8105:6;;8112:1;8105:9;;;;;;;:::i;:::-;;;;;;;8098:17;;;;;;;;;;;:29;8116:10;8098:29;;;;;;;;;;;;;;;:36;;;:57;;;;:::i;:::-;8097:87;;;;:::i;:::-;8083:101;;7924:275;7888:542;;;8286:33;8297:6;;8304:1;8297:9;;;;;;;:::i;:::-;;;;;;;8308:10;8286;:33::i;:::-;8278:69;;;::::0;::::2;::::0;;13512:2:15;8278:69:1::2;::::0;::::2;13494:21:15::0;13551:2;13531:18;;;13524:30;13590:25;13570:18;;;13563:53;13633:18;;8278:69:1::2;13310:347:15::0;8278:69:1::2;8379:6;:17;8386:6;;8393:1;8386:9;;;;;;;:::i;:::-;;;;;;;8379:17;;;;;;;;;;;:29;8397:10;8379:29;;;;;;;;;;;;;;;:36;;;8365:50;;7888:542;8484:4;8444:6;:17;8451:6;;8458:1;8451:9;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;::::2;;8444:17:::0;;-1:-1:-1;8444:17:1;;::::2;::::0;;;;;;;;-1:-1:-1;8444:17:1;;;8462:10:::2;8444:29:::0;;;;;;;:37:::2;;:44:::0;;;::::2;::::0;::::2;;::::0;;;::::2;::::0;;8502:21:::2;8512:11:::0;8502:21;::::2;:::i;:::-;;;8561:6;;8568:1;8561:9;;;;;;;:::i;:::-;;;;;;;8549:10;8543:41;;;8572:11;8543:41;;;;975:25:15::0;;963:2;948:18;;829:177;8543:41:1::2;;;;;;;;-1:-1:-1::0;7607:3:1::2;;7568:1027;;;-1:-1:-1::0;8609:10:1;;8605:73:::2;;8635:32;8648:10;8660:6;8635:12;:32::i;:::-;-1:-1:-1::0;;1637:1:13;2562:22;;-1:-1:-1;7435:1249:1:o;14314:223::-;1019:7:11;1045:6;1185:23;1045:6;666:10:14;1185:23:11;1177:68;;;;;;;13864:2:15;1177:68:11;;;13846:21:15;;;13883:18;;;13876:30;13942:34;13922:18;;;13915:62;13994:18;;1177:68:11;13662:356:15;1177:68:11;14392:27:1::1;::::0;::::1;14384:62;;;::::0;::::1;::::0;;14225:2:15;14384:62:1::1;::::0;::::1;14207:21:15::0;14264:2;14244:18;;;14237:30;14303:24;14283:18;;;14276:52;14345:18;;14384:62:1::1;14023:346:15::0;14384:62:1::1;14456:12;:28:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;14500:30:::1;::::0;352:74:15;;;14500:30:1::1;::::0;340:2:15;325:18;14500:30:1::1;;;;;;;;14314:223:::0;:::o;1605:92:11:-;1019:7;1045:6;1185:23;1045:6;666:10:14;1185:23:11;1177:68;;;;;;;13864:2:15;1177:68:11;;;13846:21:15;;;13883:18;;;13876:30;13942:34;13922:18;;;13915:62;13994:18;;1177:68:11;13662:356:15;1177:68:11;1669:21:::1;1687:1;1669:9;:21::i;:::-;1605:92::o:0;13575:252:1:-;1088:4:12;1111:7;;;;;;1612:41;;;;;;;7560:2:15;1612:41:12;;;7542:21:15;7599:2;7579:18;;;7572:30;7638:22;7618:18;;;7611:50;7678:18;;1612:41:12;7358:344:15;1612:41:12;3772:12:1::1;::::0;::::1;;3758:10;:26;3750:48;;;::::0;::::1;::::0;;7223:2:15;3750:48:1::1;::::0;::::1;7205:21:15::0;7262:1;7242:18;;;7235:29;7300:11;7280:18;;;7273:39;7329:18;;3750:48:1::1;7021:332:15::0;3750:48:1::1;1693:4:::2;13669:12;:32;;13661:66;;;::::0;::::2;::::0;;14576:2:15;13661:66:1::2;::::0;::::2;14558:21:15::0;14615:2;14595:18;;;14588:30;14654:23;14634:18;;;14627:51;14695:18;;13661:66:1::2;14374:345:15::0;13661:66:1::2;13737:11;:26:::0;;;13794:12:::2;::::0;13779:41:::2;::::0;975:25:15;;;13779:41:1::2;::::0;963:2:15;948:18;13779:41:1::2;;;;;;;;13575:252:::0;:::o;12799:374::-;1088:4:12;1111:7;;;;;;1612:41;;;;;;;7560:2:15;1612:41:12;;;7542:21:15;7599:2;7579:18;;;7572:30;7638:22;7618:18;;;7611:50;7678:18;;1612:41:12;7358:344:15;1612:41:12;3772:12:1::1;::::0;::::1;;3758:10;:26;3750:48;;;::::0;::::1;::::0;;7223:2:15;3750:48:1::1;::::0;::::1;7205:21:15::0;7262:1;7242:18;;;7235:29;7300:11;7280:18;;;7273:39;7329:18;;3750:48:1::1;7021:332:15::0;3750:48:1::1;12883:21:::2;::::0;::::2;12875:56;;;::::0;::::2;::::0;;14225:2:15;12875:56:1::2;::::0;::::2;14207:21:15::0;14264:2;14244:18;;;14237:30;14303:24;14283:18;;;14276:52;14345:18;;12875:56:1::2;14023:346:15::0;12875:56:1::2;12963:1;12941:19;:23:::0;12974:6:::2;:39:::0;;;::::2;;::::0;::::2;::::0;;::::2;::::0;;;13108:24:::2;::::0;;;;;;;:22:::2;::::0;:24:::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;;12974:39;13108:24:::2;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;13148:18:1::2;::::0;382:42:15;370:55;;352:74;;13148:18:1::2;::::0;-1:-1:-1;340:2:15;325:18;;-1:-1:-1;13148:18:1::2;::::0;-1:-1:-1;206:226:15;8818:740:1;1088:4:12;1111:7;;;;;;1354:9;1346:38;;;;;;;8256:2:15;1346:38:12;;;8238:21:15;8295:2;8275:18;;;8268:30;8334:18;8314;;;8307:46;8370:18;;1346:38:12;8054:340:15;1346:38:12;4033:15:1::1;::::0;::::1;;4019:10;:29;4011:54;;;::::0;::::1;::::0;;11077:2:15;4011:54:1::1;::::0;::::1;11059:21:15::0;11116:2;11096:18;;;11089:30;11155:14;11135:18;;;11128:42;11187:18;;4011:54:1::1;10875:336:15::0;4011:54:1::1;8909:16:::2;::::0;;;::::2;;;:35:::0;::::2;;;-1:-1:-1::0;8929:15:1::2;::::0;;;::::2;;;8909:35;8888:152;;;::::0;::::2;::::0;;15588:2:15;8888:152:1::2;::::0;::::2;15570:21:15::0;15627:2;15607:18;;;15600:30;15666:34;15646:18;;;15639:62;15737:34;15717:18;;;15710:62;15809:8;15788:19;;;15781:37;15835:19;;8888:152:1::2;15386:474:15::0;8888:152:1::2;9052:21;9075:19:::0;9098:21:::2;:19;:21::i;:::-;9051:68;;;;9160:14;9152:23;;9130:19;:45;;;;9241:58;9256:12;;9270:14;9241:58;;9286:12;9241:14;:58::i;:::-;9309:61;9338:1;9323:12;;:16;;;;:::i;:::-;9341:14;9309:61;;9357:12;9309:13;:61::i;:::-;9380:35;9413:1;9398:12;;:16;;;;:::i;:::-;9380:17;:35::i;:::-;9496:12;::::0;:16:::2;::::0;9511:1:::2;9496:16;:::i;:::-;9481:12;:31:::0;;;9522:29:::2;::::0;:15:::2;:29::i;:::-;8878:680;;8818:740::o:0;12165:216::-;1088:4:12;1111:7;;;;;;1612:41;;;;;;;7560:2:15;1612:41:12;;;7542:21:15;7599:2;7579:18;;;7572:30;7638:22;7618:18;;;7611:50;7678:18;;1612:41:12;7358:344:15;1612:41:12;3772:12:1::1;::::0;::::1;;3758:10;:26;3750:48;;;::::0;::::1;::::0;;7223:2:15;3750:48:1::1;::::0;::::1;7205:21:15::0;7262:1;7242:18;;;7235:29;7300:11;7280:18;;;7273:39;7329:18;;3750:48:1::1;7021:332:15::0;3750:48:1::1;12253:9:::2;12266:1;12253:14:::0;12245:48:::2;;;::::0;::::2;::::0;;16200:2:15;12245:48:1::2;::::0;::::2;16182:21:15::0;16239:2;16219:18;;;16212:30;16278:23;16258:18;;;16251:51;16319:18;;12245:48:1::2;15998:345:15::0;12245:48:1::2;12303:8;:20:::0;;;12351:12:::2;::::0;12339:35:::2;::::0;975:25:15;;;12339:35:1::2;::::0;963:2:15;948:18;12339:35:1::2;829:177:15::0;16589:374:1;16659:4;16704:13;;;:6;:13;;;;;;;;:19;;;;;;;;;;;16675:48;;;;;;;;;;16659:4;;16675:48;16704:19;16675:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16754:13:1;;;:6;:13;;;;;16733:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16675:48;16733:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16675:48;;-1:-1:-1;16733:34:1;;16796:53;;;16832:9;:17;;;16831:18;16796:53;:123;;;;;16906:13;;16883:5;:20;;;:36;;;;:::i;:::-;16865:15;:54;16796:123;:160;;;;-1:-1:-1;16935:16:1;;;;:21;;16796:160;16777:179;;;;16589:374;;;;;:::o;10671:120::-;1088:4:12;1111:7;;;;;;1354:9;1346:38;;;;;;;8256:2:15;1346:38:12;;;8238:21:15;8295:2;8275:18;;;8268:30;8334:18;8314;;;8307:46;8370:18;;1346:38:12;8054:340:15;1346:38:12;3885:12:1::1;::::0;::::1;;3871:10;:26;::::0;:59:::1;;-1:-1:-1::0;3915:15:1::1;::::0;::::1;;3901:10;:29;3871:59;3863:90;;;::::0;::::1;::::0;;7909:2:15;3863:90:1::1;::::0;::::1;7891:21:15::0;7948:2;7928:18;;;7921:30;7987:20;7967:18;;;7960:48;8025:18;;3863:90:1::1;7707:342:15::0;3863:90:1::1;10741:8:::2;:6;:8::i;:::-;10771:12;::::0;10765:19:::2;::::0;::::2;::::0;;;::::2;10671:120::o:0;11667:418::-;1088:4:12;1111:7;;;;;;1612:41;;;;;;;7560:2:15;1612:41:12;;;7542:21:15;7599:2;7579:18;;;7572:30;7638:22;7618:18;;;7611:50;7678:18;;1612:41:12;7358:344:15;1612:41:12;3772:12:1::1;::::0;::::1;;3758:10;:26;3750:48;;;::::0;::::1;::::0;;7223:2:15;3750:48:1::1;::::0;::::1;7205:21:15::0;7262:1;7242:18;;;7235:29;7300:11;7280:18;;;7273:39;7329:18;;3750:48:1::1;7021:332:15::0;3750:48:1::1;11847:16:::2;11830:14;:33;11822:95;;;::::0;::::2;::::0;;16550:2:15;11822:95:1::2;::::0;::::2;16532:21:15::0;16589:2;16569:18;;;16562:30;16628:34;16608:18;;;16601:62;16699:19;16679:18;;;16672:47;16736:19;;11822:95:1::2;16348:413:15::0;11822:95:1::2;11927:13;:30:::0;;;11967:15:::2;:34:::0;;;12017:61:::2;::::0;;16940:25:15;;;16996:2;16981:18;;16974:34;;;12017:61:1::2;::::0;16913:18:15;12017:61:1::2;;;;;;;11667:418:::0;;:::o;14737:742::-;15033:16;;;14956:7;15033:16;;;:10;:16;;;;;:23;14894:16;;;;15005:4;;15033:32;;15059:6;;15033:32;:::i;:::-;15024:6;:41;15020:113;;;15090:16;;;;;;;:10;:16;;;;;:23;:32;;15116:6;;15090:32;:::i;:::-;15081:41;;15020:113;15143:23;15183:6;15169:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15169:21:1;;15143:47;;15200:28;15247:6;15231:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;15231:23:1;;;;;;;;;;;;;;;15200:54;;15270:9;15265:154;15289:6;15285:1;:10;15265:154;;;15328:16;;;;;;;:10;:16;;;;;15345:10;15354:1;15345:6;:10;:::i;:::-;15328:28;;;;;;;;:::i;:::-;;;;;;;;;15316:6;15323:1;15316:9;;;;;;;;:::i;:::-;;;;;;:40;;;;;15385:6;:17;15392:6;15399:1;15392:9;;;;;;;;:::i;:::-;;;;;;;;;;;;15385:17;;;;;;;;;;;;;-1:-1:-1;15385:17:1;;;:23;;;;;;;;;;;;15370:38;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:12;;:9;;15380:1;;15370:12;;;;;;:::i;:::-;;;;;;;;;;:38;15297:3;;15265:154;;;-1:-1:-1;15437:6:1;15445:9;15456:15;15465:6;15456;:15;:::i;:::-;15429:43;;;;;;;;;14737:742;;;;;;;:::o;15855:577::-;15924:4;15969:13;;;:6;:13;;;;;;;;:19;;;;;;;;;;;15940:48;;;;;;;;;;15924:4;;15940:48;15969:19;15940:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16019:13:1;;;:6;:13;;;;;15998:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15940:48;15998:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15940:48;;-1:-1:-1;16046:35:1;;16042:78;;16104:5;16097:12;;;;;;16042:78;16148:5;:18;;;:55;;;;-1:-1:-1;16182:16:1;;;;:21;;16148:55;:89;;;;;16220:9;:17;;;16219:18;16148:89;:277;;;;;16274:5;:15;;;16255:5;:16;;;:34;:73;;;;-1:-1:-1;16315:13:1;16293:18;;:35;;;;;;;;:::i;:::-;;16255:73;16254:170;;;;16369:5;:15;;;16350:5;:16;;;:34;:73;;;;-1:-1:-1;16410:13:1;16388:18;;:35;;;;;;;;:::i;:::-;;;15855:577;-1:-1:-1;;;;;15855:577:1:o;14036:193::-;1019:7:11;1045:6;1185:23;1045:6;666:10:14;1185:23:11;1177:68;;;;;;;13864:2:15;1177:68:11;;;13846:21:15;;;13883:18;;;13876:30;13942:34;13922:18;;;13915:62;13994:18;;1177:68:11;13662:356:15;1177:68:11;14120:56:1::1;14148:6;14156:10;14168:7;14120:27;:56::i;:::-;14206:6;14192:30;;;14214:7;14192:30;;;;975:25:15::0;;963:2;948:18;;829:177;14192:30:1::1;;;;;;;;14036:193:::0;;:::o;12469:244::-;3772:12;;;;3758:10;:26;3750:48;;;;;;;7223:2:15;3750:48:1;;;7205:21:15;7262:1;7242:18;;;7235:29;7300:11;7280:18;;;7273:39;7329:18;;3750:48:1;7021:332:15;3750:48:1;12553:30:::1;::::0;::::1;12545:65;;;::::0;::::1;::::0;;14225:2:15;12545:65:1::1;::::0;::::1;14207:21:15::0;14264:2;14244:18;;;14237:30;14303:24;14283:18;;;14276:52;14345:18;;12545:65:1::1;14023:346:15::0;12545:65:1::1;12620:15;:34:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;12670:36:::1;::::0;352:74:15;;;12670:36:1::1;::::0;340:2:15;325:18;12670:36:1::1;206:226:15::0;13268:223:1;1088:4:12;1111:7;;;;;;1612:41;;;;;;;7560:2:15;1612:41:12;;;7542:21:15;7599:2;7579:18;;;7572:30;7638:22;7618:18;;;7611:50;7678:18;;1612:41:12;7358:344:15;1612:41:12;3772:12:1::1;::::0;::::1;;3758:10;:26;3750:48;;;::::0;::::1;::::0;;7223:2:15;3750:48:1::1;::::0;::::1;7205:21:15::0;7262:1;7242:18;;;7235:29;7300:11;7280:18;;;7273:39;7329:18;;3750:48:1::1;7021:332:15::0;3750:48:1::1;13374:21:::2;:46:::0;;;13436:48:::2;::::0;975:25:15;;;13436:48:1::2;::::0;963:2:15;948:18;13436:48:1::2;829:177:15::0;9647:545:1;1088:4:12;1111:7;;;;;;1354:9;1346:38;;;;;;;8256:2:15;1346:38:12;;;8238:21:15;8295:2;8275:18;;;8268:30;8334:18;8314;;;8307:46;8370:18;;1346:38:12;8054:340:15;1346:38:12;4033:15:1::1;::::0;::::1;;4019:10;:29;4011:54;;;::::0;::::1;::::0;;11077:2:15;4011:54:1::1;::::0;::::1;11059:21:15::0;11116:2;11096:18;;;11089:30;11155:14;11135:18;;;11128:42;11187:18;;4011:54:1::1;10875:336:15::0;4011:54:1::1;9729:16:::2;::::0;;;::::2;;;9721:78;;;::::0;::::2;::::0;;17410:2:15;9721:78:1::2;::::0;::::2;17392:21:15::0;17449:2;17429:18;;;17422:30;17488:34;17468:18;;;17461:62;17559:19;17539:18;;;17532:47;17596:19;;9721:78:1::2;17208:413:15::0;9721:78:1::2;9818:15;::::0;;;::::2;;;9817:16;9809:63;;;::::0;::::2;::::0;;17828:2:15;9809:63:1::2;::::0;::::2;17810:21:15::0;17867:2;17847:18;;;17840:30;17906:34;17886:18;;;17879:62;17977:4;17957:18;;;17950:32;17999:19;;9809:63:1::2;17626:398:15::0;9809:63:1::2;9884:21;9907:19:::0;9930:21:::2;:19;:21::i;:::-;9883:68;;;;9992:14;9984:23;;9962:19;:45;;;;10018:58;10033:12;;10047:14;10018:58;;10063:12;10018:14;:58::i;:::-;10102:12;::::0;:16:::2;::::0;10117:1:::2;10102:16;:::i;:::-;10087:12;:31:::0;;;10128:25:::2;::::0;:11:::2;:25::i;:::-;-1:-1:-1::0;;10163:15:1::2;:22:::0;;;::::2;::::0;::::2;::::0;;9647:545::o;6476:848::-;1088:4:12;1111:7;;;;;;1354:9;1346:38;;;;;;;8256:2:15;1346:38:12;;;8238:21:15;8295:2;8275:18;;;8268:30;8334:18;8314;;;8307:46;8370:18;;1346:38:12;8054:340:15;1346:38:12;1680:1:13::1;2259:7;;:19:::0;2251:63:::1;;;::::0;::::1;::::0;;6863:2:15;2251:63:13::1;::::0;::::1;6845:21:15::0;6902:2;6882:18;;;6875:30;6941:33;6921:18;;;6914:61;6992:18;;2251:63:13::1;6661:355:15::0;2251:63:13::1;1680:1;2389:7;:18:::0;4143:10:1::2;22841:20:::0;22887:8;4122:57:::2;;;::::0;::::2;::::0;;8601:2:15;4122:57:1::2;::::0;::::2;8583:21:15::0;8640:2;8620:18;;;8613:30;8679:22;8659:18;;;8652:50;8719:18;;4122:57:1::2;8399:344:15::0;4122:57:1::2;4197:10;4211:9;4197:23;4189:62;;;::::0;::::2;::::0;;8950:2:15;4189:62:1::2;::::0;::::2;8932:21:15::0;8989:2;8969:18;;;8962:30;9028:28;9008:18;;;9001:56;9074:18;;4189:62:1::2;8748:350:15::0;4189:62:1::2;6593:12:::3;;6584:5;:21;6576:48;;;::::0;::::3;::::0;;9305:2:15;6576:48:1::3;::::0;::::3;9287:21:15::0;9344:2;9324:18;;;9317:30;9383:16;9363:18;;;9356:44;9417:18;;6576:48:1::3;9103:338:15::0;6576:48:1::3;6642:17;6653:5;6642:10;:17::i;:::-;6634:49;;;::::0;::::3;::::0;;9648:2:15;6634:49:1::3;::::0;::::3;9630:21:15::0;9687:2;9667:18;;;9660:30;9726:21;9706:18;;;9699:49;9765:18;;6634:49:1::3;9446:343:15::0;6634:49:1::3;6714:8;;6701:9;:21;;6693:69;;;::::0;::::3;::::0;;9996:2:15;6693:69:1::3;::::0;::::3;9978:21:15::0;10035:2;10015:18;;;10008:30;10074:34;10054:18;;;10047:62;10145:5;10125:18;;;10118:33;10168:19;;6693:69:1::3;9794:399:15::0;6693:69:1::3;6780:13;::::0;;;:6:::3;:13;::::0;;;;;;;6794:10:::3;6780:25:::0;;;;;;;:32:::3;;::::0;:37;6772:79:::3;;;::::0;::::3;::::0;;10400:2:15;6772:79:1::3;::::0;::::3;10382:21:15::0;10439:2;10419:18;;;10412:30;10478:31;10458:18;;;10451:59;10527:18;;6772:79:1::3;10198:353:15::0;6772:79:1::3;6891:19;6913:13:::0;;;:6:::3;:13;::::0;;;;6956:17:::3;::::0;::::3;::::0;:29:::3;::::0;6976:9:::3;::::0;6956:29:::3;:::i;:::-;6936:17;::::0;::::3;:49:::0;7014:16:::3;::::0;::::3;::::0;:28:::3;::::0;7033:9:::3;::::0;7014:28:::3;:::i;:::-;6995:16;::::0;::::3;:47:::0;7081:27:::3;7111:13:::0;;;:6:::3;:13;::::0;;;;;;;7125:10:::3;7111:25:::0;;;;;;;;;7146:34;;;::::3;::::0;;7209:9:::3;7146:34:::0;7190:16;;::::3;:28:::0;;;7228:10:::3;:22:::0;;;;;:34;;;;::::3;::::0;;;;;;;;;;::::3;::::0;;;7278:39;;975:25:15;;;7111::1;;:13;;7278:39:::3;::::0;948:18:15;7278:39:1::3;829:177:15::0;1825:47:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1846:189:11:-;1019:7;1045:6;1185:23;1045:6;666:10:14;1185:23:11;1177:68;;;;;;;13864:2:15;1177:68:11;;;13846:21:15;;;13883:18;;;13876:30;13942:34;13922:18;;;13915:62;13994:18;;1177:68:11;13662:356:15;1177:68:11;1934:22:::1;::::0;::::1;1926:73;;;::::0;::::1;::::0;;18231:2:15;1926:73:11::1;::::0;::::1;18213:21:15::0;18270:2;18250:18;;;18243:30;18309:34;18289:18;;;18282:62;18380:8;18360:18;;;18353:36;18406:19;;1926:73:11::1;18029:402:15::0;1926:73:11::1;2009:19;2019:8;2009:9;:19::i;:::-;1846:189:::0;:::o;607:345:10:-;750:1;747;744;741;732:7;727:3;720:5;715:37;776:6;766:170;;815:30;809:4;802:44;893:28;870:21;863:59;766:170;;607:345;;:::o;2053:117:12:-;1088:4;1111:7;;;;;;1612:41;;;;;;;7560:2:15;1612:41:12;;;7542:21:15;7599:2;7579:18;;;7572:30;7638:22;7618:18;;;7611:50;7678:18;;1612:41:12;7358:344:15;1612:41:12;2121:5:::1;2111:15:::0;;;::::1;::::0;;2141:22:::1;666:10:14::0;2150:12:12::1;2141:22;::::0;382:42:15;370:55;;;352:74;;340:2;325:18;2141:22:12::1;;;;;;;2053:117::o:0;21594:304:1:-;21652:4;21687:13;;;:6;:13;;;;;:28;;;:33;;;;:81;;-1:-1:-1;21736:13:1;;;;:6;:13;;;;;:27;;;:32;;21687:81;:143;;;;-1:-1:-1;21802:13:1;;;;:6;:13;;;;;:28;;;21784:15;:46;21687:143;:204;;;;-1:-1:-1;;21864:13:1;;;;:6;:13;;;;;:27;;;21846:15;:45;;21594:304::o;21014:375::-;21069:19;21091:13;;;:6;:13;;;;;21137:15;21114:20;;;:38;;;21202:15;;21184:33;;;:::i;:::-;21162:19;;;;:55;;;;21273:15;;21269:19;;;:::i;:::-;21250:39;;:15;:39;:::i;:::-;21227:20;;;:62;21299:19;;;:11;21328:17;;;:21;;;21365:17;;21313:5;;21365:17;;;21059:330;21014:375;:::o;2041:169:11:-;2096:16;2115:6;;;2131:17;;;;;;;;;;2163:40;;2115:6;;;;;;;2163:40;;2096:16;2163:40;2086:124;2041:169;:::o;22054:540:1:-;22108:6;22116;22134:29;22184:21;;22166:15;:39;;;;:::i;:::-;22134:71;;22216:14;22232:12;22248:17;22271:6;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22215:80;;;;;;;;22326:21;22313:9;:34;;22305:93;;;;;;;18638:2:15;22305:93:1;;;18620:21:15;18677:2;18657:18;;;18650:30;18716:34;18696:18;;;18689:62;18787:16;18767:18;;;18760:44;18821:19;;22305:93:1;18436:410:15;22305:93:1;22448:19;;22437:7;22429:16;;:38;22408:146;;;;;;;19053:2:15;22408:146:1;;;19035:21:15;19092:2;19072:18;;;19065:30;19131:34;19111:18;;;19104:62;19202:31;19182:18;;;19175:59;19251:19;;22408:146:1;18851:425:15;22408:146:1;-1:-1:-1;22572:7:1;;22581:5;;-1:-1:-1;22054:540:1;-1:-1:-1;;22054:540:1:o;19629:722::-;19756:13;;;;:6;:13;;;;;:28;;;:33;;19748:89;;;;;;;19483:2:15;19748:89:1;;;19465:21:15;19522:2;19502:18;;;19495:30;19561:34;19541:18;;;19534:62;19632:13;19612:18;;;19605:41;19663:19;;19748:89:1;19281:407:15;19748:89:1;19874:13;;;;:6;:13;;;;;:27;;;19855:15;:46;;19847:98;;;;;;;19895:2:15;19847:98:1;;;19877:21:15;19934:2;19914:18;;;19907:30;19973:34;19953:18;;;19946:62;20044:9;20024:18;;;20017:37;20071:19;;19847:98:1;19693:403:15;19847:98:1;20025:13;;19995;;;;:6;:13;;;;;:27;;;:43;;20025:13;19995:43;:::i;:::-;19976:15;:62;;19955:149;;;;;;;20303:2:15;19955:149:1;;;20285:21:15;20342:2;20322:18;;;20315:30;20381:34;20361:18;;;20354:62;20452:10;20432:18;;;20425:38;20480:19;;19955:149:1;20101:404:15;19955:149:1;20114:19;20136:13;;;:6;:13;;;;;20200:15;;20182:33;;:15;:33;:::i;:::-;20159:20;;;:56;20225:15;;;:23;;;20258:18;;;:28;;;20302:42;;975:25:15;;;20258:28:1;;20312:5;;20302:42;;963:2:15;948:18;20302:42:1;;;;;;;;19738:613;19629:722;;;:::o;18793:690::-;18919:13;;;;:6;:13;;;;;:27;;;:32;;18911:86;;;;;;;20892:2:15;18911:86:1;;;20874:21:15;20931:2;20911:18;;;20904:30;20970:34;20950:18;;;20943:62;21041:11;21021:18;;;21014:39;21070:19;;18911:86:1;20690:405:15;18911:86:1;19034:13;;;;:6;:13;;;;;:28;;;19015:15;:47;;19007:99;;;;;;;21302:2:15;19007:99:1;;;21284:21:15;21341:2;21321:18;;;21314:30;21380:34;21360:18;;;21353:62;21451:9;21431:18;;;21424:37;21478:19;;19007:99:1;21100:403:15;19007:99:1;19187:13;;19156;;;;:6;:13;;;;;:28;;;:44;;19187:13;19156:44;:::i;:::-;19137:15;:63;;19116:149;;;;;;;21710:2:15;19116:149:1;;;21692:21:15;21749:2;21729:18;;;21722:30;21788:34;21768:18;;;21761:62;21859:9;21839:18;;;21832:37;21886:19;;19116:149:1;21508:403:15;19116:149:1;19275:19;19297:13;;;:6;:13;;;;;;;19320:16;;;:24;;;19354:19;;;:29;;;19393:18;;;:25;;;;19414:4;19393:25;;;19434:42;;19376:7;;19304:5;;19434:42;;;;19339:5;975:25:15;;963:2;948:18;;829:177;17055:1593:1;17124:13;;;;:6;:13;;;;;:33;;;:38;:73;;;;-1:-1:-1;17166:13:1;;;;:6;:13;;;;;:26;;;:31;17124:73;17116:104;;;;;;;22118:2:15;17116:104:1;;;22100:21:15;22157:2;22137:18;;;22130:30;22196:20;22176:18;;;22169:48;22234:18;;17116:104:1;21916:342:15;17116:104:1;17230:19;17252:13;;;:6;:13;;;;;17416:15;;;;17397:16;;;;17252:13;;17230:19;;;;;17397:34;17393:994;;;17469:5;:16;;;17447:38;;17539:19;17562:1;17539:24;17535:188;;17597:5;:17;;;17583:31;;17535:188;;;17703:5;17688:11;;17668:5;:17;;;:31;;;;:::i;:::-;17667:41;;;;:::i;:::-;17653:55;;17535:188;17771:11;17751:5;:17;;;:31;;;;:::i;:::-;17736:46;;17393:994;;;17851:5;:15;;;17832:5;:16;;;:34;17828:559;;;17904:5;:16;;;17882:38;;17974:19;17997:1;17974:24;17970:188;;18032:5;:17;;;18018:31;;17970:188;;17828:559;-1:-1:-1;;;18359:17:1;;;;18300:1;;;17828:559;18396:25;;;:47;;;18453:18;;;:33;;;18524:14;:29;;18542:11;;18524:14;-1:-1:-1;;18524:29:1;;18542:11;;18524:29;:::i;:::-;;;;-1:-1:-1;;18569:72:1;;;22465:25:15;;;22521:2;22506:18;;22499:34;;;22549:18;;;22542:34;;;18587:5:1;;18569:72;;22453:2:15;22438:18;18569:72:1;;;;;;;17106:1542;;;;17055:1593;:::o;20462:441::-;20529:16;;;;;;;20521:78;;;;;;;17410:2:15;20521:78:1;;;17392:21:15;17449:2;17429:18;;;17422:30;17488:34;17468:18;;;17461:62;17559:19;17539:18;;;17532:47;17596:19;;20521:78:1;17208:413:15;20521:78:1;20617:6;:17;20624:9;20632:1;20624:5;:9;:::i;:::-;20617:17;;;;;;;;;;;:32;;;20653:1;20617:37;20609:96;;;;;;;22789:2:15;20609:96:1;;;22771:21:15;22828:2;22808:18;;;22801:30;22867:34;22847:18;;;22840:62;22938:16;22918:18;;;22911:44;22972:19;;20609:96:1;22587:410:15;20609:96:1;20755:6;:17;20762:9;20770:1;20762:5;:9;:::i;:::-;20755:17;;;;;;;;;;;:32;;;20736:15;:51;;20715:153;;;;;;;23204:2:15;20715:153:1;;;23186:21:15;23243:2;23223:18;;;23216:30;23282:34;23262:18;;;23255:62;23353:25;23333:18;;;23326:53;23396:19;;20715:153:1;23002:419:15;20715:153:1;20878:18;20890:5;20878:11;:18::i;1806:115:12:-;1088:4;1111:7;;;;;;1354:9;1346:38;;;;;;;8256:2:15;1346:38:12;;;8238:21:15;8295:2;8275:18;;;8268:30;8334:18;8314;;;8307:46;8370:18;;1346:38:12;8054:340:15;1346:38:12;1865:7:::1;:14:::0;;;::::1;::::0;::::1;::::0;;1894:20:::1;1901:12;666:10:14::0;;587:96;1417:510:9;1523:8;:20;;;1547:1;1523:25;1519:77;;1571:14;;;;;;;;;;;;;;1519:77;1655:45;;1641:13;23618:55:15;;;1655:45:9;;;23600:74:15;23690:18;;;23683:34;;;1607:11:9;;;;1641:13;;;23573:18:15;;1655:45:9;;;;;;;;;;;;;;;;;;;;;;;;1641:60;;;1655:45;1641:60;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1606:95;;;;1717:6;1712:64;;1746:19;;;;;;;;;;;;;;1712:64;1790:11;;:15;1786:135;;1837:4;1826:24;;;;;;;;;;;;:::i;:::-;1821:90;;1877:19;;;;;;;;;;;;;;1821:90;1509:418;;1417:510;;;:::o;437:196:15:-;505:20;;565:42;554:54;;544:65;;534:93;;623:1;620;613:12;534:93;437:196;;;:::o;638:186::-;697:6;750:2;738:9;729:7;725:23;721:32;718:52;;;766:1;763;756:12;718:52;789:29;808:9;789:29;:::i;:::-;779:39;638:186;-1:-1:-1;;;638:186:15:o;1011:180::-;1070:6;1123:2;1111:9;1102:7;1098:23;1094:32;1091:52;;;1139:1;1136;1129:12;1091:52;-1:-1:-1;1162:23:15;;1011:180;-1:-1:-1;1011:180:15:o;1196:615::-;1282:6;1290;1343:2;1331:9;1322:7;1318:23;1314:32;1311:52;;;1359:1;1356;1349:12;1311:52;1399:9;1386:23;1428:18;1469:2;1461:6;1458:14;1455:34;;;1485:1;1482;1475:12;1455:34;1523:6;1512:9;1508:22;1498:32;;1568:7;1561:4;1557:2;1553:13;1549:27;1539:55;;1590:1;1587;1580:12;1539:55;1630:2;1617:16;1656:2;1648:6;1645:14;1642:34;;;1672:1;1669;1662:12;1642:34;1725:7;1720:2;1710:6;1707:1;1703:14;1699:2;1695:23;1691:32;1688:45;1685:65;;;1746:1;1743;1736:12;1685:65;1777:2;1769:11;;;;;1799:6;;-1:-1:-1;1196:615:15;;-1:-1:-1;;;;1196:615:15:o;1816:254::-;1884:6;1892;1945:2;1933:9;1924:7;1920:23;1916:32;1913:52;;;1961:1;1958;1951:12;1913:52;1997:9;1984:23;1974:33;;2026:38;2060:2;2049:9;2045:18;2026:38;:::i;:::-;2016:48;;1816:254;;;;;:::o;2075:184::-;2127:77;2124:1;2117:88;2224:4;2221:1;2214:15;2248:4;2245:1;2238:15;2264:293;2344:1;2337:5;2334:12;2324:200;;2380:77;2377:1;2370:88;2481:4;2478:1;2471:15;2509:4;2506:1;2499:15;2324:200;2533:18;;2264:293::o;2562:357::-;2756:2;2741:18;;2768:43;2745:9;2793:6;2768:43;:::i;:::-;2847:6;2842:2;2831:9;2827:18;2820:34;2904:6;2897:14;2890:22;2885:2;2874:9;2870:18;2863:50;2562:357;;;;;;:::o;3185:248::-;3253:6;3261;3314:2;3302:9;3293:7;3289:23;3285:32;3282:52;;;3330:1;3327;3320:12;3282:52;-1:-1:-1;;3353:23:15;;;3423:2;3408:18;;;3395:32;;-1:-1:-1;3185:248:15:o;4568:322::-;4645:6;4653;4661;4714:2;4702:9;4693:7;4689:23;4685:32;4682:52;;;4730:1;4727;4720:12;4682:52;4753:29;4772:9;4753:29;:::i;:::-;4743:39;4829:2;4814:18;;4801:32;;-1:-1:-1;4880:2:15;4865:18;;;4852:32;;4568:322;-1:-1:-1;;;4568:322:15:o;4895:1502::-;5224:2;5276:21;;;5346:13;;5249:18;;;5368:22;;;5195:4;;5224:2;5444:4;;5421:3;5406:19;;;5471:15;;;5195:4;5514:169;5528:6;5525:1;5522:13;5514:169;;;5589:13;;5577:26;;5623:12;;;;5658:15;;;;5550:1;5543:9;5514:169;;;-1:-1:-1;;;5719:19:15;;;5699:18;;;5692:47;5789:13;;5811:21;;;5887:15;;;;5850:12;;;5922:1;5932:392;5948:8;5943:3;5940:17;5932:392;;;6019:8;6013:15;6041:42;6077:5;6072:2;6066:9;6041:42;:::i;:::-;6125:11;;;6119:18;6103:14;;;6096:42;6161:4;6221:11;;;6215:18;6208:26;6201:34;6185:14;;;6178:58;6297:17;;;;6258:14;;;;5976:1;5967:11;5932:392;;;5936:3;;6341:5;6333:13;;;;;;6384:6;6377:4;6366:9;6362:20;6355:36;4895:1502;;;;;;:::o;6402:254::-;6470:6;6478;6531:2;6519:9;6510:7;6506:23;6502:32;6499:52;;;6547:1;6544;6537:12;6499:52;6570:29;6589:9;6570:29;:::i;:::-;6560:39;6646:2;6631:18;;;;6618:32;;-1:-1:-1;;;6402:254:15:o;10556:184::-;10608:77;10605:1;10598:88;10705:4;10702:1;10695:15;10729:4;10726:1;10719:15;10745:125;10810:9;;;10831:10;;;10828:36;;;10844:18;;:::i;11620:184::-;11672:77;11669:1;11662:88;11769:4;11766:1;11759:15;11793:4;11790:1;11783:15;12858:168;12931:9;;;12962;;12979:15;;;12973:22;;12959:37;12949:71;;13000:18;;:::i;13031:274::-;13071:1;13097;13087:189;;13132:77;13129:1;13122:88;13233:4;13230:1;13223:15;13261:4;13258:1;13251:15;13087:189;-1:-1:-1;13290:9:15;;13031:274::o;14724:179::-;14802:13;;14855:22;14844:34;;14834:45;;14824:73;;14893:1;14890;14883:12;14908:473;15011:6;15019;15027;15035;15043;15096:3;15084:9;15075:7;15071:23;15067:33;15064:53;;;15113:1;15110;15103:12;15064:53;15136:39;15165:9;15136:39;:::i;:::-;15126:49;;15215:2;15204:9;15200:18;15194:25;15184:35;;15259:2;15248:9;15244:18;15238:25;15228:35;;15303:2;15292:9;15288:18;15282:25;15272:35;;15326:49;15370:3;15359:9;15355:19;15326:49;:::i;:::-;15316:59;;14908:473;;;;;;;;:::o;15865:128::-;15932:9;;;15953:11;;;15950:37;;;15967:18;;:::i;17019:184::-;17071:77;17068:1;17061:88;17168:4;17165:1;17158:15;17192:4;17189:1;17182:15;23728:412;23857:3;23895:6;23889:13;23920:1;23930:129;23944:6;23941:1;23938:13;23930:129;;;24042:4;24026:14;;;24022:25;;24016:32;24003:11;;;23996:53;23959:12;23930:129;;;-1:-1:-1;24114:1:15;24078:16;;24103:13;;;-1:-1:-1;24078:16:15;23728:412;-1:-1:-1;23728:412:15:o;24145:277::-;24212:6;24265:2;24253:9;24244:7;24240:23;24236:32;24233:52;;;24281:1;24278;24271:12;24233:52;24313:9;24307:16;24366:5;24359:13;24352:21;24345:5;24342:32;24332:60;;24388:1;24385;24378:12
Swarm Source
ipfs://2200b1b9aa716e5236fcf49394373088cebe8a5ee5cbabac29d062ce75d509fa
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$57,250.13
Net Worth in ETH
19.366508
Token Allocations
ETH
100.00%
POL
0.00%
Multichain Portfolio | 35 Chains
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.