Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 57 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 18884212 | 804 days ago | IN | 0 ETH | 0.00485714 | ||||
| Update Apy | 18712554 | 828 days ago | IN | 0 ETH | 0.0019289 | ||||
| Emergency Reward... | 18700124 | 830 days ago | IN | 0 ETH | 0.00306783 | ||||
| Deposit | 18690696 | 831 days ago | IN | 0 ETH | 0.00216747 | ||||
| Withdraw | 18690694 | 831 days ago | IN | 0 ETH | 0.00216331 | ||||
| Deposit | 18688900 | 832 days ago | IN | 0 ETH | 0.00572316 | ||||
| Deposit | 18688624 | 832 days ago | IN | 0 ETH | 0.01007509 | ||||
| Withdraw | 18681105 | 833 days ago | IN | 0 ETH | 0.00931793 | ||||
| Withdraw | 18561898 | 849 days ago | IN | 0 ETH | 0.0010148 | ||||
| Mass Update Pool... | 18488395 | 860 days ago | IN | 0 ETH | 0.0007803 | ||||
| Emergency Withdr... | 18488389 | 860 days ago | IN | 0 ETH | 0.00089878 | ||||
| Deposit | 18459962 | 864 days ago | IN | 0 ETH | 0.00139218 | ||||
| Deposit | 18454184 | 864 days ago | IN | 0 ETH | 0.00100976 | ||||
| Withdraw | 18454181 | 864 days ago | IN | 0 ETH | 0.00348564 | ||||
| Withdraw | 18454176 | 864 days ago | IN | 0 ETH | 0.00261827 | ||||
| Deposit | 18403860 | 871 days ago | IN | 0 ETH | 0.00092412 | ||||
| Deposit | 18397663 | 872 days ago | IN | 0 ETH | 0.00194868 | ||||
| Withdraw | 18302999 | 886 days ago | IN | 0 ETH | 0.00065669 | ||||
| Withdraw | 18302991 | 886 days ago | IN | 0 ETH | 0.00021412 | ||||
| Withdraw | 18291798 | 887 days ago | IN | 0 ETH | 0.00027003 | ||||
| Withdraw | 18291711 | 887 days ago | IN | 0 ETH | 0.00122755 | ||||
| Deposit | 18291696 | 887 days ago | IN | 0 ETH | 0.00040914 | ||||
| Withdraw | 18291693 | 887 days ago | IN | 0 ETH | 0.00035007 | ||||
| Deposit | 18291149 | 887 days ago | IN | 0 ETH | 0.00090032 | ||||
| Withdraw | 18291145 | 887 days ago | IN | 0 ETH | 0.00300768 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BetrockStake
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-08-21
*/
//SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.11;
//import "@nomiclabs/buidler/console.sol";
/*
* @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 GSN 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.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor() { }
function _msgSender() internal view returns(address payable) {
return payable(msg.sender);
}
function _msgData() internal view returns(bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @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.
*/
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() {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view 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 onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = 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 onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), 'Ownable: new owner is the zero address');
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @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) {
uint256 c = a + b;
require(c >= a, 'SafeMath: addition overflow');
return c;
}
/**
* @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 sub(a, b, 'SafeMath: subtraction overflow');
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns(uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @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) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, 'SafeMath: multiplication overflow');
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns(uint256) {
return div(a, b, 'SafeMath: division by zero');
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts 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) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts 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 mod(a, b, 'SafeMath: modulo by zero');
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message 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,
string memory errorMessage
) internal pure returns(uint256) {
require(b != 0, errorMessage);
return a % b;
}
function min(uint256 x, uint256 y) internal pure returns(uint256 z) {
z = x < y ? x : y;
}
// babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
function sqrt(uint256 y) internal pure returns(uint256 z) {
if (y > 3) {
z = y;
uint256 x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}
interface IBEP20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns(uint256);
/**
* @dev Returns the token decimals.
*/
function decimals() external view returns(uint8);
/**
* @dev Returns the token symbol.
*/
function symbol() external view returns(string memory);
/**
* @dev Returns the token name.
*/
function name() external view returns(string memory);
/**
* @dev Returns the bep token owner.
*/
function getOwner() external view returns(address);
/**
* @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 `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
address recipient,
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);
}
/**
* @title SafeBEP20
* @dev Wrappers around BEP20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeBEP20 for IBEP20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeBEP20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(
IBEP20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IBEP20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IBEP20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IBEP20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
'SafeBEP20: approve from non-zero to non-zero allowance'
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IBEP20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IBEP20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(
value,
'SafeBEP20: decreased allowance below zero'
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IBEP20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, 'SafeBEP20: low-level call failed');
if (returndata.length > 0) {
// Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed');
}
}
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns(bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly {
codehash:= extcodehash(account)
}
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, 'Address: insufficient balance');
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount } ('');
require(success, 'Address: unable to send value, recipient may have reverted');
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns(bytes memory) {
return functionCall(target, data, 'Address: low-level call failed');
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns(bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns(bytes memory) {
return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns(bytes memory) {
require(address(this).balance >= value, 'Address: insufficient balance for call');
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(
address target,
bytes memory data,
uint256 weiValue,
string memory errorMessage
) private returns(bytes memory) {
require(isContract(target), 'Address: call to non-contract');
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue } (data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size:= mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
contract BetrockStake is Ownable, ReentrancyGuard {
using SafeMath for uint256;
using SafeBEP20 for IBEP20;
// Info of each user.
struct UserInfo {
uint256 amount; // How many LP tokens the user has provided.
uint256 rewardDebt; // Reward debt. See explanation below.
}
// Info of each pool.
struct PoolInfo {
IBEP20 lpToken; // Address of LP token contract.
uint256 allocPoint; // How many allocation points assigned to this pool. Tokens to distribute per block.
uint256 lastRewardTimestamp; // Last block number that Tokens distribution occurs.
uint256 accTokensPerShare; // Accumulated Tokens per share, times 1e12. See below.
}
IBEP20 public immutable stakingToken;
IBEP20 public immutable rewardToken;
mapping(address => uint256) public holderUnlockTime;
uint256 public totalStaked;
uint256 public apy;
uint256 public lockDuration;
uint256 public exitPenaltyPerc;
// Info of each pool.
PoolInfo[] public poolInfo;
// Info of each user that stakes LP tokens.
mapping(address => UserInfo) public userInfo;
// Total allocation poitns. Must be the sum of all allocation points in all pools.
uint256 private totalAllocPoint = 0;
event Deposit(address indexed user, uint256 amount);
event Withdraw(address indexed user, uint256 amount);
event EmergencyWithdraw(address indexed user, uint256 amount);
constructor(
) {
stakingToken = IBEP20(0x18B7f4d5d8d1e36Af2975be978FBB5438FD3C2A5);
rewardToken = stakingToken;
apy = 200;
lockDuration = 5 days;
exitPenaltyPerc = 2;
// staking pool
poolInfo.push(PoolInfo({
lpToken: stakingToken,
allocPoint: 1000,
lastRewardTimestamp: 2199615,
accTokensPerShare: 0
}));
totalAllocPoint = 1000;
}
function stopReward() external onlyOwner {
updatePool(0);
apy = 0;
}
function startReward() external onlyOwner {
require(poolInfo[0].lastRewardTimestamp == 21799615, "Can only start rewards once");
poolInfo[0].lastRewardTimestamp = block.timestamp;
}
// View function to see pending Reward on frontend.
function pendingReward(address _user) external view returns(uint256) {
PoolInfo storage pool = poolInfo[0];
UserInfo storage user = userInfo[_user];
if (pool.lastRewardTimestamp == 21799615) {
return 0;
}
uint256 accTokensPerShare = pool.accTokensPerShare;
uint256 lpSupply = totalStaked;
if (block.timestamp > pool.lastRewardTimestamp && lpSupply != 0) {
uint256 tokenReward = calculateNewRewards().mul(pool.allocPoint).div(totalAllocPoint);
accTokensPerShare = accTokensPerShare.add(tokenReward.mul(1e12).div(lpSupply));
}
return user.amount.mul(accTokensPerShare).div(1e12).sub(user.rewardDebt);
}
// Update reward variables of the given pool to be up-to-date.
function updatePool(uint256 _pid) internal {
PoolInfo storage pool = poolInfo[_pid];
if (block.timestamp <= pool.lastRewardTimestamp) {
return;
}
uint256 lpSupply = totalStaked;
if (lpSupply == 0) {
pool.lastRewardTimestamp = block.timestamp;
return;
}
uint256 tokenReward = calculateNewRewards().mul(pool.allocPoint).div(totalAllocPoint);
pool.accTokensPerShare = pool.accTokensPerShare.add(tokenReward.mul(1e12).div(lpSupply));
pool.lastRewardTimestamp = block.timestamp;
}
// Update reward variables for all pools. Be careful of gas spending!
function massUpdatePools() public onlyOwner {
uint256 length = poolInfo.length;
for (uint256 pid = 0; pid < length; ++pid) {
updatePool(pid);
}
}
// Stake primary tokens
function deposit(uint256 _amount) public nonReentrant {
if (holderUnlockTime[msg.sender] == 0) {
holderUnlockTime[msg.sender] = block.timestamp + lockDuration;
}
PoolInfo storage pool = poolInfo[0];
UserInfo storage user = userInfo[msg.sender];
updatePool(0);
if (user.amount > 0) {
uint256 pending = user.amount.mul(pool.accTokensPerShare).div(1e12).sub(user.rewardDebt);
if (pending > 0) {
require(pending <= rewardsRemaining(), "Cannot withdraw other people's staked tokens. Contact an admin.");
rewardToken.safeTransfer(address(msg.sender), pending);
}
}
uint256 amountTransferred = 0;
if (_amount > 0) {
uint256 initialBalance = pool.lpToken.balanceOf(address(this));
pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount);
amountTransferred = pool.lpToken.balanceOf(address(this)) - initialBalance;
user.amount = user.amount.add(amountTransferred);
totalStaked += amountTransferred;
}
user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12);
emit Deposit(msg.sender, _amount);
}
// Withdraw primary tokens from STAKING.
function withdraw() public nonReentrant {
require(holderUnlockTime[msg.sender] <= block.timestamp, "May not do normal withdraw early");
PoolInfo storage pool = poolInfo[0];
UserInfo storage user = userInfo[msg.sender];
uint256 _amount = user.amount;
updatePool(0);
uint256 pending = user.amount.mul(pool.accTokensPerShare).div(1e12).sub(user.rewardDebt);
if (pending > 0) {
require(pending <= rewardsRemaining(), "Cannot withdraw other people's staked tokens. Contact an admin.");
rewardToken.safeTransfer(address(msg.sender), pending);
}
if (_amount > 0) {
user.amount = 0;
totalStaked -= _amount;
pool.lpToken.safeTransfer(address(msg.sender), _amount);
}
user.rewardDebt = user.amount.mul(pool.accTokensPerShare).div(1e12);
if (user.amount > 0) {
holderUnlockTime[msg.sender] = block.timestamp + lockDuration;
} else {
holderUnlockTime[msg.sender] = 0;
}
emit Withdraw(msg.sender, _amount);
}
// Withdraw without caring about rewards. EMERGENCY ONLY.
function emergencyWithdraw() external nonReentrant {
PoolInfo storage pool = poolInfo[0];
UserInfo storage user = userInfo[msg.sender];
uint256 _amount = user.amount;
totalStaked -= _amount;
// exit penalty for early unstakers, penalty held on contract as rewards.
if (holderUnlockTime[msg.sender] >= block.timestamp) {
_amount -= _amount * exitPenaltyPerc / 100;
}
holderUnlockTime[msg.sender] = 0;
pool.lpToken.safeTransfer(address(msg.sender), _amount);
user.amount = 0;
user.rewardDebt = 0;
emit EmergencyWithdraw(msg.sender, _amount);
}
// Withdraw reward. EMERGENCY ONLY. This allows the owner to migrate rewards to a new staking pool since we are not minting new tokens.
function emergencyRewardWithdraw(uint256 _amount) external onlyOwner {
require(_amount <= rewardToken.balanceOf(address(this)) - totalStaked, 'not enough tokens to take out');
rewardToken.safeTransfer(address(msg.sender), _amount);
}
function calculateNewRewards() public view returns(uint256) {
PoolInfo storage pool = poolInfo[0];
if (pool.lastRewardTimestamp > block.timestamp) {
return 0;
}
return (((block.timestamp - pool.lastRewardTimestamp) * totalStaked) * apy / 100 / 365 days);
}
function rewardsRemaining() public view returns(uint256){
return rewardToken.balanceOf(address(this)) - totalStaked;
}
function updateApy(uint256 newApy) external onlyOwner {
require(newApy <= 10000, "APY must be below 10000%");
updatePool(0);
apy = newApy;
}
function updatelockduration(uint256 newlockDuration) external onlyOwner {
require(newlockDuration <= 2419200, "Duration must be below 2 weeks");
lockDuration = newlockDuration;
}
function updateExitPenalty(uint256 newPenaltyPerc) external onlyOwner {
require(newPenaltyPerc <= 20, "May not set higher than 20%");
exitPenaltyPerc = newPenaltyPerc;
}
}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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"apy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateNewRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyRewardWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exitPenaltyPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBEP20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"accTokensPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStaked","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":"newApy","type":"uint256"}],"name":"updateApy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPenaltyPerc","type":"uint256"}],"name":"updateExitPenalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newlockDuration","type":"uint256"}],"name":"updatelockduration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c0604052600060095534801561001557600080fd5b50600061002661024260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600180819055507318b7f4d5d8d1e36af2975be978fbb5438fd3c2a573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060c86004819055506206978060058190555060026006819055506007604051806080016040528060805173ffffffffffffffffffffffffffffffffffffffff1681526020016103e881526020016221903f81526020016000815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155604082015181600201556060820151816003015550506103e860098190555061024a565b600033905090565b60805160a0516130b762000293600039600081816105520152818161063d0152818161087d01528181610df0015281816113ee0152611b0e01526000610c9901526130b76000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806380dc0672116100de578063a913a5f711610097578063f2fde38b11610071578063f2fde38b146103a8578063f40f0f52146103c4578063f7c618c1146103f4578063ff16ef391461041257610173565b8063a913a5f714610352578063b6b55f2514610382578063db2e21bc1461039e57610173565b806380dc0672146102b6578063817b1cd2146102c05780638c09c135146102de5780638da5cb5b146102fa5780638e0b019814610318578063999e2f751461033457610173565b8063630b5ba111610130578063630b5ba11461023e578063715018a61461024857806372f702f314610252578063746c8ae11461027057806378c196f31461027a5780637b280def1461029857610173565b806304554443146101785780631526fe27146101965780631959a002146101c95780633279beab146101fa5780633bcfc4b8146102165780633ccfd60b14610234575b600080fd5b61018061042e565b60405161018d91906123e0565b60405180910390f35b6101b060048036038101906101ab919061242c565b610434565b6040516101c094939291906124d8565b60405180910390f35b6101e360048036038101906101de919061255b565b610494565b6040516101f1929190612588565b60405180910390f35b610214600480360381019061020f919061242c565b6104b8565b005b61021e610684565b60405161022b91906123e0565b60405180910390f35b61023c61068a565b005b610246610a7c565b005b610250610b44565b005b61025a610c97565b60405161026791906125b1565b60405180910390f35b610278610cbb565b005b610282610de9565b60405161028f91906123e0565b60405180910390f35b6102a0610e97565b6040516102ad91906123e0565b60405180910390f35b6102be610e9d565b005b6102c8610f46565b6040516102d591906123e0565b60405180910390f35b6102f860048036038101906102f3919061242c565b610f4c565b005b610302611031565b60405161030f91906125db565b60405180910390f35b610332600480360381019061032d919061242c565b61105a565b005b61033c61113d565b60405161034991906123e0565b60405180910390f35b61036c6004803603810190610367919061255b565b6111c7565b60405161037991906123e0565b60405180910390f35b61039c6004803603810190610397919061242c565b6111df565b005b6103a66116ac565b005b6103c260048036038101906103bd919061255b565b6118f6565b005b6103de60048036038101906103d9919061255b565b611997565b6040516103eb91906123e0565b60405180910390f35b6103fc611b0c565b60405161040991906125b1565b60405180910390f35b61042c6004803603810190610427919061242c565b611b30565b005b60055481565b6007818154811061044457600080fd5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905084565b60086020528060005260406000206000915090508060000154908060010154905082565b6104c0611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054490612653565b60405180910390fd5b6003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105a991906125db565b602060405180830381865afa1580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea9190612688565b6105f491906126e4565b811115610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d90612764565b60405180910390fd5b61068133827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b50565b60045481565b600260015414156106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c7906127d0565b60405180910390fd5b600260018190555042600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561075a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107519061283c565b60405180910390fd5b600060076000815481106107715761077061285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015490506107d76000611cac565b6000610821836001015461081364e8d4a5100061080588600301548860000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b905060008111156108c257610834610de9565b811115610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d906128fd565b60405180910390fd5b6108c133827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b600082111561093e576000836000018190555081600360008282546108e791906126e4565b9250508190555061093d33838660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b61097064e8d4a5100061096286600301548660000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b83600101819055506000836000015411156109db5760055442610993919061291d565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a21565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436483604051610a6791906123e0565b60405180910390a25050505060018081905550565b610a84611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890612653565b60405180910390fd5b6000600780549050905060005b81811015610b4057610b2f81611cac565b80610b3990612973565b9050610b1e565b5050565b610b4c611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090612653565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b610cc3611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790612653565b60405180910390fd5b63014ca2bf6007600081548110610d6a57610d6961285c565b5b90600052602060002090600402016002015414610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390612a08565b60405180910390fd5b426007600081548110610dd257610dd161285c565b5b906000526020600020906004020160020181905550565b60006003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e4791906125db565b602060405180830381865afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e889190612688565b610e9291906126e4565b905090565b60065481565b610ea5611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2990612653565b60405180910390fd5b610f3c6000611cac565b6000600481905550565b60035481565b610f54611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890612653565b60405180910390fd5b6224ea00811115611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90612a74565b60405180910390fd5b8060058190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611062611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690612653565b60405180910390fd5b6014811115611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90612ae0565b60405180910390fd5b8060068190555050565b60008060076000815481106111555761115461285c565b5b90600052602060002090600402019050428160020154111561117b5760009150506111c4565b6301e13380606460045460035484600201544261119891906126e4565b6111a29190612b00565b6111ac9190612b00565b6111b69190612b89565b6111c09190612b89565b9150505b90565b60026020528060005260406000206000915090505481565b60026001541415611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906127d0565b60405180910390fd5b60026001819055506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156112c75760055442611283919061291d565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600060076000815481106112de576112dd61285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061133b6000611cac565b600081600001541115611435576000611392826001015461138464e8d4a5100061137687600301548760000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b90506000811115611433576113a5610de9565b8111156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de906128fd565b60405180910390fd5b61143233827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b505b6000808411156116175760008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161149e91906125db565b602060405180830381865afa1580156114bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114df9190612688565b90506115323330878760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611ea0909392919063ffffffff16565b808460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161159091906125db565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190612688565b6115db91906126e4565b91506115f4828460000154611f2990919063ffffffff16565b8360000181905550816003600082825461160e919061291d565b92505081905550505b61164964e8d4a5100061163b85600301548560000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b82600101819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8560405161169791906123e0565b60405180910390a25050506001808190555050565b600260015414156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906127d0565b60405180910390fd5b6002600181905550600060076000815481106117115761171061285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001549050806003600082825461177f91906126e4565b9250508190555042600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106117f4576064600654826117dc9190612b00565b6117e69190612b89565b816117f191906126e4565b90505b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061188833828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b60008260000181905550600082600101819055503373ffffffffffffffffffffffffffffffffffffffff167f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695826040516118e291906123e0565b60405180910390a250505060018081905550565b6118fe611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290612653565b60405180910390fd5b61199481611f87565b50565b60008060076000815481106119af576119ae61285c565b5b906000526020600020906004020190506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905063014ca2bf82600201541415611a1d57600092505050611b07565b60008260030154905060006003549050836002015442118015611a41575060008114155b15611abc576000611a7a600954611a6c8760010154611a5e61113d565b611d9190919063ffffffff16565b611e0c90919063ffffffff16565b9050611ab8611aa983611a9b64e8d4a5100085611d9190919063ffffffff16565b611e0c90919063ffffffff16565b84611f2990919063ffffffff16565b9250505b611b008360010154611af264e8d4a51000611ae4868860000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b9450505050505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611b38611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90612653565b60405180910390fd5b612710811115611c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0190612c06565b60405180910390fd5b611c146000611cac565b8060048190555050565b600033905090565b611ca78363a9059cbb60e01b8484604051602401611c45929190612c26565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120b4565b505050565b600060078281548110611cc257611cc161285c565b5b9060005260206000209060040201905080600201544211611ce35750611d8e565b600060035490506000811415611d03574282600201819055505050611d8e565b6000611d37600954611d298560010154611d1b61113d565b611d9190919063ffffffff16565b611e0c90919063ffffffff16565b9050611d79611d6683611d5864e8d4a5100085611d9190919063ffffffff16565b611e0c90919063ffffffff16565b8460030154611f2990919063ffffffff16565b83600301819055504283600201819055505050505b50565b600080831415611da45760009050611e06565b60008284611db29190612b00565b9050828482611dc19190612b89565b14611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890612cc1565b60405180910390fd5b809150505b92915050565b6000611e4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061217b565b905092915050565b6000611e9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121de565b905092915050565b611f23846323b872dd60e01b858585604051602401611ec193929190612ce1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120b4565b50505050565b6000808284611f38919061291d565b905083811015611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490612d64565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90612df6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612116826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122429092919063ffffffff16565b905060008151111561217657808060200190518101906121369190612e4e565b612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90612eed565b60405180910390fd5b5b505050565b600080831182906121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b99190612f95565b60405180910390fd5b50600083856121d19190612b89565b9050809150509392505050565b6000838311158290612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d9190612f95565b60405180910390fd5b506000838561223591906126e4565b9050809150509392505050565b6060612251848460008561225a565b90509392505050565b60606122658561237c565b6122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b90613003565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122cd919061306a565b60006040518083038185875af1925050503d806000811461230a576040519150601f19603f3d011682016040523d82523d6000602084013e61230f565b606091505b50915091508115612324578092505050612374565b6000815111156123375780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b9190612f95565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156123be57506000801b8214155b92505050919050565b6000819050919050565b6123da816123c7565b82525050565b60006020820190506123f560008301846123d1565b92915050565b600080fd5b612409816123c7565b811461241457600080fd5b50565b60008135905061242681612400565b92915050565b600060208284031215612442576124416123fb565b5b600061245084828501612417565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061249e61249961249484612459565b612479565b612459565b9050919050565b60006124b082612483565b9050919050565b60006124c2826124a5565b9050919050565b6124d2816124b7565b82525050565b60006080820190506124ed60008301876124c9565b6124fa60208301866123d1565b61250760408301856123d1565b61251460608301846123d1565b95945050505050565b600061252882612459565b9050919050565b6125388161251d565b811461254357600080fd5b50565b6000813590506125558161252f565b92915050565b600060208284031215612571576125706123fb565b5b600061257f84828501612546565b91505092915050565b600060408201905061259d60008301856123d1565b6125aa60208301846123d1565b9392505050565b60006020820190506125c660008301846124c9565b92915050565b6125d58161251d565b82525050565b60006020820190506125f060008301846125cc565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061263d6020836125f6565b915061264882612607565b602082019050919050565b6000602082019050818103600083015261266c81612630565b9050919050565b60008151905061268281612400565b92915050565b60006020828403121561269e5761269d6123fb565b5b60006126ac84828501612673565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126ef826123c7565b91506126fa836123c7565b92508282101561270d5761270c6126b5565b5b828203905092915050565b7f6e6f7420656e6f75676820746f6b656e7320746f2074616b65206f7574000000600082015250565b600061274e601d836125f6565b915061275982612718565b602082019050919050565b6000602082019050818103600083015261277d81612741565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006127ba601f836125f6565b91506127c582612784565b602082019050919050565b600060208201905081810360008301526127e9816127ad565b9050919050565b7f4d6179206e6f7420646f206e6f726d616c207769746864726177206561726c79600082015250565b60006128266020836125f6565b9150612831826127f0565b602082019050919050565b6000602082019050818103600083015261285581612819565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e6e6f74207769746864726177206f746865722070656f706c652773207360008201527f74616b656420746f6b656e732e2020436f6e7461637420616e2061646d696e2e602082015250565b60006128e76040836125f6565b91506128f28261288b565b604082019050919050565b60006020820190508181036000830152612916816128da565b9050919050565b6000612928826123c7565b9150612933836123c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612968576129676126b5565b5b828201905092915050565b600061297e826123c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129b1576129b06126b5565b5b600182019050919050565b7f43616e206f6e6c792073746172742072657761726473206f6e63650000000000600082015250565b60006129f2601b836125f6565b91506129fd826129bc565b602082019050919050565b60006020820190508181036000830152612a21816129e5565b9050919050565b7f4475726174696f6e206d7573742062652062656c6f772032207765656b730000600082015250565b6000612a5e601e836125f6565b9150612a6982612a28565b602082019050919050565b60006020820190508181036000830152612a8d81612a51565b9050919050565b7f4d6179206e6f742073657420686967686572207468616e203230250000000000600082015250565b6000612aca601b836125f6565b9150612ad582612a94565b602082019050919050565b60006020820190508181036000830152612af981612abd565b9050919050565b6000612b0b826123c7565b9150612b16836123c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b4f57612b4e6126b5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b94826123c7565b9150612b9f836123c7565b925082612baf57612bae612b5a565b5b828204905092915050565b7f415059206d7573742062652062656c6f77203130303030250000000000000000600082015250565b6000612bf06018836125f6565b9150612bfb82612bba565b602082019050919050565b60006020820190508181036000830152612c1f81612be3565b9050919050565b6000604082019050612c3b60008301856125cc565b612c4860208301846123d1565b9392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cab6021836125f6565b9150612cb682612c4f565b604082019050919050565b60006020820190508181036000830152612cda81612c9e565b9050919050565b6000606082019050612cf660008301866125cc565b612d0360208301856125cc565b612d1060408301846123d1565b949350505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612d4e601b836125f6565b9150612d5982612d18565b602082019050919050565b60006020820190508181036000830152612d7d81612d41565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612de06026836125f6565b9150612deb82612d84565b604082019050919050565b60006020820190508181036000830152612e0f81612dd3565b9050919050565b60008115159050919050565b612e2b81612e16565b8114612e3657600080fd5b50565b600081519050612e4881612e22565b92915050565b600060208284031215612e6457612e636123fb565b5b6000612e7284828501612e39565b91505092915050565b7f5361666542455032303a204245503230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612ed7602a836125f6565b9150612ee282612e7b565b604082019050919050565b60006020820190508181036000830152612f0681612eca565b9050919050565b600081519050919050565b60005b83811015612f36578082015181840152602081019050612f1b565b83811115612f45576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f6782612f0d565b612f7181856125f6565b9350612f81818560208601612f18565b612f8a81612f4b565b840191505092915050565b60006020820190508181036000830152612faf8184612f5c565b905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612fed601d836125f6565b9150612ff882612fb7565b602082019050919050565b6000602082019050818103600083015261301c81612fe0565b9050919050565b600081519050919050565b600081905092915050565b600061304482613023565b61304e818561302e565b935061305e818560208601612f18565b80840191505092915050565b60006130768284613039565b91508190509291505056fea2646970667358221220faa5867c27c4e89d6abf7ab2ed976739fd86381637918cbaec5bdb1c5788ab8a64736f6c634300080b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806380dc0672116100de578063a913a5f711610097578063f2fde38b11610071578063f2fde38b146103a8578063f40f0f52146103c4578063f7c618c1146103f4578063ff16ef391461041257610173565b8063a913a5f714610352578063b6b55f2514610382578063db2e21bc1461039e57610173565b806380dc0672146102b6578063817b1cd2146102c05780638c09c135146102de5780638da5cb5b146102fa5780638e0b019814610318578063999e2f751461033457610173565b8063630b5ba111610130578063630b5ba11461023e578063715018a61461024857806372f702f314610252578063746c8ae11461027057806378c196f31461027a5780637b280def1461029857610173565b806304554443146101785780631526fe27146101965780631959a002146101c95780633279beab146101fa5780633bcfc4b8146102165780633ccfd60b14610234575b600080fd5b61018061042e565b60405161018d91906123e0565b60405180910390f35b6101b060048036038101906101ab919061242c565b610434565b6040516101c094939291906124d8565b60405180910390f35b6101e360048036038101906101de919061255b565b610494565b6040516101f1929190612588565b60405180910390f35b610214600480360381019061020f919061242c565b6104b8565b005b61021e610684565b60405161022b91906123e0565b60405180910390f35b61023c61068a565b005b610246610a7c565b005b610250610b44565b005b61025a610c97565b60405161026791906125b1565b60405180910390f35b610278610cbb565b005b610282610de9565b60405161028f91906123e0565b60405180910390f35b6102a0610e97565b6040516102ad91906123e0565b60405180910390f35b6102be610e9d565b005b6102c8610f46565b6040516102d591906123e0565b60405180910390f35b6102f860048036038101906102f3919061242c565b610f4c565b005b610302611031565b60405161030f91906125db565b60405180910390f35b610332600480360381019061032d919061242c565b61105a565b005b61033c61113d565b60405161034991906123e0565b60405180910390f35b61036c6004803603810190610367919061255b565b6111c7565b60405161037991906123e0565b60405180910390f35b61039c6004803603810190610397919061242c565b6111df565b005b6103a66116ac565b005b6103c260048036038101906103bd919061255b565b6118f6565b005b6103de60048036038101906103d9919061255b565b611997565b6040516103eb91906123e0565b60405180910390f35b6103fc611b0c565b60405161040991906125b1565b60405180910390f35b61042c6004803603810190610427919061242c565b611b30565b005b60055481565b6007818154811061044457600080fd5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154905084565b60086020528060005260406000206000915090508060000154908060010154905082565b6104c0611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461054d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054490612653565b60405180910390fd5b6003547f00000000000000000000000018b7f4d5d8d1e36af2975be978fbb5438fd3c2a573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105a991906125db565b602060405180830381865afa1580156105c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ea9190612688565b6105f491906126e4565b811115610636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062d90612764565b60405180910390fd5b61068133827f00000000000000000000000018b7f4d5d8d1e36af2975be978fbb5438fd3c2a573ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b50565b60045481565b600260015414156106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c7906127d0565b60405180910390fd5b600260018190555042600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561075a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107519061283c565b60405180910390fd5b600060076000815481106107715761077061285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015490506107d76000611cac565b6000610821836001015461081364e8d4a5100061080588600301548860000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b905060008111156108c257610834610de9565b811115610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086d906128fd565b60405180910390fd5b6108c133827f00000000000000000000000018b7f4d5d8d1e36af2975be978fbb5438fd3c2a573ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b600082111561093e576000836000018190555081600360008282546108e791906126e4565b9250508190555061093d33838660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b61097064e8d4a5100061096286600301548660000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b83600101819055506000836000015411156109db5760055442610993919061291d565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a21565b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436483604051610a6791906123e0565b60405180910390a25050505060018081905550565b610a84611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890612653565b60405180910390fd5b6000600780549050905060005b81811015610b4057610b2f81611cac565b80610b3990612973565b9050610b1e565b5050565b610b4c611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd090612653565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b7f00000000000000000000000018b7f4d5d8d1e36af2975be978fbb5438fd3c2a581565b610cc3611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790612653565b60405180910390fd5b63014ca2bf6007600081548110610d6a57610d6961285c565b5b90600052602060002090600402016002015414610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390612a08565b60405180910390fd5b426007600081548110610dd257610dd161285c565b5b906000526020600020906004020160020181905550565b60006003547f00000000000000000000000018b7f4d5d8d1e36af2975be978fbb5438fd3c2a573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e4791906125db565b602060405180830381865afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e889190612688565b610e9291906126e4565b905090565b60065481565b610ea5611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2990612653565b60405180910390fd5b610f3c6000611cac565b6000600481905550565b60035481565b610f54611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890612653565b60405180910390fd5b6224ea00811115611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90612a74565b60405180910390fd5b8060058190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611062611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690612653565b60405180910390fd5b6014811115611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90612ae0565b60405180910390fd5b8060068190555050565b60008060076000815481106111555761115461285c565b5b90600052602060002090600402019050428160020154111561117b5760009150506111c4565b6301e13380606460045460035484600201544261119891906126e4565b6111a29190612b00565b6111ac9190612b00565b6111b69190612b89565b6111c09190612b89565b9150505b90565b60026020528060005260406000206000915090505481565b60026001541415611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c906127d0565b60405180910390fd5b60026001819055506000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156112c75760055442611283919061291d565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600060076000815481106112de576112dd61285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061133b6000611cac565b600081600001541115611435576000611392826001015461138464e8d4a5100061137687600301548760000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b90506000811115611433576113a5610de9565b8111156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de906128fd565b60405180910390fd5b61143233827f00000000000000000000000018b7f4d5d8d1e36af2975be978fbb5438fd3c2a573ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b5b505b6000808411156116175760008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161149e91906125db565b602060405180830381865afa1580156114bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114df9190612688565b90506115323330878760000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611ea0909392919063ffffffff16565b808460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161159091906125db565b602060405180830381865afa1580156115ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d19190612688565b6115db91906126e4565b91506115f4828460000154611f2990919063ffffffff16565b8360000181905550816003600082825461160e919061291d565b92505081905550505b61164964e8d4a5100061163b85600301548560000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b82600101819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8560405161169791906123e0565b60405180910390a25050506001808190555050565b600260015414156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906127d0565b60405180910390fd5b6002600181905550600060076000815481106117115761171061285c565b5b906000526020600020906004020190506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001549050806003600082825461177f91906126e4565b9250508190555042600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106117f4576064600654826117dc9190612b00565b6117e69190612b89565b816117f191906126e4565b90505b6000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061188833828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c269092919063ffffffff16565b60008260000181905550600082600101819055503373ffffffffffffffffffffffffffffffffffffffff167f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695826040516118e291906123e0565b60405180910390a250505060018081905550565b6118fe611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290612653565b60405180910390fd5b61199481611f87565b50565b60008060076000815481106119af576119ae61285c565b5b906000526020600020906004020190506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905063014ca2bf82600201541415611a1d57600092505050611b07565b60008260030154905060006003549050836002015442118015611a41575060008114155b15611abc576000611a7a600954611a6c8760010154611a5e61113d565b611d9190919063ffffffff16565b611e0c90919063ffffffff16565b9050611ab8611aa983611a9b64e8d4a5100085611d9190919063ffffffff16565b611e0c90919063ffffffff16565b84611f2990919063ffffffff16565b9250505b611b008360010154611af264e8d4a51000611ae4868860000154611d9190919063ffffffff16565b611e0c90919063ffffffff16565b611e5690919063ffffffff16565b9450505050505b919050565b7f00000000000000000000000018b7f4d5d8d1e36af2975be978fbb5438fd3c2a581565b611b38611c1e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbc90612653565b60405180910390fd5b612710811115611c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0190612c06565b60405180910390fd5b611c146000611cac565b8060048190555050565b600033905090565b611ca78363a9059cbb60e01b8484604051602401611c45929190612c26565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120b4565b505050565b600060078281548110611cc257611cc161285c565b5b9060005260206000209060040201905080600201544211611ce35750611d8e565b600060035490506000811415611d03574282600201819055505050611d8e565b6000611d37600954611d298560010154611d1b61113d565b611d9190919063ffffffff16565b611e0c90919063ffffffff16565b9050611d79611d6683611d5864e8d4a5100085611d9190919063ffffffff16565b611e0c90919063ffffffff16565b8460030154611f2990919063ffffffff16565b83600301819055504283600201819055505050505b50565b600080831415611da45760009050611e06565b60008284611db29190612b00565b9050828482611dc19190612b89565b14611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890612cc1565b60405180910390fd5b809150505b92915050565b6000611e4e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061217b565b905092915050565b6000611e9883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121de565b905092915050565b611f23846323b872dd60e01b858585604051602401611ec193929190612ce1565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506120b4565b50505050565b6000808284611f38919061291d565b905083811015611f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7490612d64565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fee90612df6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612116826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122429092919063ffffffff16565b905060008151111561217657808060200190518101906121369190612e4e565b612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90612eed565b60405180910390fd5b5b505050565b600080831182906121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b99190612f95565b60405180910390fd5b50600083856121d19190612b89565b9050809150509392505050565b6000838311158290612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d9190612f95565b60405180910390fd5b506000838561223591906126e4565b9050809150509392505050565b6060612251848460008561225a565b90509392505050565b60606122658561237c565b6122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b90613003565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516122cd919061306a565b60006040518083038185875af1925050503d806000811461230a576040519150601f19603f3d011682016040523d82523d6000602084013e61230f565b606091505b50915091508115612324578092505050612374565b6000815111156123375780518082602001fd5b836040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b9190612f95565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156123be57506000801b8214155b92505050919050565b6000819050919050565b6123da816123c7565b82525050565b60006020820190506123f560008301846123d1565b92915050565b600080fd5b612409816123c7565b811461241457600080fd5b50565b60008135905061242681612400565b92915050565b600060208284031215612442576124416123fb565b5b600061245084828501612417565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061249e61249961249484612459565b612479565b612459565b9050919050565b60006124b082612483565b9050919050565b60006124c2826124a5565b9050919050565b6124d2816124b7565b82525050565b60006080820190506124ed60008301876124c9565b6124fa60208301866123d1565b61250760408301856123d1565b61251460608301846123d1565b95945050505050565b600061252882612459565b9050919050565b6125388161251d565b811461254357600080fd5b50565b6000813590506125558161252f565b92915050565b600060208284031215612571576125706123fb565b5b600061257f84828501612546565b91505092915050565b600060408201905061259d60008301856123d1565b6125aa60208301846123d1565b9392505050565b60006020820190506125c660008301846124c9565b92915050565b6125d58161251d565b82525050565b60006020820190506125f060008301846125cc565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061263d6020836125f6565b915061264882612607565b602082019050919050565b6000602082019050818103600083015261266c81612630565b9050919050565b60008151905061268281612400565b92915050565b60006020828403121561269e5761269d6123fb565b5b60006126ac84828501612673565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126ef826123c7565b91506126fa836123c7565b92508282101561270d5761270c6126b5565b5b828203905092915050565b7f6e6f7420656e6f75676820746f6b656e7320746f2074616b65206f7574000000600082015250565b600061274e601d836125f6565b915061275982612718565b602082019050919050565b6000602082019050818103600083015261277d81612741565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006127ba601f836125f6565b91506127c582612784565b602082019050919050565b600060208201905081810360008301526127e9816127ad565b9050919050565b7f4d6179206e6f7420646f206e6f726d616c207769746864726177206561726c79600082015250565b60006128266020836125f6565b9150612831826127f0565b602082019050919050565b6000602082019050818103600083015261285581612819565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e6e6f74207769746864726177206f746865722070656f706c652773207360008201527f74616b656420746f6b656e732e2020436f6e7461637420616e2061646d696e2e602082015250565b60006128e76040836125f6565b91506128f28261288b565b604082019050919050565b60006020820190508181036000830152612916816128da565b9050919050565b6000612928826123c7565b9150612933836123c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612968576129676126b5565b5b828201905092915050565b600061297e826123c7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129b1576129b06126b5565b5b600182019050919050565b7f43616e206f6e6c792073746172742072657761726473206f6e63650000000000600082015250565b60006129f2601b836125f6565b91506129fd826129bc565b602082019050919050565b60006020820190508181036000830152612a21816129e5565b9050919050565b7f4475726174696f6e206d7573742062652062656c6f772032207765656b730000600082015250565b6000612a5e601e836125f6565b9150612a6982612a28565b602082019050919050565b60006020820190508181036000830152612a8d81612a51565b9050919050565b7f4d6179206e6f742073657420686967686572207468616e203230250000000000600082015250565b6000612aca601b836125f6565b9150612ad582612a94565b602082019050919050565b60006020820190508181036000830152612af981612abd565b9050919050565b6000612b0b826123c7565b9150612b16836123c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b4f57612b4e6126b5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b94826123c7565b9150612b9f836123c7565b925082612baf57612bae612b5a565b5b828204905092915050565b7f415059206d7573742062652062656c6f77203130303030250000000000000000600082015250565b6000612bf06018836125f6565b9150612bfb82612bba565b602082019050919050565b60006020820190508181036000830152612c1f81612be3565b9050919050565b6000604082019050612c3b60008301856125cc565b612c4860208301846123d1565b9392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cab6021836125f6565b9150612cb682612c4f565b604082019050919050565b60006020820190508181036000830152612cda81612c9e565b9050919050565b6000606082019050612cf660008301866125cc565b612d0360208301856125cc565b612d1060408301846123d1565b949350505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612d4e601b836125f6565b9150612d5982612d18565b602082019050919050565b60006020820190508181036000830152612d7d81612d41565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612de06026836125f6565b9150612deb82612d84565b604082019050919050565b60006020820190508181036000830152612e0f81612dd3565b9050919050565b60008115159050919050565b612e2b81612e16565b8114612e3657600080fd5b50565b600081519050612e4881612e22565b92915050565b600060208284031215612e6457612e636123fb565b5b6000612e7284828501612e39565b91505092915050565b7f5361666542455032303a204245503230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612ed7602a836125f6565b9150612ee282612e7b565b604082019050919050565b60006020820190508181036000830152612f0681612eca565b9050919050565b600081519050919050565b60005b83811015612f36578082015181840152602081019050612f1b565b83811115612f45576000848401525b50505050565b6000601f19601f8301169050919050565b6000612f6782612f0d565b612f7181856125f6565b9350612f81818560208601612f18565b612f8a81612f4b565b840191505092915050565b60006020820190508181036000830152612faf8184612f5c565b905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612fed601d836125f6565b9150612ff882612fb7565b602082019050919050565b6000602082019050818103600083015261301c81612fe0565b9050919050565b600081519050919050565b600081905092915050565b600061304482613023565b61304e818561302e565b935061305e818560208601612f18565b80840191505092915050565b60006130768284613039565b91508190509291505056fea2646970667358221220faa5867c27c4e89d6abf7ab2ed976739fd86381637918cbaec5bdb1c5788ab8a64736f6c634300080b0033
Deployed Bytecode Sourcemap
24450:8792:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25435:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25535:26;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;25617:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;31932:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25410:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29896:1149;;;:::i;:::-;;28328:190;;;:::i;:::-;;2813:140;;;:::i;:::-;;25232:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26575:204;;;:::i;:::-;;32516:132;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25469:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26476:91;;;:::i;:::-;;25377:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32836:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2172:78;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33047:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32198:310;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25317:51;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28555:1285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31116:667;;;:::i;:::-;;3108:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26844:725;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25275:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32656:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25435:27;;;;:::o;25535:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25617:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31932:256::-;2393:12;:10;:12::i;:::-;2383:22;;:6;;;;;;;;;;:22;;;2375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32070:11:::1;;32031;:21;;;32061:4;32031:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;32020:7;:61;;32012:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32126:54;32159:10;32172:7;32126:11;:24;;;;:54;;;;;:::i;:::-;31932:256:::0;:::o;25410:18::-;;;;:::o;29896:1149::-;23503:1;24101:7;;:19;;24093:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23503:1;24234:7;:18;;;;29989:15:::1;29957:16;:28;29974:10;29957:28;;;;;;;;;;;;;;;;:47;;29949:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;30062:21;30086:8;30095:1;30086:11;;;;;;;;:::i;:::-;;;;;;;;;;;;30062:35;;30108:21;30132:8;:20;30141:10;30132:20;;;;;;;;;;;;;;;30108:44;;30165:15;30183:4;:11;;;30165:29;;30205:13;30216:1;30205:10;:13::i;:::-;30229:15;30247:70;30301:4;:15;;;30247:49;30291:4;30247:39;30263:4;:22;;;30247:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;30229:88;;30342:1;30332:7;:11;30328:219;;;30379:18;:16;:18::i;:::-;30368:7;:29;;30360:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;30481:54;30514:10;30527:7;30481:11;:24;;;;:54;;;;;:::i;:::-;30328:219;30573:1;30563:7;:11;30559:166;;;30605:1;30591:4;:11;;:15;;;;30636:7;30621:11;;:22;;;;;;;:::i;:::-;;;;;;;;30658:55;30692:10;30705:7;30658:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;30559:166;30755:49;30799:4;30755:39;30771:4;:22;;;30755:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;30737:4;:15;;:67;;;;30835:1;30821:4;:11;;;:15;30817:174;;;30902:12;;30884:15;:30;;;;:::i;:::-;30853:16;:28;30870:10;30853:28;;;;;;;;;;;;;;;:61;;;;30817:174;;;30978:1;30947:16;:28;30964:10;30947:28;;;;;;;;;;;;;;;:32;;;;30817:174;31017:10;31008:29;;;31029:7;31008:29;;;;;;:::i;:::-;;;;;;;;29936:1109;;;;23459:1:::0;24413:7;:22;;;;29896:1149::o;28328:190::-;2393:12;:10;:12::i;:::-;2383:22;;:6;;;;;;;;;;:22;;;2375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28383:14:::1;28400:8;:15;;;;28383:32;;28431:11;28426:85;28454:6;28448:3;:12;28426:85;;;28484:15;28495:3;28484:10;:15::i;:::-;28462:5;;;;:::i;:::-;;;28426:85;;;;28372:146;28328:190::o:0;2813:140::-;2393:12;:10;:12::i;:::-;2383:22;;:6;;;;;;;;;;:22;;;2375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2912:1:::1;2875:40;;2896:6;::::0;::::1;;;;;;;;2875:40;;;;;;;;;;;;2943:1;2926:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2813:140::o:0;25232:36::-;;;:::o;26575:204::-;2393:12;:10;:12::i;:::-;2383:22;;:6;;;;;;;;;;:22;;;2375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26671:8:::1;26636;26645:1;26636:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:31;;;:43;26628:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;26756:15;26722:8;26731:1;26722:11;;;;;;;;:::i;:::-;;;;;;;;;;;;:31;;:49;;;;26575:204::o:0;32516:132::-;32564:7;32629:11;;32590;:21;;;32620:4;32590:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;32583:57;;32516:132;:::o;25469:30::-;;;;:::o;26476:91::-;2393:12;:10;:12::i;:::-;2383:22;;:6;;;;;;;;;;:22;;;2375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26528:13:::1;26539:1;26528:10;:13::i;:::-;26558:1;26552:3;:7;;;;26476:91::o:0;25377:26::-;;;;:::o;32836:203::-;2393:12;:10;:12::i;:::-;2383:22;;:6;;;;;;;;;;:22;;;2375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32946:7:::1;32927:15;:26;;32919:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33014:15;32999:12;:30;;;;32836:203:::0;:::o;2172:78::-;2209:7;2236:6;;;;;;;;;;;2229:13;;2172:78;:::o;33047:192::-;2393:12;:10;:12::i;:::-;2383:22;;:6;;;;;;;;;;:22;;;2375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33154:2:::1;33136:14;:20;;33128:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33217:14;33199:15;:32;;;;33047:192:::0;:::o;32198:310::-;32249:7;32269:21;32293:8;32302:1;32293:11;;;;;;;;:::i;:::-;;;;;;;;;;;;32269:35;;32346:15;32319:4;:24;;;:42;32315:83;;;32385:1;32378:8;;;;;32315:83;32491:8;32485:3;32479;;32464:11;;32436:4;:24;;;32418:15;:42;;;;:::i;:::-;32417:58;;;;:::i;:::-;32416:66;;;;:::i;:::-;:72;;;;:::i;:::-;:83;;;;:::i;:::-;32408:92;;;32198:310;;:::o;25317:51::-;;;;;;;;;;;;;;;;;:::o;28555:1285::-;23503:1;24101:7;;:19;;24093:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23503:1;24234:7;:18;;;;28656:1:::1;28624:16;:28;28641:10;28624:28;;;;;;;;;;;;;;;;:33;28620:127;;;28723:12;;28705:15;:30;;;;:::i;:::-;28674:16;:28;28691:10;28674:28;;;;;;;;;;;;;;;:61;;;;28620:127;28757:21;28781:8;28790:1;28781:11;;;;;;;;:::i;:::-;;;;;;;;;;;;28757:35;;28803:21;28827:8;:20;28836:10;28827:20;;;;;;;;;;;;;;;28803:44;;28860:13;28871:1;28860:10;:13::i;:::-;28902:1;28888:4;:11;;;:15;28884:381;;;28920:15;28938:70;28992:4;:15;;;28938:49;28982:4;28938:39;28954:4;:22;;;28938:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;:53;;:70;;;;:::i;:::-;28920:88;;29037:1;29027:7;:11;29023:231;;;29078:18;:16;:18::i;:::-;29067:7;:29;;29059:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;29184:54;29217:10;29230:7;29184:11;:24;;;;:54;;;;;:::i;:::-;29023:231;28905:360;28884:381;29275:25;29329:1:::0;29319:7:::1;:11;29315:394;;;29347:22;29372:4;:12;;;;;;;;;;;;:22;;;29403:4;29372:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29347:62;;29424:74;29462:10;29483:4;29490:7;29424:4;:12;;;;;;;;;;;;:29;;;;:74;;;;;;:::i;:::-;29573:14;29533:4;:12;;;;;;;;;;;;:22;;;29564:4;29533:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;;;:::i;:::-;29513:74;;29616:34;29632:17;29616:4;:11;;;:15;;:34;;;;:::i;:::-;29602:4;:11;;:48;;;;29680:17;29665:11;;:32;;;;;;;:::i;:::-;;;;;;;;29332:377;29315:394;29737:49;29781:4;29737:39;29753:4;:22;;;29737:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49;;;;:::i;:::-;29719:4;:15;;:67;;;;29812:10;29804:28;;;29824:7;29804:28;;;;;;:::i;:::-;;;;;;;;28609:1231;;;23459:1:::0;24413:7;:22;;;;28555:1285;:::o;31116:667::-;23503:1;24101:7;;:19;;24093:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23503:1;24234:7;:18;;;;31178:21:::1;31202:8;31211:1;31202:11;;;;;;;;:::i;:::-;;;;;;;;;;;;31178:35;;31224:21;31248:8;:20;31257:10;31248:20;;;;;;;;;;;;;;;31224:44;;31279:15;31297:4;:11;;;31279:29;;31334:7;31319:11;;:22;;;;;;;:::i;:::-;;;;;;;;31471:15;31439:16;:28;31456:10;31439:28;;;;;;;;;;;;;;;;:47;31435:122;;31542:3;31524:15;;31514:7;:25;;;;:::i;:::-;:31;;;;:::i;:::-;31503:42;;;;;:::i;:::-;;;31435:122;31598:1;31567:16;:28;31584:10;31567:28;;;;;;;;;;;;;;;:32;;;;31610:55;31644:10;31657:7;31610:4;:12;;;;;;;;;;;;:25;;;;:55;;;;;:::i;:::-;31690:1;31676:4;:11;;:15;;;;31720:1;31702:4;:15;;:19;;;;31755:10;31737:38;;;31767:7;31737:38;;;;;;:::i;:::-;;;;;;;;31167:616;;;23459:1:::0;24413:7;:22;;;;31116:667::o;3108:109::-;2393:12;:10;:12::i;:::-;2383:22;;:6;;;;;;;;;;:22;;;2375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3181:28:::1;3200:8;3181:18;:28::i;:::-;3108:109:::0;:::o;26844:725::-;26904:7;26924:21;26948:8;26957:1;26948:11;;;;;;;;:::i;:::-;;;;;;;;;;;;26924:35;;26970:21;26994:8;:15;27003:5;26994:15;;;;;;;;;;;;;;;26970:39;;27052:8;27024:4;:24;;;:36;27020:77;;;27084:1;27077:8;;;;;;27020:77;27107:25;27135:4;:22;;;27107:50;;27168:16;27187:11;;27168:30;;27231:4;:24;;;27213:15;:42;:59;;;;;27271:1;27259:8;:13;;27213:59;27209:270;;;27289:19;27311:63;27358:15;;27311:42;27337:4;:15;;;27311:21;:19;:21::i;:::-;:25;;:42;;;;:::i;:::-;:46;;:63;;;;:::i;:::-;27289:85;;27409:58;27431:35;27457:8;27431:21;27447:4;27431:11;:15;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;27409:17;:21;;:58;;;;:::i;:::-;27389:78;;27274:205;27209:270;27496:65;27545:4;:15;;;27496:44;27535:4;27496:34;27512:17;27496:4;:11;;;:15;;:34;;;;:::i;:::-;:38;;:44;;;;:::i;:::-;:48;;:65;;;;:::i;:::-;27489:72;;;;;;26844:725;;;;:::o;25275:35::-;;;:::o;32656:172::-;2393:12;:10;:12::i;:::-;2383:22;;:6;;;;;;;;;;:22;;;2375:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32739:5:::1;32729:6;:15;;32721:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;32784:13;32795:1;32784:10;:13::i;:::-;32814:6;32808:3;:12;;;;32656:172:::0;:::o;829:106::-;873:15;916:10;901:26;;829:106;:::o;12944:251::-;13097:86;13117:5;13147:23;;;13172:2;13176:5;13124:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13097:19;:86::i;:::-;12944:251;;;:::o;27645:600::-;27699:21;27723:8;27732:4;27723:14;;;;;;;;:::i;:::-;;;;;;;;;;;;27699:38;;27771:4;:24;;;27752:15;:43;27748:82;;27812:7;;;27748:82;27840:16;27859:11;;27840:30;;27897:1;27885:8;:13;27881:109;;;27942:15;27915:4;:24;;:42;;;;27972:7;;;;27881:109;28000:19;28022:63;28069:15;;28022:42;28048:4;:15;;;28022:21;:19;:21::i;:::-;:25;;:42;;;;:::i;:::-;:46;;:63;;;;:::i;:::-;28000:85;;28121:63;28148:35;28174:8;28148:21;28164:4;28148:11;:15;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;28121:4;:22;;;:26;;:63;;;;:::i;:::-;28096:4;:22;;:88;;;;28222:15;28195:4;:24;;:42;;;;27688:557;;;27645:600;;:::o;5784:470::-;5841:7;6091:1;6086;:6;6082:47;;;6116:1;6109:8;;;;6082:47;6141:9;6157:1;6153;:5;;;;:::i;:::-;6141:17;;6186:1;6181;6177;:5;;;;:::i;:::-;:10;6169:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6245:1;6238:8;;;5784:470;;;;;:::o;6730:131::-;6787:7;6814:39;6818:1;6821;6814:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6807:46;;6730:131;;;;:::o;4862:135::-;4919:7;4946:43;4950:1;4953;4946:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4939:50;;4862:135;;;;:::o;13203:248::-;13347:96;13367:5;13397:27;;;13426:4;13432:2;13436:5;13374:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13347:19;:96::i;:::-;13203:248;;;;:::o;4399:180::-;4456:7;4476:9;4492:1;4488;:5;;;;:::i;:::-;4476:17;;4517:1;4512;:6;;4504:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4570:1;4563:8;;;4399:180;;;;:::o;3323:229::-;3417:1;3397:22;;:8;:22;;;;3389:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3507:8;3478:38;;3499:6;;;;;;;;;;3478:38;;;;;;;;;;;;3536:8;3527:6;;:17;;;;;;;;;;;;;;;;;;3323:229;:::o;15507:774::-;15931:23;15957:69;15985:4;15957:69;;;;;;;;;;;;;;;;;15965:5;15957:27;;;;:69;;;;;:::i;:::-;15931:95;;16061:1;16041:10;:17;:21;16037:237;;;16196:10;16185:30;;;;;;;;;;;;:::i;:::-;16177:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16037:237;15577:704;15507:774;;:::o;7357:311::-;7476:7;7508:1;7504;:5;7511:12;7496:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7535:9;7551:1;7547;:5;;;;:::i;:::-;7535:17;;7659:1;7652:8;;;7357:311;;;;;:::o;5300:225::-;5419:7;5452:1;5447;:6;;5455:12;5439:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5479:9;5495:1;5491;:5;;;;:::i;:::-;5479:17;;5516:1;5509:8;;;5300:225;;;;;:::o;20106:229::-;20242:12;20274:53;20297:6;20305:4;20311:1;20314:12;20274:22;:53::i;:::-;20267:60;;20106:229;;;;;:::o;21591:1021::-;21763:12;21796:18;21807:6;21796:10;:18::i;:::-;21788:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21922:12;21936:23;21963:6;:11;;21983:8;21995:4;21963:37;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21921:79;;;;22015:7;22011:594;;;22046:10;22039:17;;;;;;22011:594;22180:1;22160:10;:17;:21;22156:438;;;22422:10;22416:17;22483:15;22470:10;22466:2;22462:19;22455:44;22156:438;22565:12;22558:20;;;;;;;;;;;:::i;:::-;;;;;;;;21591:1021;;;;;;;:::o;16969:639::-;17028:4;17290:16;17317:19;17339:66;17317:88;;;;17520:7;17508:20;17497:31;;17569:11;17557:8;:23;;:42;;;;;17596:3;17584:15;;:8;:15;;17557:42;17549:51;;;;16969:639;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:60::-;1537:3;1558:5;1551:12;;1509:60;;;:::o;1575:142::-;1625:9;1658:53;1676:34;1685:24;1703:5;1685:24;:::i;:::-;1676:34;:::i;:::-;1658:53;:::i;:::-;1645:66;;1575:142;;;:::o;1723:126::-;1773:9;1806:37;1837:5;1806:37;:::i;:::-;1793:50;;1723:126;;;:::o;1855:140::-;1919:9;1952:37;1983:5;1952:37;:::i;:::-;1939:50;;1855:140;;;:::o;2001:159::-;2102:51;2147:5;2102:51;:::i;:::-;2097:3;2090:64;2001:159;;:::o;2166:581::-;2357:4;2395:3;2384:9;2380:19;2372:27;;2409:85;2491:1;2480:9;2476:17;2467:6;2409:85;:::i;:::-;2504:72;2572:2;2561:9;2557:18;2548:6;2504:72;:::i;:::-;2586;2654:2;2643:9;2639:18;2630:6;2586:72;:::i;:::-;2668;2736:2;2725:9;2721:18;2712:6;2668:72;:::i;:::-;2166:581;;;;;;;:::o;2753:96::-;2790:7;2819:24;2837:5;2819:24;:::i;:::-;2808:35;;2753:96;;;:::o;2855:122::-;2928:24;2946:5;2928:24;:::i;:::-;2921:5;2918:35;2908:63;;2967:1;2964;2957:12;2908:63;2855:122;:::o;2983:139::-;3029:5;3067:6;3054:20;3045:29;;3083:33;3110:5;3083:33;:::i;:::-;2983:139;;;;:::o;3128:329::-;3187:6;3236:2;3224:9;3215:7;3211:23;3207:32;3204:119;;;3242:79;;:::i;:::-;3204:119;3362:1;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3333:117;3128:329;;;;:::o;3463:332::-;3584:4;3622:2;3611:9;3607:18;3599:26;;3635:71;3703:1;3692:9;3688:17;3679:6;3635:71;:::i;:::-;3716:72;3784:2;3773:9;3769:18;3760:6;3716:72;:::i;:::-;3463:332;;;;;:::o;3801:250::-;3908:4;3946:2;3935:9;3931:18;3923:26;;3959:85;4041:1;4030:9;4026:17;4017:6;3959:85;:::i;:::-;3801:250;;;;:::o;4057:118::-;4144:24;4162:5;4144:24;:::i;:::-;4139:3;4132:37;4057:118;;:::o;4181:222::-;4274:4;4312:2;4301:9;4297:18;4289:26;;4325:71;4393:1;4382:9;4378:17;4369:6;4325:71;:::i;:::-;4181:222;;;;:::o;4409:169::-;4493:11;4527:6;4522:3;4515:19;4567:4;4562:3;4558:14;4543:29;;4409:169;;;;:::o;4584:182::-;4724:34;4720:1;4712:6;4708:14;4701:58;4584:182;:::o;4772:366::-;4914:3;4935:67;4999:2;4994:3;4935:67;:::i;:::-;4928:74;;5011:93;5100:3;5011:93;:::i;:::-;5129:2;5124:3;5120:12;5113:19;;4772:366;;;:::o;5144:419::-;5310:4;5348:2;5337:9;5333:18;5325:26;;5397:9;5391:4;5387:20;5383:1;5372:9;5368:17;5361:47;5425:131;5551:4;5425:131;:::i;:::-;5417:139;;5144:419;;;:::o;5569:143::-;5626:5;5657:6;5651:13;5642:22;;5673:33;5700:5;5673:33;:::i;:::-;5569:143;;;;:::o;5718:351::-;5788:6;5837:2;5825:9;5816:7;5812:23;5808:32;5805:119;;;5843:79;;:::i;:::-;5805:119;5963:1;5988:64;6044:7;6035:6;6024:9;6020:22;5988:64;:::i;:::-;5978:74;;5934:128;5718:351;;;;:::o;6075:180::-;6123:77;6120:1;6113:88;6220:4;6217:1;6210:15;6244:4;6241:1;6234:15;6261:191;6301:4;6321:20;6339:1;6321:20;:::i;:::-;6316:25;;6355:20;6373:1;6355:20;:::i;:::-;6350:25;;6394:1;6391;6388:8;6385:34;;;6399:18;;:::i;:::-;6385:34;6444:1;6441;6437:9;6429:17;;6261:191;;;;:::o;6458:179::-;6598:31;6594:1;6586:6;6582:14;6575:55;6458:179;:::o;6643:366::-;6785:3;6806:67;6870:2;6865:3;6806:67;:::i;:::-;6799:74;;6882:93;6971:3;6882:93;:::i;:::-;7000:2;6995:3;6991:12;6984:19;;6643:366;;;:::o;7015:419::-;7181:4;7219:2;7208:9;7204:18;7196:26;;7268:9;7262:4;7258:20;7254:1;7243:9;7239:17;7232:47;7296:131;7422:4;7296:131;:::i;:::-;7288:139;;7015:419;;;:::o;7440:181::-;7580:33;7576:1;7568:6;7564:14;7557:57;7440:181;:::o;7627:366::-;7769:3;7790:67;7854:2;7849:3;7790:67;:::i;:::-;7783:74;;7866:93;7955:3;7866:93;:::i;:::-;7984:2;7979:3;7975:12;7968:19;;7627:366;;;:::o;7999:419::-;8165:4;8203:2;8192:9;8188:18;8180:26;;8252:9;8246:4;8242:20;8238:1;8227:9;8223:17;8216:47;8280:131;8406:4;8280:131;:::i;:::-;8272:139;;7999:419;;;:::o;8424:182::-;8564:34;8560:1;8552:6;8548:14;8541:58;8424:182;:::o;8612:366::-;8754:3;8775:67;8839:2;8834:3;8775:67;:::i;:::-;8768:74;;8851:93;8940:3;8851:93;:::i;:::-;8969:2;8964:3;8960:12;8953:19;;8612:366;;;:::o;8984:419::-;9150:4;9188:2;9177:9;9173:18;9165:26;;9237:9;9231:4;9227:20;9223:1;9212:9;9208:17;9201:47;9265:131;9391:4;9265:131;:::i;:::-;9257:139;;8984:419;;;:::o;9409:180::-;9457:77;9454:1;9447:88;9554:4;9551:1;9544:15;9578:4;9575:1;9568:15;9595:251;9735:34;9731:1;9723:6;9719:14;9712:58;9804:34;9799:2;9791:6;9787:15;9780:59;9595:251;:::o;9852:366::-;9994:3;10015:67;10079:2;10074:3;10015:67;:::i;:::-;10008:74;;10091:93;10180:3;10091:93;:::i;:::-;10209:2;10204:3;10200:12;10193:19;;9852:366;;;:::o;10224:419::-;10390:4;10428:2;10417:9;10413:18;10405:26;;10477:9;10471:4;10467:20;10463:1;10452:9;10448:17;10441:47;10505:131;10631:4;10505:131;:::i;:::-;10497:139;;10224:419;;;:::o;10649:305::-;10689:3;10708:20;10726:1;10708:20;:::i;:::-;10703:25;;10742:20;10760:1;10742:20;:::i;:::-;10737:25;;10896:1;10828:66;10824:74;10821:1;10818:81;10815:107;;;10902:18;;:::i;:::-;10815:107;10946:1;10943;10939:9;10932:16;;10649:305;;;;:::o;10960:233::-;10999:3;11022:24;11040:5;11022:24;:::i;:::-;11013:33;;11068:66;11061:5;11058:77;11055:103;;;11138:18;;:::i;:::-;11055:103;11185:1;11178:5;11174:13;11167:20;;10960:233;;;:::o;11199:177::-;11339:29;11335:1;11327:6;11323:14;11316:53;11199:177;:::o;11382:366::-;11524:3;11545:67;11609:2;11604:3;11545:67;:::i;:::-;11538:74;;11621:93;11710:3;11621:93;:::i;:::-;11739:2;11734:3;11730:12;11723:19;;11382:366;;;:::o;11754:419::-;11920:4;11958:2;11947:9;11943:18;11935:26;;12007:9;12001:4;11997:20;11993:1;11982:9;11978:17;11971:47;12035:131;12161:4;12035:131;:::i;:::-;12027:139;;11754:419;;;:::o;12179:180::-;12319:32;12315:1;12307:6;12303:14;12296:56;12179:180;:::o;12365:366::-;12507:3;12528:67;12592:2;12587:3;12528:67;:::i;:::-;12521:74;;12604:93;12693:3;12604:93;:::i;:::-;12722:2;12717:3;12713:12;12706:19;;12365:366;;;:::o;12737:419::-;12903:4;12941:2;12930:9;12926:18;12918:26;;12990:9;12984:4;12980:20;12976:1;12965:9;12961:17;12954:47;13018:131;13144:4;13018:131;:::i;:::-;13010:139;;12737:419;;;:::o;13162:177::-;13302:29;13298:1;13290:6;13286:14;13279:53;13162:177;:::o;13345:366::-;13487:3;13508:67;13572:2;13567:3;13508:67;:::i;:::-;13501:74;;13584:93;13673:3;13584:93;:::i;:::-;13702:2;13697:3;13693:12;13686:19;;13345:366;;;:::o;13717:419::-;13883:4;13921:2;13910:9;13906:18;13898:26;;13970:9;13964:4;13960:20;13956:1;13945:9;13941:17;13934:47;13998:131;14124:4;13998:131;:::i;:::-;13990:139;;13717:419;;;:::o;14142:348::-;14182:7;14205:20;14223:1;14205:20;:::i;:::-;14200:25;;14239:20;14257:1;14239:20;:::i;:::-;14234:25;;14427:1;14359:66;14355:74;14352:1;14349:81;14344:1;14337:9;14330:17;14326:105;14323:131;;;14434:18;;:::i;:::-;14323:131;14482:1;14479;14475:9;14464:20;;14142:348;;;;:::o;14496:180::-;14544:77;14541:1;14534:88;14641:4;14638:1;14631:15;14665:4;14662:1;14655:15;14682:185;14722:1;14739:20;14757:1;14739:20;:::i;:::-;14734:25;;14773:20;14791:1;14773:20;:::i;:::-;14768:25;;14812:1;14802:35;;14817:18;;:::i;:::-;14802:35;14859:1;14856;14852:9;14847:14;;14682:185;;;;:::o;14873:174::-;15013:26;15009:1;15001:6;14997:14;14990:50;14873:174;:::o;15053:366::-;15195:3;15216:67;15280:2;15275:3;15216:67;:::i;:::-;15209:74;;15292:93;15381:3;15292:93;:::i;:::-;15410:2;15405:3;15401:12;15394:19;;15053:366;;;:::o;15425:419::-;15591:4;15629:2;15618:9;15614:18;15606:26;;15678:9;15672:4;15668:20;15664:1;15653:9;15649:17;15642:47;15706:131;15832:4;15706:131;:::i;:::-;15698:139;;15425:419;;;:::o;15850:332::-;15971:4;16009:2;15998:9;15994:18;15986:26;;16022:71;16090:1;16079:9;16075:17;16066:6;16022:71;:::i;:::-;16103:72;16171:2;16160:9;16156:18;16147:6;16103:72;:::i;:::-;15850:332;;;;;:::o;16188:220::-;16328:34;16324:1;16316:6;16312:14;16305:58;16397:3;16392:2;16384:6;16380:15;16373:28;16188:220;:::o;16414:366::-;16556:3;16577:67;16641:2;16636:3;16577:67;:::i;:::-;16570:74;;16653:93;16742:3;16653:93;:::i;:::-;16771:2;16766:3;16762:12;16755:19;;16414:366;;;:::o;16786:419::-;16952:4;16990:2;16979:9;16975:18;16967:26;;17039:9;17033:4;17029:20;17025:1;17014:9;17010:17;17003:47;17067:131;17193:4;17067:131;:::i;:::-;17059:139;;16786:419;;;:::o;17211:442::-;17360:4;17398:2;17387:9;17383:18;17375:26;;17411:71;17479:1;17468:9;17464:17;17455:6;17411:71;:::i;:::-;17492:72;17560:2;17549:9;17545:18;17536:6;17492:72;:::i;:::-;17574;17642:2;17631:9;17627:18;17618:6;17574:72;:::i;:::-;17211:442;;;;;;:::o;17659:177::-;17799:29;17795:1;17787:6;17783:14;17776:53;17659:177;:::o;17842:366::-;17984:3;18005:67;18069:2;18064:3;18005:67;:::i;:::-;17998:74;;18081:93;18170:3;18081:93;:::i;:::-;18199:2;18194:3;18190:12;18183:19;;17842:366;;;:::o;18214:419::-;18380:4;18418:2;18407:9;18403:18;18395:26;;18467:9;18461:4;18457:20;18453:1;18442:9;18438:17;18431:47;18495:131;18621:4;18495:131;:::i;:::-;18487:139;;18214:419;;;:::o;18639:225::-;18779:34;18775:1;18767:6;18763:14;18756:58;18848:8;18843:2;18835:6;18831:15;18824:33;18639:225;:::o;18870:366::-;19012:3;19033:67;19097:2;19092:3;19033:67;:::i;:::-;19026:74;;19109:93;19198:3;19109:93;:::i;:::-;19227:2;19222:3;19218:12;19211:19;;18870:366;;;:::o;19242:419::-;19408:4;19446:2;19435:9;19431:18;19423:26;;19495:9;19489:4;19485:20;19481:1;19470:9;19466:17;19459:47;19523:131;19649:4;19523:131;:::i;:::-;19515:139;;19242:419;;;:::o;19667:90::-;19701:7;19744:5;19737:13;19730:21;19719:32;;19667:90;;;:::o;19763:116::-;19833:21;19848:5;19833:21;:::i;:::-;19826:5;19823:32;19813:60;;19869:1;19866;19859:12;19813:60;19763:116;:::o;19885:137::-;19939:5;19970:6;19964:13;19955:22;;19986:30;20010:5;19986:30;:::i;:::-;19885:137;;;;:::o;20028:345::-;20095:6;20144:2;20132:9;20123:7;20119:23;20115:32;20112:119;;;20150:79;;:::i;:::-;20112:119;20270:1;20295:61;20348:7;20339:6;20328:9;20324:22;20295:61;:::i;:::-;20285:71;;20241:125;20028:345;;;;:::o;20379:229::-;20519:34;20515:1;20507:6;20503:14;20496:58;20588:12;20583:2;20575:6;20571:15;20564:37;20379:229;:::o;20614:366::-;20756:3;20777:67;20841:2;20836:3;20777:67;:::i;:::-;20770:74;;20853:93;20942:3;20853:93;:::i;:::-;20971:2;20966:3;20962:12;20955:19;;20614:366;;;:::o;20986:419::-;21152:4;21190:2;21179:9;21175:18;21167:26;;21239:9;21233:4;21229:20;21225:1;21214:9;21210:17;21203:47;21267:131;21393:4;21267:131;:::i;:::-;21259:139;;20986:419;;;:::o;21411:99::-;21463:6;21497:5;21491:12;21481:22;;21411:99;;;:::o;21516:307::-;21584:1;21594:113;21608:6;21605:1;21602:13;21594:113;;;21693:1;21688:3;21684:11;21678:18;21674:1;21669:3;21665:11;21658:39;21630:2;21627:1;21623:10;21618:15;;21594:113;;;21725:6;21722:1;21719:13;21716:101;;;21805:1;21796:6;21791:3;21787:16;21780:27;21716:101;21565:258;21516:307;;;:::o;21829:102::-;21870:6;21921:2;21917:7;21912:2;21905:5;21901:14;21897:28;21887:38;;21829:102;;;:::o;21937:364::-;22025:3;22053:39;22086:5;22053:39;:::i;:::-;22108:71;22172:6;22167:3;22108:71;:::i;:::-;22101:78;;22188:52;22233:6;22228:3;22221:4;22214:5;22210:16;22188:52;:::i;:::-;22265:29;22287:6;22265:29;:::i;:::-;22260:3;22256:39;22249:46;;22029:272;21937:364;;;;:::o;22307:313::-;22420:4;22458:2;22447:9;22443:18;22435:26;;22507:9;22501:4;22497:20;22493:1;22482:9;22478:17;22471:47;22535:78;22608:4;22599:6;22535:78;:::i;:::-;22527:86;;22307:313;;;;:::o;22626:179::-;22766:31;22762:1;22754:6;22750:14;22743:55;22626:179;:::o;22811:366::-;22953:3;22974:67;23038:2;23033:3;22974:67;:::i;:::-;22967:74;;23050:93;23139:3;23050:93;:::i;:::-;23168:2;23163:3;23159:12;23152:19;;22811:366;;;:::o;23183:419::-;23349:4;23387:2;23376:9;23372:18;23364:26;;23436:9;23430:4;23426:20;23422:1;23411:9;23407:17;23400:47;23464:131;23590:4;23464:131;:::i;:::-;23456:139;;23183:419;;;:::o;23608:98::-;23659:6;23693:5;23687:12;23677:22;;23608:98;;;:::o;23712:147::-;23813:11;23850:3;23835:18;;23712:147;;;;:::o;23865:373::-;23969:3;23997:38;24029:5;23997:38;:::i;:::-;24051:88;24132:6;24127:3;24051:88;:::i;:::-;24044:95;;24148:52;24193:6;24188:3;24181:4;24174:5;24170:16;24148:52;:::i;:::-;24225:6;24220:3;24216:16;24209:23;;23973:265;23865:373;;;;:::o;24244:271::-;24374:3;24396:93;24485:3;24476:6;24396:93;:::i;:::-;24389:100;;24506:3;24499:10;;24244:271;;;;:::o
Swarm Source
ipfs://faa5867c27c4e89d6abf7ab2ed976739fd86381637918cbaec5bdb1c5788ab8a
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.