ERC-20
Overview
Max Total Supply
2,629,412.67860493944544032 sHEGIC
Holders
103
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
56,904.699557456638972798 sHEGICValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HegicStakingPool
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-21 */ // Sources flattened with hardhat v2.6.0 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `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); } // File @openzeppelin/contracts/math/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { 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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) public { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File contracts/Interfaces.sol /** * Hegic * Copyright (C) 2020 Hegic Protocol * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ pragma solidity 0.6.12; interface IHegicStaking is IERC20 { function classicLockupPeriod() external view returns (uint256); function lastBoughtTimestamp(address) external view returns (uint256); function claimProfits(address account) external returns (uint profit); function buyStakingLot(uint amount) external; function sellStakingLot(uint amount) external; function profitOf(address account) external view returns (uint profit); } interface IHegicStakingETH is IHegicStaking { function sendProfit() external payable; } interface IHegicStakingERC20 is IHegicStaking { function sendProfit(uint amount) external; } interface IOldStakingPool { function ownerPerformanceFee(address account) external view returns (uint); function withdraw(uint256 amount) external; } interface IOldPool { function withdraw(uint256 amount) external returns (uint); } // File @openzeppelin/contracts/access/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { 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 virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.2 <0.8.0; /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { 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); } } } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 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 SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 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 * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 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), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 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(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: 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(IERC20 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, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File contracts/HegicStakingPool.sol // SPDX-License-Identifier: GPL-3.0 pragma solidity 0.6.12; contract HegicStakingPool is Ownable, ERC20{ using SafeMath for uint; using SafeERC20 for IERC20; // Tokens IERC20 public immutable HEGIC; mapping(Asset => IHegicStaking) public staking; uint public constant STAKING_LOT_PRICE = 888_000e18; uint public constant ACCURACY = 1e32; address payable public FALLBACK_RECIPIENT; address payable public FEE_RECIPIENT; address public constant OLD_HEGIC_STAKING_POOL = address(0xf4128B00AFdA933428056d0F0D1d7652aF7e2B35); address public constant Z_HEGIC = address(0x837010619aeb2AE24141605aFC8f66577f6fb2e7); uint public performanceFee = 5000; uint public discountedPerformanceFee = 4000; bool public depositsAllowed = true; uint public lockUpPeriod = 15 minutes; bool private migrating; uint public totalBalance; uint public lockedBalance; uint public totalNumberOfStakingLots; mapping(Asset => uint) public numberOfStakingLots; mapping(Asset => uint) public totalProfitPerToken; mapping(Asset => IERC20) public token; enum Asset {WBTC, ETH, USDC} mapping(address => uint) public ownerPerformanceFee; mapping(address => bool) public isNotFirstTime; mapping(address => uint) public lastDepositTime; mapping(address => mapping(Asset => uint)) lastProfit; mapping(address => mapping(Asset => uint)) savedProfit; event Deposit(address account, uint amount); event Withdraw(address account, uint amount); event BuyLot(Asset asset, address account); event SellLot(Asset asset, address account); event ClaimedProfit(address account, Asset asset, uint netProfit, uint fee); constructor(IERC20 _HEGIC, IERC20 _WBTC, IERC20 _WETH, IERC20 _USDC, IHegicStaking _stakingWBTC, IHegicStaking _stakingETH, IHegicStaking _stakingUSDC) public ERC20("Staked HEGIC", "sHEGIC"){ HEGIC = _HEGIC; staking[Asset.WBTC] = _stakingWBTC; staking[Asset.ETH] = _stakingETH; staking[Asset.USDC] = _stakingUSDC; token[Asset.WBTC] = _WBTC; token[Asset.ETH] = _WETH; token[Asset.USDC] = _USDC; FEE_RECIPIENT = msg.sender; FALLBACK_RECIPIENT = msg.sender; // Approve Staking Lot Contract _HEGIC.approve(address(staking[Asset.WBTC]), type(uint256).max); _HEGIC.approve(address(staking[Asset.ETH]), type(uint256).max); _HEGIC.approve(address(staking[Asset.USDC]), type(uint256).max); } function approveContracts() external { require(depositsAllowed); HEGIC.approve(address(staking[Asset.WBTC]), type(uint256).max); HEGIC.approve(address(staking[Asset.ETH]), type(uint256).max); HEGIC.approve(address(staking[Asset.USDC]), type(uint256).max); } /** * @notice Stops the ability to add new deposits * @param _allow If set to false, new deposits will be rejected */ function allowDeposits(bool _allow) external onlyOwner { depositsAllowed = _allow; } /** * @notice Changes Fee paid to creator (only paid when taking profits) * @param _fee New fee */ function changePerformanceFee(uint _fee) external onlyOwner { require(_fee >= 0, "Fee too low"); require(_fee <= 10000, "Fee too high"); performanceFee = _fee; } /** * @notice Changes discounted Fee paid to creator (only paid when taking profits) * @param _fee New fee */ function changeDiscountedPerformanceFee(uint _fee) external onlyOwner { require(_fee >= 0, "Fee too low"); require(_fee <= 10000, "Fee too high"); discountedPerformanceFee = _fee; } /** * @notice Changes Fee Recipient address * @param _recipient New address */ function changeFeeRecipient(address _recipient) external onlyOwner { FEE_RECIPIENT = payable(_recipient); } /** * @notice Changes Fallback Recipient address. This is only used in case of unexpected behavior * @param _recipient New address */ function changeFallbackRecipient(address _recipient) external onlyOwner { FALLBACK_RECIPIENT = payable(_recipient); } /** * @notice Toggles effect of lockup period by setting lockUpPeriod to 0 (disabled) or to 15 minutes(enabled) * @param _unlock Boolean: if true, unlocks funds */ function unlockAllFunds(bool _unlock) external onlyOwner { if(_unlock) lockUpPeriod = 0; else lockUpPeriod = 15 minutes; } /** * @notice Migrates HEGIC from old staking pools (supports HegicStakingPool + ZLOT) * @param oldStakingPool staking pool from which we are migrating * @return HEGIC migrated */ function migrateFromOldStakingPool(IOldStakingPool oldStakingPool) external returns (uint) { IERC20 sToken; // to avoid reseting fee during deposit isNotFirstTime[msg.sender] = true; if(address(oldStakingPool) == address(OLD_HEGIC_STAKING_POOL)) { sToken = IERC20(address(oldStakingPool)); // take ownerPerformanceFee from old pool uint oldPerformanceFee = oldStakingPool.ownerPerformanceFee(msg.sender); uint dFee = discountedPerformanceFee; if(oldPerformanceFee > dFee) { ownerPerformanceFee[msg.sender] = dFee; } else { ownerPerformanceFee[msg.sender] = oldStakingPool.ownerPerformanceFee(msg.sender); } } else { // migrating from zLOT sToken = IERC20(Z_HEGIC); ownerPerformanceFee[msg.sender] = discountedPerformanceFee; } require(sToken.balanceOf(msg.sender) > 0, "Not enough balance / not supported"); // requires approval uint256 oldBalance = sToken.balanceOf(msg.sender); sToken.safeTransferFrom(msg.sender, address(this), oldBalance); if(address(oldStakingPool) == address(OLD_HEGIC_STAKING_POOL)) { // migrating from HegicStakingPool oldStakingPool.withdraw(oldBalance); } else { // migrating from zLOT oldBalance = IOldPool(address(oldStakingPool)).withdraw(oldBalance); } migrating = true; deposit(oldBalance); return oldBalance; } /** * @notice Deposits _amount HEGIC in the contract. * * @param _amount Number of HEGIC to deposit in the contract // number of sHEGIC that will be minted */ function deposit(uint _amount) public { require(_amount > 0, "Amount too low"); require(depositsAllowed, "Deposits are not allowed at the moment"); // set fee for that staking lot owner - this effectively sets the maximum FEE an owner can have // each time user deposits, this checks if current fee is higher or lower than previous fees // and updates it if it is lower if(ownerPerformanceFee[msg.sender] > performanceFee || !isNotFirstTime[msg.sender]) { ownerPerformanceFee[msg.sender] = performanceFee; isNotFirstTime[msg.sender] = true; } lastDepositTime[msg.sender] = block.timestamp; // receive deposit depositHegic(_amount); while(totalBalance.sub(lockedBalance) >= STAKING_LOT_PRICE){ buyStakingLot(); } } /** * @notice Withdraws _amount HEGIC from the contract. * * @param _amount Number of HEGIC to withdraw from contract // number of sHEGIC that will be burnt */ function withdraw(uint _amount) public { require(_amount <= balanceOf(msg.sender), "Not enough balance"); require(canWithdraw(msg.sender), "You deposited less than 15 mins ago. Your funds are locked"); while(totalBalance.sub(lockedBalance) < _amount){ sellStakingLot(); } withdrawHegic(_amount); } /** * @notice Withdraws _amount HEGIC from the contract and claims all profit pending in contract * */ function claimProfitAndWithdraw() external { claimAllProfit(); withdraw(balanceOf(msg.sender)); } /** * @notice Claims profit for both assets. Profit will be paid to msg.sender * This is the most gas-efficient way to claim profits (instead of separately) * */ function claimAllProfit() public { claimProfit(Asset.WBTC); claimProfit(Asset.ETH); claimProfit(Asset.USDC); } /** * @notice Claims profit for specific _asset. Profit will be paid to msg.sender * * @param _asset Asset (ETH or WBTC) */ function claimProfit(Asset _asset) public { uint profit = saveProfit(msg.sender, _asset); savedProfit[msg.sender][_asset] = 0; _transferProfit(profit, _asset, msg.sender, ownerPerformanceFee[msg.sender]); } /** * @notice Returns profit to be paid when claimed * * @param _account Account to get profit for * @param _asset Asset (ETH or WBTC) */ function profitOf(address _account, Asset _asset) public view returns (uint profit) { return savedProfit[_account][_asset].add(getUnsaved(_account, _asset)); } /** * @notice Returns address of Hegic's ETH Staking Lot contract */ function getHegicStakingETH() public view returns (IHegicStaking HegicStakingETH){ return staking[Asset.ETH]; } /** * @notice Returns address of Hegic's WBTC Staking Lot contract */ function getHegicStakingWBTC() public view returns (IHegicStaking HegicStakingWBTC){ return staking[Asset.WBTC]; } /** * @notice Returns address of Hegic's USDC Staking Lot contract */ function getHegicStakingUSDC() public view returns (IHegicStaking HegicStakingWBTC){ return staking[Asset.USDC]; } /** * @notice Support function. Gets profit that has not been saved (either in Staking Lot contracts) * or in this contract * * @param _account Account to get unsaved profit for * @param _asset Asset (ETH or WBTC) */ function getUnsaved(address _account, Asset _asset) public view returns (uint profit) { profit = totalProfitPerToken[_asset].sub(lastProfit[_account][_asset]).add(getUnreceivedProfitPerToken(_asset)).mul(balanceOf(_account)).div(ACCURACY); } /** * @notice Internal function. Update profit per token for _asset * * @param _asset Underlying asset (ETH or WBTC) */ function updateProfit(Asset _asset) internal { uint profit = staking[_asset].profitOf(address(this)); if(profit > 0) { profit = staking[_asset].claimProfits(address(this)); } if(totalBalance <= 0) { IERC20 assetToken = token[_asset]; assetToken.safeTransfer(FALLBACK_RECIPIENT, profit); } else { totalProfitPerToken[_asset] = totalProfitPerToken[_asset].add(profit.mul(ACCURACY).div(totalBalance)); } } /** * @notice Internal function. Transfers net profit to the owner of the sHEGIC. * * @param _amount Amount of Asset (ETH or WBTC) to be sent * @param _asset Asset to be sent (ETH or WBTC) * @param _account Receiver of the net profit * @param _fee Fee % to be applied to the profit (100% = 100000) */ function _transferProfit(uint _amount, Asset _asset, address _account, uint _fee) internal { uint netProfit = _amount.mul(uint(100000).sub(_fee)).div(100000); uint fee = _amount.sub(netProfit); IERC20 assetToken = token[_asset]; assetToken.safeTransfer(_account, netProfit); assetToken.safeTransfer(FEE_RECIPIENT, fee); emit ClaimedProfit(_account, _asset, netProfit, fee); } /** * @notice Internal function to transfer deposited HEGIC to the contract and mint sHEGIC (Staked HEGIC) * @param _amount Amount of HEGIC to deposit // Amount of sHEGIC that will be minted */ function depositHegic(uint _amount) internal { totalBalance = totalBalance.add(_amount); // if we are during migration, we don't need to take HEGIC from the user if(!migrating) { HEGIC.safeTransferFrom(msg.sender, address(this), _amount); } else { migrating = false; require(totalBalance == HEGIC.balanceOf(address(this)).add(lockedBalance), "!"); } _mint(msg.sender, _amount); } /** * @notice Internal function. Moves _amount HEGIC from contract to user * also burns staked HEGIC (sHEGIC) tokens * @param _amount Amount of HEGIC to withdraw // Amount of sHEGIC that will be burned */ function withdrawHegic(uint _amount) internal { _burn(msg.sender, _amount); HEGIC.safeTransfer(msg.sender, _amount); totalBalance = totalBalance.sub(_amount); emit Withdraw(msg.sender, _amount); } /** * @notice Internal function. Chooses which lot to buy (ETH or WBTC) and buys it * */ function buyStakingLot() internal { // we buy 1 ETH staking lot, then 1 WBTC staking lot, then 1 USDC staking lot, ... Asset asset = Asset.USDC; if(numberOfStakingLots[Asset.USDC] >= numberOfStakingLots[Asset.WBTC]){ if(numberOfStakingLots[Asset.WBTC] >= numberOfStakingLots[Asset.ETH]){ asset = Asset.ETH; } else { asset = Asset.WBTC; } } lockedBalance = lockedBalance.add(STAKING_LOT_PRICE); staking[asset].buyStakingLot(1); totalNumberOfStakingLots++; numberOfStakingLots[asset]++; emit BuyLot(asset, msg.sender); } /** * @notice Internal function. Chooses which lot to sell (ETH or WBTC or USDC) and sells it * */ function sellStakingLot() internal { Asset asset = Asset.ETH; if(numberOfStakingLots[Asset.ETH] <= numberOfStakingLots[Asset.WBTC] || staking[Asset.ETH].lastBoughtTimestamp(address(this)) .add(staking[Asset.ETH].classicLockupPeriod()) > block.timestamp || staking[Asset.ETH].balanceOf(address(this)) == 0) { if(numberOfStakingLots[Asset.WBTC] <= numberOfStakingLots[Asset.USDC] && staking[Asset.USDC].lastBoughtTimestamp(address(this)) .add(staking[Asset.USDC].classicLockupPeriod()) <= block.timestamp && staking[Asset.USDC].balanceOf(address(this)) > 0){ asset = Asset.USDC; } else if (staking[Asset.WBTC].lastBoughtTimestamp(address(this)) .add(staking[Asset.WBTC].classicLockupPeriod()) <= block.timestamp && staking[Asset.WBTC].balanceOf(address(this)) > 0){ asset = Asset.WBTC; } else { asset = Asset.ETH; // this require only applies here. otherwise conditions have been already checked require( staking[asset].lastBoughtTimestamp(address(this)) .add(staking[asset].classicLockupPeriod()) <= block.timestamp && staking[asset].balanceOf(address(this)) > 0, "Lot sale is locked by Hegic. Funds should be available in less than 24h" ); } } lockedBalance = lockedBalance.sub(STAKING_LOT_PRICE); staking[asset].sellStakingLot(1); totalNumberOfStakingLots--; numberOfStakingLots[asset]--; emit SellLot(asset, msg.sender); } /** * @notice Support function. Calculates how much profit would receive each token if the contract claimed * profit accumulated in Hegic's Staking Lot contracts * * @param _asset Asset (WBTC or ETH) */ function getUnreceivedProfitPerToken(Asset _asset) public view returns (uint unreceivedProfitPerToken){ uint profit = staking[_asset].profitOf(address(this)); unreceivedProfitPerToken = profit.mul(ACCURACY).div(totalBalance); } /** * @notice Saves profit for a certain _account. This profit is absolute in value * this function is called before every token transfer to keep the state of profits correctly * * @param _account account to save profit to */ function saveProfit(address _account) internal { saveProfit(_account, Asset.WBTC); saveProfit(_account, Asset.ETH); saveProfit(_account, Asset.USDC); } /** * @notice Internal function that saves unpaid profit to keep accounting. * * @param _account Account to save profit to * @param _asset Asset (WBTC or ETH) */ function saveProfit(address _account, Asset _asset) internal returns (uint profit) { updateProfit(_asset); uint unsaved = getUnsaved(_account, _asset); lastProfit[_account][_asset] = totalProfitPerToken[_asset]; profit = savedProfit[_account][_asset].add(unsaved); savedProfit[_account][_asset] = profit; } /** * @notice Support function. Relevant to the profit system. It will save state of profit before each * token transfer (either deposit or withdrawal) * * @param from Account sending tokens * @param to Account receiving tokens */ function _beforeTokenTransfer(address from, address to, uint256) internal override { require(canWithdraw(from), "!locked funds"); if (from != address(0)) saveProfit(from); if (to != address(0)) saveProfit(to); } /** * @notice Returns a boolean indicating if that specific _account can withdraw or not * (due to lockupperiod reasons) * @param _account Account to check withdrawal status */ function canWithdraw(address _account) public view returns (bool) { return (lastDepositTime[_account].add(lockUpPeriod) <= block.timestamp); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_HEGIC","type":"address"},{"internalType":"contract IERC20","name":"_WBTC","type":"address"},{"internalType":"contract IERC20","name":"_WETH","type":"address"},{"internalType":"contract IERC20","name":"_USDC","type":"address"},{"internalType":"contract IHegicStaking","name":"_stakingWBTC","type":"address"},{"internalType":"contract IHegicStaking","name":"_stakingETH","type":"address"},{"internalType":"contract IHegicStaking","name":"_stakingUSDC","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum HegicStakingPool.Asset","name":"asset","type":"uint8"},{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"BuyLot","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"enum HegicStakingPool.Asset","name":"asset","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"netProfit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"ClaimedProfit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum HegicStakingPool.Asset","name":"asset","type":"uint8"},{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"SellLot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ACCURACY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FALLBACK_RECIPIENT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_RECIPIENT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HEGIC","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OLD_HEGIC_STAKING_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_LOT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Z_HEGIC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_allow","type":"bool"}],"name":"allowDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"canWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"changeDiscountedPerformanceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"changeFallbackRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"changeFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"changePerformanceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimAllProfit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum HegicStakingPool.Asset","name":"_asset","type":"uint8"}],"name":"claimProfit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimProfitAndWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositsAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discountedPerformanceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHegicStakingETH","outputs":[{"internalType":"contract IHegicStaking","name":"HegicStakingETH","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHegicStakingUSDC","outputs":[{"internalType":"contract IHegicStaking","name":"HegicStakingWBTC","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHegicStakingWBTC","outputs":[{"internalType":"contract IHegicStaking","name":"HegicStakingWBTC","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum HegicStakingPool.Asset","name":"_asset","type":"uint8"}],"name":"getUnreceivedProfitPerToken","outputs":[{"internalType":"uint256","name":"unreceivedProfitPerToken","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"enum HegicStakingPool.Asset","name":"_asset","type":"uint8"}],"name":"getUnsaved","outputs":[{"internalType":"uint256","name":"profit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isNotFirstTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastDepositTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockUpPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IOldStakingPool","name":"oldStakingPool","type":"address"}],"name":"migrateFromOldStakingPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum HegicStakingPool.Asset","name":"","type":"uint8"}],"name":"numberOfStakingLots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ownerPerformanceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"enum HegicStakingPool.Asset","name":"_asset","type":"uint8"}],"name":"profitOf","outputs":[{"internalType":"uint256","name":"profit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum HegicStakingPool.Asset","name":"","type":"uint8"}],"name":"staking","outputs":[{"internalType":"contract IHegicStaking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum HegicStakingPool.Asset","name":"","type":"uint8"}],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNumberOfStakingLots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum HegicStakingPool.Asset","name":"","type":"uint8"}],"name":"totalProfitPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_unlock","type":"bool"}],"name":"unlockAllFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052611388600a55610fa0600b55600c805460ff19166001179055610384600d553480156200003057600080fd5b506040516200406938038062004069833981810160405260e08110156200005657600080fd5b5080516020808301516040808501516060860151608087015160a088015160c09098015184518086018652600c81526b5374616b656420484547494360a01b818901528551808701909652600686526573484547494360d01b9786019790975296979496929591949093909291906000620000d062000536565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200012f9060049060208501906200053a565b508051620001459060059060208401906200053a565b50506006805460ff19166012179055506001600160601b0319606088901b166080526000808052600760208190526000805160206200404983398151915280546001600160a01b0319166001600160a01b038716179055839160016002811115620001ac57fe5b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508060076000600280811115620001f057fe5b6002811115620001fc57fe5b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555085601460008060028111156200024057fe5b60028111156200024c57fe5b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508460146000600160028111156200029157fe5b60028111156200029d57fe5b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508360146000600280811115620002e157fe5b6002811115620002ed57fe5b81526020808201929092526040908101600090812080546001600160a01b039586166001600160a01b0319918216179091556009805482163390811790915560088054909216179055808052600783526000805160206200404983398151915254825163095ea7b360e01b8152908516600482015260001960248201529151938b169363095ea7b3936044808501949193918390030190829087803b1580156200039657600080fd5b505af1158015620003ab573d6000803e3d6000fd5b505050506040513d6020811015620003c257600080fd5b505060016000908152600760209081527fb39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b828546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051918b169363095ea7b39360448084019491939192918390030190829087803b1580156200044857600080fd5b505af11580156200045d573d6000803e3d6000fd5b505050506040513d60208110156200047457600080fd5b505060026000908152600760209081527fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051918b169363095ea7b39360448084019491939192918390030190829087803b158015620004fa57600080fd5b505af11580156200050f573d6000803e3d6000fd5b505050506040513d60208110156200052657600080fd5b50620005d6975050505050505050565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200057d57805160ff1916838001178555620005ad565b82800160010185558215620005ad579182015b82811115620005ad57825182559160200191906001019062000590565b50620005bb929150620005bf565b5090565b5b80821115620005bb5760008155600101620005c0565b60805160601c613a376200061260003980610f435280610fcc528061108a528061115a52806129255280612a815280612ae05250613a376000f3fe608060405234801561001057600080fd5b506004361061035c5760003560e01c806379a2908c116101d3578063b6b55f2511610104578063f02a7d19116100a2578063fbcd9b051161007c578063fbcd9b05146108db578063fbf683c1146108e3578063fd00ea1c146108eb578063ff4dfa961461090b5761035c565b8063f02a7d1914610872578063f2fde38b14610898578063f6156d5a146108be5761035c565b8063c592348f116100de578063c592348f146107f6578063dd62ed3e1461081c578063e32d03bf1461084a578063ebd090541461086a5761035c565b8063b6b55f251461078a578063bc41ab72146107a7578063bdd79f07146107c75761035c565b80638f76137f11610171578063a457c2d71161014b578063a457c2d714610722578063a9059cbb1461074e578063ad7a672f1461077a578063b04b243d146107825761035c565b80638f76137f146106f357806395d89b41146106fb5780639a213763146107035761035c565b806387788782116101ad57806387788782146106b55780638ad8a539146106bd5780638da5cb5b146106e35780638eaa9597146106eb5761035c565b806379a2908c146106855780637b80889b1461068d57806385335da8146106955761035c565b80632c2e33c3116102ad5780636132ac361161024b57806370a082311161022557806370a0823114610647578063715018a61461066d57806371e395a81461067557806377af8ceb1461067d5761035c565b80636132ac36146105f95780636c6925f91461061f5780636cc94a69146106275761035c565b8063313ce56711610287578063313ce5671461058a57806339509351146105a85780634aedc64f146105d45780635c029ac8146105f15761035c565b80632c2e33c3146105455780632d3008dd146105655780632e1a7d4d1461056d5761035c565b806318160ddd1161031a5780631cc23341116102f45780631cc23341146104d95780631e8bc190146104e157806323604071146104e957806323b872dd1461050f5761035c565b806318160ddd146104a357806319262d30146104ab5780631b016373146104d15761035c565b8062e36f41146103615780630100670b1461038557806302527753146103a6578063043134e0146103de57806306fdde03146103e6578063095ea7b314610463575b600080fd5b61036961093a565b604080516001600160a01b039092168252519081900360200190f35b6103a46004803603602081101561039b57600080fd5b50351515610952565b005b6103cc600480360360208110156103bc57600080fd5b50356001600160a01b03166109c7565b60408051918252519081900360200190f35b6103696109d9565b6103ee610a0b565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610428578181015183820152602001610410565b50505050905090810190601f1680156104555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61048f6004803603604081101561047957600080fd5b506001600160a01b038135169060200135610aa1565b604080519115158252519081900360200190f35b6103cc610abf565b61048f600480360360208110156104c157600080fd5b50356001600160a01b0316610ac5565b610369610af6565b6103a4610b05565b610369610b20565b6103a4600480360360208110156104ff57600080fd5b50356001600160a01b0316610b2c565b61048f6004803603606081101561052557600080fd5b506001600160a01b03813581169160208101359091169060400135610bb0565b6103cc6004803603602081101561055b57600080fd5b503560ff16610c38565b6103cc610c4a565b6103a46004803603602081101561058357600080fd5b5035610c58565b610592610d25565b6040805160ff9092168252519081900360200190f35b61048f600480360360408110156105be57600080fd5b506001600160a01b038135169060200135610d2e565b6103a4600480360360208110156105ea57600080fd5b5035610d7c565b6103a4610e29565b6103cc6004803603602081101561060f57600080fd5b50356001600160a01b0316610e47565b6103cc610e59565b6103696004803603602081101561063d57600080fd5b503560ff16610e5f565b6103cc6004803603602081101561065d57600080fd5b50356001600160a01b0316610e7a565b6103a4610e95565b610369610f41565b6103a4610f65565b6103cc6111d2565b6103cc6111d8565b6103cc600480360360208110156106ab57600080fd5b503560ff166111de565b6103cc6112a5565b61048f600480360360208110156106d357600080fd5b50356001600160a01b03166112ab565b6103696112c0565b6103696112cf565b61048f6112da565b6103ee6112e3565b6103a46004803603602081101561071957600080fd5b50351515611344565b61048f6004803603604081101561073857600080fd5b506001600160a01b0381351690602001356113bf565b61048f6004803603604081101561076457600080fd5b506001600160a01b038135169060200135611427565b6103cc61143b565b610369611441565b6103a4600480360360208110156107a057600080fd5b5035611459565b6103cc600480360360208110156107bd57600080fd5b503560ff1661158d565b6103cc600480360360408110156107dd57600080fd5b5080356001600160a01b0316906020013560ff1661159f565b6103cc6004803603602081101561080c57600080fd5b50356001600160a01b03166115fb565b6103cc6004803603604081101561083257600080fd5b506001600160a01b03813581169160200135166119ee565b6103a46004803603602081101561086057600080fd5b503560ff16611a19565b610369611a93565b6103a46004803603602081101561088857600080fd5b50356001600160a01b0316611aa2565b6103a4600480360360208110156108ae57600080fd5b50356001600160a01b0316611b26565b6103a4600480360360208110156108d457600080fd5b5035611c28565b6103cc611cd5565b6103cc611ce7565b6103696004803603602081101561090157600080fd5b503560ff16611ced565b6103cc6004803603604081101561092157600080fd5b5080356001600160a01b0316906020013560ff16611d08565b73837010619aeb2ae24141605afc8f66577f6fb2e781565b61095a611dba565b6001600160a01b031661096b6112c0565b6001600160a01b0316146109b4576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b600c805460ff1916911515919091179055565b60176020526000908152604090205481565b600060078160025b60028111156109ec57fe5b81526020810191909152604001600020546001600160a01b0316905090565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a975780601f10610a6c57610100808354040283529160200191610a97565b820191906000526020600020905b815481529060010190602001808311610a7a57829003601f168201915b5050505050905090565b6000610ab5610aae611dba565b8484611dbe565b5060015b92915050565b60035490565b600d546001600160a01b03821660009081526017602052604081205490914291610aee91611eaa565b111592915050565b6008546001600160a01b031681565b610b0d610e29565b610b1e610b1933610e7a565b610c58565b565b600060078160016109e1565b610b34611dba565b6001600160a01b0316610b456112c0565b6001600160a01b031614610b8e576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610bbd848484611f04565b610c2d84610bc9611dba565b610c2885604051806060016040528060288152602001613899602891396001600160a01b038a16600090815260026020526040812090610c07611dba565b6001600160a01b031681526020810191909152604001600020549190612061565b611dbe565b5060015b9392505050565b60126020526000908152604090205481565b69bc0a9392c65c3b00000081565b610c6133610e7a565b811115610caa576040805162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015290519081900360640190fd5b610cb333610ac5565b610cee5760405162461bcd60e51b815260040180806020018281038252603a815260200180613721603a913960400191505060405180910390fd5b80610d06601054600f546120f890919063ffffffff16565b1015610d1957610d14612155565b610cee565b610d228161290e565b50565b60065460ff1690565b6000610ab5610d3b611dba565b84610c288560026000610d4c611dba565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611eaa565b610d84611dba565b6001600160a01b0316610d956112c0565b6001600160a01b031614610dde576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b612710811115610e24576040805162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b604482015290519081900360640190fd5b600b55565b610e336000611a19565b610e3d6001611a19565b610b1e6002611a19565b60156020526000908152604090205481565b600d5481565b6007602052600090815260409020546001600160a01b031681565b6001600160a01b031660009081526001602052604090205490565b610e9d611dba565b6001600160a01b0316610eae6112c0565b6001600160a01b031614610ef7576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5460ff16610f7457600080fd5b6000808052600760209081527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290517f00000000000000000000000000000000000000000000000000000000000000009092169363095ea7b39360448084019491939192918390030190829087803b15801561101657600080fd5b505af115801561102a573d6000803e3d6000fd5b505050506040513d602081101561104057600080fd5b50506001600090815260076020908152600080516020613924833981519152546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290517f00000000000000000000000000000000000000000000000000000000000000009092169363095ea7b39360448084019491939192918390030190829087803b1580156110d457600080fd5b505af11580156110e8573d6000803e3d6000fd5b505050506040513d60208110156110fe57600080fd5b505060026000908152600760209081527fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290517f00000000000000000000000000000000000000000000000000000000000000009092169363095ea7b39360448084019491939192918390030190829087803b1580156111a457600080fd5b505af11580156111b8573d6000803e3d6000fd5b505050506040513d60208110156111ce57600080fd5b5050565b600b5481565b60105481565b600080600760008460028111156111f157fe5b60028111156111fc57fe5b815260208082019290925260409081016000205481516354198ce960e01b815230600482015291516001600160a01b03909116926354198ce99260248082019391829003018186803b15801561125157600080fd5b505afa158015611265573d6000803e3d6000fd5b505050506040513d602081101561127b57600080fd5b5051600f54909150610c319061129f836d04ee2d6d415b85acef810000000061299a565b906129f3565b600a5481565b60166020526000908152604090205460ff1681565b6000546001600160a01b031690565b6000600781806109e1565b600c5460ff1681565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a975780601f10610a6c57610100808354040283529160200191610a97565b61134c611dba565b6001600160a01b031661135d6112c0565b6001600160a01b0316146113a6576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b80156113b6576000600d55610d22565b610384600d5550565b6000610ab56113cc611dba565b84610c28856040518060600160405280602581526020016139b760259139600260006113f6611dba565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612061565b6000610ab5611434611dba565b8484611f04565b600f5481565b73f4128b00afda933428056d0f0d1d7652af7e2b3581565b6000811161149f576040805162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b604482015290519081900360640190fd5b600c5460ff166114e05760405162461bcd60e51b81526004018080602001828103825260268152602001806139dc6026913960400191505060405180910390fd5b600a5433600090815260156020526040902054118061150f57503360009081526016602052604090205460ff16155b1561153e57600a54336000908152601560209081526040808320939093556016905220805460ff191660011790555b33600090815260176020526040902042905561155981612a5a565b69bc0a9392c65c3b00000061157b601054600f546120f890919063ffffffff16565b10610d2257611588612b6a565b611559565b60136020526000908152604090205481565b6000610c316115ae8484611d08565b6001600160a01b0385166000908152601960205260408120908560028111156115d357fe5b60028111156115de57fe5b815260200190815260200160002054611eaa90919063ffffffff16565b336000908152601660205260408120805460ff19166001179055806001600160a01b03831673f4128b00afda933428056d0f0d1d7652af7e2b351415611768578290506000836001600160a01b0316636132ac36336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561168d57600080fd5b505afa1580156116a1573d6000803e3d6000fd5b505050506040513d60208110156116b757600080fd5b5051600b54909150808211156116de57336000908152601560205260409020819055611761565b60408051633099561b60e11b815233600482015290516001600160a01b03871691636132ac36916024808301926020929190829003018186803b15801561172457600080fd5b505afa158015611738573d6000803e3d6000fd5b505050506040513d602081101561174e57600080fd5b5051336000908152601560205260409020555b5050611792565b50600b543360009081526015602052604090205573837010619aeb2ae24141605afc8f66577f6fb2e75b6000816001600160a01b03166370a08231336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156117e157600080fd5b505afa1580156117f5573d6000803e3d6000fd5b505050506040513d602081101561180b57600080fd5b5051116118495760405162461bcd60e51b81526004018080602001828103825260228152602001806138e16022913960400191505060405180910390fd5b6000816001600160a01b03166370a08231336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561189857600080fd5b505afa1580156118ac573d6000803e3d6000fd5b505050506040513d60208110156118c257600080fd5b505190506118db6001600160a01b038316333084612d13565b6001600160a01b03841673f4128b00afda933428056d0f0d1d7652af7e2b35141561196357836001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561194657600080fd5b505af115801561195a573d6000803e3d6000fd5b505050506119d8565b836001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156119a957600080fd5b505af11580156119bd573d6000803e3d6000fd5b505050506040513d60208110156119d357600080fd5b505190505b600e805460ff19166001179055610c3181611459565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000611a253383612d73565b3360009081526019602052604081209192509081846002811115611a4557fe5b6002811115611a5057fe5b8152602001908152602001600020819055506111ce81833360156000336001600160a01b03166001600160a01b0316815260200190815260200160002054612e8a565b6009546001600160a01b031681565b611aaa611dba565b6001600160a01b0316611abb6112c0565b6001600160a01b031614611b04576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b611b2e611dba565b6001600160a01b0316611b3f6112c0565b6001600160a01b031614611b88576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b6001600160a01b038116611bcd5760405162461bcd60e51b815260040180806020018281038252602681526020018061377d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611c30611dba565b6001600160a01b0316611c416112c0565b6001600160a01b031614611c8a576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b612710811115611cd0576040805162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b604482015290519081900360640190fd5b600a55565b6d04ee2d6d415b85acef810000000081565b60115481565b6014602052600090815260409020546001600160a01b031681565b6000610c316d04ee2d6d415b85acef810000000061129f611d2886610e7a565b611db4611d34876111de565b6001600160a01b0389166000908152601860205260408120611dae918a6002811115611d5c57fe5b6002811115611d6757fe5b815260200190815260200160002054601360008b6002811115611d8657fe5b6002811115611d9157fe5b8152602001908152602001600020546120f890919063ffffffff16565b90611eaa565b9061299a565b3390565b6001600160a01b038316611e035760405162461bcd60e51b81526004018080602001828103825260248152602001806139696024913960400191505060405180910390fd5b6001600160a01b038216611e485760405162461bcd60e51b81526004018080602001828103825260228152602001806137a36022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015610c31576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038316611f495760405162461bcd60e51b81526004018080602001828103825260258152602001806139446025913960400191505060405180910390fd5b6001600160a01b038216611f8e5760405162461bcd60e51b81526004018080602001828103825260238152602001806136fe6023913960400191505060405180910390fd5b611f99838383612f81565b611fd6816040518060600160405280602681526020016137e5602691396001600160a01b0386166000908152600160205260409020549190612061565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546120059082611eaa565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156120f05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120b557818101518382015260200161209d565b50505050905090810190601f1680156120e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282111561214f576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60126020526000805160206137c583398151915254600160008190527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a35490911015806122c1575060016000526007602090815260008051602061392483398151915254604080516301b7150360e41b8152905142936122bf936001600160a01b031692631b7150309260048083019392829003018186803b1580156121fa57600080fd5b505afa15801561220e573d6000803e3d6000fd5b505050506040513d602081101561222457600080fd5b50516007600060015b600281111561223857fe5b8152602080820192909252604090810160002054815163a673729160e01b815230600482015291516001600160a01b039091169263a67372919260248082019391829003018186803b15801561228d57600080fd5b505afa1580156122a1573d6000803e3d6000fd5b505050506040513d60208110156122b757600080fd5b505190611eaa565b115b80612353575060016000526007602090815260008051602061392483398151915254604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561232557600080fd5b505afa158015612339573d6000803e3d6000fd5b505050506040513d602081101561234f57600080fd5b5051155b156127d15760126020527f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b254600080526000805160206137c5833981519152541180159061244557506002600052600760209081527fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d54604080516301b7150360e41b815290514293612442936001600160a01b031692631b7150309260048083019392829003018186803b15801561240b57600080fd5b505afa15801561241f573d6000803e3d6000fd5b505050506040513d602081101561243557600080fd5b505160076000600261222d565b11155b80156124ec575060026000908152600760209081527fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d54604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b1580156124be57600080fd5b505afa1580156124d2573d6000803e3d6000fd5b505050506040513d60208110156124e857600080fd5b5051115b156124f9575060026127d1565b60008052600760209081527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df54604080516301b7150360e41b81529051429361259d936001600160a01b031692631b7150309260048083019392829003018186803b15801561256757600080fd5b505afa15801561257b573d6000803e3d6000fd5b505050506040513d602081101561259157600080fd5b5051600760008061222d565b1115801561264457506000808052600760209081527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df54604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561261657600080fd5b505afa15801561262a573d6000803e3d6000fd5b505050506040513d602081101561264057600080fd5b5051115b15612651575060006127d1565b50600160008190526007602090815260008051602061392483398151915254604080516301b7150360e41b8152905142936126ed936001600160a01b031692631b7150309260048083019392829003018186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60208110156126db57600080fd5b50516007600085600281111561222d57fe5b11158015612796575060006007600083600281111561270857fe5b600281111561271357fe5b815260208082019290925260409081016000205481516370a0823160e01b815230600482015291516001600160a01b03909116926370a082319260248082019391829003018186803b15801561276857600080fd5b505afa15801561277c573d6000803e3d6000fd5b505050506040513d602081101561279257600080fd5b5051115b6127d15760405162461bcd60e51b815260040180806020018281038252604781526020018061380b6047913960600191505060405180910390fd5b6010546127e89069bc0a9392c65c3b0000006120f8565b601055600760008260028111156127fb57fe5b600281111561280657fe5b8152602081019190915260409081016000908120548251634dcb56bd60e11b81526001600482015292516001600160a01b0390911692639b96ad7a92602480830193919282900301818387803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b5050601180546000190190555060129050600082600281111561289257fe5b600281111561289d57fe5b8152602081019190915260409081016000208054600019019055517fdc3f5a401c7c357082f07031359c05976172212c1fc5058a50167e5cc9995a3c9082903390808360028111156128eb57fe5b8152602001826001600160a01b031681526020019250505060405180910390a150565b6129183382613000565b61294c6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836130fc565b600f5461295990826120f8565b600f55604080513381526020810183905281517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364929181900390910190a150565b6000826129a957506000610ab9565b828202828482816129b657fe5b0414610c315760405162461bcd60e51b81526004018080602001828103825260218152602001806138786021913960400191505060405180910390fd5b6000808211612a49576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a5257fe5b049392505050565b600f54612a679082611eaa565b600f55600e5460ff16612aae57612aa96001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333084612d13565b612b60565b600e805460ff19169055601054604080516370a0823160e01b81523060048201529051612b2792916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b15801561228d57600080fd5b600f5414612b60576040805162461bcd60e51b81526020600482015260016024820152602160f81b604482015290519081900360640190fd5b610d22338261314e565b60126020526000805160206137c583398151915254600260008190527f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b254909111612bfb5760126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a354600080526000805160206137c58339815191525410612bf757506001612bfb565b5060005b601054612c129069bc0a9392c65c3b000000611eaa565b60105560076000826002811115612c2557fe5b6002811115612c3057fe5b815260208101919091526040908101600090812054825163ac1ec28f60e01b81526001600482015292516001600160a01b039091169263ac1ec28f92602480830193919282900301818387803b158015612c8957600080fd5b505af1158015612c9d573d6000803e3d6000fd5b505060118054600101905550601290506000826002811115612cbb57fe5b6002811115612cc657fe5b81526020810191909152604090810160002080546001019055517f292ab5c646bc4ceb188e46197669ad40d168778fb037a5cbad01d342e03d48119082903390808360028111156128eb57fe5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612d6d908590613240565b50505050565b6000612d7e826132f1565b6000612d8a8484611d08565b905060136000846002811115612d9c57fe5b6002811115612da757fe5b81526020019081526020016000205460186000866001600160a01b03166001600160a01b031681526020019081526020016000206000856002811115612de957fe5b6002811115612df457fe5b815260200190815260200160002081905550612e3d8160196000876001600160a01b03166001600160a01b0316815260200190815260200160002060008660028111156115d357fe5b6001600160a01b0385166000908152601960205260408120919350839190856002811115612e6757fe5b6002811115612e7257fe5b81526020810191909152604001600020555092915050565b6000612ea7620186a061129f612ea082866120f8565b889061299a565b90506000612eb586836120f8565b9050600060146000876002811115612ec957fe5b6002811115612ed457fe5b81526020810191909152604001600020546001600160a01b03169050612efb8186856130fc565b600954612f15906001600160a01b038381169116846130fc565b7f42bf830ec222b3077f036a1be5d7d50fd1fc16cfcb9c67a8547cf0241679eae08587858560405180856001600160a01b03168152602001846002811115612f5957fe5b815260200183815260200182815260200194505050505060405180910390a150505050505050565b612f8a83610ac5565b612fcb576040805162461bcd60e51b815260206004820152600d60248201526c216c6f636b65642066756e647360981b604482015290519081900360640190fd5b6001600160a01b03831615612fe357612fe3836134fb565b6001600160a01b03821615612ffb57612ffb826134fb565b505050565b6001600160a01b0382166130455760405162461bcd60e51b81526004018080602001828103825260218152602001806139036021913960400191505060405180910390fd5b61305182600083612f81565b61308e8160405180606001604052806022815260200161375b602291396001600160a01b0385166000908152600160205260409020549190612061565b6001600160a01b0383166000908152600160205260409020556003546130b490826120f8565b6003556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612ffb908490613240565b6001600160a01b0382166131a9576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6131b560008383612f81565b6003546131c29082611eaa565b6003556001600160a01b0382166000908152600160205260409020546131e89082611eaa565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6060613295826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661351e9092919063ffffffff16565b805190915015612ffb578080602001905160208110156132b457600080fd5b5051612ffb5760405162461bcd60e51b815260040180806020018281038252602a81526020018061398d602a913960400191505060405180910390fd5b60006007600083600281111561330357fe5b600281111561330e57fe5b815260208082019290925260409081016000205481516354198ce960e01b815230600482015291516001600160a01b03909116926354198ce99260248082019391829003018186803b15801561336357600080fd5b505afa158015613377573d6000803e3d6000fd5b505050506040513d602081101561338d57600080fd5b50519050801561343d57600760008360028111156133a757fe5b60028111156133b257fe5b81526020808201929092526040908101600090812054825163264eb21360e21b815230600482015292516001600160a01b039091169363993ac84c93602480820194929392918390030190829087803b15801561340e57600080fd5b505af1158015613422573d6000803e3d6000fd5b505050506040513d602081101561343857600080fd5b505190505b6000600f54116134985760006014600084600281111561345957fe5b600281111561346457fe5b81526020810191909152604001600020546008546001600160a01b03918216925061349291839116846130fc565b506111ce565b600f546134cb906134bb9061129f846d04ee2d6d415b85acef810000000061299a565b601360008560028111156115d357fe5b601360008460028111156134db57fe5b60028111156134e657fe5b81526020810191909152604001600020555050565b613506816000612d73565b50613512816001612d73565b506111ce816002612d73565b606061352d8484600085613535565b949350505050565b6060824710156135765760405162461bcd60e51b81526004018080602001828103825260268152602001806138526026913960400191505060405180910390fd5b61357f85613691565b6135d0576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061360f5780518252601f1990920191602091820191016135f0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613671576040519150601f19603f3d011682016040523d82523d6000602084013e613676565b606091505b5091509150613686828286613697565b979650505050505050565b3b151590565b606083156136a6575081610c31565b8251156136b65782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156120b557818101518382015260200161209d56fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373596f75206465706f7369746564206c657373207468616e203135206d696e732061676f2e20596f75722066756e647320617265206c6f636b656445524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573737e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c6f742073616c65206973206c6f636b65642062792048656769632e2046756e64732073686f756c6420626520617661696c61626c6520696e206c657373207468616e20323468416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724e6f7420656e6f7567682062616c616e6365202f206e6f7420737570706f7274656445524332303a206275726e2066726f6d20746865207a65726f2061646472657373b39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b82845524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4465706f7369747320617265206e6f7420616c6c6f77656420617420746865206d6f6d656e74a2646970667358221220650a0b47464c7f2626a841b134476fbbddb7c24e10bfe831c86c9d5a55981b6864736f6c634300060c00336d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df000000000000000000000000584bc13c7d411c00c01a62e8019472de687684300000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000956bed5f95d3cfc16581c3892931c0d110376f9f000000000000000000000000c9ac1f2571748c4d02774b8d0fe5981ee4b897a2000000000000000000000000e7e8a2ed68f573d8cb25b9c7d734ebde65b47336
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061035c5760003560e01c806379a2908c116101d3578063b6b55f2511610104578063f02a7d19116100a2578063fbcd9b051161007c578063fbcd9b05146108db578063fbf683c1146108e3578063fd00ea1c146108eb578063ff4dfa961461090b5761035c565b8063f02a7d1914610872578063f2fde38b14610898578063f6156d5a146108be5761035c565b8063c592348f116100de578063c592348f146107f6578063dd62ed3e1461081c578063e32d03bf1461084a578063ebd090541461086a5761035c565b8063b6b55f251461078a578063bc41ab72146107a7578063bdd79f07146107c75761035c565b80638f76137f11610171578063a457c2d71161014b578063a457c2d714610722578063a9059cbb1461074e578063ad7a672f1461077a578063b04b243d146107825761035c565b80638f76137f146106f357806395d89b41146106fb5780639a213763146107035761035c565b806387788782116101ad57806387788782146106b55780638ad8a539146106bd5780638da5cb5b146106e35780638eaa9597146106eb5761035c565b806379a2908c146106855780637b80889b1461068d57806385335da8146106955761035c565b80632c2e33c3116102ad5780636132ac361161024b57806370a082311161022557806370a0823114610647578063715018a61461066d57806371e395a81461067557806377af8ceb1461067d5761035c565b80636132ac36146105f95780636c6925f91461061f5780636cc94a69146106275761035c565b8063313ce56711610287578063313ce5671461058a57806339509351146105a85780634aedc64f146105d45780635c029ac8146105f15761035c565b80632c2e33c3146105455780632d3008dd146105655780632e1a7d4d1461056d5761035c565b806318160ddd1161031a5780631cc23341116102f45780631cc23341146104d95780631e8bc190146104e157806323604071146104e957806323b872dd1461050f5761035c565b806318160ddd146104a357806319262d30146104ab5780631b016373146104d15761035c565b8062e36f41146103615780630100670b1461038557806302527753146103a6578063043134e0146103de57806306fdde03146103e6578063095ea7b314610463575b600080fd5b61036961093a565b604080516001600160a01b039092168252519081900360200190f35b6103a46004803603602081101561039b57600080fd5b50351515610952565b005b6103cc600480360360208110156103bc57600080fd5b50356001600160a01b03166109c7565b60408051918252519081900360200190f35b6103696109d9565b6103ee610a0b565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610428578181015183820152602001610410565b50505050905090810190601f1680156104555780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61048f6004803603604081101561047957600080fd5b506001600160a01b038135169060200135610aa1565b604080519115158252519081900360200190f35b6103cc610abf565b61048f600480360360208110156104c157600080fd5b50356001600160a01b0316610ac5565b610369610af6565b6103a4610b05565b610369610b20565b6103a4600480360360208110156104ff57600080fd5b50356001600160a01b0316610b2c565b61048f6004803603606081101561052557600080fd5b506001600160a01b03813581169160208101359091169060400135610bb0565b6103cc6004803603602081101561055b57600080fd5b503560ff16610c38565b6103cc610c4a565b6103a46004803603602081101561058357600080fd5b5035610c58565b610592610d25565b6040805160ff9092168252519081900360200190f35b61048f600480360360408110156105be57600080fd5b506001600160a01b038135169060200135610d2e565b6103a4600480360360208110156105ea57600080fd5b5035610d7c565b6103a4610e29565b6103cc6004803603602081101561060f57600080fd5b50356001600160a01b0316610e47565b6103cc610e59565b6103696004803603602081101561063d57600080fd5b503560ff16610e5f565b6103cc6004803603602081101561065d57600080fd5b50356001600160a01b0316610e7a565b6103a4610e95565b610369610f41565b6103a4610f65565b6103cc6111d2565b6103cc6111d8565b6103cc600480360360208110156106ab57600080fd5b503560ff166111de565b6103cc6112a5565b61048f600480360360208110156106d357600080fd5b50356001600160a01b03166112ab565b6103696112c0565b6103696112cf565b61048f6112da565b6103ee6112e3565b6103a46004803603602081101561071957600080fd5b50351515611344565b61048f6004803603604081101561073857600080fd5b506001600160a01b0381351690602001356113bf565b61048f6004803603604081101561076457600080fd5b506001600160a01b038135169060200135611427565b6103cc61143b565b610369611441565b6103a4600480360360208110156107a057600080fd5b5035611459565b6103cc600480360360208110156107bd57600080fd5b503560ff1661158d565b6103cc600480360360408110156107dd57600080fd5b5080356001600160a01b0316906020013560ff1661159f565b6103cc6004803603602081101561080c57600080fd5b50356001600160a01b03166115fb565b6103cc6004803603604081101561083257600080fd5b506001600160a01b03813581169160200135166119ee565b6103a46004803603602081101561086057600080fd5b503560ff16611a19565b610369611a93565b6103a46004803603602081101561088857600080fd5b50356001600160a01b0316611aa2565b6103a4600480360360208110156108ae57600080fd5b50356001600160a01b0316611b26565b6103a4600480360360208110156108d457600080fd5b5035611c28565b6103cc611cd5565b6103cc611ce7565b6103696004803603602081101561090157600080fd5b503560ff16611ced565b6103cc6004803603604081101561092157600080fd5b5080356001600160a01b0316906020013560ff16611d08565b73837010619aeb2ae24141605afc8f66577f6fb2e781565b61095a611dba565b6001600160a01b031661096b6112c0565b6001600160a01b0316146109b4576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b600c805460ff1916911515919091179055565b60176020526000908152604090205481565b600060078160025b60028111156109ec57fe5b81526020810191909152604001600020546001600160a01b0316905090565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a975780601f10610a6c57610100808354040283529160200191610a97565b820191906000526020600020905b815481529060010190602001808311610a7a57829003601f168201915b5050505050905090565b6000610ab5610aae611dba565b8484611dbe565b5060015b92915050565b60035490565b600d546001600160a01b03821660009081526017602052604081205490914291610aee91611eaa565b111592915050565b6008546001600160a01b031681565b610b0d610e29565b610b1e610b1933610e7a565b610c58565b565b600060078160016109e1565b610b34611dba565b6001600160a01b0316610b456112c0565b6001600160a01b031614610b8e576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610bbd848484611f04565b610c2d84610bc9611dba565b610c2885604051806060016040528060288152602001613899602891396001600160a01b038a16600090815260026020526040812090610c07611dba565b6001600160a01b031681526020810191909152604001600020549190612061565b611dbe565b5060015b9392505050565b60126020526000908152604090205481565b69bc0a9392c65c3b00000081565b610c6133610e7a565b811115610caa576040805162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015290519081900360640190fd5b610cb333610ac5565b610cee5760405162461bcd60e51b815260040180806020018281038252603a815260200180613721603a913960400191505060405180910390fd5b80610d06601054600f546120f890919063ffffffff16565b1015610d1957610d14612155565b610cee565b610d228161290e565b50565b60065460ff1690565b6000610ab5610d3b611dba565b84610c288560026000610d4c611dba565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611eaa565b610d84611dba565b6001600160a01b0316610d956112c0565b6001600160a01b031614610dde576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b612710811115610e24576040805162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b604482015290519081900360640190fd5b600b55565b610e336000611a19565b610e3d6001611a19565b610b1e6002611a19565b60156020526000908152604090205481565b600d5481565b6007602052600090815260409020546001600160a01b031681565b6001600160a01b031660009081526001602052604090205490565b610e9d611dba565b6001600160a01b0316610eae6112c0565b6001600160a01b031614610ef7576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b7f000000000000000000000000584bc13c7d411c00c01a62e8019472de6876843081565b600c5460ff16610f7457600080fd5b6000808052600760209081527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290517f000000000000000000000000584bc13c7d411c00c01a62e8019472de687684309092169363095ea7b39360448084019491939192918390030190829087803b15801561101657600080fd5b505af115801561102a573d6000803e3d6000fd5b505050506040513d602081101561104057600080fd5b50506001600090815260076020908152600080516020613924833981519152546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290517f000000000000000000000000584bc13c7d411c00c01a62e8019472de687684309092169363095ea7b39360448084019491939192918390030190829087803b1580156110d457600080fd5b505af11580156110e8573d6000803e3d6000fd5b505050506040513d60208110156110fe57600080fd5b505060026000908152600760209081527fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d546040805163095ea7b360e01b81526001600160a01b039283166004820152600019602482015290517f000000000000000000000000584bc13c7d411c00c01a62e8019472de687684309092169363095ea7b39360448084019491939192918390030190829087803b1580156111a457600080fd5b505af11580156111b8573d6000803e3d6000fd5b505050506040513d60208110156111ce57600080fd5b5050565b600b5481565b60105481565b600080600760008460028111156111f157fe5b60028111156111fc57fe5b815260208082019290925260409081016000205481516354198ce960e01b815230600482015291516001600160a01b03909116926354198ce99260248082019391829003018186803b15801561125157600080fd5b505afa158015611265573d6000803e3d6000fd5b505050506040513d602081101561127b57600080fd5b5051600f54909150610c319061129f836d04ee2d6d415b85acef810000000061299a565b906129f3565b600a5481565b60166020526000908152604090205460ff1681565b6000546001600160a01b031690565b6000600781806109e1565b600c5460ff1681565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a975780601f10610a6c57610100808354040283529160200191610a97565b61134c611dba565b6001600160a01b031661135d6112c0565b6001600160a01b0316146113a6576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b80156113b6576000600d55610d22565b610384600d5550565b6000610ab56113cc611dba565b84610c28856040518060600160405280602581526020016139b760259139600260006113f6611dba565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612061565b6000610ab5611434611dba565b8484611f04565b600f5481565b73f4128b00afda933428056d0f0d1d7652af7e2b3581565b6000811161149f576040805162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b604482015290519081900360640190fd5b600c5460ff166114e05760405162461bcd60e51b81526004018080602001828103825260268152602001806139dc6026913960400191505060405180910390fd5b600a5433600090815260156020526040902054118061150f57503360009081526016602052604090205460ff16155b1561153e57600a54336000908152601560209081526040808320939093556016905220805460ff191660011790555b33600090815260176020526040902042905561155981612a5a565b69bc0a9392c65c3b00000061157b601054600f546120f890919063ffffffff16565b10610d2257611588612b6a565b611559565b60136020526000908152604090205481565b6000610c316115ae8484611d08565b6001600160a01b0385166000908152601960205260408120908560028111156115d357fe5b60028111156115de57fe5b815260200190815260200160002054611eaa90919063ffffffff16565b336000908152601660205260408120805460ff19166001179055806001600160a01b03831673f4128b00afda933428056d0f0d1d7652af7e2b351415611768578290506000836001600160a01b0316636132ac36336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561168d57600080fd5b505afa1580156116a1573d6000803e3d6000fd5b505050506040513d60208110156116b757600080fd5b5051600b54909150808211156116de57336000908152601560205260409020819055611761565b60408051633099561b60e11b815233600482015290516001600160a01b03871691636132ac36916024808301926020929190829003018186803b15801561172457600080fd5b505afa158015611738573d6000803e3d6000fd5b505050506040513d602081101561174e57600080fd5b5051336000908152601560205260409020555b5050611792565b50600b543360009081526015602052604090205573837010619aeb2ae24141605afc8f66577f6fb2e75b6000816001600160a01b03166370a08231336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156117e157600080fd5b505afa1580156117f5573d6000803e3d6000fd5b505050506040513d602081101561180b57600080fd5b5051116118495760405162461bcd60e51b81526004018080602001828103825260228152602001806138e16022913960400191505060405180910390fd5b6000816001600160a01b03166370a08231336040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561189857600080fd5b505afa1580156118ac573d6000803e3d6000fd5b505050506040513d60208110156118c257600080fd5b505190506118db6001600160a01b038316333084612d13565b6001600160a01b03841673f4128b00afda933428056d0f0d1d7652af7e2b35141561196357836001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561194657600080fd5b505af115801561195a573d6000803e3d6000fd5b505050506119d8565b836001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156119a957600080fd5b505af11580156119bd573d6000803e3d6000fd5b505050506040513d60208110156119d357600080fd5b505190505b600e805460ff19166001179055610c3181611459565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000611a253383612d73565b3360009081526019602052604081209192509081846002811115611a4557fe5b6002811115611a5057fe5b8152602001908152602001600020819055506111ce81833360156000336001600160a01b03166001600160a01b0316815260200190815260200160002054612e8a565b6009546001600160a01b031681565b611aaa611dba565b6001600160a01b0316611abb6112c0565b6001600160a01b031614611b04576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b611b2e611dba565b6001600160a01b0316611b3f6112c0565b6001600160a01b031614611b88576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b6001600160a01b038116611bcd5760405162461bcd60e51b815260040180806020018281038252602681526020018061377d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611c30611dba565b6001600160a01b0316611c416112c0565b6001600160a01b031614611c8a576040805162461bcd60e51b815260206004820181905260248201526000805160206138c1833981519152604482015290519081900360640190fd5b612710811115611cd0576040805162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b604482015290519081900360640190fd5b600a55565b6d04ee2d6d415b85acef810000000081565b60115481565b6014602052600090815260409020546001600160a01b031681565b6000610c316d04ee2d6d415b85acef810000000061129f611d2886610e7a565b611db4611d34876111de565b6001600160a01b0389166000908152601860205260408120611dae918a6002811115611d5c57fe5b6002811115611d6757fe5b815260200190815260200160002054601360008b6002811115611d8657fe5b6002811115611d9157fe5b8152602001908152602001600020546120f890919063ffffffff16565b90611eaa565b9061299a565b3390565b6001600160a01b038316611e035760405162461bcd60e51b81526004018080602001828103825260248152602001806139696024913960400191505060405180910390fd5b6001600160a01b038216611e485760405162461bcd60e51b81526004018080602001828103825260228152602001806137a36022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600082820183811015610c31576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038316611f495760405162461bcd60e51b81526004018080602001828103825260258152602001806139446025913960400191505060405180910390fd5b6001600160a01b038216611f8e5760405162461bcd60e51b81526004018080602001828103825260238152602001806136fe6023913960400191505060405180910390fd5b611f99838383612f81565b611fd6816040518060600160405280602681526020016137e5602691396001600160a01b0386166000908152600160205260409020549190612061565b6001600160a01b0380851660009081526001602052604080822093909355908416815220546120059082611eaa565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156120f05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120b557818101518382015260200161209d565b50505050905090810190601f1680156120e25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282111561214f576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60126020526000805160206137c583398151915254600160008190527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a35490911015806122c1575060016000526007602090815260008051602061392483398151915254604080516301b7150360e41b8152905142936122bf936001600160a01b031692631b7150309260048083019392829003018186803b1580156121fa57600080fd5b505afa15801561220e573d6000803e3d6000fd5b505050506040513d602081101561222457600080fd5b50516007600060015b600281111561223857fe5b8152602080820192909252604090810160002054815163a673729160e01b815230600482015291516001600160a01b039091169263a67372919260248082019391829003018186803b15801561228d57600080fd5b505afa1580156122a1573d6000803e3d6000fd5b505050506040513d60208110156122b757600080fd5b505190611eaa565b115b80612353575060016000526007602090815260008051602061392483398151915254604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561232557600080fd5b505afa158015612339573d6000803e3d6000fd5b505050506040513d602081101561234f57600080fd5b5051155b156127d15760126020527f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b254600080526000805160206137c5833981519152541180159061244557506002600052600760209081527fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d54604080516301b7150360e41b815290514293612442936001600160a01b031692631b7150309260048083019392829003018186803b15801561240b57600080fd5b505afa15801561241f573d6000803e3d6000fd5b505050506040513d602081101561243557600080fd5b505160076000600261222d565b11155b80156124ec575060026000908152600760209081527fb7c774451310d1be4108bc180d1b52823cb0ee0274a6c0081bcaf94f115fb96d54604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b1580156124be57600080fd5b505afa1580156124d2573d6000803e3d6000fd5b505050506040513d60208110156124e857600080fd5b5051115b156124f9575060026127d1565b60008052600760209081527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df54604080516301b7150360e41b81529051429361259d936001600160a01b031692631b7150309260048083019392829003018186803b15801561256757600080fd5b505afa15801561257b573d6000803e3d6000fd5b505050506040513d602081101561259157600080fd5b5051600760008061222d565b1115801561264457506000808052600760209081527f6d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df54604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561261657600080fd5b505afa15801561262a573d6000803e3d6000fd5b505050506040513d602081101561264057600080fd5b5051115b15612651575060006127d1565b50600160008190526007602090815260008051602061392483398151915254604080516301b7150360e41b8152905142936126ed936001600160a01b031692631b7150309260048083019392829003018186803b1580156126b157600080fd5b505afa1580156126c5573d6000803e3d6000fd5b505050506040513d60208110156126db57600080fd5b50516007600085600281111561222d57fe5b11158015612796575060006007600083600281111561270857fe5b600281111561271357fe5b815260208082019290925260409081016000205481516370a0823160e01b815230600482015291516001600160a01b03909116926370a082319260248082019391829003018186803b15801561276857600080fd5b505afa15801561277c573d6000803e3d6000fd5b505050506040513d602081101561279257600080fd5b5051115b6127d15760405162461bcd60e51b815260040180806020018281038252604781526020018061380b6047913960600191505060405180910390fd5b6010546127e89069bc0a9392c65c3b0000006120f8565b601055600760008260028111156127fb57fe5b600281111561280657fe5b8152602081019190915260409081016000908120548251634dcb56bd60e11b81526001600482015292516001600160a01b0390911692639b96ad7a92602480830193919282900301818387803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b5050601180546000190190555060129050600082600281111561289257fe5b600281111561289d57fe5b8152602081019190915260409081016000208054600019019055517fdc3f5a401c7c357082f07031359c05976172212c1fc5058a50167e5cc9995a3c9082903390808360028111156128eb57fe5b8152602001826001600160a01b031681526020019250505060405180910390a150565b6129183382613000565b61294c6001600160a01b037f000000000000000000000000584bc13c7d411c00c01a62e8019472de687684301633836130fc565b600f5461295990826120f8565b600f55604080513381526020810183905281517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364929181900390910190a150565b6000826129a957506000610ab9565b828202828482816129b657fe5b0414610c315760405162461bcd60e51b81526004018080602001828103825260218152602001806138786021913960400191505060405180910390fd5b6000808211612a49576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a5257fe5b049392505050565b600f54612a679082611eaa565b600f55600e5460ff16612aae57612aa96001600160a01b037f000000000000000000000000584bc13c7d411c00c01a62e8019472de6876843016333084612d13565b612b60565b600e805460ff19169055601054604080516370a0823160e01b81523060048201529051612b2792916001600160a01b037f000000000000000000000000584bc13c7d411c00c01a62e8019472de6876843016916370a0823191602480820192602092909190829003018186803b15801561228d57600080fd5b600f5414612b60576040805162461bcd60e51b81526020600482015260016024820152602160f81b604482015290519081900360640190fd5b610d22338261314e565b60126020526000805160206137c583398151915254600260008190527f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b254909111612bfb5760126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a354600080526000805160206137c58339815191525410612bf757506001612bfb565b5060005b601054612c129069bc0a9392c65c3b000000611eaa565b60105560076000826002811115612c2557fe5b6002811115612c3057fe5b815260208101919091526040908101600090812054825163ac1ec28f60e01b81526001600482015292516001600160a01b039091169263ac1ec28f92602480830193919282900301818387803b158015612c8957600080fd5b505af1158015612c9d573d6000803e3d6000fd5b505060118054600101905550601290506000826002811115612cbb57fe5b6002811115612cc657fe5b81526020810191909152604090810160002080546001019055517f292ab5c646bc4ceb188e46197669ad40d168778fb037a5cbad01d342e03d48119082903390808360028111156128eb57fe5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612d6d908590613240565b50505050565b6000612d7e826132f1565b6000612d8a8484611d08565b905060136000846002811115612d9c57fe5b6002811115612da757fe5b81526020019081526020016000205460186000866001600160a01b03166001600160a01b031681526020019081526020016000206000856002811115612de957fe5b6002811115612df457fe5b815260200190815260200160002081905550612e3d8160196000876001600160a01b03166001600160a01b0316815260200190815260200160002060008660028111156115d357fe5b6001600160a01b0385166000908152601960205260408120919350839190856002811115612e6757fe5b6002811115612e7257fe5b81526020810191909152604001600020555092915050565b6000612ea7620186a061129f612ea082866120f8565b889061299a565b90506000612eb586836120f8565b9050600060146000876002811115612ec957fe5b6002811115612ed457fe5b81526020810191909152604001600020546001600160a01b03169050612efb8186856130fc565b600954612f15906001600160a01b038381169116846130fc565b7f42bf830ec222b3077f036a1be5d7d50fd1fc16cfcb9c67a8547cf0241679eae08587858560405180856001600160a01b03168152602001846002811115612f5957fe5b815260200183815260200182815260200194505050505060405180910390a150505050505050565b612f8a83610ac5565b612fcb576040805162461bcd60e51b815260206004820152600d60248201526c216c6f636b65642066756e647360981b604482015290519081900360640190fd5b6001600160a01b03831615612fe357612fe3836134fb565b6001600160a01b03821615612ffb57612ffb826134fb565b505050565b6001600160a01b0382166130455760405162461bcd60e51b81526004018080602001828103825260218152602001806139036021913960400191505060405180910390fd5b61305182600083612f81565b61308e8160405180606001604052806022815260200161375b602291396001600160a01b0385166000908152600160205260409020549190612061565b6001600160a01b0383166000908152600160205260409020556003546130b490826120f8565b6003556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612ffb908490613240565b6001600160a01b0382166131a9576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6131b560008383612f81565b6003546131c29082611eaa565b6003556001600160a01b0382166000908152600160205260409020546131e89082611eaa565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6060613295826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661351e9092919063ffffffff16565b805190915015612ffb578080602001905160208110156132b457600080fd5b5051612ffb5760405162461bcd60e51b815260040180806020018281038252602a81526020018061398d602a913960400191505060405180910390fd5b60006007600083600281111561330357fe5b600281111561330e57fe5b815260208082019290925260409081016000205481516354198ce960e01b815230600482015291516001600160a01b03909116926354198ce99260248082019391829003018186803b15801561336357600080fd5b505afa158015613377573d6000803e3d6000fd5b505050506040513d602081101561338d57600080fd5b50519050801561343d57600760008360028111156133a757fe5b60028111156133b257fe5b81526020808201929092526040908101600090812054825163264eb21360e21b815230600482015292516001600160a01b039091169363993ac84c93602480820194929392918390030190829087803b15801561340e57600080fd5b505af1158015613422573d6000803e3d6000fd5b505050506040513d602081101561343857600080fd5b505190505b6000600f54116134985760006014600084600281111561345957fe5b600281111561346457fe5b81526020810191909152604001600020546008546001600160a01b03918216925061349291839116846130fc565b506111ce565b600f546134cb906134bb9061129f846d04ee2d6d415b85acef810000000061299a565b601360008560028111156115d357fe5b601360008460028111156134db57fe5b60028111156134e657fe5b81526020810191909152604001600020555050565b613506816000612d73565b50613512816001612d73565b506111ce816002612d73565b606061352d8484600085613535565b949350505050565b6060824710156135765760405162461bcd60e51b81526004018080602001828103825260268152602001806138526026913960400191505060405180910390fd5b61357f85613691565b6135d0576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061360f5780518252601f1990920191602091820191016135f0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613671576040519150601f19603f3d011682016040523d82523d6000602084013e613676565b606091505b5091509150613686828286613697565b979650505050505050565b3b151590565b606083156136a6575081610c31565b8251156136b65782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156120b557818101518382015260200161209d56fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373596f75206465706f7369746564206c657373207468616e203135206d696e732061676f2e20596f75722066756e647320617265206c6f636b656445524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573737e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654c6f742073616c65206973206c6f636b65642062792048656769632e2046756e64732073686f756c6420626520617661696c61626c6520696e206c657373207468616e20323468416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724e6f7420656e6f7567682062616c616e6365202f206e6f7420737570706f7274656445524332303a206275726e2066726f6d20746865207a65726f2061646472657373b39221ace053465ec3453ce2b36430bd138b997ecea25c1043da0c366812b82845524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f4465706f7369747320617265206e6f7420616c6c6f77656420617420746865206d6f6d656e74a2646970667358221220650a0b47464c7f2626a841b134476fbbddb7c24e10bfe831c86c9d5a55981b6864736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000584bc13c7d411c00c01a62e8019472de687684300000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000956bed5f95d3cfc16581c3892931c0d110376f9f000000000000000000000000c9ac1f2571748c4d02774b8d0fe5981ee4b897a2000000000000000000000000e7e8a2ed68f573d8cb25b9c7d734ebde65b47336
-----Decoded View---------------
Arg [0] : _HEGIC (address): 0x584bC13c7D411c00c01A62e8019472dE68768430
Arg [1] : _WBTC (address): 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599
Arg [2] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [3] : _USDC (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [4] : _stakingWBTC (address): 0x956BeD5f95D3Cfc16581C3892931C0D110376f9f
Arg [5] : _stakingETH (address): 0xc9aC1F2571748c4d02774b8d0fE5981ee4B897A2
Arg [6] : _stakingUSDC (address): 0xe7E8A2eD68f573D8CB25B9c7d734ebDE65b47336
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000584bc13c7d411c00c01a62e8019472de68768430
Arg [1] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [2] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [3] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [4] : 000000000000000000000000956bed5f95d3cfc16581c3892931c0d110376f9f
Arg [5] : 000000000000000000000000c9ac1f2571748c4d02774b8d0fe5981ee4b897a2
Arg [6] : 000000000000000000000000e7e8a2ed68f573d8cb25b9c7d734ebde65b47336
Deployed Bytecode Sourcemap
38282:18427:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38809:85;;;:::i;:::-;;;;-1:-1:-1;;;;;38809:85:0;;;;;;;;;;;;;;41242:98;;;;;;;;;;;;;;;;-1:-1:-1;41242:98:0;;;;:::i;:::-;;39520:47;;;;;;;;;;;;;;;;-1:-1:-1;39520:47:0;-1:-1:-1;;;;;39520:47:0;;:::i;:::-;;;;;;;;;;;;;;;;48248:128;;;:::i;13511:91::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15657:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15657:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14610:108;;;:::i;56550:156::-;;;;;;;;;;;;;;;;-1:-1:-1;56550:156:0;-1:-1:-1;;;;;56550:156:0;;:::i;38609:41::-;;;:::i;46484:120::-;;;:::i;47805:125::-;;;:::i;42139:121::-;;;;;;;;;;;;;;;;-1:-1:-1;42139:121:0;-1:-1:-1;;;;;42139:121:0;;:::i;16308:321::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16308:321:0;;;;;;;;;;;;;;;;;:::i;39217:49::-;;;;;;;;;;;;;;;;-1:-1:-1;39217:49:0;;;;:::i;38506:51::-;;;:::i;45985:364::-;;;;;;;;;;;;;;;;-1:-1:-1;45985:364:0;;:::i;14454:91::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17038:218;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17038:218:0;;;;;;;;:::i;41814:215::-;;;;;;;;;;;;;;;;-1:-1:-1;41814:215:0;;:::i;46804:142::-;;;:::i;39409:51::-;;;;;;;;;;;;;;;;-1:-1:-1;39409:51:0;-1:-1:-1;;;;;39409:51:0;;:::i;39034:37::-;;;:::i;38450:46::-;;;;;;;;;;;;;;;;-1:-1:-1;38450:46:0;;;;:::i;14781:127::-;;;;;;;;;;;;;;;;-1:-1:-1;14781:127:0;-1:-1:-1;;;;;14781:127:0;;:::i;25836:148::-;;;:::i;38412:29::-;;;:::i;40795:298::-;;;:::i;38943:43::-;;;:::i;39140:25::-;;;:::i;54529:260::-;;;;;;;;;;;;;;;;-1:-1:-1;54529:260:0;;;;:::i;38903:33::-;;;:::i;39467:46::-;;;;;;;;;;;;;;;;-1:-1:-1;39467:46:0;-1:-1:-1;;;;;39467:46:0;;:::i;25185:87::-;;;:::i;48025:128::-;;;:::i;38993:34::-;;;:::i;13721:95::-;;;:::i;42751:145::-;;;;;;;;;;;;;;;;-1:-1:-1;42751:145:0;;;;:::i;17759:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17759:269:0;;;;;;;;:::i;15121:175::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15121:175:0;;;;;;;;:::i;39109:24::-;;;:::i;38702:100::-;;;:::i;44919:867::-;;;;;;;;;;;;;;;;-1:-1:-1;44919:867:0;;:::i;39273:49::-;;;;;;;;;;;;;;;;-1:-1:-1;39273:49:0;;;;:::i;47538:173::-;;;;;;;;;;;;;;;;-1:-1:-1;47538:173:0;;-1:-1:-1;;;;;47538:173:0;;;;;;;;:::i;43113:1608::-;;;;;;;;;;;;;;;;-1:-1:-1;43113:1608:0;-1:-1:-1;;;;;43113:1608:0;;:::i;15359:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15359:151:0;;;;;;;;;;:::i;47108:248::-;;;;;;;;;;;;;;;;-1:-1:-1;47108:248:0;;;;:::i;38657:36::-;;;:::i;42425:131::-;;;;;;;;;;;;;;;;-1:-1:-1;42425:131:0;-1:-1:-1;;;;;42425:131:0;;:::i;26139:244::-;;;;;;;;;;;;;;;;-1:-1:-1;26139:244:0;-1:-1:-1;;;;;26139:244:0;;:::i;41470:203::-;;;;;;;;;;;;;;;;-1:-1:-1;41470:203:0;;:::i;38564:36::-;;;:::i;39172:::-;;;:::i;39329:37::-;;;;;;;;;;;;;;;;-1:-1:-1;39329:37:0;;;;:::i;48643:255::-;;;;;;;;;;;;;;;;-1:-1:-1;48643:255:0;;-1:-1:-1;;;;;48643:255:0;;;;;;;;:::i;38809:85::-;38851:42;38809:85;:::o;41242:98::-;25416:12;:10;:12::i;:::-;-1:-1:-1;;;;;25405:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;25405:23:0;;25397:68;;;;;-1:-1:-1;;;25397:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25397:68:0;;;;;;;;;;;;;;;41308:15:::1;:24:::0;;-1:-1:-1;;41308:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41242:98::o;39520:47::-;;;;;;;;;;;;;:::o;48248:128::-;48300:30;48349:7;48300:30;48357:10;48349:19;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48349:19:0;;-1:-1:-1;;;;;48349:19:0;;-1:-1:-1;48248:128:0;:::o;13511:91::-;13589:5;13582:12;;;;;;;;-1:-1:-1;;13582:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13556:13;;13582:12;;13589:5;;13582:12;;13589:5;13582:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13511:91;:::o;15657:169::-;15740:4;15757:39;15766:12;:10;:12::i;:::-;15780:7;15789:6;15757:8;:39::i;:::-;-1:-1:-1;15814:4:0;15657:169;;;;;:::o;14610:108::-;14698:12;;14610:108;:::o;56550:156::-;56665:12;;-1:-1:-1;;;;;56635:25:0;;56610:4;56635:25;;;:15;:25;;;;;;56610:4;;56682:15;;56635:43;;:29;:43::i;:::-;:62;;;56550:156;-1:-1:-1;;56550:156:0:o;38609:41::-;;;-1:-1:-1;;;;;38609:41:0;;:::o;46484:120::-;46538:16;:14;:16::i;:::-;46565:31;46574:21;46584:10;46574:9;:21::i;:::-;46565:8;:31::i;:::-;46484:120::o;47805:125::-;47856:29;47904:7;47856:29;47912:9;47904:18;;42139:121;25416:12;:10;:12::i;:::-;-1:-1:-1;;;;;25405:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;25405:23:0;;25397:68;;;;;-1:-1:-1;;;25397:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25397:68:0;;;;;;;;;;;;;;;42217:13:::1;:35:::0;;-1:-1:-1;;;;;;42217:35:0::1;-1:-1:-1::0;;;;;42217:35:0;;;::::1;::::0;;;::::1;::::0;;42139:121::o;16308:321::-;16414:4;16431:36;16441:6;16449:9;16460:6;16431:9;:36::i;:::-;16478:121;16487:6;16495:12;:10;:12::i;:::-;16509:89;16547:6;16509:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16509:19:0;;;;;;:11;:19;;;;;;16529:12;:10;:12::i;:::-;-1:-1:-1;;;;;16509:33:0;;;;;;;;;;;;-1:-1:-1;16509:33:0;;;:89;:37;:89::i;:::-;16478:8;:121::i;:::-;-1:-1:-1;16617:4:0;16308:321;;;;;;:::o;39217:49::-;;;;;;;;;;;;;:::o;38506:51::-;38547:10;38506:51;:::o;45985:364::-;46054:21;46064:10;46054:9;:21::i;:::-;46043:7;:32;;46035:63;;;;;-1:-1:-1;;;46035:63:0;;;;;;;;;;;;-1:-1:-1;;;46035:63:0;;;;;;;;;;;;;;;46117:23;46129:10;46117:11;:23::i;:::-;46109:94;;;;-1:-1:-1;;;46109:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46256:7;46222:31;46239:13;;46222:12;;:16;;:31;;;;:::i;:::-;:41;46216:91;;;46279:16;:14;:16::i;:::-;46216:91;;;46319:22;46333:7;46319:13;:22::i;:::-;45985:364;:::o;14454:91::-;14528:9;;;;14454:91;:::o;17038:218::-;17126:4;17143:83;17152:12;:10;:12::i;:::-;17166:7;17175:50;17214:10;17175:11;:25;17187:12;:10;:12::i;:::-;-1:-1:-1;;;;;17175:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;17175:25:0;;;:34;;;;;;;;;;;:38;:50::i;41814:215::-;25416:12;:10;:12::i;:::-;-1:-1:-1;;;;;25405:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;25405:23:0;;25397:68;;;;;-1:-1:-1;;;25397:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25397:68:0;;;;;;;;;;;;;;;41955:5:::1;41947:4;:13;;41939:38;;;::::0;;-1:-1:-1;;;41939:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41939:38:0;;;;;;;;;;;;;::::1;;41990:24;:31:::0;41814:215::o;46804:142::-;46848:23;46860:10;46848:11;:23::i;:::-;46882:22;46894:9;46882:11;:22::i;:::-;46915:23;46927:10;46915:11;:23::i;39409:51::-;;;;;;;;;;;;;:::o;39034:37::-;;;;:::o;38450:46::-;;;;;;;;;;;;-1:-1:-1;;;;;38450:46:0;;:::o;14781:127::-;-1:-1:-1;;;;;14882:18:0;14855:7;14882:18;;;:9;:18;;;;;;;14781:127::o;25836:148::-;25416:12;:10;:12::i;:::-;-1:-1:-1;;;;;25405:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;25405:23:0;;25397:68;;;;;-1:-1:-1;;;25397:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25397:68:0;;;;;;;;;;;;;;;25943:1:::1;25927:6:::0;;25906:40:::1;::::0;-1:-1:-1;;;;;25927:6:0;;::::1;::::0;25906:40:::1;::::0;25943:1;;25906:40:::1;25974:1;25957:19:::0;;-1:-1:-1;;;;;;25957:19:0::1;::::0;;25836:148::o;38412:29::-;;;:::o;40795:298::-;40851:15;;;;40843:24;;;;;;40900:19;;;;:7;:19;;;;;;;40878:62;;-1:-1:-1;;;40878:62:0;;-1:-1:-1;;;;;40900:19:0;;;40878:62;;;;-1:-1:-1;;40878:62:0;;;;;;:5;:13;;;;;;:62;;;;;40900:19;;40878:62;;;;;;;;;;:13;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40981:9:0;40973:18;;;;:7;:18;;;;-1:-1:-1;;;;;;;;;;;40973:18:0;;40951:61;;-1:-1:-1;;;40951:61:0;;-1:-1:-1;;;;;40973:18:0;;;40951:61;;;;-1:-1:-1;;40951:61:0;;;;;;:5;:13;;;;;;:61;;;;;40973:18;;40951:61;;;;;;;;;;:13;:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41053:10:0;41045:19;;;;:7;:19;;;;;;;41023:62;;-1:-1:-1;;;41023:62:0;;-1:-1:-1;;;;;41045:19:0;;;41023:62;;;;-1:-1:-1;;41023:62:0;;;;;;:5;:13;;;;;;:62;;;;;41045:19;;41023:62;;;;;;;;;;:13;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40795:298:0:o;38943:43::-;;;;:::o;39140:25::-;;;;:::o;54529:260::-;54601:29;54642:11;54656:7;:15;54664:6;54656:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54656:15:0;;:39;;-1:-1:-1;;;54656:39:0;;54689:4;54656:39;;;;;;-1:-1:-1;;;;;54656:15:0;;;;:24;;:39;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54656:39:0;54768:12;;54656:39;;-1:-1:-1;54743:38:0;;:20;54656:39;38596:4;54743:10;:20::i;:::-;:24;;:38::i;38903:33::-;;;;:::o;39467:46::-;;;;;;;;;;;;;;;:::o;25185:87::-;25231:7;25258:6;-1:-1:-1;;;;;25258:6:0;25185:87;:::o;48025:128::-;48077:30;48126:7;48077:30;;48126:19;;38993:34;;;;;;:::o;13721:95::-;13801:7;13794:14;;;;;;;;-1:-1:-1;;13794:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13768:13;;13794:14;;13801:7;;13794:14;;13801:7;13794:14;;;;;;;;;;;;;;;;;;;;;;;;42751:145;25416:12;:10;:12::i;:::-;-1:-1:-1;;;;;25405:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;25405:23:0;;25397:68;;;;;-1:-1:-1;;;25397:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25397:68:0;;;;;;;;;;;;;;;42822:7:::1;42819:69;;;42846:1;42831:12;:16:::0;42819:69:::1;;;42878:10;42863:12;:25:::0;42751:145;:::o;17759:269::-;17852:4;17869:129;17878:12;:10;:12::i;:::-;17892:7;17901:96;17940:15;17901:96;;;;;;;;;;;;;;;;;:11;:25;17913:12;:10;:12::i;:::-;-1:-1:-1;;;;;17901:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;17901:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;15121:175::-;15207:4;15224:42;15234:12;:10;:12::i;:::-;15248:9;15259:6;15224:9;:42::i;39109:24::-;;;;:::o;38702:100::-;38759:42;38702:100;:::o;44919:867::-;44986:1;44976:7;:11;44968:38;;;;;-1:-1:-1;;;44968:38:0;;;;;;;;;;;;-1:-1:-1;;;44968:38:0;;;;;;;;;;;;;;;45025:15;;;;45017:66;;;;-1:-1:-1;;;45017:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45380:14;;45366:10;45346:31;;;;:19;:31;;;;;;:48;;:79;;-1:-1:-1;45414:10:0;45399:26;;;;:14;:26;;;;;;;;45398:27;45346:79;45343:207;;;45476:14;;45462:10;45442:31;;;;:19;:31;;;;;;;;:48;;;;45505:14;:26;;;:33;;-1:-1:-1;;45505:33:0;45534:4;45505:33;;;45343:207;45576:10;45560:27;;;;:15;:27;;;;;45590:15;45560:45;;45644:21;45657:7;45644:12;:21::i;:::-;38547:10;45684:31;45701:13;;45684:12;;:16;;:31;;;;:::i;:::-;:52;45678:101;;45752:15;:13;:15::i;:::-;45678:101;;39273:49;;;;;;;;;;;;;:::o;47538:173::-;47609:11;47640:63;47674:28;47685:8;47695:6;47674:10;:28::i;:::-;-1:-1:-1;;;;;47640:21:0;;;;;;:11;:21;;;;;;47662:6;47640:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;:33;;:63;;;;:::i;43113:1608::-;43303:10;43198:4;43288:26;;;:14;:26;;;;;:33;;-1:-1:-1;;43288:33:0;43317:4;43288:33;;;43198:4;-1:-1:-1;;;;;43335:58:0;;38759:42;43335:58;43332:725;;;43434:14;43410:40;;43520:22;43545:14;-1:-1:-1;;;;;43545:34:0;;43580:10;43545:46;;;;;;;;;;;;;-1:-1:-1;;;;;43545:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43545:46:0;43618:24;;43545:46;;-1:-1:-1;43660:24:0;;;43657:223;;;43725:10;43705:31;;;;:19;:31;;;;;:38;;;43657:223;;;43818:46;;;-1:-1:-1;;;43818:46:0;;43853:10;43818:46;;;;;;-1:-1:-1;;;;;43818:34:0;;;;;:46;;;;;;;;;;;;;;:34;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43818:46:0;43804:10;43784:31;;;;:19;43818:46;43784:31;;;;:80;43657:223;43332:725;;;;;-1:-1:-1;44021:24:0;;44007:10;43987:31;;;;:19;:31;;;;;:58;38851:42;43332:725;44106:1;44075:6;-1:-1:-1;;;;;44075:16:0;;44092:10;44075:28;;;;;;;;;;;;;-1:-1:-1;;;;;44075:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44075:28:0;:32;44067:79;;;;-1:-1:-1;;;44067:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44187:18;44208:6;-1:-1:-1;;;;;44208:16:0;;44225:10;44208:28;;;;;;;;;;;;;-1:-1:-1;;;;;44208:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44208:28:0;;-1:-1:-1;44247:62:0;-1:-1:-1;;;;;44247:23:0;;44271:10;44291:4;44208:28;44247:23;:62::i;:::-;-1:-1:-1;;;;;44323:58:0;;38759:42;44323:58;44320:309;;;44446:14;-1:-1:-1;;;;;44446:23:0;;44470:10;44446:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44320:309;;;44580:14;-1:-1:-1;;;;;44563:42:0;;44606:10;44563:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44563:54:0;;-1:-1:-1;44320:309:0;44639:9;:16;;-1:-1:-1;;44639:16:0;44651:4;44639:16;;;44666:19;44674:10;44666:7;:19::i;15359:151::-;-1:-1:-1;;;;;15475:18:0;;;15448:7;15475:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15359:151::o;47108:248::-;47161:11;47175:30;47186:10;47198:6;47175:10;:30::i;:::-;47228:10;47250:1;47216:23;;;:11;:23;;;;;47161:44;;-1:-1:-1;47250:1:0;;47240:6;47216:31;;;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;47272:76;47288:6;47296;47304:10;47316:19;:31;47336:10;-1:-1:-1;;;;;47316:31:0;-1:-1:-1;;;;;47316:31:0;;;;;;;;;;;;;47272:15;:76::i;38657:36::-;;;-1:-1:-1;;;;;38657:36:0;;:::o;42425:131::-;25416:12;:10;:12::i;:::-;-1:-1:-1;;;;;25405:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;25405:23:0;;25397:68;;;;;-1:-1:-1;;;25397:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25397:68:0;;;;;;;;;;;;;;;42508:18:::1;:40:::0;;-1:-1:-1;;;;;;42508:40:0::1;-1:-1:-1::0;;;;;42508:40:0;;;::::1;::::0;;;::::1;::::0;;42425:131::o;26139:244::-;25416:12;:10;:12::i;:::-;-1:-1:-1;;;;;25405:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;25405:23:0;;25397:68;;;;;-1:-1:-1;;;25397:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25397:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26228:22:0;::::1;26220:73;;;;-1:-1:-1::0;;;26220:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26330:6;::::0;;26309:38:::1;::::0;-1:-1:-1;;;;;26309:38:0;;::::1;::::0;26330:6;::::1;::::0;26309:38:::1;::::0;::::1;26358:6;:17:::0;;-1:-1:-1;;;;;;26358:17:0::1;-1:-1:-1::0;;;;;26358:17:0;;;::::1;::::0;;;::::1;::::0;;26139:244::o;41470:203::-;25416:12;:10;:12::i;:::-;-1:-1:-1;;;;;25405:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;25405:23:0;;25397:68;;;;;-1:-1:-1;;;25397:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25397:68:0;;;;;;;;;;;;;;;41601:5:::1;41593:4;:13;;41585:38;;;::::0;;-1:-1:-1;;;41585:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41585:38:0;;;;;;;;;;;;;::::1;;41644:14;:21:::0;41470:203::o;38564:36::-;38596:4;38564:36;:::o;39172:::-;;;;:::o;39329:37::-;;;;;;;;;;;;-1:-1:-1;;;;;39329:37:0;;:::o;48643:255::-;48716:11;48749:141;38596:4;48749:127;48856:19;48866:8;48856:9;:19::i;:::-;48749:102;48815:35;48843:6;48815:27;:35::i;:::-;-1:-1:-1;;;;;48781:20:0;;;;;;:10;:20;;;;;48749:61;;48802:6;48781:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;48749:19;:27;48769:6;48749:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;:31;;:61;;;;:::i;:::-;:65;;:102::i;:::-;:106;;:127::i;704:106::-;792:10;704:106;:::o;20906:346::-;-1:-1:-1;;;;;21008:19:0;;21000:68;;;;-1:-1:-1;;;21000:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21087:21:0;;21079:68;;;;-1:-1:-1;;;21079:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21160:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21212:32;;;;;;;;;;;;;;;;;20906:346;;;:::o;6674:179::-;6732:7;6764:5;;;6788:6;;;;6780:46;;;;;-1:-1:-1;;;6780:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;18518:539;-1:-1:-1;;;;;18624:20:0;;18616:70;;;;-1:-1:-1;;;18616:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18705:23:0;;18697:71;;;;-1:-1:-1;;;18697:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18781:47;18802:6;18810:9;18821:6;18781:20;:47::i;:::-;18861:71;18883:6;18861:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18861:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;18841:17:0;;;;;;;:9;:17;;;;;;:91;;;;18966:20;;;;;;;:32;;18991:6;18966:24;:32::i;:::-;-1:-1:-1;;;;;18943:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;19014:35;;;;;;;18943:20;;19014:35;;;;;;;;;;;;;18518:539;;;:::o;9501:166::-;9587:7;9623:12;9615:6;;;;9607:29;;;;-1:-1:-1;;;9607:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9654:5:0;;;9501:166::o;7136:158::-;7194:7;7227:1;7222;:6;;7214:49;;;;;-1:-1:-1;;;7214:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7281:5:0;;;7136:158::o;52479:1803::-;52596:19;:31;;-1:-1:-1;;;;;;;;;;;52596:31:0;52539:9;52525:11;52562:30;;;;;52539:9;;-1:-1:-1;52562:65:0;;:222;;-1:-1:-1;52733:9:0;52725:18;;:7;:18;;;;-1:-1:-1;;;;;;;;;;;52725:18:0;;:40;;-1:-1:-1;;;52725:40:0;;;;52769:15;;52645:121;;-1:-1:-1;;;;;52725:18:0;;:38;;:40;;;;;:18;:40;;;;;:18;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52725:40:0;52645:7;:18;52653:9;52645:18;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52645:18:0;;:53;;-1:-1:-1;;;52645:53:0;;52692:4;52645:53;;;;;;-1:-1:-1;;;;;52645:18:0;;;;:38;;:53;;;;;;;;;;;:18;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52645:53:0;;:79;:121::i;:::-;:139;52562:222;:288;;;-1:-1:-1;52810:9:0;52802:18;;:7;:18;;;;-1:-1:-1;;;;;;;;;;;52802:18:0;;:43;;-1:-1:-1;;;52802:43:0;;52839:4;52802:43;;;;;;-1:-1:-1;;;;;52802:18:0;;;;:28;;:43;;;;;;;;;;:18;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52802:43:0;:48;52562:288;52559:1490;;;52914:19;:31;;;;;52879;;-1:-1:-1;;;;;;;;;;;52879:31:0;:66;;;;:230;;-1:-1:-1;53056:10:0;53048:19;;:7;:19;;;;;;;:41;;-1:-1:-1;;;53048:41:0;;;;53094:15;;52967:123;;-1:-1:-1;;;;;53048:19:0;;:39;;:41;;;;;:19;:41;;;;;:19;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53048:41:0;52967:7;:19;52975:10;52967:19;;:123;:142;;52879:230;:300;;;;-1:-1:-1;53139:10:0;53178:1;53131:19;;;:7;:19;;;;;;;:44;;-1:-1:-1;;;53131:44:0;;53169:4;53131:44;;;;;;-1:-1:-1;;;;;53131:19:0;;;;:29;;:44;;;;;;;;;;:19;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53131:44:0;:48;52879:300;52876:1162;;;-1:-1:-1;53207:10:0;52876:1162;;;53324:19;;;:7;:19;;;;;;;:41;;-1:-1:-1;;;53324:41:0;;;;53370:15;;53243:123;;-1:-1:-1;;;;;53324:19:0;;:39;;:41;;;;;:19;:41;;;;;:19;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53324:41:0;53243:7;:19;;;;:123;:142;;:212;;;;-1:-1:-1;53454:1:0;53407:19;;;:7;:19;;;;;;;:44;;-1:-1:-1;;;53407:44:0;;53445:4;53407:44;;;;;;-1:-1:-1;;;;;53407:19:0;;;;:29;;:44;;;;;;;;;;:19;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53407:44:0;:48;53243:212;53239:799;;;-1:-1:-1;53483:10:0;53239:799;;;-1:-1:-1;53542:9:0;53779:14;;;;:7;:14;;;;-1:-1:-1;;;;;;;;;;;53779:14:0;;:36;;-1:-1:-1;;;53779:36:0;;;;53820:15;;53699:117;;-1:-1:-1;;;;;53779:14:0;;:34;;:36;;;;;:14;:36;;;;;:14;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53779:36:0;53699:7;:14;53707:5;53699:14;;;;;;;:117;:136;;:208;;;;;53906:1;53864:7;:14;53872:5;53864:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53864:14:0;;:39;;-1:-1:-1;;;53864:39:0;;53897:4;53864:39;;;;;;-1:-1:-1;;;;;53864:14:0;;;;:24;;:39;;;;;;;;;;;:14;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53864:39:0;:43;53699:208;53669:353;;;;-1:-1:-1;;;53669:353:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54077:13;;:36;;38547:10;54077:17;:36::i;:::-;54061:13;:52;54124:7;:14;54132:5;54124:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54124:14:0;;;;:32;;-1:-1:-1;;;54124:32:0;;:14;:32;;;;;;-1:-1:-1;;;;;54124:14:0;;;;:29;;:32;;;;;-1:-1:-1;;54124:32:0;;;;;-1:-1:-1;54124:14:0;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54167:24:0;:26;;-1:-1:-1;;54167:26:0;;;-1:-1:-1;54204:19:0;;-1:-1:-1;54167:24:0;54224:5;54204:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54204:26:0;:28;;-1:-1:-1;;54204:28:0;;;54248:26;;;54256:5;;54263:10;;54248:26;54256:5;54248:26;;;;;;;;;;;;;-1:-1:-1;;;;;54248:26:0;;;;;;;;;;;;;;;;52479:1803;:::o;51313:237::-;51370:26;51376:10;51388:7;51370:5;:26::i;:::-;51407:39;-1:-1:-1;;;;;51407:5:0;:18;51426:10;51438:7;51407:18;:39::i;:::-;51472:12;;:25;;51489:7;51472:16;:25::i;:::-;51457:12;:40;51513:29;;;51522:10;51513:29;;;;;;;;;;;;;;;;;;;;;51313:237;:::o;7553:220::-;7611:7;7635:6;7631:20;;-1:-1:-1;7650:1:0;7643:8;;7631:20;7674:5;;;7678:1;7674;:5;:1;7698:5;;;;;:10;7690:56;;;;-1:-1:-1;;;7690:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8251:153;8309:7;8341:1;8337;:5;8329:44;;;;;-1:-1:-1;;;8329:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8395:1;8391;:5;;;;;;;8251:153;-1:-1:-1;;;8251:153:0:o;50591:480::-;50662:12;;:25;;50679:7;50662:16;:25::i;:::-;50647:12;:40;50785:9;;;;50781:244;;50811:58;-1:-1:-1;;;;;50811:5:0;:22;50834:10;50854:4;50861:7;50811:22;:58::i;:::-;50781:244;;;50902:9;:17;;-1:-1:-1;;50902:17:0;;;50993:13;;50958:30;;;-1:-1:-1;;;50958:30:0;;50982:4;50958:30;;;;;;:49;;50993:13;-1:-1:-1;;;;;50958:5:0;:15;;;;:30;;;;;;;;;;;;;;;:15;:30;;;;;;;;;;:49;50942:12;;:65;50934:79;;;;;-1:-1:-1;;;50934:79:0;;;;;;;;;;;;-1:-1:-1;;;50934:79:0;;;;;;;;;;;;;;;51037:26;51043:10;51055:7;51037:5;:26::i;51670:679::-;51880:19;:31;;-1:-1:-1;;;;;;;;;;;51880:31:0;51821:10;51807:11;51845:31;;;;;51821:10;;-1:-1:-1;51842:276:0;;51965:19;:30;;;;;51930:31;;-1:-1:-1;;;;;;;;;;;51930:31:0;:65;51927:180;;-1:-1:-1;52023:9:0;51927:180;;;-1:-1:-1;52081:10:0;51927:180;52146:13;;:36;;38547:10;52146:17;:36::i;:::-;52130:13;:52;52193:7;:14;52201:5;52193:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52193:14:0;;;;:31;;-1:-1:-1;;;52193:31:0;;:14;:31;;;;;;-1:-1:-1;;;;;52193:14:0;;;;:28;;:31;;;;;-1:-1:-1;;52193:31:0;;;;;-1:-1:-1;52193:14:0;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52235:24:0;:26;;;;;;-1:-1:-1;52272:19:0;;-1:-1:-1;52235:24:0;52292:5;52272:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52272:26:0;:28;;;;;;52316:25;;;52323:5;;52330:10;;52316:25;52323:5;52316:25;;;;;;;35280:205;35408:68;;;-1:-1:-1;;;;;35408:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35408:68:0;-1:-1:-1;;;35408:68:0;;;35381:96;;35401:5;;35381:19;:96::i;:::-;35280:205;;;;:::o;55453:356::-;55523:11;55547:20;55560:6;55547:12;:20::i;:::-;55578:12;55593:28;55604:8;55614:6;55593:10;:28::i;:::-;55578:43;;55663:19;:27;55683:6;55663:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;55632:10;:20;55643:8;-1:-1:-1;;;;;55632:20:0;-1:-1:-1;;;;;55632:20:0;;;;;;;;;;;;:28;55653:6;55632:28;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;55710:42;55744:7;55710:11;:21;55722:8;-1:-1:-1;;;;;55710:21:0;-1:-1:-1;;;;;55710:21:0;;;;;;;;;;;;:29;55732:6;55710:29;;;;;;;:42;-1:-1:-1;;;;;55763:21:0;;;;;;:11;:21;;;;;55701:51;;-1:-1:-1;55701:51:0;;55763:21;55785:6;55763:29;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55763:29:0;:38;-1:-1:-1;55453:356:0;;-1:-1:-1;;55453:356:0:o;49929:437::-;50031:14;50048:47;50088:6;50048:35;50060:22;50088:6;50077:4;50060:16;:22::i;:::-;50048:7;;:11;:35::i;:47::-;50031:64;-1:-1:-1;50106:8:0;50117:22;:7;50031:64;50117:11;:22::i;:::-;50106:33;;50152:17;50172:5;:13;50178:6;50172:13;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50172:13:0;;-1:-1:-1;;;;;50172:13:0;;-1:-1:-1;50197:44:0;50172:13;50221:8;50231:9;50197:23;:44::i;:::-;50276:13;;50252:43;;-1:-1:-1;;;;;50252:23:0;;;;50276:13;50291:3;50252:23;:43::i;:::-;50311:47;50325:8;50335:6;50343:9;50354:3;50311:47;;;;-1:-1:-1;;;;;50311:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49929:437;;;;;;;:::o;56092:243::-;56194:17;56206:4;56194:11;:17::i;:::-;56186:43;;;;;-1:-1:-1;;;56186:43:0;;;;;;;;;;;;-1:-1:-1;;;56186:43:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;56244:18:0;;;56240:40;;56264:16;56275:4;56264:10;:16::i;:::-;-1:-1:-1;;;;;56295:16:0;;;56291:36;;56313:14;56324:2;56313:10;:14::i;:::-;56092:243;;;:::o;20050:418::-;-1:-1:-1;;;;;20134:21:0;;20126:67;;;;-1:-1:-1;;;20126:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20206:49;20227:7;20244:1;20248:6;20206:20;:49::i;:::-;20289:68;20312:6;20289:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20289:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;20268:18:0;;;;;;:9;:18;;;;;:89;20383:12;;:24;;20400:6;20383:16;:24::i;:::-;20368:12;:39;20423:37;;;;;;;;20449:1;;-1:-1:-1;;;;;20423:37:0;;;;;;;;;;;;20050:418;;:::o;35095:177::-;35205:58;;;-1:-1:-1;;;;;35205:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35205:58:0;-1:-1:-1;;;35205:58:0;;;35178:86;;35198:5;;35178:19;:86::i;19339:378::-;-1:-1:-1;;;;;19423:21:0;;19415:65;;;;;-1:-1:-1;;;19415:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19493:49;19522:1;19526:7;19535:6;19493:20;:49::i;:::-;19570:12;;:24;;19587:6;19570:16;:24::i;:::-;19555:12;:39;-1:-1:-1;;;;;19626:18:0;;;;;;:9;:18;;;;;;:30;;19649:6;19626:22;:30::i;:::-;-1:-1:-1;;;;;19605:18:0;;;;;;:9;:18;;;;;;;;:51;;;;19672:37;;;;;;;19605:18;;;;19672:37;;;;;;;;;;19339:378;;:::o;37400:761::-;37824:23;37850:69;37878:4;37850:69;;;;;;;;;;;;;;;;;37858:5;-1:-1:-1;;;;;37850:27:0;;;:69;;;;;:::i;:::-;37934:17;;37824:95;;-1:-1:-1;37934:21:0;37930:224;;38076:10;38065:30;;;;;;;;;;;;;;;-1:-1:-1;38065:30:0;38057:85;;;;-1:-1:-1;;;38057:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49056:515;49112:11;49126:7;:15;49134:6;49126:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49126:15:0;;:39;;-1:-1:-1;;;49126:39:0;;49159:4;49126:39;;;;;;-1:-1:-1;;;;;49126:15:0;;;;:24;;:39;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49126:39:0;;-1:-1:-1;49179:10:0;;49176:94;;49215:7;:15;49223:6;49215:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49215:15:0;;;;:43;;-1:-1:-1;;;49215:43:0;;49252:4;49215:43;;;;;;-1:-1:-1;;;;;49215:15:0;;;;:28;;:43;;;;;:15;;:43;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49215:43:0;;-1:-1:-1;49176:94:0;49301:1;49285:12;;:17;49282:282;;49319:17;49339:5;:13;49345:6;49339:13;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49339:13:0;;49391:18;;-1:-1:-1;;;;;49339:13:0;;;;-1:-1:-1;49367:51:0;;49339:13;;49391:18;49411:6;49367:23;:51::i;:::-;49282:282;;;;49538:12;;49481:71;;49513:38;;:20;:6;38596:4;49513:10;:20::i;:38::-;49481:19;:27;49501:6;49481:27;;;;;;;:71;49451:19;:27;49471:6;49451:27;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49451:27:0;:101;49056:515;;:::o;55059:183::-;55117:32;55128:8;55138:10;55117;:32::i;:::-;;55160:31;55171:8;55181:9;55160:10;:31::i;:::-;;55202:32;55213:8;55223:10;55202;:32::i;30086:195::-;30189:12;30221:52;30243:6;30251:4;30257:1;30260:12;30221:21;:52::i;:::-;30214:59;30086:195;-1:-1:-1;;;;30086:195:0:o;31138:530::-;31265:12;31323:5;31298:21;:30;;31290:81;;;;-1:-1:-1;;;31290:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31390:18;31401:6;31390:10;:18::i;:::-;31382:60;;;;;-1:-1:-1;;;31382:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31516:12;31530:23;31557:6;-1:-1:-1;;;;;31557:11:0;31577:5;31585:4;31557:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31557:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31515:75;;;;31608:52;31626:7;31635:10;31647:12;31608:17;:52::i;:::-;31601:59;31138:530;-1:-1:-1;;;;;;;31138:530:0:o;27168:422::-;27535:20;27574:8;;;27168:422::o;33678:742::-;33793:12;33822:7;33818:595;;;-1:-1:-1;33853:10:0;33846:17;;33818:595;33967:17;;:21;33963:439;;34230:10;34224:17;34291:15;34278:10;34274:2;34270:19;34263:44;34178:148;34366:20;;-1:-1:-1;;;34366:20:0;;;;;;;;;;;;;;;;;34373:12;;34366:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://650a0b47464c7f2626a841b134476fbbddb7c24e10bfe831c86c9d5a55981b68
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.