Latest 25 from a total of 2,626 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Claim Earnings | 16633282 | 1108 days ago | IN | 0 ETH | 0.00304145 | ||||
| Claim All Earnin... | 15345963 | 1292 days ago | IN | 0 ETH | 0.00097409 | ||||
| Claim Earnings | 15345956 | 1292 days ago | IN | 0 ETH | 0.00178237 | ||||
| Claim All Earnin... | 15345945 | 1292 days ago | IN | 0 ETH | 0.0011909 | ||||
| Claim Earnings | 15345870 | 1292 days ago | IN | 0 ETH | 0.00209531 | ||||
| Claim Earnings | 15345819 | 1292 days ago | IN | 0 ETH | 0.00288681 | ||||
| Create Node | 15345797 | 1292 days ago | IN | 0 ETH | 0.00577179 | ||||
| Claim All Earnin... | 15345360 | 1292 days ago | IN | 0 ETH | 0.00122092 | ||||
| Claim All Earnin... | 15345315 | 1292 days ago | IN | 0 ETH | 0.00091106 | ||||
| Claim All Earnin... | 15345275 | 1292 days ago | IN | 0 ETH | 0.00135037 | ||||
| Create Node | 15345264 | 1292 days ago | IN | 0 ETH | 0.00278109 | ||||
| Update Daily Rew... | 15345258 | 1292 days ago | IN | 0 ETH | 0.0003597 | ||||
| Create Node | 15345253 | 1292 days ago | IN | 0 ETH | 0.00256281 | ||||
| Update Node Cost | 15345231 | 1292 days ago | IN | 0 ETH | 0.00036921 | ||||
| Update Daily Rew... | 15345225 | 1292 days ago | IN | 0 ETH | 0.00036987 | ||||
| Set Nodes Paused | 15345225 | 1292 days ago | IN | 0 ETH | 0.00031299 | ||||
| Set Claim Fee | 15345220 | 1292 days ago | IN | 0 ETH | 0.00029999 | ||||
| Set LP Address | 15345219 | 1292 days ago | IN | 0 ETH | 0.00025179 | ||||
| Update Daily Rew... | 15345219 | 1292 days ago | IN | 0 ETH | 0.00048784 | ||||
| Create Node | 14941478 | 1358 days ago | IN | 0 ETH | 0.00073254 | ||||
| Set LP Address | 14842239 | 1374 days ago | IN | 0 ETH | 0.00082722 | ||||
| Transfer Ownersh... | 14711612 | 1395 days ago | IN | 0 ETH | 0.00163083 | ||||
| Set Nodes Paused | 14656338 | 1404 days ago | IN | 0 ETH | 0.00160629 | ||||
| Claim All Earnin... | 14645277 | 1406 days ago | IN | 0 ETH | 0.00644157 | ||||
| Claim All Earnin... | 14618439 | 1410 days ago | IN | 0 ETH | 0.02897451 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ParmaNodes
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./ERC20.sol";
import "./Ownable.sol";
import "./SafeMath.sol";
/*
@Parma Token
- Website: https://parmatoken.com/
- Telegram: https://t.me/ParmaToken
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@@ @@@@@ @@@@@@@@ @@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@ @@ ,,,,, @@ @@@@@@@@@@@@@@@ @@ ,,,,, @@ @@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ @@ ,,,,,,,,, @@@% ,@@@ ,,,,,,,,, @@ @@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ @ ,,,,,,,,,,, @@@@@ @@@@@@@ @@@@@@,,,,,,,,,,, @ @@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ @ ,,,,,,,,,,, @@( *@@ ,,,,,,,,,,, @ @@@@@@@@@@@@@@
@@@@@@@@@@@@@ @@@ ,,,,,,,,@@ @@,,,,,,,, @@@ @@@@@@@@@@@@
@@@@@@@@@@@ &@@ @@ ,,,, @ @ ,,,, @@ @@# @@@@@@@@@@
@@@@@@@@@@ @@ @@@ @ @ @@@ @@ @@@@@@@@@
@@@@@@@@ @@ @ @ @@ @@@@@@@
@@@@@@@ @@ @ @ @@ @@@@@@
@@@@@@ @@ @@ @@@ @@@@ @@ @@ @@@@@
@@@@@@ @@ @@ @@@@@ @@@@ @@ @@ @@@@@
@@@@@ @@ @ @@ @@ @ @@ @@@@
@@@@@ @ @@ @@ @ @@@@
@@@@@ %@ @ &@@@ @@,,,,,@@ @@@@ @ @, @@@@
@@@@@ .@ #@@@@@@@ @@ @@@@ @*,,,@@ @@@% @@/@@@@@@@ @ @@@@
@@@@@ @ @@@@@@@@ @@.....@@@ @ @@@@
@@@@@ @@ @@@ @@, @@@......,,@.....@@@@@ @@ @@@@
@@@@@@ @, @@......................@@ &@ @@@@@
@@@@@@@ @ @@@.............................@ @ @@@@@@
@@@@@@@@ @. @@...,@*..............................@ @@ @@@@@@@
@@@@@@@@@ @@ @@.......................@@@@@@,,,,,,,,,,@@@ @@@@@@@@
@@@@@@@@@@ @@ @@.......&@@@@@(,,,,,,,,,,,,,,,,,,,,,,,@*@,,,,,@ @@@@@@@@@
@@@@@@@@@@@@ .@@ @,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,**%,,@@ @@@@@@@@@@
@@@@@@@@@@@@@@ @@ @@,,,,@**,,,,,,,,,,,,,,,,,,,,@******@,,,,,,@ @@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@ @@@@,,,,,,,,,,,@**@,,,,,,,,,,,*********,,,,,,@@ @@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@ @@,,,,,,,,,,,,,,,,,,,,,,,,,,,,@****@,,,,,,,,,@ @@@@@@@@@@
@@@@@@@@@@@@@@@@@@ @@,,,,,,,,,,,,,,,,,,,,,,,,,,@*,,,,,,,,,,,,(,,,,@ @@@@@@@@@@
@@@@@@@@@@@@@@@@@@ @,,,,@,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@ @@@@@@@@@@
@@@@@@@@@@@@@@@@@@ @,,,,,,,,,,,,,,,@@ @&,,,,,,,,@@@@@@@@@@@ @@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@ @@,,,,,,,,@@@@@@ @@@@ @@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@ *@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
*/
contract ParmaNodes is Ownable {
using SafeMath for uint256;
uint256 public nodesLimit;
uint256 public nodeCost;
uint256 public claimFee;
address private lpAddress;
bool public nodesPaused = false;
uint256 public totalNodes;
IERC20 public parmaToken = IERC20(0x1A2933fbA0c6e959c9A2D2c933f3f8AD4aa9f06e);
Reward public dailyReward;
struct User {
address addr;
uint256 created;
uint256 lastCreated;
}
struct Node {
uint256 id;
string name;
string description;
uint256 created;
uint256 timestamp;
uint256 reward;
uint256 claimed;
}
struct Reward {
uint256 reward;
uint256 updated;
}
mapping(address => mapping(uint256 => Node)) public _nodes;
mapping(address => User) public _user;
constructor() {
nodesLimit = 100;
nodeCost = uint256(1000000).mul(1e18);
dailyReward = Reward({reward: uint256(33333).mul(1e18), updated: block.timestamp});
claimFee = 5;
lpAddress = address(0x8cda2065f49be9A1DEd69B7c7D60Db8759D22322);
}
modifier nodeExists(address creator, uint256 nodeId) {
require(_nodes[creator][nodeId].id > 0, "This node does not exists.");
_;
}
function nodeClaimed(address creator, uint256 nodeId) public view nodeExists(creator, nodeId) returns (uint256) {
return _nodes[creator][nodeId].claimed;
}
function userNode(address creator, uint256 nodeId) public view nodeExists(creator, nodeId) returns (Node memory) {
return _nodes[creator][nodeId];
}
function rewardCheck(address creator, uint256 nodeId) public view nodeExists(creator, nodeId) returns (bool) {
return _nodes[creator][nodeId].reward == dailyReward.reward;
}
function nodeEarned(address creator, uint256 nodeId) public view nodeExists(creator, nodeId) returns (uint256) {
Node memory node = _nodes[creator][nodeId];
uint256 nodeStart = node.timestamp;
uint256 reward = node.reward;
uint256 nodeAge = block.timestamp / 1 seconds - nodeStart / 1 seconds;
if (dailyReward.reward < reward) {
uint256 updatedTime = block.timestamp / 1 seconds - dailyReward.updated / 1 seconds;
nodeAge -= updatedTime;
}
uint256 rewardPerSec = reward.div(86400);
uint256 earnedPerSec = rewardPerSec.mul(nodeAge);
return earnedPerSec;
}
function createNode(string memory name, string memory desc, uint256 amount) external {
require(!nodesPaused, "Nodes are currently paused.");
if (_user[msg.sender].addr != msg.sender) {
_user[msg.sender] = User({
addr: msg.sender,
created: 0,
lastCreated: 0
});
}
uint256 totalCost;
for (uint256 i = 0; i < amount; i++) {
require(_nodes[msg.sender][nodesLimit].id == 0, "You cannot create any more nodes.");
uint256 nodeId = (_user[msg.sender].lastCreated).add(1);
_nodes[msg.sender][nodeId] = Node({
id: nodeId,
name: name,
description: desc,
created: block.timestamp,
timestamp: block.timestamp,
reward: dailyReward.reward,
claimed: 0
});
totalCost += nodeCost;
totalNodes += 1;
_user[msg.sender].created += 1;
_user[msg.sender].lastCreated = nodeId;
}
require(parmaToken.balanceOf(msg.sender) > totalCost, "Insufficient Funds in wallet");
uint256 lpFee = totalCost.mul(10).div(100);
parmaToken.transferFrom(msg.sender, address(this), totalCost.sub(lpFee));
parmaToken.transferFrom(msg.sender, lpAddress, lpFee);
}
function claimEarnings(uint256 nodeId) external nodeExists(msg.sender, nodeId) {
require(!nodesPaused, "Nodes are currently paused.");
uint256 reward = nodeEarned(msg.sender, nodeId);
uint256 feeAmt = reward.mul(claimFee).div(100);
reward -= feeAmt;
parmaToken.transfer(msg.sender, reward);
parmaToken.transfer(lpAddress, feeAmt);
_nodes[msg.sender][nodeId].claimed += reward;
_nodes[msg.sender][nodeId].reward = dailyReward.reward;
_nodes[msg.sender][nodeId].timestamp = block.timestamp;
}
function claimAllEarnings() external {
require(!nodesPaused, "Nodes are currently paused.");
uint256 totalClaim;
for (uint256 i = 1; i < nodesLimit+1; i++) {
if (_nodes[msg.sender][i].id == 0) break;
uint256 reward = nodeEarned(msg.sender, i);
_nodes[msg.sender][i].claimed += reward;
_nodes[msg.sender][i].reward = dailyReward.reward;
_nodes[msg.sender][i].timestamp = block.timestamp;
totalClaim += reward;
}
uint256 feeAmt = totalClaim.mul(claimFee).div(100);
totalClaim -= feeAmt;
parmaToken.transfer(msg.sender, totalClaim);
parmaToken.transfer(lpAddress, feeAmt);
}
function setNodesLimit(uint256 limit) external onlyOwner {
nodesLimit = limit;
}
function updateDailyReward(uint256 reward) external onlyOwner {
dailyReward.reward = reward.mul(1e18);
dailyReward.updated = block.timestamp;
}
function updateNodeCost(uint256 cost) external onlyOwner {
nodeCost = cost.mul(1e18);
}
function setClaimFee(uint256 fee) external onlyOwner {
claimFee = fee;
}
function setNodesPaused(bool onoff) external onlyOwner {
nodesPaused = onoff;
}
function setLPAddress(address addr) external onlyOwner {
lpAddress = addr;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, _allowances[owner][spender] + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = _allowances[owner][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
}
_balances[to] += amount;
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Spend `amount` form the allowance of `owner` toward `spender`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
import "./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() {
_transferOwnership(_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 {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_nodes","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint256","name":"created","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_user","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"created","type":"uint256"},{"internalType":"uint256","name":"lastCreated","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllEarnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nodeId","type":"uint256"}],"name":"claimEarnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"desc","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"createNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyReward","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"updated","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"nodeId","type":"uint256"}],"name":"nodeClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodeCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"nodeId","type":"uint256"}],"name":"nodeEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodesLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodesPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parmaToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"nodeId","type":"uint256"}],"name":"rewardCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setClaimFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setLPAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setNodesLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setNodesPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalNodes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"name":"updateDailyReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"updateNodeCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"nodeId","type":"uint256"}],"name":"userNode","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint256","name":"created","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"internalType":"struct ParmaNodes.Node","name":"","type":"tuple"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526000600460146101000a81548160ff021916908315150217905550731a2933fba0c6e959c9a2d2c933f3f8ad4aa9f06e600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008157600080fd5b50620000a2620000966200018960201b60201c565b6200019160201b60201c565b6064600181905550620000cf670de0b6b3a7640000620f42406200025560201b6200226b1790919060201c565b600281905550604051806040016040528062000104670de0b6b3a76400006182356200025560201b6200226b1790919060201c565b815260200142815250600760008201518160000155602082015181600101559050506005600381905550738cda2065f49be9a1ded69b7c7d60db8759d22322600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000307565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836200026591906200026d565b905092915050565b60006200027a82620002ce565b91506200028783620002ce565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620002c357620002c2620002d8565b5b828202905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b61315380620003176000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80638c8c65ed116100de578063bc5a68ca11610097578063cf80ac1611610071578063cf80ac1614610431578063e19ef2361461044d578063f2fde38b14610469578063fe73c4971461048557610173565b8063bc5a68ca146103c2578063c930167b146103e0578063c964ad451461041257610173565b80638c8c65ed146102fe5780638da5cb5b1461031a5780639592d4241461033857806399d32fc414610356578063b8e640c014610374578063ba26dd25146103a457610173565b80635284027911610130578063528402791461025257806355f918b11461026e578063715018a61461029e578063720da58a146102a85780637a351a1d146102d85780638612ccf8146102f457610173565b8063128b4e6e146101785780631f4a16cf146101ae57806324b1babf146101de57806327bee747146101fa5780632e75ab501461021857806331deb7e114610234575b600080fd5b610192600480360381019061018d9190612575565b6104a1565b6040516101a59796959493929190612b0b565b60405180910390f35b6101c860048036038101906101c39190612575565b610600565b6040516101d59190612ace565b60405180910390f35b6101f860048036038101906101f3919061269a565b61085b565b005b610202610c33565b60405161020f9190612af0565b60405180910390f35b610232600480360381019061022d919061269a565b610c39565b005b61023c610cbf565b6040516102499190612af0565b60405180910390f35b61026c6004803603810190610267919061269a565b610cc5565b005b61028860048036038101906102839190612575565b610d4b565b6040516102959190612af0565b60405180910390f35b6102a6610e43565b005b6102c260048036038101906102bd9190612575565b610ecb565b6040516102cf9190612af0565b60405180910390f35b6102f260048036038101906102ed9190612548565b6111e0565b005b6102fc6112a0565b005b6103186004803603810190610313919061260f565b61167e565b005b610322611dc4565b60405161032f9190612926565b60405180910390f35b610340611ded565b60405161034d9190612af0565b60405180910390f35b61035e611df3565b60405161036b9190612af0565b60405180910390f35b61038e60048036038101906103899190612575565b611df9565b60405161039b91906129d8565b60405180910390f35b6103ac611ef8565b6040516103b991906129f3565b60405180910390f35b6103ca611f1e565b6040516103d791906129d8565b60405180910390f35b6103fa60048036038101906103f59190612548565b611f31565b604051610409939291906129a1565b60405180910390f35b61041a611f7b565b604051610428929190612b88565b60405180910390f35b61044b600480360381019061044691906125b5565b611f8d565b005b6104676004803603810190610462919061269a565b612026565b005b610483600480360381019061047e9190612548565b6120d3565b005b61049f600480360381019061049a919061269a565b6121cb565b005b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010180546104d790612e09565b80601f016020809104026020016040519081016040528092919081815260200182805461050390612e09565b80156105505780601f1061052557610100808354040283529160200191610550565b820191906000526020600020905b81548152906001019060200180831161053357829003601f168201915b50505050509080600201805461056590612e09565b80601f016020809104026020016040519081016040528092919081815260200182805461059190612e09565b80156105de5780601f106105b3576101008083540402835291602001916105de565b820191906000526020600020905b8154815290600101906020018083116105c157829003601f168201915b5050505050908060030154908060040154908060050154908060060154905087565b61060861238f565b82826000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000154116106a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069790612aae565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206040518060e00160405290816000820154815260200160018201805461071590612e09565b80601f016020809104026020016040519081016040528092919081815260200182805461074190612e09565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b505050505081526020016002820180546107a790612e09565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390612e09565b80156108205780601f106107f557610100808354040283529160200191610820565b820191906000526020600020905b81548152906001019060200180831161080357829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815250509250505092915050565b33816000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000154116108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea90612aae565b60405180910390fd5b600460149054906101000a900460ff1615610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093a90612a8e565b60405180910390fd5b600061094f3385610ecb565b9050600061097b606461096d6003548561226b90919063ffffffff16565b61228190919063ffffffff16565b905080826109899190612d15565b9150600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016109e8929190612978565b602060405180830381600087803b158015610a0257600080fd5b505af1158015610a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3a91906125e2565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610aba929190612978565b602060405180830381600087803b158015610ad457600080fd5b505af1158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c91906125e2565b5081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000206006016000828254610b709190612c34565b92505081905550600760000154600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000206005018190555042600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020600401819055505050505050565b60015481565b610c41612297565b73ffffffffffffffffffffffffffffffffffffffff16610c5f611dc4565b73ffffffffffffffffffffffffffffffffffffffff1614610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac90612a6e565b60405180910390fd5b8060038190555050565b60025481565b610ccd612297565b73ffffffffffffffffffffffffffffffffffffffff16610ceb611dc4565b73ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890612a6e565b60405180910390fd5b8060018190555050565b600082826000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000015411610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90612aae565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020600601549250505092915050565b610e4b612297565b73ffffffffffffffffffffffffffffffffffffffff16610e69611dc4565b73ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690612a6e565b60405180910390fd5b610ec9600061229f565b565b600082826000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000015411610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90612aae565b60405180910390fd5b6000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206040518060e001604052908160008201548152602001600182018054610fdc90612e09565b80601f016020809104026020016040519081016040528092919081815260200182805461100890612e09565b80156110555780601f1061102a57610100808354040283529160200191611055565b820191906000526020600020905b81548152906001019060200180831161103857829003601f168201915b5050505050815260200160028201805461106e90612e09565b80601f016020809104026020016040519081016040528092919081815260200182805461109a90612e09565b80156110e75780601f106110bc576101008083540402835291602001916110e7565b820191906000526020600020905b8154815290600101906020018083116110ca57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481525050905060008160800151905060008260a001519050600060018361113b9190612c8a565b6001426111489190612c8a565b6111529190612d15565b905081600760000154101561119e57600060016007600101546111759190612c8a565b6001426111829190612c8a565b61118c9190612d15565b9050808261119a9190612d15565b9150505b60006111b6620151808461228190919063ffffffff16565b905060006111cd838361226b90919063ffffffff16565b9050809850505050505050505092915050565b6111e8612297565b73ffffffffffffffffffffffffffffffffffffffff16611206611dc4565b73ffffffffffffffffffffffffffffffffffffffff161461125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125390612a6e565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460149054906101000a900460ff16156112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790612a8e565b60405180910390fd5b600080600190505b600180546113069190612c34565b8110156114bd576000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000154141561136e576114bd565b600061137a3383610ecb565b905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060060160008282546113df9190612c34565b92505081905550600760000154600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206005018190555042600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206004018190555080836114a79190612c34565b92505080806114b590612e6c565b9150506112f8565b5060006114e860646114da6003548561226b90919063ffffffff16565b61228190919063ffffffff16565b905080826114f69190612d15565b9150600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611555929190612978565b602060405180830381600087803b15801561156f57600080fd5b505af1158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a791906125e2565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611627929190612978565b602060405180830381600087803b15801561164157600080fd5b505af1158015611655573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167991906125e2565b505050565b600460149054906101000a900460ff16156116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590612a8e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118345760405180606001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815250600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201559050505b600080600090505b82811015611b0d576000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600154815260200190815260200160002060000154146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390612a4e565b60405180910390fd5b60006119346001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461236390919063ffffffff16565b90506040518060e0016040528082815260200187815260200186815260200142815260200142815260200160076000015481526020016000815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000820151816000015560208201518160010190805190602001906119e59291906123cc565b506040820151816002019080519060200190611a029291906123cc565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505060025483611a3c9190612c34565b9250600160056000828254611a519190612c34565b925050819055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254611aab9190612c34565b9250508190555080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550508080611b0590612e6c565b91505061183c565b5080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611b6a9190612926565b60206040518083038186803b158015611b8257600080fd5b505afa158015611b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bba91906126c7565b11611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190612a2e565b60405180910390fd5b6000611c236064611c15600a8561226b90919063ffffffff16565b61228190919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330611c78858761237990919063ffffffff16565b6040518463ffffffff1660e01b8152600401611c9693929190612941565b602060405180830381600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce891906125e2565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611d6a93929190612941565b602060405180830381600087803b158015611d8457600080fd5b505af1158015611d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbc91906125e2565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60055481565b60035481565b600082826000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000015411611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90612aae565b60405180910390fd5b600760000154600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060050154149250505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460149054906101000a900460ff1681565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b60078060000154908060010154905082565b611f95612297565b73ffffffffffffffffffffffffffffffffffffffff16611fb3611dc4565b73ffffffffffffffffffffffffffffffffffffffff1614612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090612a6e565b60405180910390fd5b80600460146101000a81548160ff02191690831515021790555050565b61202e612297565b73ffffffffffffffffffffffffffffffffffffffff1661204c611dc4565b73ffffffffffffffffffffffffffffffffffffffff16146120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990612a6e565b60405180910390fd5b6120bd670de0b6b3a76400008261226b90919063ffffffff16565b6007600001819055504260076001018190555050565b6120db612297565b73ffffffffffffffffffffffffffffffffffffffff166120f9611dc4565b73ffffffffffffffffffffffffffffffffffffffff161461214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690612a6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b690612a0e565b60405180910390fd5b6121c88161229f565b50565b6121d3612297565b73ffffffffffffffffffffffffffffffffffffffff166121f1611dc4565b73ffffffffffffffffffffffffffffffffffffffff1614612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90612a6e565b60405180910390fd5b612262670de0b6b3a76400008261226b90919063ffffffff16565b60028190555050565b600081836122799190612cbb565b905092915050565b6000818361228f9190612c8a565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836123719190612c34565b905092915050565b600081836123879190612d15565b905092915050565b6040518060e00160405280600081526020016060815260200160608152602001600081526020016000815260200160008152602001600081525090565b8280546123d890612e09565b90600052602060002090601f0160209004810192826123fa5760008555612441565b82601f1061241357805160ff1916838001178555612441565b82800160010185558215612441579182015b82811115612440578251825591602001919060010190612425565b5b50905061244e9190612452565b5090565b5b8082111561246b576000816000905550600101612453565b5090565b600061248261247d84612bd6565b612bb1565b90508281526020810184848401111561249e5761249d612f76565b5b6124a9848285612dc7565b509392505050565b6000813590506124c0816130d8565b92915050565b6000813590506124d5816130ef565b92915050565b6000815190506124ea816130ef565b92915050565b600082601f83011261250557612504612f71565b5b813561251584826020860161246f565b91505092915050565b60008135905061252d81613106565b92915050565b60008151905061254281613106565b92915050565b60006020828403121561255e5761255d612f80565b5b600061256c848285016124b1565b91505092915050565b6000806040838503121561258c5761258b612f80565b5b600061259a858286016124b1565b92505060206125ab8582860161251e565b9150509250929050565b6000602082840312156125cb576125ca612f80565b5b60006125d9848285016124c6565b91505092915050565b6000602082840312156125f8576125f7612f80565b5b6000612606848285016124db565b91505092915050565b60008060006060848603121561262857612627612f80565b5b600084013567ffffffffffffffff81111561264657612645612f7b565b5b612652868287016124f0565b935050602084013567ffffffffffffffff81111561267357612672612f7b565b5b61267f868287016124f0565b92505060406126908682870161251e565b9150509250925092565b6000602082840312156126b0576126af612f80565b5b60006126be8482850161251e565b91505092915050565b6000602082840312156126dd576126dc612f80565b5b60006126eb84828501612533565b91505092915050565b6126fd81612d49565b82525050565b61270c81612d5b565b82525050565b61271b81612d91565b82525050565b600061272c82612c07565b6127368185612c12565b9350612746818560208601612dd6565b61274f81612f85565b840191505092915050565b600061276582612c07565b61276f8185612c23565b935061277f818560208601612dd6565b61278881612f85565b840191505092915050565b60006127a0602683612c23565b91506127ab82612f96565b604082019050919050565b60006127c3601c83612c23565b91506127ce82612fe5565b602082019050919050565b60006127e6602183612c23565b91506127f18261300e565b604082019050919050565b6000612809602083612c23565b91506128148261305d565b602082019050919050565b600061282c601b83612c23565b915061283782613086565b602082019050919050565b600061284f601a83612c23565b915061285a826130af565b602082019050919050565b600060e08301600083015161287d6000860182612908565b50602083015184820360208601526128958282612721565b915050604083015184820360408601526128af8282612721565b91505060608301516128c46060860182612908565b5060808301516128d76080860182612908565b5060a08301516128ea60a0860182612908565b5060c08301516128fd60c0860182612908565b508091505092915050565b61291181612d87565b82525050565b61292081612d87565b82525050565b600060208201905061293b60008301846126f4565b92915050565b600060608201905061295660008301866126f4565b61296360208301856126f4565b6129706040830184612917565b949350505050565b600060408201905061298d60008301856126f4565b61299a6020830184612917565b9392505050565b60006060820190506129b660008301866126f4565b6129c36020830185612917565b6129d06040830184612917565b949350505050565b60006020820190506129ed6000830184612703565b92915050565b6000602082019050612a086000830184612712565b92915050565b60006020820190508181036000830152612a2781612793565b9050919050565b60006020820190508181036000830152612a47816127b6565b9050919050565b60006020820190508181036000830152612a67816127d9565b9050919050565b60006020820190508181036000830152612a87816127fc565b9050919050565b60006020820190508181036000830152612aa78161281f565b9050919050565b60006020820190508181036000830152612ac781612842565b9050919050565b60006020820190508181036000830152612ae88184612865565b905092915050565b6000602082019050612b056000830184612917565b92915050565b600060e082019050612b20600083018a612917565b8181036020830152612b32818961275a565b90508181036040830152612b46818861275a565b9050612b556060830187612917565b612b626080830186612917565b612b6f60a0830185612917565b612b7c60c0830184612917565b98975050505050505050565b6000604082019050612b9d6000830185612917565b612baa6020830184612917565b9392505050565b6000612bbb612bcc565b9050612bc78282612e3b565b919050565b6000604051905090565b600067ffffffffffffffff821115612bf157612bf0612f42565b5b612bfa82612f85565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612c3f82612d87565b9150612c4a83612d87565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c7f57612c7e612eb5565b5b828201905092915050565b6000612c9582612d87565b9150612ca083612d87565b925082612cb057612caf612ee4565b5b828204905092915050565b6000612cc682612d87565b9150612cd183612d87565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d0a57612d09612eb5565b5b828202905092915050565b6000612d2082612d87565b9150612d2b83612d87565b925082821015612d3e57612d3d612eb5565b5b828203905092915050565b6000612d5482612d67565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612d9c82612da3565b9050919050565b6000612dae82612db5565b9050919050565b6000612dc082612d67565b9050919050565b82818337600083830152505050565b60005b83811015612df4578082015181840152602081019050612dd9565b83811115612e03576000848401525b50505050565b60006002820490506001821680612e2157607f821691505b60208210811415612e3557612e34612f13565b5b50919050565b612e4482612f85565b810181811067ffffffffffffffff82111715612e6357612e62612f42565b5b80604052505050565b6000612e7782612d87565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612eaa57612ea9612eb5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742046756e647320696e2077616c6c657400000000600082015250565b7f596f752063616e6e6f742063726561746520616e79206d6f7265206e6f64657360008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f646573206172652063757272656e746c79207061757365642e0000000000600082015250565b7f54686973206e6f646520646f6573206e6f74206578697374732e000000000000600082015250565b6130e181612d49565b81146130ec57600080fd5b50565b6130f881612d5b565b811461310357600080fd5b50565b61310f81612d87565b811461311a57600080fd5b5056fea2646970667358221220ccdbb8513c0e421ce63b838e3d0967512105031dd6bbfd2608d36e85f90c8fc064736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c80638c8c65ed116100de578063bc5a68ca11610097578063cf80ac1611610071578063cf80ac1614610431578063e19ef2361461044d578063f2fde38b14610469578063fe73c4971461048557610173565b8063bc5a68ca146103c2578063c930167b146103e0578063c964ad451461041257610173565b80638c8c65ed146102fe5780638da5cb5b1461031a5780639592d4241461033857806399d32fc414610356578063b8e640c014610374578063ba26dd25146103a457610173565b80635284027911610130578063528402791461025257806355f918b11461026e578063715018a61461029e578063720da58a146102a85780637a351a1d146102d85780638612ccf8146102f457610173565b8063128b4e6e146101785780631f4a16cf146101ae57806324b1babf146101de57806327bee747146101fa5780632e75ab501461021857806331deb7e114610234575b600080fd5b610192600480360381019061018d9190612575565b6104a1565b6040516101a59796959493929190612b0b565b60405180910390f35b6101c860048036038101906101c39190612575565b610600565b6040516101d59190612ace565b60405180910390f35b6101f860048036038101906101f3919061269a565b61085b565b005b610202610c33565b60405161020f9190612af0565b60405180910390f35b610232600480360381019061022d919061269a565b610c39565b005b61023c610cbf565b6040516102499190612af0565b60405180910390f35b61026c6004803603810190610267919061269a565b610cc5565b005b61028860048036038101906102839190612575565b610d4b565b6040516102959190612af0565b60405180910390f35b6102a6610e43565b005b6102c260048036038101906102bd9190612575565b610ecb565b6040516102cf9190612af0565b60405180910390f35b6102f260048036038101906102ed9190612548565b6111e0565b005b6102fc6112a0565b005b6103186004803603810190610313919061260f565b61167e565b005b610322611dc4565b60405161032f9190612926565b60405180910390f35b610340611ded565b60405161034d9190612af0565b60405180910390f35b61035e611df3565b60405161036b9190612af0565b60405180910390f35b61038e60048036038101906103899190612575565b611df9565b60405161039b91906129d8565b60405180910390f35b6103ac611ef8565b6040516103b991906129f3565b60405180910390f35b6103ca611f1e565b6040516103d791906129d8565b60405180910390f35b6103fa60048036038101906103f59190612548565b611f31565b604051610409939291906129a1565b60405180910390f35b61041a611f7b565b604051610428929190612b88565b60405180910390f35b61044b600480360381019061044691906125b5565b611f8d565b005b6104676004803603810190610462919061269a565b612026565b005b610483600480360381019061047e9190612548565b6120d3565b005b61049f600480360381019061049a919061269a565b6121cb565b005b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010180546104d790612e09565b80601f016020809104026020016040519081016040528092919081815260200182805461050390612e09565b80156105505780601f1061052557610100808354040283529160200191610550565b820191906000526020600020905b81548152906001019060200180831161053357829003601f168201915b50505050509080600201805461056590612e09565b80601f016020809104026020016040519081016040528092919081815260200182805461059190612e09565b80156105de5780601f106105b3576101008083540402835291602001916105de565b820191906000526020600020905b8154815290600101906020018083116105c157829003601f168201915b5050505050908060030154908060040154908060050154908060060154905087565b61060861238f565b82826000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000154116106a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069790612aae565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206040518060e00160405290816000820154815260200160018201805461071590612e09565b80601f016020809104026020016040519081016040528092919081815260200182805461074190612e09565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b505050505081526020016002820180546107a790612e09565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390612e09565b80156108205780601f106107f557610100808354040283529160200191610820565b820191906000526020600020905b81548152906001019060200180831161080357829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815250509250505092915050565b33816000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000154116108f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ea90612aae565b60405180910390fd5b600460149054906101000a900460ff1615610943576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093a90612a8e565b60405180910390fd5b600061094f3385610ecb565b9050600061097b606461096d6003548561226b90919063ffffffff16565b61228190919063ffffffff16565b905080826109899190612d15565b9150600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016109e8929190612978565b602060405180830381600087803b158015610a0257600080fd5b505af1158015610a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3a91906125e2565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610aba929190612978565b602060405180830381600087803b158015610ad457600080fd5b505af1158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c91906125e2565b5081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000206006016000828254610b709190612c34565b92505081905550600760000154600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008781526020019081526020016000206005018190555042600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878152602001908152602001600020600401819055505050505050565b60015481565b610c41612297565b73ffffffffffffffffffffffffffffffffffffffff16610c5f611dc4565b73ffffffffffffffffffffffffffffffffffffffff1614610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac90612a6e565b60405180910390fd5b8060038190555050565b60025481565b610ccd612297565b73ffffffffffffffffffffffffffffffffffffffff16610ceb611dc4565b73ffffffffffffffffffffffffffffffffffffffff1614610d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3890612a6e565b60405180910390fd5b8060018190555050565b600082826000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000015411610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90612aae565b60405180910390fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020600601549250505092915050565b610e4b612297565b73ffffffffffffffffffffffffffffffffffffffff16610e69611dc4565b73ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb690612a6e565b60405180910390fd5b610ec9600061229f565b565b600082826000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000015411610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90612aae565b60405180910390fd5b6000600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206040518060e001604052908160008201548152602001600182018054610fdc90612e09565b80601f016020809104026020016040519081016040528092919081815260200182805461100890612e09565b80156110555780601f1061102a57610100808354040283529160200191611055565b820191906000526020600020905b81548152906001019060200180831161103857829003601f168201915b5050505050815260200160028201805461106e90612e09565b80601f016020809104026020016040519081016040528092919081815260200182805461109a90612e09565b80156110e75780601f106110bc576101008083540402835291602001916110e7565b820191906000526020600020905b8154815290600101906020018083116110ca57829003601f168201915b50505050508152602001600382015481526020016004820154815260200160058201548152602001600682015481525050905060008160800151905060008260a001519050600060018361113b9190612c8a565b6001426111489190612c8a565b6111529190612d15565b905081600760000154101561119e57600060016007600101546111759190612c8a565b6001426111829190612c8a565b61118c9190612d15565b9050808261119a9190612d15565b9150505b60006111b6620151808461228190919063ffffffff16565b905060006111cd838361226b90919063ffffffff16565b9050809850505050505050505092915050565b6111e8612297565b73ffffffffffffffffffffffffffffffffffffffff16611206611dc4565b73ffffffffffffffffffffffffffffffffffffffff161461125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125390612a6e565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460149054906101000a900460ff16156112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790612a8e565b60405180910390fd5b600080600190505b600180546113069190612c34565b8110156114bd576000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060000154141561136e576114bd565b600061137a3383610ecb565b905080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060060160008282546113df9190612c34565b92505081905550600760000154600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206005018190555042600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000206004018190555080836114a79190612c34565b92505080806114b590612e6c565b9150506112f8565b5060006114e860646114da6003548561226b90919063ffffffff16565b61228190919063ffffffff16565b905080826114f69190612d15565b9150600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611555929190612978565b602060405180830381600087803b15801561156f57600080fd5b505af1158015611583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a791906125e2565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611627929190612978565b602060405180830381600087803b15801561164157600080fd5b505af1158015611655573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167991906125e2565b505050565b600460149054906101000a900460ff16156116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590612a8e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118345760405180606001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815250600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201559050505b600080600090505b82811015611b0d576000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600154815260200190815260200160002060000154146118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390612a4e565b60405180910390fd5b60006119346001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461236390919063ffffffff16565b90506040518060e0016040528082815260200187815260200186815260200142815260200142815260200160076000015481526020016000815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000820151816000015560208201518160010190805190602001906119e59291906123cc565b506040820151816002019080519060200190611a029291906123cc565b50606082015181600301556080820151816004015560a0820151816005015560c0820151816006015590505060025483611a3c9190612c34565b9250600160056000828254611a519190612c34565b925050819055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254611aab9190612c34565b9250508190555080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550508080611b0590612e6c565b91505061183c565b5080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611b6a9190612926565b60206040518083038186803b158015611b8257600080fd5b505afa158015611b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bba91906126c7565b11611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190612a2e565b60405180910390fd5b6000611c236064611c15600a8561226b90919063ffffffff16565b61228190919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330611c78858761237990919063ffffffff16565b6040518463ffffffff1660e01b8152600401611c9693929190612941565b602060405180830381600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce891906125e2565b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611d6a93929190612941565b602060405180830381600087803b158015611d8457600080fd5b505af1158015611d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbc91906125e2565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60055481565b60035481565b600082826000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000015411611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a90612aae565b60405180910390fd5b600760000154600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002060050154149250505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460149054906101000a900460ff1681565b600a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b60078060000154908060010154905082565b611f95612297565b73ffffffffffffffffffffffffffffffffffffffff16611fb3611dc4565b73ffffffffffffffffffffffffffffffffffffffff1614612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090612a6e565b60405180910390fd5b80600460146101000a81548160ff02191690831515021790555050565b61202e612297565b73ffffffffffffffffffffffffffffffffffffffff1661204c611dc4565b73ffffffffffffffffffffffffffffffffffffffff16146120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990612a6e565b60405180910390fd5b6120bd670de0b6b3a76400008261226b90919063ffffffff16565b6007600001819055504260076001018190555050565b6120db612297565b73ffffffffffffffffffffffffffffffffffffffff166120f9611dc4565b73ffffffffffffffffffffffffffffffffffffffff161461214f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214690612a6e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b690612a0e565b60405180910390fd5b6121c88161229f565b50565b6121d3612297565b73ffffffffffffffffffffffffffffffffffffffff166121f1611dc4565b73ffffffffffffffffffffffffffffffffffffffff1614612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90612a6e565b60405180910390fd5b612262670de0b6b3a76400008261226b90919063ffffffff16565b60028190555050565b600081836122799190612cbb565b905092915050565b6000818361228f9190612c8a565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836123719190612c34565b905092915050565b600081836123879190612d15565b905092915050565b6040518060e00160405280600081526020016060815260200160608152602001600081526020016000815260200160008152602001600081525090565b8280546123d890612e09565b90600052602060002090601f0160209004810192826123fa5760008555612441565b82601f1061241357805160ff1916838001178555612441565b82800160010185558215612441579182015b82811115612440578251825591602001919060010190612425565b5b50905061244e9190612452565b5090565b5b8082111561246b576000816000905550600101612453565b5090565b600061248261247d84612bd6565b612bb1565b90508281526020810184848401111561249e5761249d612f76565b5b6124a9848285612dc7565b509392505050565b6000813590506124c0816130d8565b92915050565b6000813590506124d5816130ef565b92915050565b6000815190506124ea816130ef565b92915050565b600082601f83011261250557612504612f71565b5b813561251584826020860161246f565b91505092915050565b60008135905061252d81613106565b92915050565b60008151905061254281613106565b92915050565b60006020828403121561255e5761255d612f80565b5b600061256c848285016124b1565b91505092915050565b6000806040838503121561258c5761258b612f80565b5b600061259a858286016124b1565b92505060206125ab8582860161251e565b9150509250929050565b6000602082840312156125cb576125ca612f80565b5b60006125d9848285016124c6565b91505092915050565b6000602082840312156125f8576125f7612f80565b5b6000612606848285016124db565b91505092915050565b60008060006060848603121561262857612627612f80565b5b600084013567ffffffffffffffff81111561264657612645612f7b565b5b612652868287016124f0565b935050602084013567ffffffffffffffff81111561267357612672612f7b565b5b61267f868287016124f0565b92505060406126908682870161251e565b9150509250925092565b6000602082840312156126b0576126af612f80565b5b60006126be8482850161251e565b91505092915050565b6000602082840312156126dd576126dc612f80565b5b60006126eb84828501612533565b91505092915050565b6126fd81612d49565b82525050565b61270c81612d5b565b82525050565b61271b81612d91565b82525050565b600061272c82612c07565b6127368185612c12565b9350612746818560208601612dd6565b61274f81612f85565b840191505092915050565b600061276582612c07565b61276f8185612c23565b935061277f818560208601612dd6565b61278881612f85565b840191505092915050565b60006127a0602683612c23565b91506127ab82612f96565b604082019050919050565b60006127c3601c83612c23565b91506127ce82612fe5565b602082019050919050565b60006127e6602183612c23565b91506127f18261300e565b604082019050919050565b6000612809602083612c23565b91506128148261305d565b602082019050919050565b600061282c601b83612c23565b915061283782613086565b602082019050919050565b600061284f601a83612c23565b915061285a826130af565b602082019050919050565b600060e08301600083015161287d6000860182612908565b50602083015184820360208601526128958282612721565b915050604083015184820360408601526128af8282612721565b91505060608301516128c46060860182612908565b5060808301516128d76080860182612908565b5060a08301516128ea60a0860182612908565b5060c08301516128fd60c0860182612908565b508091505092915050565b61291181612d87565b82525050565b61292081612d87565b82525050565b600060208201905061293b60008301846126f4565b92915050565b600060608201905061295660008301866126f4565b61296360208301856126f4565b6129706040830184612917565b949350505050565b600060408201905061298d60008301856126f4565b61299a6020830184612917565b9392505050565b60006060820190506129b660008301866126f4565b6129c36020830185612917565b6129d06040830184612917565b949350505050565b60006020820190506129ed6000830184612703565b92915050565b6000602082019050612a086000830184612712565b92915050565b60006020820190508181036000830152612a2781612793565b9050919050565b60006020820190508181036000830152612a47816127b6565b9050919050565b60006020820190508181036000830152612a67816127d9565b9050919050565b60006020820190508181036000830152612a87816127fc565b9050919050565b60006020820190508181036000830152612aa78161281f565b9050919050565b60006020820190508181036000830152612ac781612842565b9050919050565b60006020820190508181036000830152612ae88184612865565b905092915050565b6000602082019050612b056000830184612917565b92915050565b600060e082019050612b20600083018a612917565b8181036020830152612b32818961275a565b90508181036040830152612b46818861275a565b9050612b556060830187612917565b612b626080830186612917565b612b6f60a0830185612917565b612b7c60c0830184612917565b98975050505050505050565b6000604082019050612b9d6000830185612917565b612baa6020830184612917565b9392505050565b6000612bbb612bcc565b9050612bc78282612e3b565b919050565b6000604051905090565b600067ffffffffffffffff821115612bf157612bf0612f42565b5b612bfa82612f85565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612c3f82612d87565b9150612c4a83612d87565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c7f57612c7e612eb5565b5b828201905092915050565b6000612c9582612d87565b9150612ca083612d87565b925082612cb057612caf612ee4565b5b828204905092915050565b6000612cc682612d87565b9150612cd183612d87565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d0a57612d09612eb5565b5b828202905092915050565b6000612d2082612d87565b9150612d2b83612d87565b925082821015612d3e57612d3d612eb5565b5b828203905092915050565b6000612d5482612d67565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612d9c82612da3565b9050919050565b6000612dae82612db5565b9050919050565b6000612dc082612d67565b9050919050565b82818337600083830152505050565b60005b83811015612df4578082015181840152602081019050612dd9565b83811115612e03576000848401525b50505050565b60006002820490506001821680612e2157607f821691505b60208210811415612e3557612e34612f13565b5b50919050565b612e4482612f85565b810181811067ffffffffffffffff82111715612e6357612e62612f42565b5b80604052505050565b6000612e7782612d87565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612eaa57612ea9612eb5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742046756e647320696e2077616c6c657400000000600082015250565b7f596f752063616e6e6f742063726561746520616e79206d6f7265206e6f64657360008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f646573206172652063757272656e746c79207061757365642e0000000000600082015250565b7f54686973206e6f646520646f6573206e6f74206578697374732e000000000000600082015250565b6130e181612d49565b81146130ec57600080fd5b50565b6130f881612d5b565b811461310357600080fd5b50565b61310f81612d87565b811461311a57600080fd5b5056fea2646970667358221220ccdbb8513c0e421ce63b838e3d0967512105031dd6bbfd2608d36e85f90c8fc064736f6c63430008070033
Deployed Bytecode Sourcemap
3603:6024:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:58;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;5133:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7616:584;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3676:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9339:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3708:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8954:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4956:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:5;;;:::i;:::-;;5502:674:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9534:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8208:738;;;:::i;:::-;;6184:1424;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1029:85:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3840:25:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3738:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5303:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3874:77;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3802:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4454:37;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;3958:25;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;9433:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9056:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1911:198:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9230:101:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4389:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5133:162::-;5233:11;;:::i;:::-;5207:7;5216:6;4896:1;4867:6;:15;4874:7;4867:15;;;;;;;;;;;;;;;:23;4883:6;4867:23;;;;;;;;;;;:26;;;:30;4859:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;5264:6:::1;:15;5271:7;5264:15;;;;;;;;;;;;;;;:23;5280:6;5264:23;;;;;;;;;;;5257:30;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;5133:162:::0;;;;;;:::o;7616:584::-;7675:10;7687:6;4896:1;4867:6;:15;4874:7;4867:15;;;;;;;;;;;;;;;:23;4883:6;4867:23;;;;;;;;;;;:26;;;:30;4859:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;7715:11:::1;;;;;;;;;;;7714:12;7706:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;7771:14;7788:30;7799:10;7811:6;7788:10;:30::i;:::-;7771:47;;7831:14;7848:29;7873:3;7848:20;7859:8;;7848:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;7831:46;;7898:6;7888:16;;;;;:::i;:::-;;;7917:10;;;;;;;;;;;:19;;;7937:10;7949:6;7917:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7967:10;;;;;;;;;;;:19;;;7987:9;;;;;;;;;;;7998:6;7967:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8056:6;8018;:18;8025:10;8018:18;;;;;;;;;;;;;;;:26;8037:6;8018:26;;;;;;;;;;;:34;;;:44;;;;;;;:::i;:::-;;;;;;;;8109:11;:18;;;8073:6;:18;8080:10;8073:18;;;;;;;;;;;;;;;:26;8092:6;8073:26;;;;;;;;;;;:33;;:54;;;;8177:15;8138:6;:18;8145:10;8138:18;;;;;;;;;;;;;;;:26;8157:6;8138:26;;;;;;;;;;;:36;;:54;;;;7695:505;;7616:584:::0;;;:::o;3676:25::-;;;;:::o;9339:86::-;1252:12:5;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9414:3:4::1;9403:8;:14;;;;9339:86:::0;:::o;3708:23::-;;;;:::o;8954:94::-;1252:12:5;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9035:5:4::1;9022:10;:18;;;;8954:94:::0;:::o;4956:169::-;5059:7;5033;5042:6;4896:1;4867:6;:15;4874:7;4867:15;;;;;;;;;;;;;;;:23;4883:6;4867:23;;;;;;;;;;;:26;;;:30;4859:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;5086:6:::1;:15;5093:7;5086:15;;;;;;;;;;;;;;;:23;5102:6;5086:23;;;;;;;;;;;:31;;;5079:38;;4956:169:::0;;;;;;:::o;1661:101:5:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;5502:674:4:-;5604:7;5578;5587:6;4896:1;4867:6;:15;4874:7;4867:15;;;;;;;;;;;;;;;:23;4883:6;4867:23;;;;;;;;;;;:26;;;:30;4859:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;5624:16:::1;5643:6;:15;5650:7;5643:15;;;;;;;;;;;;;;;:23;5659:6;5643:23;;;;;;;;;;;5624:42;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;5677:17;5697:4;:14;;;5677:34;;5722:14;5739:4;:11;;;5722:28;;5763:15;5823:9;5811;:21;;;;:::i;:::-;5799:9;5781:15;:27;;;;:::i;:::-;:51;;;;:::i;:::-;5763:69;;5870:6;5849:11;:18;;;:27;5845:180;;;5893:19;5967:9;5945:11;:19;;;:31;;;;:::i;:::-;5933:9;5915:15;:27;;;;:::i;:::-;:61;;;;:::i;:::-;5893:83;;6002:11;5991:22;;;;;:::i;:::-;;;5878:147;5845:180;6037:20;6060:17;6071:5;6060:6;:10;;:17;;;;:::i;:::-;6037:40;;6088:20;6111:25;6128:7;6111:12;:16;;:25;;;;:::i;:::-;6088:48;;6156:12;6149:19;;;;;;;;5502:674:::0;;;;;;:::o;9534:90::-;1252:12:5;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9612:4:4::1;9600:9;;:16;;;;;;;;;;;;;;;;;;9534:90:::0;:::o;8208:738::-;8265:11;;;;;;;;;;;8264:12;8256:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;8321:18;8355:9;8367:1;8355:13;;8350:390;8385:1;8374:10;;:12;;;;:::i;:::-;8370:1;:16;8350:390;;;8440:1;8412:6;:18;8419:10;8412:18;;;;;;;;;;;;;;;:21;8431:1;8412:21;;;;;;;;;;;:24;;;:29;8408:40;;;8443:5;;8408:40;8465:14;8482:25;8493:10;8505:1;8482:10;:25::i;:::-;8465:42;;8557:6;8524;:18;8531:10;8524:18;;;;;;;;;;;;;;;:21;8543:1;8524:21;;;;;;;;;;;:29;;;:39;;;;;;;:::i;:::-;;;;;;;;8609:11;:18;;;8578:6;:18;8585:10;8578:18;;;;;;;;;;;;;;;:21;8597:1;8578:21;;;;;;;;;;;:28;;:49;;;;8676:15;8642:6;:18;8649:10;8642:18;;;;;;;;;;;;;;;:21;8661:1;8642:21;;;;;;;;;;;:31;;:49;;;;8722:6;8708:20;;;;;:::i;:::-;;;8393:347;8388:3;;;;;:::i;:::-;;;;8350:390;;;;8752:14;8769:33;8798:3;8769:24;8784:8;;8769:10;:14;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;8752:50;;8827:6;8813:20;;;;;:::i;:::-;;;8846:10;;;;;;;;;;;:19;;;8866:10;8878;8846:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8900:10;;;;;;;;;;;:19;;;8920:9;;;;;;;;;;;8931:6;8900:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8245:701;;8208:738::o;6184:1424::-;6289:11;;;;;;;;;;;6288:12;6280:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;6375:10;6349:36;;:5;:17;6355:10;6349:17;;;;;;;;;;;;;;;:22;;;;;;;;;;;;:36;;;6345:207;;6422:118;;;;;;;;6452:10;6422:118;;;;;;6490:1;6422:118;;;;6523:1;6422:118;;;6402:5;:17;6408:10;6402:17;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6345:207;6564:17;6597:9;6609:1;6597:13;;6592:707;6616:6;6612:1;:10;6592:707;;;6689:1;6652:6;:18;6659:10;6652:18;;;;;;;;;;;;;;;:30;6671:10;;6652:30;;;;;;;;;;;:33;;;:38;6644:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;6745:14;6762:38;6798:1;6763:5;:17;6769:10;6763:17;;;;;;;;;;;;;;;:29;;;6762:35;;:38;;;;:::i;:::-;6745:55;;6844:277;;;;;;;;6872:6;6844:277;;;;6903:4;6844:277;;;;6939:4;6844:277;;;;6971:15;6844:277;;;;7016:15;6844:277;;;;7058:11;:18;;;6844:277;;;;7104:1;6844:277;;;6815:6;:18;6822:10;6815:18;;;;;;;;;;;;;;;:26;6834:6;6815:26;;;;;;;;;;;:306;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7151:8;;7138:21;;;;;:::i;:::-;;;7188:1;7174:10;;:15;;;;;;;:::i;:::-;;;;;;;;7233:1;7204:5;:17;7210:10;7204:17;;;;;;;;;;;;;;;:25;;;:30;;;;;;;:::i;:::-;;;;;;;;7281:6;7249:5;:17;7255:10;7249:17;;;;;;;;;;;;;;;:29;;:38;;;;6629:670;6624:3;;;;;:::i;:::-;;;;6592:707;;;;7354:9;7319:10;;;;;;;;;;;:20;;;7340:10;7319:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;7311:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7409:13;7425:26;7447:3;7425:17;7439:2;7425:9;:13;;:17;;;;:::i;:::-;:21;;:26;;;;:::i;:::-;7409:42;;7464:10;;;;;;;;;;;:23;;;7488:10;7508:4;7515:20;7529:5;7515:9;:13;;:20;;;;:::i;:::-;7464:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7547:10;;;;;;;;;;;:23;;;7571:10;7583:9;;;;;;;;;;;7594:5;7547:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6269:1339;;6184:1424;;;:::o;1029:85:5:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;3840:25:4:-;;;;:::o;3738:23::-;;;;:::o;5303:187::-;5406:4;5380:7;5389:6;4896:1;4867:6;:15;4874:7;4867:15;;;;;;;;;;;;;;;:23;4883:6;4867:23;;;;;;;;;;;:26;;;:30;4859:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;5464:11:::1;:18;;;5430:6;:15;5437:7;5430:15;;;;;;;;;;;;;;;:23;5446:6;5430:23;;;;;;;;;;;:30;;;:52;5423:59;;5303:187:::0;;;;;;:::o;3874:77::-;;;;;;;;;;;;;:::o;3802:31::-;;;;;;;;;;;;;:::o;4454:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3958:25::-;;;;;;;;;;;;;;:::o;9433:93::-;1252:12:5;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9513:5:4::1;9499:11;;:19;;;;;;;;;;;;;;;;;;9433:93:::0;:::o;9056:166::-;1252:12:5;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9150:16:4::1;9161:4;9150:6;:10;;:16;;;;:::i;:::-;9129:11;:18;;:37;;;;9199:15;9177:11;:19;;:37;;;;9056:166:::0;:::o;1911:198:5:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;9230:101:4:-;1252:12:5;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9309:14:4::1;9318:4;9309;:8;;:14;;;;:::i;:::-;9298:8;:25;;;;9230:101:::0;:::o;3451:96:6:-;3509:7;3539:1;3535;:5;;;;:::i;:::-;3528:12;;3451:96;;;;:::o;3836:::-;3894:7;3924:1;3920;:5;;;;:::i;:::-;3913:12;;3836:96;;;;:::o;640::0:-;693:7;719:10;712:17;;640:96;:::o;2263:187:5:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;2741:96:6:-;2799:7;2829:1;2825;:5;;;;:::i;:::-;2818:12;;2741:96;;;;:::o;3108:::-;3166:7;3196:1;3192;:5;;;;:::i;:::-;3185:12;;3108:96;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:412:7:-;85:5;110:66;126:49;168:6;126:49;:::i;:::-;110:66;:::i;:::-;101:75;;199:6;192:5;185:21;237:4;230:5;226:16;275:3;266:6;261:3;257:16;254:25;251:112;;;282:79;;:::i;:::-;251:112;372:41;406:6;401:3;396;372:41;:::i;:::-;91:328;7:412;;;;;:::o;425:139::-;471:5;509:6;496:20;487:29;;525:33;552:5;525:33;:::i;:::-;425:139;;;;:::o;570:133::-;613:5;651:6;638:20;629:29;;667:30;691:5;667:30;:::i;:::-;570:133;;;;:::o;709:137::-;763:5;794:6;788:13;779:22;;810:30;834:5;810:30;:::i;:::-;709:137;;;;:::o;866:340::-;922:5;971:3;964:4;956:6;952:17;948:27;938:122;;979:79;;:::i;:::-;938:122;1096:6;1083:20;1121:79;1196:3;1188:6;1181:4;1173:6;1169:17;1121:79;:::i;:::-;1112:88;;928:278;866:340;;;;:::o;1212:139::-;1258:5;1296:6;1283:20;1274:29;;1312:33;1339:5;1312:33;:::i;:::-;1212:139;;;;:::o;1357:143::-;1414:5;1445:6;1439:13;1430:22;;1461:33;1488:5;1461:33;:::i;:::-;1357:143;;;;:::o;1506:329::-;1565:6;1614:2;1602:9;1593:7;1589:23;1585:32;1582:119;;;1620:79;;:::i;:::-;1582:119;1740:1;1765:53;1810:7;1801:6;1790:9;1786:22;1765:53;:::i;:::-;1755:63;;1711:117;1506:329;;;;:::o;1841:474::-;1909:6;1917;1966:2;1954:9;1945:7;1941:23;1937:32;1934:119;;;1972:79;;:::i;:::-;1934:119;2092:1;2117:53;2162:7;2153:6;2142:9;2138:22;2117:53;:::i;:::-;2107:63;;2063:117;2219:2;2245:53;2290:7;2281:6;2270:9;2266:22;2245:53;:::i;:::-;2235:63;;2190:118;1841:474;;;;;:::o;2321:323::-;2377:6;2426:2;2414:9;2405:7;2401:23;2397:32;2394:119;;;2432:79;;:::i;:::-;2394:119;2552:1;2577:50;2619:7;2610:6;2599:9;2595:22;2577:50;:::i;:::-;2567:60;;2523:114;2321:323;;;;:::o;2650:345::-;2717:6;2766:2;2754:9;2745:7;2741:23;2737:32;2734:119;;;2772:79;;:::i;:::-;2734:119;2892:1;2917:61;2970:7;2961:6;2950:9;2946:22;2917:61;:::i;:::-;2907:71;;2863:125;2650:345;;;;:::o;3001:979::-;3098:6;3106;3114;3163:2;3151:9;3142:7;3138:23;3134:32;3131:119;;;3169:79;;:::i;:::-;3131:119;3317:1;3306:9;3302:17;3289:31;3347:18;3339:6;3336:30;3333:117;;;3369:79;;:::i;:::-;3333:117;3474:63;3529:7;3520:6;3509:9;3505:22;3474:63;:::i;:::-;3464:73;;3260:287;3614:2;3603:9;3599:18;3586:32;3645:18;3637:6;3634:30;3631:117;;;3667:79;;:::i;:::-;3631:117;3772:63;3827:7;3818:6;3807:9;3803:22;3772:63;:::i;:::-;3762:73;;3557:288;3884:2;3910:53;3955:7;3946:6;3935:9;3931:22;3910:53;:::i;:::-;3900:63;;3855:118;3001:979;;;;;:::o;3986:329::-;4045:6;4094:2;4082:9;4073:7;4069:23;4065:32;4062:119;;;4100:79;;:::i;:::-;4062:119;4220:1;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4191:117;3986:329;;;;:::o;4321:351::-;4391:6;4440:2;4428:9;4419:7;4415:23;4411:32;4408:119;;;4446:79;;:::i;:::-;4408:119;4566:1;4591:64;4647:7;4638:6;4627:9;4623:22;4591:64;:::i;:::-;4581:74;;4537:128;4321:351;;;;:::o;4678:118::-;4765:24;4783:5;4765:24;:::i;:::-;4760:3;4753:37;4678:118;;:::o;4802:109::-;4883:21;4898:5;4883:21;:::i;:::-;4878:3;4871:34;4802:109;;:::o;4917:159::-;5018:51;5063:5;5018:51;:::i;:::-;5013:3;5006:64;4917:159;;:::o;5082:344::-;5160:3;5188:39;5221:5;5188:39;:::i;:::-;5243:61;5297:6;5292:3;5243:61;:::i;:::-;5236:68;;5313:52;5358:6;5353:3;5346:4;5339:5;5335:16;5313:52;:::i;:::-;5390:29;5412:6;5390:29;:::i;:::-;5385:3;5381:39;5374:46;;5164:262;5082:344;;;;:::o;5432:364::-;5520:3;5548:39;5581:5;5548:39;:::i;:::-;5603:71;5667:6;5662:3;5603:71;:::i;:::-;5596:78;;5683:52;5728:6;5723:3;5716:4;5709:5;5705:16;5683:52;:::i;:::-;5760:29;5782:6;5760:29;:::i;:::-;5755:3;5751:39;5744:46;;5524:272;5432:364;;;;:::o;5802:366::-;5944:3;5965:67;6029:2;6024:3;5965:67;:::i;:::-;5958:74;;6041:93;6130:3;6041:93;:::i;:::-;6159:2;6154:3;6150:12;6143:19;;5802:366;;;:::o;6174:::-;6316:3;6337:67;6401:2;6396:3;6337:67;:::i;:::-;6330:74;;6413:93;6502:3;6413:93;:::i;:::-;6531:2;6526:3;6522:12;6515:19;;6174:366;;;:::o;6546:::-;6688:3;6709:67;6773:2;6768:3;6709:67;:::i;:::-;6702:74;;6785:93;6874:3;6785:93;:::i;:::-;6903:2;6898:3;6894:12;6887:19;;6546:366;;;:::o;6918:::-;7060:3;7081:67;7145:2;7140:3;7081:67;:::i;:::-;7074:74;;7157:93;7246:3;7157:93;:::i;:::-;7275:2;7270:3;7266:12;7259:19;;6918:366;;;:::o;7290:::-;7432:3;7453:67;7517:2;7512:3;7453:67;:::i;:::-;7446:74;;7529:93;7618:3;7529:93;:::i;:::-;7647:2;7642:3;7638:12;7631:19;;7290:366;;;:::o;7662:::-;7804:3;7825:67;7889:2;7884:3;7825:67;:::i;:::-;7818:74;;7901:93;7990:3;7901:93;:::i;:::-;8019:2;8014:3;8010:12;8003:19;;7662:366;;;:::o;8090:1557::-;8201:3;8237:4;8232:3;8228:14;8322:4;8315:5;8311:16;8305:23;8341:63;8398:4;8393:3;8389:14;8375:12;8341:63;:::i;:::-;8252:162;8496:4;8489:5;8485:16;8479:23;8549:3;8543:4;8539:14;8532:4;8527:3;8523:14;8516:38;8575:73;8643:4;8629:12;8575:73;:::i;:::-;8567:81;;8424:235;8748:4;8741:5;8737:16;8731:23;8801:3;8795:4;8791:14;8784:4;8779:3;8775:14;8768:38;8827:73;8895:4;8881:12;8827:73;:::i;:::-;8819:81;;8669:242;8996:4;8989:5;8985:16;8979:23;9015:63;9072:4;9067:3;9063:14;9049:12;9015:63;:::i;:::-;8921:167;9175:4;9168:5;9164:16;9158:23;9194:63;9251:4;9246:3;9242:14;9228:12;9194:63;:::i;:::-;9098:169;9351:4;9344:5;9340:16;9334:23;9370:63;9427:4;9422:3;9418:14;9404:12;9370:63;:::i;:::-;9277:166;9528:4;9521:5;9517:16;9511:23;9547:63;9604:4;9599:3;9595:14;9581:12;9547:63;:::i;:::-;9453:167;9637:4;9630:11;;8206:1441;8090:1557;;;;:::o;9653:108::-;9730:24;9748:5;9730:24;:::i;:::-;9725:3;9718:37;9653:108;;:::o;9767:118::-;9854:24;9872:5;9854:24;:::i;:::-;9849:3;9842:37;9767:118;;:::o;9891:222::-;9984:4;10022:2;10011:9;10007:18;9999:26;;10035:71;10103:1;10092:9;10088:17;10079:6;10035:71;:::i;:::-;9891:222;;;;:::o;10119:442::-;10268:4;10306:2;10295:9;10291:18;10283:26;;10319:71;10387:1;10376:9;10372:17;10363:6;10319:71;:::i;:::-;10400:72;10468:2;10457:9;10453:18;10444:6;10400:72;:::i;:::-;10482;10550:2;10539:9;10535:18;10526:6;10482:72;:::i;:::-;10119:442;;;;;;:::o;10567:332::-;10688:4;10726:2;10715:9;10711:18;10703:26;;10739:71;10807:1;10796:9;10792:17;10783:6;10739:71;:::i;:::-;10820:72;10888:2;10877:9;10873:18;10864:6;10820:72;:::i;:::-;10567:332;;;;;:::o;10905:442::-;11054:4;11092:2;11081:9;11077:18;11069:26;;11105:71;11173:1;11162:9;11158:17;11149:6;11105:71;:::i;:::-;11186:72;11254:2;11243:9;11239:18;11230:6;11186:72;:::i;:::-;11268;11336:2;11325:9;11321:18;11312:6;11268:72;:::i;:::-;10905:442;;;;;;:::o;11353:210::-;11440:4;11478:2;11467:9;11463:18;11455:26;;11491:65;11553:1;11542:9;11538:17;11529:6;11491:65;:::i;:::-;11353:210;;;;:::o;11569:250::-;11676:4;11714:2;11703:9;11699:18;11691:26;;11727:85;11809:1;11798:9;11794:17;11785:6;11727:85;:::i;:::-;11569:250;;;;:::o;11825:419::-;11991:4;12029:2;12018:9;12014:18;12006:26;;12078:9;12072:4;12068:20;12064:1;12053:9;12049:17;12042:47;12106:131;12232:4;12106:131;:::i;:::-;12098:139;;11825:419;;;:::o;12250:::-;12416:4;12454:2;12443:9;12439:18;12431:26;;12503:9;12497:4;12493:20;12489:1;12478:9;12474:17;12467:47;12531:131;12657:4;12531:131;:::i;:::-;12523:139;;12250:419;;;:::o;12675:::-;12841:4;12879:2;12868:9;12864:18;12856:26;;12928:9;12922:4;12918:20;12914:1;12903:9;12899:17;12892:47;12956:131;13082:4;12956:131;:::i;:::-;12948:139;;12675:419;;;:::o;13100:::-;13266:4;13304:2;13293:9;13289:18;13281:26;;13353:9;13347:4;13343:20;13339:1;13328:9;13324:17;13317:47;13381:131;13507:4;13381:131;:::i;:::-;13373:139;;13100:419;;;:::o;13525:::-;13691:4;13729:2;13718:9;13714:18;13706:26;;13778:9;13772:4;13768:20;13764:1;13753:9;13749:17;13742:47;13806:131;13932:4;13806:131;:::i;:::-;13798:139;;13525:419;;;:::o;13950:::-;14116:4;14154:2;14143:9;14139:18;14131:26;;14203:9;14197:4;14193:20;14189:1;14178:9;14174:17;14167:47;14231:131;14357:4;14231:131;:::i;:::-;14223:139;;13950:419;;;:::o;14375:357::-;14510:4;14548:2;14537:9;14533:18;14525:26;;14597:9;14591:4;14587:20;14583:1;14572:9;14568:17;14561:47;14625:100;14720:4;14711:6;14625:100;:::i;:::-;14617:108;;14375:357;;;;:::o;14738:222::-;14831:4;14869:2;14858:9;14854:18;14846:26;;14882:71;14950:1;14939:9;14935:17;14926:6;14882:71;:::i;:::-;14738:222;;;;:::o;14966:1068::-;15267:4;15305:3;15294:9;15290:19;15282:27;;15319:71;15387:1;15376:9;15372:17;15363:6;15319:71;:::i;:::-;15437:9;15431:4;15427:20;15422:2;15411:9;15407:18;15400:48;15465:78;15538:4;15529:6;15465:78;:::i;:::-;15457:86;;15590:9;15584:4;15580:20;15575:2;15564:9;15560:18;15553:48;15618:78;15691:4;15682:6;15618:78;:::i;:::-;15610:86;;15706:72;15774:2;15763:9;15759:18;15750:6;15706:72;:::i;:::-;15788:73;15856:3;15845:9;15841:19;15832:6;15788:73;:::i;:::-;15871;15939:3;15928:9;15924:19;15915:6;15871:73;:::i;:::-;15954;16022:3;16011:9;16007:19;15998:6;15954:73;:::i;:::-;14966:1068;;;;;;;;;;:::o;16040:332::-;16161:4;16199:2;16188:9;16184:18;16176:26;;16212:71;16280:1;16269:9;16265:17;16256:6;16212:71;:::i;:::-;16293:72;16361:2;16350:9;16346:18;16337:6;16293:72;:::i;:::-;16040:332;;;;;:::o;16378:129::-;16412:6;16439:20;;:::i;:::-;16429:30;;16468:33;16496:4;16488:6;16468:33;:::i;:::-;16378:129;;;:::o;16513:75::-;16546:6;16579:2;16573:9;16563:19;;16513:75;:::o;16594:308::-;16656:4;16746:18;16738:6;16735:30;16732:56;;;16768:18;;:::i;:::-;16732:56;16806:29;16828:6;16806:29;:::i;:::-;16798:37;;16890:4;16884;16880:15;16872:23;;16594:308;;;:::o;16908:99::-;16960:6;16994:5;16988:12;16978:22;;16908:99;;;:::o;17013:159::-;17087:11;17121:6;17116:3;17109:19;17161:4;17156:3;17152:14;17137:29;;17013:159;;;;:::o;17178:169::-;17262:11;17296:6;17291:3;17284:19;17336:4;17331:3;17327:14;17312:29;;17178:169;;;;:::o;17353:305::-;17393:3;17412:20;17430:1;17412:20;:::i;:::-;17407:25;;17446:20;17464:1;17446:20;:::i;:::-;17441:25;;17600:1;17532:66;17528:74;17525:1;17522:81;17519:107;;;17606:18;;:::i;:::-;17519:107;17650:1;17647;17643:9;17636:16;;17353:305;;;;:::o;17664:185::-;17704:1;17721:20;17739:1;17721:20;:::i;:::-;17716:25;;17755:20;17773:1;17755:20;:::i;:::-;17750:25;;17794:1;17784:35;;17799:18;;:::i;:::-;17784:35;17841:1;17838;17834:9;17829:14;;17664:185;;;;:::o;17855:348::-;17895:7;17918:20;17936:1;17918:20;:::i;:::-;17913:25;;17952:20;17970:1;17952:20;:::i;:::-;17947:25;;18140:1;18072:66;18068:74;18065:1;18062:81;18057:1;18050:9;18043:17;18039:105;18036:131;;;18147:18;;:::i;:::-;18036:131;18195:1;18192;18188:9;18177:20;;17855:348;;;;:::o;18209:191::-;18249:4;18269:20;18287:1;18269:20;:::i;:::-;18264:25;;18303:20;18321:1;18303:20;:::i;:::-;18298:25;;18342:1;18339;18336:8;18333:34;;;18347:18;;:::i;:::-;18333:34;18392:1;18389;18385:9;18377:17;;18209:191;;;;:::o;18406:96::-;18443:7;18472:24;18490:5;18472:24;:::i;:::-;18461:35;;18406:96;;;:::o;18508:90::-;18542:7;18585:5;18578:13;18571:21;18560:32;;18508:90;;;:::o;18604:126::-;18641:7;18681:42;18674:5;18670:54;18659:65;;18604:126;;;:::o;18736:77::-;18773:7;18802:5;18791:16;;18736:77;;;:::o;18819:140::-;18883:9;18916:37;18947:5;18916:37;:::i;:::-;18903:50;;18819:140;;;:::o;18965:126::-;19015:9;19048:37;19079:5;19048:37;:::i;:::-;19035:50;;18965:126;;;:::o;19097:113::-;19147:9;19180:24;19198:5;19180:24;:::i;:::-;19167:37;;19097:113;;;:::o;19216:154::-;19300:6;19295:3;19290;19277:30;19362:1;19353:6;19348:3;19344:16;19337:27;19216:154;;;:::o;19376:307::-;19444:1;19454:113;19468:6;19465:1;19462:13;19454:113;;;19553:1;19548:3;19544:11;19538:18;19534:1;19529:3;19525:11;19518:39;19490:2;19487:1;19483:10;19478:15;;19454:113;;;19585:6;19582:1;19579:13;19576:101;;;19665:1;19656:6;19651:3;19647:16;19640:27;19576:101;19425:258;19376:307;;;:::o;19689:320::-;19733:6;19770:1;19764:4;19760:12;19750:22;;19817:1;19811:4;19807:12;19838:18;19828:81;;19894:4;19886:6;19882:17;19872:27;;19828:81;19956:2;19948:6;19945:14;19925:18;19922:38;19919:84;;;19975:18;;:::i;:::-;19919:84;19740:269;19689:320;;;:::o;20015:281::-;20098:27;20120:4;20098:27;:::i;:::-;20090:6;20086:40;20228:6;20216:10;20213:22;20192:18;20180:10;20177:34;20174:62;20171:88;;;20239:18;;:::i;:::-;20171:88;20279:10;20275:2;20268:22;20058:238;20015:281;;:::o;20302:233::-;20341:3;20364:24;20382:5;20364:24;:::i;:::-;20355:33;;20410:66;20403:5;20400:77;20397:103;;;20480:18;;:::i;:::-;20397:103;20527:1;20520:5;20516:13;20509:20;;20302:233;;;:::o;20541:180::-;20589:77;20586:1;20579:88;20686:4;20683:1;20676:15;20710:4;20707:1;20700:15;20727:180;20775:77;20772:1;20765:88;20872:4;20869:1;20862:15;20896:4;20893:1;20886:15;20913:180;20961:77;20958:1;20951:88;21058:4;21055:1;21048:15;21082:4;21079:1;21072:15;21099:180;21147:77;21144:1;21137:88;21244:4;21241:1;21234:15;21268:4;21265:1;21258:15;21285:117;21394:1;21391;21384:12;21408:117;21517:1;21514;21507:12;21531:117;21640:1;21637;21630:12;21654:117;21763:1;21760;21753:12;21777:102;21818:6;21869:2;21865:7;21860:2;21853:5;21849:14;21845:28;21835:38;;21777:102;;;:::o;21885:225::-;22025:34;22021:1;22013:6;22009:14;22002:58;22094:8;22089:2;22081:6;22077:15;22070:33;21885:225;:::o;22116:178::-;22256:30;22252:1;22244:6;22240:14;22233:54;22116:178;:::o;22300:220::-;22440:34;22436:1;22428:6;22424:14;22417:58;22509:3;22504:2;22496:6;22492:15;22485:28;22300:220;:::o;22526:182::-;22666:34;22662:1;22654:6;22650:14;22643:58;22526:182;:::o;22714:177::-;22854:29;22850:1;22842:6;22838:14;22831:53;22714:177;:::o;22897:176::-;23037:28;23033:1;23025:6;23021:14;23014:52;22897:176;:::o;23079:122::-;23152:24;23170:5;23152:24;:::i;:::-;23145:5;23142:35;23132:63;;23191:1;23188;23181:12;23132:63;23079:122;:::o;23207:116::-;23277:21;23292:5;23277:21;:::i;:::-;23270:5;23267:32;23257:60;;23313:1;23310;23303:12;23257:60;23207:116;:::o;23329:122::-;23402:24;23420:5;23402:24;:::i;:::-;23395:5;23392:35;23382:63;;23441:1;23438;23431:12;23382:63;23329:122;:::o
Swarm Source
ipfs://ccdbb8513c0e421ce63b838e3d0967512105031dd6bbfd2608d36e85f90c8fc0
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.