yAxis.io:MetaVault:3CRV (MVLT) Token Tracker | Etherscan (2024)

yAxis.io:MetaVault:3CRV (MVLT) Token Tracker | Etherscan (1)

yAxis.io:MetaVault:3CRV (MVLT)

ERC-20

  • Check previous token supply
  • Add Token to MetaMask (Web3)
  • Update Token Info
  • Update Name Tag or Label
  • Submit Burn Details
  • Report/Flag Address

Overview

Max Total Supply

494,797.714106868868762972 MVLT

Holders

43

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

0xbfbec72f2450ef9ab742e4a27441fa06ca79ea6a

  • Transfers
  • Holders
  • Info
  • Contract
  • Analytics

Loading...

Loading

Loading...

Loading

Loading...

Loading

Click here to update the token information / general information

#ExchangePairPrice24H Volume% Volume
  • Code
  • Read Contract
  • Write Contract

Contract Source Code Verified (Exact Match)

Contract Name:

yAxisMetaVault

Compiler Version

v0.6.12+commit.27d51765

Optimization Enabled:

Yes with 200 runs

Other Settings:

default evmVersion, MIT license

Contract Source Code (Solidity)

yAxis.io:MetaVault:3CRV (MVLT) Token Tracker | Etherscan (13)yAxis.io:MetaVault:3CRV (MVLT) Token Tracker | Etherscan (14)IDE

    interface IERC20 - function totalSupply() - function balanceOf(address account) - function transfer(address recipient, ... - function allowance(address owner, add ... - function approve(address spender, uin ... - function transferFrom(address sender, ... library SafeMath - function add(uint256 a, uint256 b) - function sub(uint256 a, uint256 b) - function sub(uint256 a, uint256 b, st ... - function mul(uint256 a, uint256 b) - function div(uint256 a, uint256 b) - function div(uint256 a, uint256 b, st ... - function mod(uint256 a, uint256 b) - function mod(uint256 a, uint256 b, st ... library Address - function isContract(address account) - function sendValue(address payable re ... - function functionCall(address target, ... - function functionCall(address target, ... - function functionCallWithValue(addres ... - function functionCallWithValue(addres ... - function _functionCallWithValue(addre ... - function _msgSender() - function _msgData() contract ERC20 is Context, IERC20 - function name() - function symbol() - function decimals() - function totalSupply() - function balanceOf(address account) - function transfer(address recipient, ... - function allowance(address owner, add ... - function approve(address spender, uin ... - function transferFrom(address sender, ... - function increaseAllowance(address sp ... - function decreaseAllowance(address sp ... - function _transfer(address sender, ad ... - function _mint(address account, uint2 ... - function _burn(address account, uint2 ... - function _approve(address owner, addr ... - function _setupDecimals(uint8 decimal ... - function _beforeTokenTransfer(address ... library SafeERC20 - function safeTransfer(IERC20 token, a ... - function safeTransferFrom(IERC20 toke ... - function safeApprove(IERC20 token, ad ... - function safeIncreaseAllowance(IERC20 ... - function safeDecreaseAllowance(IERC20 ... - function _callOptionalReturn(IERC20 t ... interface IVaultManager - function yax() - function vaults(address) - function controllers(address) - function strategies(address) - function stakingPool() - function profitSharer() - function treasuryWallet() - function performanceReward() - function stakingPoolShareFee() - function gasFee() - function insuranceFee() - function withdrawalProtectionFee() interface IController - function vaults(address) - function want(address) - function balanceOf(address) - function withdraw(address, uint) - function earn(address, uint) - function withdrawFee(address, uint) - function investEnabled() interface IConverter - function token() - function convert(address _input, addr ... - function convert_rate(address _input, ... - function convert_stables(uint[3] call ... - function get_dy(int128 i, int128 j, u ... - function exchange(int128 i, int128 j, ... - function calc_token_amount(uint[3] ca ... - function calc_token_amount_withdraw(u ... interface IMetaVault - function balance() - function setController(address _contr ... - function claimInsurance() - function token() - function available() - function withdrawFee(uint _amount) - function earn() - function calc_token_amount_deposit(ui ... - function calc_token_amount_withdraw(u ... - function convert_rate(address _input, ... - function deposit(uint _amount, addres ... - function harvest(address reserve, uin ... - function withdraw(uint _shares, addre ... - function want() - function getPricePerFullShare() contract yAxisMetaVault is ERC20, ... * - function balance() - function setMin(uint _min) - function setGovernance(address _gover ... - function setController(address _contr ... - function setConverter(IConverter _con ... - function setVaultManager(IVaultManage ... - function setEarnLowerlimit(uint _earn ... - function setTotalDepositCap(uint _tot ... - function setAcceptContractDepositor(b ... - function setYaxPerBlock(uint _yaxPerB ... - function setEpochEndBlock(uint8 _inde ... - function setEpochRewardMultipler(uint ... - function getMultiplier(uint256 _from, ... - function setTreasuryWallet(address _t ... - function claimInsurance() - function token() - function available() - function withdrawFee(uint _amount) - function earn() - function calc_token_amount_deposit(ui ... - function calc_token_amount_withdraw(u ... - function convert_rate(address _input, ... - function deposit(uint _amount, addres ... - function depositAll(uint[4] calldata ... - function stakeShares(uint _shares) - function _deposit(address _mintTo, ui ... - function _stakeShares(uint _shares) - function pendingYax(address _account) - function updateReward() - function _getReward() - function withdrawAll(address _output) - function harvest(address reserve, uin ... - function unstake(uint _amount) - function withdraw(uint _shares, addre ... - function want() - function getPricePerFullShare() - function safeYaxTransfer(address _to, ... - function earnExtra(address _token)
  • Similar
  • Sol2Uml
  • Submit Audit
  • Compare
/** *Submitted for verification at Etherscan.io on 2020-10-30*/// SPDX-License-Identifier: MITpragma solidity 0.6.12;/** * @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);}/** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; }}/** * @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 in 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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } }}/* * @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; }}/** * @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; using Address for address; 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 returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view 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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view 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 { _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 { }}/** * @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"); } }}interface IVaultManager { function yax() external view returns (address); function vaults(address) external view returns (bool); function controllers(address) external view returns (bool); function strategies(address) external view returns (bool); function stakingPool() external view returns (address); function profitSharer() external view returns (address); function treasuryWallet() external view returns (address); function performanceReward() external view returns (address); function stakingPoolShareFee() external view returns (uint); function gasFee() external view returns (uint); function insuranceFee() external view returns (uint); function withdrawalProtectionFee() external view returns (uint);}interface IController { function vaults(address) external view returns (address); function want(address) external view returns (address); function balanceOf(address) external view returns (uint); function withdraw(address, uint) external; function earn(address, uint) external; function withdrawFee(address, uint) external view returns (uint); // pJar: 0.5% (50/10000) function investEnabled() external view returns (bool);}interface IConverter { function token() external returns (address _share); function convert(address _input, address _output, uint _inputAmount) external returns (uint _outputAmount); function convert_rate(address _input, address _output, uint _inputAmount) external view returns (uint _outputAmount); function convert_stables(uint[3] calldata amounts) external returns (uint _shareAmount); // 0: DAI, 1: USDC, 2: USDT function get_dy(int128 i, int128 j, uint dx) external view returns (uint); function exchange(int128 i, int128 j, uint dx, uint min_dy) external returns (uint dy); function calc_token_amount(uint[3] calldata amounts, bool deposit) external view returns (uint _shareAmount); function calc_token_amount_withdraw(uint _shares, address _output) external view returns (uint _outputAmount);}interface IMetaVault { function balance() external view returns (uint); function setController(address _controller) external; function claimInsurance() external; function token() external view returns (address); function available() external view returns (uint); function withdrawFee(uint _amount) external view returns (uint); function earn() external; function calc_token_amount_deposit(uint[3] calldata amounts) external view returns (uint); function calc_token_amount_withdraw(uint _shares, address _output) external view returns (uint); function convert_rate(address _input, uint _amount) external view returns (uint); function deposit(uint _amount, address _input, uint _min_mint_amount, bool _isStake) external; function harvest(address reserve, uint amount) external; function withdraw(uint _shares, address _output) external; function want() external view returns (address); function getPricePerFullShare() external view returns (uint);}// @dev This metavault will pay YAX incentive for depositors and stakers// It does not need minter key of YAX. Governance multisig will mint total of 34000 YAX and send into the vault in the beginningcontract yAxisMetaVault is ERC20, IMetaVault { using Address for address; using SafeMath for uint; using SafeERC20 for IERC20; IERC20[4] public inputTokens; // DAI, USDC, USDT, 3Crv IERC20 public token3CRV; IERC20 public tokenYAX; uint public min = 9500; uint public constant max = 10000; uint public earnLowerlimit = 5 ether; // minimum to invest is 5 3CRV uint public totalDepositCap = 10000000 ether; // initial cap set at 10 million dollar address public governance; address public controller; uint public insurance; IVaultManager public vaultManager; IConverter public converter; bool public acceptContractDepositor = false; // dont accept contract at beginning struct UserInfo { uint amount; uint yaxRewardDebt; uint accEarned; } uint public lastRewardBlock; uint public accYaxPerShare; uint public yaxPerBlock; mapping(address => UserInfo) public userInfo; address public treasuryWallet = 0x362Db1c17db4C79B51Fe6aD2d73165b1fe9BaB4a; uint public constant BLOCKS_PER_WEEK = 46500; // Block number when each epoch ends. uint[5] public epochEndBlocks; // Reward multipler for each of 5 epoches (epochIndex: reward multipler) uint[6] public epochRewardMultiplers = [86000, 64000, 43000, 21000, 10000, 1]; event Deposit(address indexed user, uint amount); event Withdraw(address indexed user, uint amount); event RewardPaid(address indexed user, uint reward); constructor (IERC20 _tokenDAI, IERC20 _tokenUSDC, IERC20 _tokenUSDT, IERC20 _token3CRV, IERC20 _tokenYAX, uint _yaxPerBlock, uint _startBlock) public ERC20("yAxis.io:MetaVault:3CRV", "MVLT") { inputTokens[0] = _tokenDAI; inputTokens[1] = _tokenUSDC; inputTokens[2] = _tokenUSDT; inputTokens[3] = _token3CRV; token3CRV = _token3CRV; tokenYAX = _tokenYAX; yaxPerBlock = _yaxPerBlock; // supposed to be 0.000001 YAX (1000000000000 = 1e12 wei) lastRewardBlock = (_startBlock > block.number) ? _startBlock : block.number; // supposed to be 11,163,000 (Sat Oct 31 2020 06:30:00 GMT+0) epochEndBlocks[0] = lastRewardBlock + BLOCKS_PER_WEEK * 2; // weeks 1-2 epochEndBlocks[1] = epochEndBlocks[0] + BLOCKS_PER_WEEK * 2; // weeks 3-4 epochEndBlocks[2] = epochEndBlocks[1] + BLOCKS_PER_WEEK * 4; // month 2 epochEndBlocks[3] = epochEndBlocks[2] + BLOCKS_PER_WEEK * 8; // month 3-4 epochEndBlocks[4] = epochEndBlocks[3] + BLOCKS_PER_WEEK * 8; // month 5-6 governance = msg.sender; } /** * @dev Throws if called by a contract and we are not allowing. */ modifier checkContract() { if (!acceptContractDepositor) { require(!address(msg.sender).isContract() && msg.sender == tx.origin, "Sorry we do not accept contract!"); } _; } // Ignore insurance fund for balance calculations function balance() public override view returns (uint) { uint bal = token3CRV.balanceOf(address(this)); if (controller != address(0)) bal = bal.add(IController(controller).balanceOf(address(token3CRV))); return bal.sub(insurance); } function setMin(uint _min) external { require(msg.sender == governance, "!governance"); min = _min; } function setGovernance(address _governance) public { require(msg.sender == governance, "!governance"); governance = _governance; } function setController(address _controller) public override { require(msg.sender == governance, "!governance"); controller = _controller; } function setConverter(IConverter _converter) public { require(msg.sender == governance, "!governance"); require(_converter.token() == address(token3CRV), "!token3CRV"); converter = _converter; } function setVaultManager(IVaultManager _vaultManager) public { require(msg.sender == governance, "!governance"); vaultManager = _vaultManager; } function setEarnLowerlimit(uint _earnLowerlimit) public { require(msg.sender == governance, "!governance"); earnLowerlimit = _earnLowerlimit; } function setTotalDepositCap(uint _totalDepositCap) public { require(msg.sender == governance, "!governance"); totalDepositCap = _totalDepositCap; } function setAcceptContractDepositor(bool _acceptContractDepositor) public { require(msg.sender == governance, "!governance"); acceptContractDepositor = _acceptContractDepositor; } function setYaxPerBlock(uint _yaxPerBlock) public { require(msg.sender == governance, "!governance"); updateReward(); yaxPerBlock = _yaxPerBlock; } function setEpochEndBlock(uint8 _index, uint256 _epochEndBlock) public { require(msg.sender == governance, "!governance"); require(_index < 5, "_index out of range"); require(_epochEndBlock > block.number, "Too late to update"); require(epochEndBlocks[_index] > block.number, "Too late to update"); epochEndBlocks[_index] = _epochEndBlock; } function setEpochRewardMultipler(uint8 _index, uint256 _epochRewardMultipler) public { require(msg.sender == governance, "!governance"); require(_index > 0 && _index < 6, "Index out of range"); require(epochEndBlocks[_index - 1] > block.number, "Too late to update"); epochRewardMultiplers[_index] = _epochRewardMultipler; } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { for (uint8 epochId = 5; epochId >= 1; --epochId) { if (_to >= epochEndBlocks[epochId - 1]) { if (_from >= epochEndBlocks[epochId - 1]) return _to.sub(_from).mul(epochRewardMultiplers[epochId]); uint256 multiplier = _to.sub(epochEndBlocks[epochId - 1]).mul(epochRewardMultiplers[epochId]); if (epochId == 1) return multiplier.add(epochEndBlocks[0].sub(_from).mul(epochRewardMultiplers[0])); for (epochId = epochId - 1; epochId >= 1; --epochId) { if (_from >= epochEndBlocks[epochId - 1]) return multiplier.add(epochEndBlocks[epochId].sub(_from).mul(epochRewardMultiplers[epochId])); multiplier = multiplier.add(epochEndBlocks[epochId].sub(epochEndBlocks[epochId - 1]).mul(epochRewardMultiplers[epochId])); } return multiplier.add(epochEndBlocks[0].sub(_from).mul(epochRewardMultiplers[0])); } } return _to.sub(_from).mul(epochRewardMultiplers[0]); } function setTreasuryWallet(address _treasuryWallet) public { require(msg.sender == governance, "!governance"); treasuryWallet = _treasuryWallet; } function claimInsurance() external override { // if claim by controller for auto-compounding (current insurance will stay to increase sharePrice) // otherwise send the fund to treasuryWallet if (msg.sender != controller) { // claim by governance for insurance require(msg.sender == governance, "!governance"); token3CRV.safeTransfer(treasuryWallet, insurance); } insurance = 0; } function token() public override view returns (address) { return address(token3CRV); } // Custom logic in here for how much the vault allows to be borrowed // Sets minimum required on-hand to keep small withdrawals cheap function available() public override view returns (uint) { return token3CRV.balanceOf(address(this)).mul(min).div(max); } function withdrawFee(uint _amount) public override view returns (uint) { return (controller == address(0)) ? 0 : IController(controller).withdrawFee(address(token3CRV), _amount); } function earn() public override { if (controller != address(0)) { IController _contrl = IController(controller); if (_contrl.investEnabled()) { uint _bal = available(); token3CRV.safeTransfer(controller, _bal); _contrl.earn(address(token3CRV), _bal); } } } function calc_token_amount_deposit(uint[3] calldata amounts) external override view returns (uint) { return converter.calc_token_amount(amounts, true); } function calc_token_amount_withdraw(uint _shares, address _output) external override view returns (uint) { uint _withdrawFee = withdrawFee(_shares); if (_withdrawFee > 0) { _shares = _shares.mul(10000 - _withdrawFee).div(10000); } uint r = (balance().mul(_shares)).div(totalSupply()); if (_output == address(token3CRV)) { return r; } return converter.calc_token_amount_withdraw(r, _output); } function convert_rate(address _input, uint _amount) external override view returns (uint) { return converter.convert_rate(_input, address(token3CRV), _amount); } function deposit(uint _amount, address _input, uint _min_mint_amount, bool _isStake) external override checkContract { require(_amount > 0, "!_amount"); uint _pool = balance(); uint _before = token3CRV.balanceOf(address(this)); if (_input == address(token3CRV)) { token3CRV.safeTransferFrom(msg.sender, address(this), _amount); } else if (converter.convert_rate(_input, address(token3CRV), _amount) > 0) { IERC20(_input).safeTransferFrom(msg.sender, address(converter), _amount); converter.convert(_input, address(token3CRV), _amount); } uint _after = token3CRV.balanceOf(address(this)); require(totalDepositCap == 0 || _after <= totalDepositCap, ">totalDepositCap"); _amount = _after.sub(_before); // Additional check for deflationary tokens require(_amount >= _min_mint_amount, "slippage"); if (_amount > 0) { if (!_isStake) { _deposit(msg.sender, _pool, _amount); } else { uint _shares = _deposit(address(this), _pool, _amount); _stakeShares(_shares); } } } // Transfers tokens of all kinds // 0: DAI, 1: USDT, 2: USDC, 3: 3CRV function depositAll(uint[4] calldata _amounts, uint _min_mint_amount, bool _isStake) external checkContract { uint _pool = balance(); uint _before = token3CRV.balanceOf(address(this)); bool hasStables = false; for (uint8 i = 0; i < 4; i++) { uint _inputAmount = _amounts[i]; if (_inputAmount > 0) { if (i == 3) { inputTokens[i].safeTransferFrom(msg.sender, address(this), _inputAmount); } else if (converter.convert_rate(address(inputTokens[i]), address(token3CRV), _inputAmount) > 0) { inputTokens[i].safeTransferFrom(msg.sender, address(converter), _inputAmount); hasStables = true; } } } if (hasStables) { uint[3] memory _stablesAmounts; _stablesAmounts[0] = _amounts[0]; _stablesAmounts[1] = _amounts[1]; _stablesAmounts[2] = _amounts[2]; converter.convert_stables(_stablesAmounts); } uint _after = token3CRV.balanceOf(address(this)); require(totalDepositCap == 0 || _after <= totalDepositCap, ">totalDepositCap"); uint _totalDepositAmount = _after.sub(_before); // Additional check for deflationary tokens require(_totalDepositAmount >= _min_mint_amount, "slippage"); if (_totalDepositAmount > 0) { if (!_isStake) { _deposit(msg.sender, _pool, _totalDepositAmount); } else { uint _shares = _deposit(address(this), _pool, _totalDepositAmount); _stakeShares(_shares); } } } function stakeShares(uint _shares) external { uint _before = balanceOf(address(this)); IERC20(address(this)).transferFrom(msg.sender, address(this), _shares); uint _after = balanceOf(address(this)); _shares = _after.sub(_before); // Additional check for deflationary tokens _stakeShares(_shares); } function _deposit(address _mintTo, uint _pool, uint _amount) internal returns (uint _shares) { if (address(vaultManager) != address(0)) { // expected 0.1% of deposits go into an insurance fund (or auto-compounding if called by controller) in-case of negative profits to protect withdrawals // it is updated by governance (community vote) uint _insuranceFee = vaultManager.insuranceFee(); if (_insuranceFee > 0) { uint _insurance = _amount.mul(_insuranceFee).div(10000); _amount = _amount.sub(_insurance); insurance = insurance.add(_insurance); } } if (totalSupply() == 0) { _shares = _amount; } else { _shares = (_amount.mul(totalSupply())).div(_pool); } if (_shares > 0) { if (token3CRV.balanceOf(address(this)) > earnLowerlimit) { earn(); } _mint(_mintTo, _shares); } } function _stakeShares(uint _shares) internal { UserInfo storage user = userInfo[msg.sender]; updateReward(); _getReward(); user.amount = user.amount.add(_shares); user.yaxRewardDebt = user.amount.mul(accYaxPerShare).div(1e12); emit Deposit(msg.sender, _shares); } // View function to see pending YAXs on frontend. function pendingYax(address _account) public view returns (uint _pending) { UserInfo storage user = userInfo[_account]; uint _accYaxPerShare = accYaxPerShare; uint lpSupply = balanceOf(address(this)); if (block.number > lastRewardBlock && lpSupply != 0) { uint256 _multiplier = getMultiplier(lastRewardBlock, block.number); _accYaxPerShare = accYaxPerShare.add(_multiplier.mul(yaxPerBlock).mul(1e12).div(lpSupply)); } _pending = user.amount.mul(_accYaxPerShare).div(1e12).sub(user.yaxRewardDebt); } function updateReward() public { if (block.number <= lastRewardBlock) { return; } uint lpSupply = balanceOf(address(this)); if (lpSupply == 0) { lastRewardBlock = block.number; return; } uint256 _multiplier = getMultiplier(lastRewardBlock, block.number); accYaxPerShare = accYaxPerShare.add(_multiplier.mul(yaxPerBlock).mul(1e12).div(lpSupply)); lastRewardBlock = block.number; } function _getReward() internal { UserInfo storage user = userInfo[msg.sender]; uint _pendingYax = user.amount.mul(accYaxPerShare).div(1e12).sub(user.yaxRewardDebt); if (_pendingYax > 0) { user.accEarned = user.accEarned.add(_pendingYax); safeYaxTransfer(msg.sender, _pendingYax); emit RewardPaid(msg.sender, _pendingYax); } } function withdrawAll(address _output) external { unstake(userInfo[msg.sender].amount); withdraw(balanceOf(msg.sender), _output); } // Used to swap any borrowed reserve over the debt limit to liquidate to 'token' function harvest(address reserve, uint amount) external override { require(msg.sender == controller, "!controller"); require(reserve != address(token3CRV), "token3CRV"); IERC20(reserve).safeTransfer(controller, amount); } // call unstake(0) for getting reward function unstake(uint _amount) public { updateReward(); _getReward(); UserInfo storage user = userInfo[msg.sender]; if (_amount > 0) { require(user.amount >= _amount, "stakedBal < _amount"); user.amount = user.amount.sub(_amount); IERC20(address(this)).transfer(msg.sender, _amount); } user.yaxRewardDebt = user.amount.mul(accYaxPerShare).div(1e12); emit Withdraw(msg.sender, _amount); } // No rebalance implementation for lower fees and faster swaps function withdraw(uint _shares, address _output) public override { uint _userBal = balanceOf(msg.sender); if (_shares > _userBal) { uint _need = _shares.sub(_userBal); require(_need <= userInfo[msg.sender].amount, "_userBal+staked < _shares"); unstake(_need); } uint r = (balance().mul(_shares)).div(totalSupply()); _burn(msg.sender, _shares); if (address(vaultManager) != address(0)) { // expected 0.1% of withdrawal go back to vault (for auto-compounding) to protect withdrawals // it is updated by governance (community vote) uint _withdrawalProtectionFee = vaultManager.withdrawalProtectionFee(); if (_withdrawalProtectionFee > 0) { uint _withdrawalProtection = r.mul(_withdrawalProtectionFee).div(10000); r = r.sub(_withdrawalProtection); } } // Check balance uint b = token3CRV.balanceOf(address(this)); if (b < r) { uint _toWithdraw = r.sub(b); if (controller != address(0)) { IController(controller).withdraw(address(token3CRV), _toWithdraw); } uint _after = token3CRV.balanceOf(address(this)); uint _diff = _after.sub(b); if (_diff < _toWithdraw) { r = b.add(_diff); } } if (_output == address(token3CRV)) { token3CRV.safeTransfer(msg.sender, r); } else { require(converter.convert_rate(address(token3CRV), _output, r) > 0, "rate=0"); token3CRV.safeTransfer(address(converter), r); uint _outputAmount = converter.convert(address(token3CRV), _output, r); IERC20(_output).safeTransfer(msg.sender, _outputAmount); } } function want() external override view returns (address) { return address(token3CRV); } function getPricePerFullShare() external override view returns (uint) { return balance().mul(1e18).div(totalSupply()); } // Safe YAX transfer, ensure we have enough balance. function safeYaxTransfer(address _to, uint _amount) internal { uint _tokenBal = tokenYAX.balanceOf(address(this)); tokenYAX.safeTransfer(_to, (_tokenBal < _amount) ? _tokenBal : _amount); } // Only allows to earn some extra yield from non-core tokens - and auto-compounding the bought 3CRV function earnExtra(address _token) public { require(msg.sender == governance, "!governance"); require(address(_token) != address(token3CRV), "3crv"); require(address(_token) != address(this), "mlvt"); uint _amount = IERC20(_token).balanceOf(address(this)); require(converter.convert_rate(_token, address(token3CRV), _amount) > 0, "rate=0"); IERC20(_token).safeTransfer(address(converter), _amount); converter.convert(_token, address(token3CRV), _amount); }}

Contract Security Audit

  • No Contract Security Audit Submitted- Submit Audit Here

Contract ABI

  • JSON Format
  • RAW/Text Format
[{"inputs":[{"internalType":"contract IERC20","name":"_tokenDAI","type":"address"},{"internalType":"contract IERC20","name":"_tokenUSDC","type":"address"},{"internalType":"contract IERC20","name":"_tokenUSDT","type":"address"},{"internalType":"contract IERC20","name":"_token3CRV","type":"address"},{"internalType":"contract IERC20","name":"_tokenYAX","type":"address"},{"internalType":"uint256","name":"_yaxPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BLOCKS_PER_WEEK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accYaxPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptContractDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"available","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[3]","name":"amounts","type":"uint256[3]"}],"name":"calc_token_amount_deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"address","name":"_output","type":"address"}],"name":"calc_token_amount_withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimInsurance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_input","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"convert_rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"converter","outputs":[{"internalType":"contract IConverter","name":"","type":"address"}],"stateMutability":"view","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"},{"internalType":"address","name":"_input","type":"address"},{"internalType":"uint256","name":"_min_mint_amount","type":"uint256"},{"internalType":"bool","name":"_isStake","type":"bool"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[4]","name":"_amounts","type":"uint256[4]"},{"internalType":"uint256","name":"_min_mint_amount","type":"uint256"},{"internalType":"bool","name":"_isStake","type":"bool"}],"name":"depositAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"earnExtra","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earnLowerlimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"epochEndBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"epochRewardMultiplers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reserve","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"","type":"uint256"}],"name":"inputTokens","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"insurance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"min","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"pendingYax","outputs":[{"internalType":"uint256","name":"_pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_acceptContractDepositor","type":"bool"}],"name":"setAcceptContractDepositor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IConverter","name":"_converter","type":"address"}],"name":"setConverter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_earnLowerlimit","type":"uint256"}],"name":"setEarnLowerlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_index","type":"uint8"},{"internalType":"uint256","name":"_epochEndBlock","type":"uint256"}],"name":"setEpochEndBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_index","type":"uint8"},{"internalType":"uint256","name":"_epochRewardMultipler","type":"uint256"}],"name":"setEpochRewardMultipler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"}],"name":"setMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalDepositCap","type":"uint256"}],"name":"setTotalDepositCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IVaultManager","name":"_vaultManager","type":"address"}],"name":"setVaultManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_yaxPerBlock","type":"uint256"}],"name":"setYaxPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"stakeShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token3CRV","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenYAX","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDepositCap","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":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"yaxRewardDebt","type":"uint256"},{"internalType":"uint256","name":"accEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaultManager","outputs":[{"internalType":"contract IVaultManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"address","name":"_output","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_output","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yaxPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

Contract Creation Code

Decompile Bytecode Switch to Opcodes View

61251c600c55674563918244f40000600d556a084595161401484a000000600e556013805460ff60a01b19169055601880546001600160a01b03191673362db1c17db4c79b51fe6ad2d73165b1fe9bab4a17905561014060405262014ff0608090815261fa0060a05261a7f860c05261520860e052612710610100526001610120526200009190601e90600662000248565b503480156200009f57600080fd5b50604051620043dd380380620043dd833981810160405260e0811015620000c557600080fd5b5080516020808301516040808501516060860151608087015160a088015160c09098015184518086018652601781527f79417869732e696f3a4d6574615661756c743a33435256000000000000000000818901908152865180880190975260048752631355931560e21b9887019890985280519899969894979396929592949193909291620001579160039162000292565b5080516200016d90600490602084019062000292565b50506005805460ff1916601217905550600680546001600160a01b03199081166001600160a01b038a811691909117909255600780548216898416179055600880548216888416179055600980548216878416908117909155600a805483169091179055600b80549091169185169190911790556016829055438111620001f55743620001f7565b805b601481905562016b4881016019556202d6908101601a556205ad208101601b55620b5a408101601c556211076001601d555050600f80546001600160a01b03191633179055506200031c9350505050565b826006810192821562000280579160200282015b8281111562000280578251829062ffffff169055916020019190600101906200025c565b506200028e92915062000305565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002d557805160ff191683800117855562000280565b8280016001018555821562000280579182015b8281111562000280578251825591602001919060010190620002e8565b5b808211156200028e576000815560010162000306565b6140b1806200032c6000396000f3fe608060405234801561001057600080fd5b50600436106103e55760003560e01c80638e087c781161020a578063b69ef8a811610125578063dfc1e7d6116100b8578063f889794511610087578063f889794514610ac9578063f88e12f914610ad1578063fa09e63014610af7578063fc0c546a14610620578063fc47e20914610b1d576103e5565b8063dfc1e7d614610a7f578063ebbf5c1714610a9c578063f36c0a7214610ab9578063f77c479114610ac1576103e5565b8063c33c4475116100f4578063c33c447514610a25578063ceae909d14610a2d578063d389800f14610a49578063dd62ed3e14610a51576103e5565b8063b69ef8a8146109f0578063b774e0c3146109f8578063bd38837b14610a00578063be35761614610a08576103e5565b8063a75ac6081161019d578063ab033ea91161016c578063ab033ea914610952578063ae2841c714610978578063b19337a4146109a4578063b543503e146109ca576103e5565b8063a75ac608146108f0578063a8602fea146108f8578063a9059cbb1461091e578063a9f8d1811461094a576103e5565b806399be90dc116101d957806399be90dc1461088e578063a3d7c749146108b4578063a457c2d7146108bc578063a488680f146108e8576103e5565b80638e087c781461083b578063909d3f4c1461084357806392eefe9b1461086057806395d89b4114610886576103e5565b8063395093511161030557806367f4527e1161029857806370cf7f6f1161026757806370cf7f6f146107da57806377c7b8fc1461080057806389cf3204146108085780638a4adf24146108105780638dbb1e3a14610818576103e5565b806367f4527e146107855780636ac5db191461078d578063706557c01461079557806370a08231146107b4576103e5565b806348a0d754116102d457806348a0d75414610750578063569c426b146107585780635aa6e675146107755780635db88e851461077d576103e5565b806339509351146106e25780633fd500011461070e57806345dc3dd81461072b5780634626402b14610748576103e5565b806318160ddd1161037d5780632e17de781161034c5780632e17de781461065e578063313ce5671461067b57806336ef5eb41461069957806338b7f2cb146106b6576103e5565b806318160ddd146105c25780631959a002146105dc5780631f1fcd511461062057806323b872dd14610628576103e5565b8063095ea7b3116103b9578063095ea7b3146104fb5780630cc9fff31461053b5780630edc63dc146105635780631494f1d71461059c576103e5565b8062f714ce146103ea578063018ee9b71461041857806306aaa1c81461044457806306fdde031461047e575b600080fd5b6104166004803603604081101561040057600080fd5b50803590602001356001600160a01b0316610b25565b005b6104166004803603604081101561042e57600080fd5b506001600160a01b038135169060200135611011565b6104166004803603608081101561045a57600080fd5b508035906001600160a01b03602082013516906040810135906060013515156110cb565b6104866114d8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104c05781810151838201526020016104a8565b50505050905090810190601f1680156104ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105276004803603604081101561051157600080fd5b506001600160a01b03813516906020013561156e565b604080519115158252519081900360200190f35b610416600480360360c081101561055157600080fd5b50608081013560a0820135151561158c565b6105806004803603602081101561057957600080fd5b50356119f2565b604080516001600160a01b039092168252519081900360200190f35b610416600480360360408110156105b257600080fd5b5060ff8135169060200135611a0f565b6105ca611b64565b60408051918252519081900360200190f35b610602600480360360208110156105f257600080fd5b50356001600160a01b0316611b6a565b60408051938452602084019290925282820152519081900360600190f35b610580611b8b565b6105276004803603606081101561063e57600080fd5b506001600160a01b03813581169160208101359091169060400135611b9a565b6104166004803603602081101561067457600080fd5b5035611c22565b610683611d6c565b6040805160ff9092168252519081900360200190f35b610416600480360360208110156106af57600080fd5b5035611d75565b6105ca600480360360408110156106cc57600080fd5b506001600160a01b038135169060200135611dcf565b610527600480360360408110156106f857600080fd5b506001600160a01b038135169060200135611e65565b6105ca6004803603602081101561072457600080fd5b5035611eb3565b6104166004803603602081101561074157600080fd5b5035611ec7565b610580611f19565b6105ca611f28565b6104166004803603602081101561076e57600080fd5b5035611fbc565b61058061206d565b6105ca61207c565b610580612082565b6105ca612091565b610416600480360360208110156107ab57600080fd5b50351515612097565b6105ca600480360360208110156107ca57600080fd5b50356001600160a01b0316612102565b610416600480360360408110156107f057600080fd5b5060ff813516906020013561211d565b6105ca612234565b6105ca612255565b61058061225b565b6105ca6004803603604081101561082e57600080fd5b508035906020013561226a565b6105ca61241a565b6104166004803603602081101561085957600080fd5b5035612420565b6104166004803603602081101561087657600080fd5b50356001600160a01b0316612472565b6104866124e1565b610416600480360360208110156108a457600080fd5b50356001600160a01b0316612542565b610527612814565b610527600480360360408110156108d257600080fd5b506001600160a01b038135169060200135612824565b61058061288c565b61041661289b565b6104166004803603602081101561090e57600080fd5b50356001600160a01b0316612922565b6105276004803603604081101561093457600080fd5b506001600160a01b038135169060200135612991565b6105ca6129a5565b6104166004803603602081101561096857600080fd5b50356001600160a01b03166129ab565b6105ca6004803603604081101561098e57600080fd5b50803590602001356001600160a01b0316612a1a565b610416600480360360208110156109ba57600080fd5b50356001600160a01b0316612b07565b610416600480360360208110156109e057600080fd5b50356001600160a01b0316612c33565b6105ca612ca2565b6105ca612dd1565b610580612dd7565b6105ca60048036036020811015610a1e57600080fd5b5035612de6565b6105ca612e8a565b6105ca60048036036060811015610a4357600080fd5b50612e90565b610416612f2f565b6105ca60048036036040811015610a6757600080fd5b506001600160a01b038135811691602001351661304e565b6105ca60048036036020811015610a9557600080fd5b5035613079565b61041660048036036020811015610ab257600080fd5b5035613086565b6104166130d8565b61058061314b565b6105ca61315a565b6105ca60048036036020811015610ae757600080fd5b50356001600160a01b0316613160565b61041660048036036020811015610b0d57600080fd5b50356001600160a01b031661320c565b6105ca613237565b6000610b3033612102565b905080831115610bb8576000610b46848361323d565b33600090815260176020526040902054909150811115610bad576040805162461bcd60e51b815260206004820152601960248201527f5f7573657242616c2b7374616b6564203c205f73686172657300000000000000604482015290519081900360640190fd5b610bb681611c22565b505b6000610bdd610bc5611b64565b610bd786610bd1612ca2565b9061327f565b906132d8565b9050610be9338561331a565b6012546001600160a01b031615610c975760125460408051638251390960e01b815290516000926001600160a01b0316916382513909916004808301926020929190829003018186803b158015610c3f57600080fd5b505afa158015610c53573d6000803e3d6000fd5b505050506040513d6020811015610c6957600080fd5b505190508015610c95576000610c85612710610bd7858561327f565b9050610c91838261323d565b9250505b505b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ce257600080fd5b505afa158015610cf6573d6000803e3d6000fd5b505050506040513d6020811015610d0c57600080fd5b5051905081811015610e49576000610d24838361323d565b6010549091506001600160a01b031615610da957601054600a546040805163f3fef3a360e01b81526001600160a01b039283166004820152602481018590529051919092169163f3fef3a391604480830192600092919082900301818387803b158015610d9057600080fd5b505af1158015610da4573d6000803e3d6000fd5b505050505b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610df457600080fd5b505afa158015610e08573d6000803e3d6000fd5b505050506040513d6020811015610e1e57600080fd5b505190506000610e2e828561323d565b905082811015610e4557610e428482613416565b94505b5050505b600a546001600160a01b0385811691161415610e7b57600a54610e76906001600160a01b03163384613470565b61100a565b601354600a5460408051630db3e24f60e21b81526001600160a01b039283166004820152878316602482015260448101869052905160009392909216916336cf893c91606480820192602092909190829003018186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d6020811015610f0857600080fd5b505111610f45576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b601354600a54610f62916001600160a01b03918216911684613470565b601354600a546040805163248391ff60e01b81526001600160a01b0392831660048201528783166024820152604481018690529051600093929092169163248391ff9160648082019260209290919082900301818787803b158015610fc657600080fd5b505af1158015610fda573d6000803e3d6000fd5b505050506040513d6020811015610ff057600080fd5b505190506110086001600160a01b0386163383613470565b505b5050505050565b6010546001600160a01b0316331461105e576040805162461bcd60e51b815260206004820152600b60248201526a10b1b7b73a3937b63632b960a91b604482015290519081900360640190fd5b600a546001600160a01b03838116911614156110ad576040805162461bcd60e51b81526020600482015260096024820152683a37b5b2b719a1a92b60b91b604482015290519081900360640190fd5b6010546110c7906001600160a01b03848116911683613470565b5050565b601354600160a01b900460ff16611142576110e5336134c2565b1580156110f157503332145b611142576040805162461bcd60e51b815260206004820181905260248201527f536f72727920776520646f206e6f742061636365707420636f6e747261637421604482015290519081900360640190fd5b60008411611182576040805162461bcd60e51b81526020600482015260086024820152670857d85b5bdd5b9d60c21b604482015290519081900360640190fd5b600061118c612ca2565b600a54604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156111dd57600080fd5b505afa1580156111f1573d6000803e3d6000fd5b505050506040513d602081101561120757600080fd5b5051600a549091506001600160a01b038681169116141561123f57600a5461123a906001600160a01b03163330896134c8565b61137e565b601354600a5460408051630db3e24f60e21b81526001600160a01b0389811660048301529283166024820152604481018a9052905160009392909216916336cf893c91606480820192602092909190829003018186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d60208110156112cc57600080fd5b5051111561137e576013546112f0906001600160a01b0387811691339116896134c8565b601354600a546040805163248391ff60e01b81526001600160a01b0389811660048301529283166024820152604481018a90529051919092169163248391ff9160648083019260209291908290030181600087803b15801561135157600080fd5b505af1158015611365573d6000803e3d6000fd5b505050506040513d602081101561137b57600080fd5b50505b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156113c957600080fd5b505afa1580156113dd573d6000803e3d6000fd5b505050506040513d60208110156113f357600080fd5b5051600e5490915015806114095750600e548111155b61144d576040805162461bcd60e51b815260206004820152601060248201526f03e746f74616c4465706f7369744361760841b604482015290519081900360640190fd5b611457818361323d565b965084871015611499576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b86156114cf57836114b5576114af338489613522565b506114cf565b60006114c230858a613522565b90506114cd816136a8565b505b50505050505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115645780601f1061153957610100808354040283529160200191611564565b820191906000526020600020905b81548152906001019060200180831161154757829003601f168201915b5050505050905090565b600061158261157b61372d565b8484613731565b5060015b92915050565b601354600160a01b900460ff16611603576115a6336134c2565b1580156115b257503332145b611603576040805162461bcd60e51b815260206004820181905260248201527f536f72727920776520646f206e6f742061636365707420636f6e747261637421604482015290519081900360640190fd5b600061160d612ca2565b600a54604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561165e57600080fd5b505afa158015611672573d6000803e3d6000fd5b505050506040513d602081101561168857600080fd5b505190506000805b60048160ff1610156117d5576000878260ff16600481106116ad57fe5b6020020135905080156117cc578160ff16600314156116f4576116ef33308360068660ff16600481106116dc57fe5b01546001600160a01b03169291906134c8565b6117cc565b6013546000906001600160a01b03166336cf893c600660ff86166004811061171857fe5b0154600a546040805160e085901b6001600160e01b03191681526001600160a01b03938416600482015292909116602483015260448201869052516064808301926020929190829003018186803b15801561177257600080fd5b505afa158015611786573d6000803e3d6000fd5b505050506040513d602081101561179c57600080fd5b505111156117cc576013546117c79033906001600160a01b031683600660ff8716600481106116dc57fe5b600192505b50600101611690565b508015611896576117e4613ece565b8635815260208088013590820152604080880135818301526013549051635bd88e2f60e11b81526001600160a01b039091169063b7b11c5e9083906004018082606080838360005b8381101561184457818101518382015260200161182c565b50505050905001915050602060405180830381600087803b15801561186857600080fd5b505af115801561187c573d6000803e3d6000fd5b505050506040513d602081101561189257600080fd5b5050505b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156118e157600080fd5b505afa1580156118f5573d6000803e3d6000fd5b505050506040513d602081101561190b57600080fd5b5051600e5490915015806119215750600e548111155b611965576040805162461bcd60e51b815260206004820152601060248201526f03e746f74616c4465706f7369744361760841b604482015290519081900360640190fd5b6000611971828561323d565b9050868110156119b3576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b80156114cd57856119cf576119c9338683613522565b506114cd565b60006119dc308784613522565b90506119e7816136a8565b505050505050505050565b600681600481106119ff57fe5b01546001600160a01b0316905081565b600f546001600160a01b03163314611a5c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b60058260ff1610611aaa576040805162461bcd60e51b81526020600482015260136024820152725f696e646578206f7574206f662072616e676560681b604482015290519081900360640190fd5b438111611af3576040805162461bcd60e51b8152602060048201526012602482015271546f6f206c61746520746f2075706461746560701b604482015290519081900360640190fd5b4360198360ff1660058110611b0457fe5b015411611b4d576040805162461bcd60e51b8152602060048201526012602482015271546f6f206c61746520746f2075706461746560701b604482015290519081900360640190fd5b8060198360ff1660058110611b5e57fe5b01555050565b60025490565b60176020526000908152604090208054600182015460029092015490919083565b600a546001600160a01b031690565b6000611ba784848461381d565b611c1784611bb361372d565b611c1285604051806060016040528060288152602001613f9b602891396001600160a01b038a16600090815260016020526040812090611bf161372d565b6001600160a01b031681526020810191909152604001600020549190613978565b613731565b5060015b9392505050565b611c2a6130d8565b611c32613a0f565b3360009081526017602052604090208115611d14578054821115611c93576040805162461bcd60e51b81526020600482015260136024820152721cdd185ad95910985b080f0817d85b5bdd5b9d606a1b604482015290519081900360640190fd5b8054611c9f908361323d565b81556040805163a9059cbb60e01b8152336004820152602481018490529051309163a9059cbb9160448083019260209291908290030181600087803b158015611ce757600080fd5b505af1158015611cfb573d6000803e3d6000fd5b505050506040513d6020811015611d1157600080fd5b50505b6015548154611d2d9164e8d4a5100091610bd79161327f565b600182015560408051838152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a25050565b60055460ff1690565b600f546001600160a01b03163314611dc2576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b611dca6130d8565b601655565b601354600a5460408051630db3e24f60e21b81526001600160a01b038681166004830152928316602482015260448101859052905160009392909216916336cf893c91606480820192602092909190829003018186803b158015611e3257600080fd5b505afa158015611e46573d6000803e3d6000fd5b505050506040513d6020811015611e5c57600080fd5b50519392505050565b6000611582611e7261372d565b84611c128560016000611e8361372d565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613416565b60198160058110611ec057fe5b0154905081565b600f546001600160a01b03163314611f14576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600c55565b6018546001600160a01b031681565b600c54600a54604080516370a0823160e01b81523060048201529051600093611fb79361271093610bd7936001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611f8557600080fd5b505afa158015611f99573d6000803e3d6000fd5b505050506040513d6020811015611faf57600080fd5b50519061327f565b905090565b6000611fc730612102565b604080516323b872dd60e01b8152336004820152306024820181905260448201869052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561201957600080fd5b505af115801561202d573d6000803e3d6000fd5b505050506040513d602081101561204357600080fd5b506000905061205130612102565b905061205d818361323d565b9250612068836136a8565b505050565b600f546001600160a01b031681565b600e5481565b600b546001600160a01b031681565b61271081565b600f546001600160a01b031633146120e4576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b60138054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b031660009081526020819052604090205490565b600f546001600160a01b0316331461216a576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b60008260ff16118015612180575060068260ff16105b6121c6576040805162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b604482015290519081900360640190fd5b4360196001840360ff16600581106121da57fe5b015411612223576040805162461bcd60e51b8152602060048201526012602482015271546f6f206c61746520746f2075706461746560701b604482015290519081900360640190fd5b80601e8360ff1660068110611b5e57fe5b6000611fb7612241611b64565b610bd7670de0b6b3a7640000610bd1612ca2565b60115481565b6012546001600160a01b031681565b600060055b60018160ff16106124085760196001820360ff166005811061228d57fe5b015483106123ff5760196001820360ff16600581106122a857fe5b015484106122d7576122cf601e8260ff16600681106122c357fe5b0154610bd1858761323d565b915050611586565b600061230d601e8360ff16600681106122ec57fe5b0154610bd160196001860360ff166005811061230457fe5b0154879061323d565b90508160ff166001141561234957612340612339601e60005b0154610bd188601960005b01549061323d565b8290613416565b92505050611586565b6001820391505b60018260ff16106123f05760196001830360ff166005811061236e57fe5b015485106123a257612340612339601e8460ff166006811061238c57fe5b0154610bd18860198760ff166005811061233157fe5b6123e2612339601e8460ff16600681106123b857fe5b0154610bd160196001870360ff16600581106123d057fe5b015460198760ff166005811061233157fe5b600019909201919050612350565b612340612339601e6000612326565b6000190161226f565b50601e54611c1b90610bd1848661323d565b600d5481565b600f546001600160a01b0316331461246d576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600d55565b600f546001600160a01b031633146124bf576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115645780601f1061153957610100808354040283529160200191611564565b600f546001600160a01b0316331461258f576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600a546001600160a01b03828116911614156125db576040805162461bcd60e51b8152602060048083019190915260248201526319b1b93b60e11b604482015290519081900360640190fd5b6001600160a01b038116301415612622576040805162461bcd60e51b815260206004808301919091526024820152631b5b1d9d60e21b604482015290519081900360640190fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561267157600080fd5b505afa158015612685573d6000803e3d6000fd5b505050506040513d602081101561269b57600080fd5b5051601354600a5460408051630db3e24f60e21b81526001600160a01b038781166004830152928316602482015260448101859052905193945060009391909216916336cf893c916064808301926020929190829003018186803b15801561270257600080fd5b505afa158015612716573d6000803e3d6000fd5b505050506040513d602081101561272c57600080fd5b505111612769576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b601354612783906001600160a01b03848116911683613470565b601354600a546040805163248391ff60e01b81526001600160a01b0386811660048301529283166024820152604481018590529051919092169163248391ff9160648083019260209291908290030181600087803b1580156127e457600080fd5b505af11580156127f8573d6000803e3d6000fd5b505050506040513d602081101561280e57600080fd5b50505050565b601354600160a01b900460ff1681565b600061158261283161372d565b84611c1285604051806060016040528060258152602001614057602591396001600061285b61372d565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613978565b600a546001600160a01b031681565b6010546001600160a01b0316331461291b57600f546001600160a01b031633146128fa576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b601854601154600a5461291b926001600160a01b0391821692911690613470565b6000601155565b600f546001600160a01b0316331461296f576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600061158261299e61372d565b848461381d565b60145481565b600f546001600160a01b031633146129f8576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600080612a2684612de6565b90508015612a4357612a40612710610bd78684830361327f565b93505b6000612a5c612a50611b64565b610bd787610bd1612ca2565b600a549091506001600160a01b0385811691161415612a7e5791506115869050565b6013546040805163ae2841c760e01b8152600481018490526001600160a01b0387811660248301529151919092169163ae2841c7916044808301926020929190829003018186803b158015612ad257600080fd5b505afa158015612ae6573d6000803e3d6000fd5b505050506040513d6020811015612afc57600080fd5b505195945050505050565b600f546001600160a01b03163314612b54576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600a5460408051637e062a3560e11b815290516001600160a01b039283169284169163fc0c546a9160048083019260209291908290030181600087803b158015612b9d57600080fd5b505af1158015612bb1573d6000803e3d6000fd5b505050506040513d6020811015612bc757600080fd5b50516001600160a01b031614612c11576040805162461bcd60e51b815260206004820152600a60248201526910ba37b5b2b719a1a92b60b11b604482015290519081900360640190fd5b601380546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b03163314612c80576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600a54604080516370a0823160e01b8152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015612cf257600080fd5b505afa158015612d06573d6000803e3d6000fd5b505050506040513d6020811015612d1c57600080fd5b50516010549091506001600160a01b031615612dbd57601054600a54604080516370a0823160e01b81526001600160a01b0392831660048201529051612dba9392909216916370a0823191602480820192602092909190829003018186803b158015612d8757600080fd5b505afa158015612d9b573d6000803e3d6000fd5b505050506040513d6020811015612db157600080fd5b50518290613416565b90505b601154612dcb90829061323d565b91505090565b60165481565b6013546001600160a01b031681565b6010546000906001600160a01b031615612e8257601054600a5460408051637ecdf29160e11b81526001600160a01b039283166004820152602481018690529051919092169163fd9be522916044808301926020929190829003018186803b158015612e5157600080fd5b505afa158015612e65573d6000803e3d6000fd5b505050506040513d6020811015612e7b57600080fd5b5051611586565b600092915050565b60155481565b601354604051633883e11960e01b81526000916001600160a01b031690633883e1199084906001906004018083606080828437600083820152931515601f909401601f19169091019283525050604051602080830193509181900382018186803b158015612efd57600080fd5b505afa158015612f11573d6000803e3d6000fd5b505050506040513d6020811015612f2757600080fd5b505192915050565b6010546001600160a01b03161561304c57601054604080516371f4f3fb60e01b815290516001600160a01b039092169182916371f4f3fb916004808301926020929190829003018186803b158015612f8657600080fd5b505afa158015612f9a573d6000803e3d6000fd5b505050506040513d6020811015612fb057600080fd5b50511561304a576000612fc1611f28565b601054600a54919250612fe1916001600160a01b03908116911683613470565b600a546040805163b02bf4b960e01b81526001600160a01b0392831660048201526024810184905290519184169163b02bf4b99160448082019260009290919082900301818387803b15801561303657600080fd5b505af1158015611008573d6000803e3d6000fd5b505b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b601e8160068110611ec057fe5b600f546001600160a01b031633146130d3576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600e55565b60145443116130e65761304c565b60006130f130612102565b90508061310257504360145561304c565b60006131106014544361226a565b905061314061313783610bd764e8d4a51000610bd16016548761327f90919063ffffffff16565b60155490613416565b601555505043601455565b6010546001600160a01b031681565b600c5481565b6001600160a01b03811660009081526017602052604081206015548261318530612102565b90506014544311801561319757508015155b156131d55760006131aa6014544361226a565b90506131d161313783610bd764e8d4a51000610bd16016548761327f90919063ffffffff16565b9250505b61320383600101546131fd64e8d4a51000610bd786886000015461327f90919063ffffffff16565b9061323d565b95945050505050565b3360009081526017602052604090205461322590611c22565b61304a61323133612102565b82610b25565b61b5a481565b6000611c1b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613978565b60008261328e57506000611586565b8282028284828161329b57fe5b0414611c1b5760405162461bcd60e51b8152600401808060200182810382526021815260200180613f7a6021913960400191505060405180910390fd5b6000611c1b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aa5565b6001600160a01b03821661335f5760405162461bcd60e51b8152600401808060200182810382526021815260200180613fc36021913960400191505060405180910390fd5b61336b82600083612068565b6133a881604051806060016040528060228152602001613f10602291396001600160a01b0385166000908152602081905260409020549190613978565b6001600160a01b0383166000908152602081905260409020556002546133ce908261323d565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600082820183811015611c1b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612068908490613b0a565b3b151590565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261280e908590613b0a565b6012546000906001600160a01b0316156135e457601254604080516397c4fac760e01b815290516000926001600160a01b0316916397c4fac7916004808301926020929190829003018186803b15801561357b57600080fd5b505afa15801561358f573d6000803e3d6000fd5b505050506040513d60208110156135a557600080fd5b5051905080156135e25760006135c1612710610bd7868561327f565b90506135cd848261323d565b6011549094506135dd9082613416565b601155505b505b6135ec611b64565b6135f7575080613610565b61360d83610bd7613606611b64565b859061327f565b90505b8015611c1b57600d54600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561366457600080fd5b505afa158015613678573d6000803e3d6000fd5b505050506040513d602081101561368e57600080fd5b5051111561369e5761369e612f2f565b611c1b8482613bbb565b3360009081526017602052604090206136bf6130d8565b6136c7613a0f565b80546136d39083613416565b8082556015546136ee9164e8d4a5100091610bd7919061327f565b600182015560408051838152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25050565b3390565b6001600160a01b0383166137765760405162461bcd60e51b81526004018080602001828103825260248152602001806140096024913960400191505060405180910390fd5b6001600160a01b0382166137bb5760405162461bcd60e51b8152600401808060200182810382526022815260200180613f326022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166138625760405162461bcd60e51b8152600401808060200182810382526025815260200180613fe46025913960400191505060405180910390fd5b6001600160a01b0382166138a75760405162461bcd60e51b8152600401808060200182810382526023815260200180613eed6023913960400191505060405180910390fd5b6138b2838383612068565b6138ef81604051806060016040528060268152602001613f54602691396001600160a01b0386166000908152602081905260409020549190613978565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461391e9082613416565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115613a075760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139cc5781810151838201526020016139b4565b50505050905090810190601f1680156139f95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b33600090815260176020526040812060018101546015548254929392613a4592916131fd9164e8d4a5100091610bd7919061327f565b905080156110c7576002820154613a5c9082613416565b6002830155613a6b3382613cab565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25050565b60008183613af45760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156139cc5781810151838201526020016139b4565b506000838581613b0057fe5b0495945050505050565b6060613b5f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613d4a9092919063ffffffff16565b80519091501561206857808060200190516020811015613b7e57600080fd5b50516120685760405162461bcd60e51b815260040180806020018281038252602a81526020018061402d602a913960400191505060405180910390fd5b6001600160a01b038216613c16576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b613c2260008383612068565b600254613c2f9082613416565b6002556001600160a01b038216600090815260208190526040902054613c559082613416565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613cf657600080fd5b505afa158015613d0a573d6000803e3d6000fd5b505050506040513d6020811015613d2057600080fd5b5051905061206883838310613d355783613d37565b825b600b546001600160a01b03169190613470565b6060613d598484600085613d61565b949350505050565b6060613d6c856134c2565b613dbd576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310613dfc5780518252601f199092019160209182019101613ddd565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613e5e576040519150601f19603f3d011682016040523d82523d6000602084013e613e63565b606091505b50915091508115613e77579150613d599050565b805115613e875780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156139cc5781810151838201526020016139b4565b6040518060600160405280600390602082028036833750919291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209fe59dda821dd8a56e8227536198e7550c081072e43c7590ae9e6743bb33702864736f6c634300060c00330000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000006c3f90f043a72fa612cbac8115ee7e52bde6e490000000000000000000000000b1dc9124c395c1e97773ab855d66e879f053a289000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000aa5578


Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103e55760003560e01c80638e087c781161020a578063b69ef8a811610125578063dfc1e7d6116100b8578063f889794511610087578063f889794514610ac9578063f88e12f914610ad1578063fa09e63014610af7578063fc0c546a14610620578063fc47e20914610b1d576103e5565b8063dfc1e7d614610a7f578063ebbf5c1714610a9c578063f36c0a7214610ab9578063f77c479114610ac1576103e5565b8063c33c4475116100f4578063c33c447514610a25578063ceae909d14610a2d578063d389800f14610a49578063dd62ed3e14610a51576103e5565b8063b69ef8a8146109f0578063b774e0c3146109f8578063bd38837b14610a00578063be35761614610a08576103e5565b8063a75ac6081161019d578063ab033ea91161016c578063ab033ea914610952578063ae2841c714610978578063b19337a4146109a4578063b543503e146109ca576103e5565b8063a75ac608146108f0578063a8602fea146108f8578063a9059cbb1461091e578063a9f8d1811461094a576103e5565b806399be90dc116101d957806399be90dc1461088e578063a3d7c749146108b4578063a457c2d7146108bc578063a488680f146108e8576103e5565b80638e087c781461083b578063909d3f4c1461084357806392eefe9b1461086057806395d89b4114610886576103e5565b8063395093511161030557806367f4527e1161029857806370cf7f6f1161026757806370cf7f6f146107da57806377c7b8fc1461080057806389cf3204146108085780638a4adf24146108105780638dbb1e3a14610818576103e5565b806367f4527e146107855780636ac5db191461078d578063706557c01461079557806370a08231146107b4576103e5565b806348a0d754116102d457806348a0d75414610750578063569c426b146107585780635aa6e675146107755780635db88e851461077d576103e5565b806339509351146106e25780633fd500011461070e57806345dc3dd81461072b5780634626402b14610748576103e5565b806318160ddd1161037d5780632e17de781161034c5780632e17de781461065e578063313ce5671461067b57806336ef5eb41461069957806338b7f2cb146106b6576103e5565b806318160ddd146105c25780631959a002146105dc5780631f1fcd511461062057806323b872dd14610628576103e5565b8063095ea7b3116103b9578063095ea7b3146104fb5780630cc9fff31461053b5780630edc63dc146105635780631494f1d71461059c576103e5565b8062f714ce146103ea578063018ee9b71461041857806306aaa1c81461044457806306fdde031461047e575b600080fd5b6104166004803603604081101561040057600080fd5b50803590602001356001600160a01b0316610b25565b005b6104166004803603604081101561042e57600080fd5b506001600160a01b038135169060200135611011565b6104166004803603608081101561045a57600080fd5b508035906001600160a01b03602082013516906040810135906060013515156110cb565b6104866114d8565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104c05781810151838201526020016104a8565b50505050905090810190601f1680156104ed5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105276004803603604081101561051157600080fd5b506001600160a01b03813516906020013561156e565b604080519115158252519081900360200190f35b610416600480360360c081101561055157600080fd5b50608081013560a0820135151561158c565b6105806004803603602081101561057957600080fd5b50356119f2565b604080516001600160a01b039092168252519081900360200190f35b610416600480360360408110156105b257600080fd5b5060ff8135169060200135611a0f565b6105ca611b64565b60408051918252519081900360200190f35b610602600480360360208110156105f257600080fd5b50356001600160a01b0316611b6a565b60408051938452602084019290925282820152519081900360600190f35b610580611b8b565b6105276004803603606081101561063e57600080fd5b506001600160a01b03813581169160208101359091169060400135611b9a565b6104166004803603602081101561067457600080fd5b5035611c22565b610683611d6c565b6040805160ff9092168252519081900360200190f35b610416600480360360208110156106af57600080fd5b5035611d75565b6105ca600480360360408110156106cc57600080fd5b506001600160a01b038135169060200135611dcf565b610527600480360360408110156106f857600080fd5b506001600160a01b038135169060200135611e65565b6105ca6004803603602081101561072457600080fd5b5035611eb3565b6104166004803603602081101561074157600080fd5b5035611ec7565b610580611f19565b6105ca611f28565b6104166004803603602081101561076e57600080fd5b5035611fbc565b61058061206d565b6105ca61207c565b610580612082565b6105ca612091565b610416600480360360208110156107ab57600080fd5b50351515612097565b6105ca600480360360208110156107ca57600080fd5b50356001600160a01b0316612102565b610416600480360360408110156107f057600080fd5b5060ff813516906020013561211d565b6105ca612234565b6105ca612255565b61058061225b565b6105ca6004803603604081101561082e57600080fd5b508035906020013561226a565b6105ca61241a565b6104166004803603602081101561085957600080fd5b5035612420565b6104166004803603602081101561087657600080fd5b50356001600160a01b0316612472565b6104866124e1565b610416600480360360208110156108a457600080fd5b50356001600160a01b0316612542565b610527612814565b610527600480360360408110156108d257600080fd5b506001600160a01b038135169060200135612824565b61058061288c565b61041661289b565b6104166004803603602081101561090e57600080fd5b50356001600160a01b0316612922565b6105276004803603604081101561093457600080fd5b506001600160a01b038135169060200135612991565b6105ca6129a5565b6104166004803603602081101561096857600080fd5b50356001600160a01b03166129ab565b6105ca6004803603604081101561098e57600080fd5b50803590602001356001600160a01b0316612a1a565b610416600480360360208110156109ba57600080fd5b50356001600160a01b0316612b07565b610416600480360360208110156109e057600080fd5b50356001600160a01b0316612c33565b6105ca612ca2565b6105ca612dd1565b610580612dd7565b6105ca60048036036020811015610a1e57600080fd5b5035612de6565b6105ca612e8a565b6105ca60048036036060811015610a4357600080fd5b50612e90565b610416612f2f565b6105ca60048036036040811015610a6757600080fd5b506001600160a01b038135811691602001351661304e565b6105ca60048036036020811015610a9557600080fd5b5035613079565b61041660048036036020811015610ab257600080fd5b5035613086565b6104166130d8565b61058061314b565b6105ca61315a565b6105ca60048036036020811015610ae757600080fd5b50356001600160a01b0316613160565b61041660048036036020811015610b0d57600080fd5b50356001600160a01b031661320c565b6105ca613237565b6000610b3033612102565b905080831115610bb8576000610b46848361323d565b33600090815260176020526040902054909150811115610bad576040805162461bcd60e51b815260206004820152601960248201527f5f7573657242616c2b7374616b6564203c205f73686172657300000000000000604482015290519081900360640190fd5b610bb681611c22565b505b6000610bdd610bc5611b64565b610bd786610bd1612ca2565b9061327f565b906132d8565b9050610be9338561331a565b6012546001600160a01b031615610c975760125460408051638251390960e01b815290516000926001600160a01b0316916382513909916004808301926020929190829003018186803b158015610c3f57600080fd5b505afa158015610c53573d6000803e3d6000fd5b505050506040513d6020811015610c6957600080fd5b505190508015610c95576000610c85612710610bd7858561327f565b9050610c91838261323d565b9250505b505b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610ce257600080fd5b505afa158015610cf6573d6000803e3d6000fd5b505050506040513d6020811015610d0c57600080fd5b5051905081811015610e49576000610d24838361323d565b6010549091506001600160a01b031615610da957601054600a546040805163f3fef3a360e01b81526001600160a01b039283166004820152602481018590529051919092169163f3fef3a391604480830192600092919082900301818387803b158015610d9057600080fd5b505af1158015610da4573d6000803e3d6000fd5b505050505b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610df457600080fd5b505afa158015610e08573d6000803e3d6000fd5b505050506040513d6020811015610e1e57600080fd5b505190506000610e2e828561323d565b905082811015610e4557610e428482613416565b94505b5050505b600a546001600160a01b0385811691161415610e7b57600a54610e76906001600160a01b03163384613470565b61100a565b601354600a5460408051630db3e24f60e21b81526001600160a01b039283166004820152878316602482015260448101869052905160009392909216916336cf893c91606480820192602092909190829003018186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d6020811015610f0857600080fd5b505111610f45576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b601354600a54610f62916001600160a01b03918216911684613470565b601354600a546040805163248391ff60e01b81526001600160a01b0392831660048201528783166024820152604481018690529051600093929092169163248391ff9160648082019260209290919082900301818787803b158015610fc657600080fd5b505af1158015610fda573d6000803e3d6000fd5b505050506040513d6020811015610ff057600080fd5b505190506110086001600160a01b0386163383613470565b505b5050505050565b6010546001600160a01b0316331461105e576040805162461bcd60e51b815260206004820152600b60248201526a10b1b7b73a3937b63632b960a91b604482015290519081900360640190fd5b600a546001600160a01b03838116911614156110ad576040805162461bcd60e51b81526020600482015260096024820152683a37b5b2b719a1a92b60b91b604482015290519081900360640190fd5b6010546110c7906001600160a01b03848116911683613470565b5050565b601354600160a01b900460ff16611142576110e5336134c2565b1580156110f157503332145b611142576040805162461bcd60e51b815260206004820181905260248201527f536f72727920776520646f206e6f742061636365707420636f6e747261637421604482015290519081900360640190fd5b60008411611182576040805162461bcd60e51b81526020600482015260086024820152670857d85b5bdd5b9d60c21b604482015290519081900360640190fd5b600061118c612ca2565b600a54604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156111dd57600080fd5b505afa1580156111f1573d6000803e3d6000fd5b505050506040513d602081101561120757600080fd5b5051600a549091506001600160a01b038681169116141561123f57600a5461123a906001600160a01b03163330896134c8565b61137e565b601354600a5460408051630db3e24f60e21b81526001600160a01b0389811660048301529283166024820152604481018a9052905160009392909216916336cf893c91606480820192602092909190829003018186803b1580156112a257600080fd5b505afa1580156112b6573d6000803e3d6000fd5b505050506040513d60208110156112cc57600080fd5b5051111561137e576013546112f0906001600160a01b0387811691339116896134c8565b601354600a546040805163248391ff60e01b81526001600160a01b0389811660048301529283166024820152604481018a90529051919092169163248391ff9160648083019260209291908290030181600087803b15801561135157600080fd5b505af1158015611365573d6000803e3d6000fd5b505050506040513d602081101561137b57600080fd5b50505b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156113c957600080fd5b505afa1580156113dd573d6000803e3d6000fd5b505050506040513d60208110156113f357600080fd5b5051600e5490915015806114095750600e548111155b61144d576040805162461bcd60e51b815260206004820152601060248201526f03e746f74616c4465706f7369744361760841b604482015290519081900360640190fd5b611457818361323d565b965084871015611499576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b86156114cf57836114b5576114af338489613522565b506114cf565b60006114c230858a613522565b90506114cd816136a8565b505b50505050505050565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115645780601f1061153957610100808354040283529160200191611564565b820191906000526020600020905b81548152906001019060200180831161154757829003601f168201915b5050505050905090565b600061158261157b61372d565b8484613731565b5060015b92915050565b601354600160a01b900460ff16611603576115a6336134c2565b1580156115b257503332145b611603576040805162461bcd60e51b815260206004820181905260248201527f536f72727920776520646f206e6f742061636365707420636f6e747261637421604482015290519081900360640190fd5b600061160d612ca2565b600a54604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561165e57600080fd5b505afa158015611672573d6000803e3d6000fd5b505050506040513d602081101561168857600080fd5b505190506000805b60048160ff1610156117d5576000878260ff16600481106116ad57fe5b6020020135905080156117cc578160ff16600314156116f4576116ef33308360068660ff16600481106116dc57fe5b01546001600160a01b03169291906134c8565b6117cc565b6013546000906001600160a01b03166336cf893c600660ff86166004811061171857fe5b0154600a546040805160e085901b6001600160e01b03191681526001600160a01b03938416600482015292909116602483015260448201869052516064808301926020929190829003018186803b15801561177257600080fd5b505afa158015611786573d6000803e3d6000fd5b505050506040513d602081101561179c57600080fd5b505111156117cc576013546117c79033906001600160a01b031683600660ff8716600481106116dc57fe5b600192505b50600101611690565b508015611896576117e4613ece565b8635815260208088013590820152604080880135818301526013549051635bd88e2f60e11b81526001600160a01b039091169063b7b11c5e9083906004018082606080838360005b8381101561184457818101518382015260200161182c565b50505050905001915050602060405180830381600087803b15801561186857600080fd5b505af115801561187c573d6000803e3d6000fd5b505050506040513d602081101561189257600080fd5b5050505b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156118e157600080fd5b505afa1580156118f5573d6000803e3d6000fd5b505050506040513d602081101561190b57600080fd5b5051600e5490915015806119215750600e548111155b611965576040805162461bcd60e51b815260206004820152601060248201526f03e746f74616c4465706f7369744361760841b604482015290519081900360640190fd5b6000611971828561323d565b9050868110156119b3576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b80156114cd57856119cf576119c9338683613522565b506114cd565b60006119dc308784613522565b90506119e7816136a8565b505050505050505050565b600681600481106119ff57fe5b01546001600160a01b0316905081565b600f546001600160a01b03163314611a5c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b60058260ff1610611aaa576040805162461bcd60e51b81526020600482015260136024820152725f696e646578206f7574206f662072616e676560681b604482015290519081900360640190fd5b438111611af3576040805162461bcd60e51b8152602060048201526012602482015271546f6f206c61746520746f2075706461746560701b604482015290519081900360640190fd5b4360198360ff1660058110611b0457fe5b015411611b4d576040805162461bcd60e51b8152602060048201526012602482015271546f6f206c61746520746f2075706461746560701b604482015290519081900360640190fd5b8060198360ff1660058110611b5e57fe5b01555050565b60025490565b60176020526000908152604090208054600182015460029092015490919083565b600a546001600160a01b031690565b6000611ba784848461381d565b611c1784611bb361372d565b611c1285604051806060016040528060288152602001613f9b602891396001600160a01b038a16600090815260016020526040812090611bf161372d565b6001600160a01b031681526020810191909152604001600020549190613978565b613731565b5060015b9392505050565b611c2a6130d8565b611c32613a0f565b3360009081526017602052604090208115611d14578054821115611c93576040805162461bcd60e51b81526020600482015260136024820152721cdd185ad95910985b080f0817d85b5bdd5b9d606a1b604482015290519081900360640190fd5b8054611c9f908361323d565b81556040805163a9059cbb60e01b8152336004820152602481018490529051309163a9059cbb9160448083019260209291908290030181600087803b158015611ce757600080fd5b505af1158015611cfb573d6000803e3d6000fd5b505050506040513d6020811015611d1157600080fd5b50505b6015548154611d2d9164e8d4a5100091610bd79161327f565b600182015560408051838152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a25050565b60055460ff1690565b600f546001600160a01b03163314611dc2576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b611dca6130d8565b601655565b601354600a5460408051630db3e24f60e21b81526001600160a01b038681166004830152928316602482015260448101859052905160009392909216916336cf893c91606480820192602092909190829003018186803b158015611e3257600080fd5b505afa158015611e46573d6000803e3d6000fd5b505050506040513d6020811015611e5c57600080fd5b50519392505050565b6000611582611e7261372d565b84611c128560016000611e8361372d565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613416565b60198160058110611ec057fe5b0154905081565b600f546001600160a01b03163314611f14576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600c55565b6018546001600160a01b031681565b600c54600a54604080516370a0823160e01b81523060048201529051600093611fb79361271093610bd7936001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611f8557600080fd5b505afa158015611f99573d6000803e3d6000fd5b505050506040513d6020811015611faf57600080fd5b50519061327f565b905090565b6000611fc730612102565b604080516323b872dd60e01b8152336004820152306024820181905260448201869052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561201957600080fd5b505af115801561202d573d6000803e3d6000fd5b505050506040513d602081101561204357600080fd5b506000905061205130612102565b905061205d818361323d565b9250612068836136a8565b505050565b600f546001600160a01b031681565b600e5481565b600b546001600160a01b031681565b61271081565b600f546001600160a01b031633146120e4576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b60138054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b031660009081526020819052604090205490565b600f546001600160a01b0316331461216a576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b60008260ff16118015612180575060068260ff16105b6121c6576040805162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b604482015290519081900360640190fd5b4360196001840360ff16600581106121da57fe5b015411612223576040805162461bcd60e51b8152602060048201526012602482015271546f6f206c61746520746f2075706461746560701b604482015290519081900360640190fd5b80601e8360ff1660068110611b5e57fe5b6000611fb7612241611b64565b610bd7670de0b6b3a7640000610bd1612ca2565b60115481565b6012546001600160a01b031681565b600060055b60018160ff16106124085760196001820360ff166005811061228d57fe5b015483106123ff5760196001820360ff16600581106122a857fe5b015484106122d7576122cf601e8260ff16600681106122c357fe5b0154610bd1858761323d565b915050611586565b600061230d601e8360ff16600681106122ec57fe5b0154610bd160196001860360ff166005811061230457fe5b0154879061323d565b90508160ff166001141561234957612340612339601e60005b0154610bd188601960005b01549061323d565b8290613416565b92505050611586565b6001820391505b60018260ff16106123f05760196001830360ff166005811061236e57fe5b015485106123a257612340612339601e8460ff166006811061238c57fe5b0154610bd18860198760ff166005811061233157fe5b6123e2612339601e8460ff16600681106123b857fe5b0154610bd160196001870360ff16600581106123d057fe5b015460198760ff166005811061233157fe5b600019909201919050612350565b612340612339601e6000612326565b6000190161226f565b50601e54611c1b90610bd1848661323d565b600d5481565b600f546001600160a01b0316331461246d576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600d55565b600f546001600160a01b031633146124bf576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115645780601f1061153957610100808354040283529160200191611564565b600f546001600160a01b0316331461258f576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600a546001600160a01b03828116911614156125db576040805162461bcd60e51b8152602060048083019190915260248201526319b1b93b60e11b604482015290519081900360640190fd5b6001600160a01b038116301415612622576040805162461bcd60e51b815260206004808301919091526024820152631b5b1d9d60e21b604482015290519081900360640190fd5b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561267157600080fd5b505afa158015612685573d6000803e3d6000fd5b505050506040513d602081101561269b57600080fd5b5051601354600a5460408051630db3e24f60e21b81526001600160a01b038781166004830152928316602482015260448101859052905193945060009391909216916336cf893c916064808301926020929190829003018186803b15801561270257600080fd5b505afa158015612716573d6000803e3d6000fd5b505050506040513d602081101561272c57600080fd5b505111612769576040805162461bcd60e51b81526020600482015260066024820152650726174653d360d41b604482015290519081900360640190fd5b601354612783906001600160a01b03848116911683613470565b601354600a546040805163248391ff60e01b81526001600160a01b0386811660048301529283166024820152604481018590529051919092169163248391ff9160648083019260209291908290030181600087803b1580156127e457600080fd5b505af11580156127f8573d6000803e3d6000fd5b505050506040513d602081101561280e57600080fd5b50505050565b601354600160a01b900460ff1681565b600061158261283161372d565b84611c1285604051806060016040528060258152602001614057602591396001600061285b61372d565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613978565b600a546001600160a01b031681565b6010546001600160a01b0316331461291b57600f546001600160a01b031633146128fa576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b601854601154600a5461291b926001600160a01b0391821692911690613470565b6000601155565b600f546001600160a01b0316331461296f576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600061158261299e61372d565b848461381d565b60145481565b600f546001600160a01b031633146129f8576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600080612a2684612de6565b90508015612a4357612a40612710610bd78684830361327f565b93505b6000612a5c612a50611b64565b610bd787610bd1612ca2565b600a549091506001600160a01b0385811691161415612a7e5791506115869050565b6013546040805163ae2841c760e01b8152600481018490526001600160a01b0387811660248301529151919092169163ae2841c7916044808301926020929190829003018186803b158015612ad257600080fd5b505afa158015612ae6573d6000803e3d6000fd5b505050506040513d6020811015612afc57600080fd5b505195945050505050565b600f546001600160a01b03163314612b54576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600a5460408051637e062a3560e11b815290516001600160a01b039283169284169163fc0c546a9160048083019260209291908290030181600087803b158015612b9d57600080fd5b505af1158015612bb1573d6000803e3d6000fd5b505050506040513d6020811015612bc757600080fd5b50516001600160a01b031614612c11576040805162461bcd60e51b815260206004820152600a60248201526910ba37b5b2b719a1a92b60b11b604482015290519081900360640190fd5b601380546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b03163314612c80576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b601280546001600160a01b0319166001600160a01b0392909216919091179055565b600a54604080516370a0823160e01b8152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015612cf257600080fd5b505afa158015612d06573d6000803e3d6000fd5b505050506040513d6020811015612d1c57600080fd5b50516010549091506001600160a01b031615612dbd57601054600a54604080516370a0823160e01b81526001600160a01b0392831660048201529051612dba9392909216916370a0823191602480820192602092909190829003018186803b158015612d8757600080fd5b505afa158015612d9b573d6000803e3d6000fd5b505050506040513d6020811015612db157600080fd5b50518290613416565b90505b601154612dcb90829061323d565b91505090565b60165481565b6013546001600160a01b031681565b6010546000906001600160a01b031615612e8257601054600a5460408051637ecdf29160e11b81526001600160a01b039283166004820152602481018690529051919092169163fd9be522916044808301926020929190829003018186803b158015612e5157600080fd5b505afa158015612e65573d6000803e3d6000fd5b505050506040513d6020811015612e7b57600080fd5b5051611586565b600092915050565b60155481565b601354604051633883e11960e01b81526000916001600160a01b031690633883e1199084906001906004018083606080828437600083820152931515601f909401601f19169091019283525050604051602080830193509181900382018186803b158015612efd57600080fd5b505afa158015612f11573d6000803e3d6000fd5b505050506040513d6020811015612f2757600080fd5b505192915050565b6010546001600160a01b03161561304c57601054604080516371f4f3fb60e01b815290516001600160a01b039092169182916371f4f3fb916004808301926020929190829003018186803b158015612f8657600080fd5b505afa158015612f9a573d6000803e3d6000fd5b505050506040513d6020811015612fb057600080fd5b50511561304a576000612fc1611f28565b601054600a54919250612fe1916001600160a01b03908116911683613470565b600a546040805163b02bf4b960e01b81526001600160a01b0392831660048201526024810184905290519184169163b02bf4b99160448082019260009290919082900301818387803b15801561303657600080fd5b505af1158015611008573d6000803e3d6000fd5b505b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b601e8160068110611ec057fe5b600f546001600160a01b031633146130d3576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600e55565b60145443116130e65761304c565b60006130f130612102565b90508061310257504360145561304c565b60006131106014544361226a565b905061314061313783610bd764e8d4a51000610bd16016548761327f90919063ffffffff16565b60155490613416565b601555505043601455565b6010546001600160a01b031681565b600c5481565b6001600160a01b03811660009081526017602052604081206015548261318530612102565b90506014544311801561319757508015155b156131d55760006131aa6014544361226a565b90506131d161313783610bd764e8d4a51000610bd16016548761327f90919063ffffffff16565b9250505b61320383600101546131fd64e8d4a51000610bd786886000015461327f90919063ffffffff16565b9061323d565b95945050505050565b3360009081526017602052604090205461322590611c22565b61304a61323133612102565b82610b25565b61b5a481565b6000611c1b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613978565b60008261328e57506000611586565b8282028284828161329b57fe5b0414611c1b5760405162461bcd60e51b8152600401808060200182810382526021815260200180613f7a6021913960400191505060405180910390fd5b6000611c1b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aa5565b6001600160a01b03821661335f5760405162461bcd60e51b8152600401808060200182810382526021815260200180613fc36021913960400191505060405180910390fd5b61336b82600083612068565b6133a881604051806060016040528060228152602001613f10602291396001600160a01b0385166000908152602081905260409020549190613978565b6001600160a01b0383166000908152602081905260409020556002546133ce908261323d565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600082820183811015611c1b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612068908490613b0a565b3b151590565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261280e908590613b0a565b6012546000906001600160a01b0316156135e457601254604080516397c4fac760e01b815290516000926001600160a01b0316916397c4fac7916004808301926020929190829003018186803b15801561357b57600080fd5b505afa15801561358f573d6000803e3d6000fd5b505050506040513d60208110156135a557600080fd5b5051905080156135e25760006135c1612710610bd7868561327f565b90506135cd848261323d565b6011549094506135dd9082613416565b601155505b505b6135ec611b64565b6135f7575080613610565b61360d83610bd7613606611b64565b859061327f565b90505b8015611c1b57600d54600a54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561366457600080fd5b505afa158015613678573d6000803e3d6000fd5b505050506040513d602081101561368e57600080fd5b5051111561369e5761369e612f2f565b611c1b8482613bbb565b3360009081526017602052604090206136bf6130d8565b6136c7613a0f565b80546136d39083613416565b8082556015546136ee9164e8d4a5100091610bd7919061327f565b600182015560408051838152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25050565b3390565b6001600160a01b0383166137765760405162461bcd60e51b81526004018080602001828103825260248152602001806140096024913960400191505060405180910390fd5b6001600160a01b0382166137bb5760405162461bcd60e51b8152600401808060200182810382526022815260200180613f326022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166138625760405162461bcd60e51b8152600401808060200182810382526025815260200180613fe46025913960400191505060405180910390fd5b6001600160a01b0382166138a75760405162461bcd60e51b8152600401808060200182810382526023815260200180613eed6023913960400191505060405180910390fd5b6138b2838383612068565b6138ef81604051806060016040528060268152602001613f54602691396001600160a01b0386166000908152602081905260409020549190613978565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461391e9082613416565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115613a075760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139cc5781810151838201526020016139b4565b50505050905090810190601f1680156139f95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b33600090815260176020526040812060018101546015548254929392613a4592916131fd9164e8d4a5100091610bd7919061327f565b905080156110c7576002820154613a5c9082613416565b6002830155613a6b3382613cab565b60408051828152905133917fe2403640ba68fed3a2f88b7557551d1993f84b99bb10ff833f0cf8db0c5e0486919081900360200190a25050565b60008183613af45760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156139cc5781810151838201526020016139b4565b506000838581613b0057fe5b0495945050505050565b6060613b5f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613d4a9092919063ffffffff16565b80519091501561206857808060200190516020811015613b7e57600080fd5b50516120685760405162461bcd60e51b815260040180806020018281038252602a81526020018061402d602a913960400191505060405180910390fd5b6001600160a01b038216613c16576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b613c2260008383612068565b600254613c2f9082613416565b6002556001600160a01b038216600090815260208190526040902054613c559082613416565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600b54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015613cf657600080fd5b505afa158015613d0a573d6000803e3d6000fd5b505050506040513d6020811015613d2057600080fd5b5051905061206883838310613d355783613d37565b825b600b546001600160a01b03169190613470565b6060613d598484600085613d61565b949350505050565b6060613d6c856134c2565b613dbd576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310613dfc5780518252601f199092019160209182019101613ddd565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613e5e576040519150601f19603f3d011682016040523d82523d6000602084013e613e63565b606091505b50915091508115613e77579150613d599050565b805115613e875780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156139cc5781810151838201526020016139b4565b6040518060600160405280600390602082028036833750919291505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209fe59dda821dd8a56e8227536198e7550c081072e43c7590ae9e6743bb33702864736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000006c3f90f043a72fa612cbac8115ee7e52bde6e490000000000000000000000000b1dc9124c395c1e97773ab855d66e879f053a289000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000aa5578

-----Decoded View---------------
Arg [0] : _tokenDAI (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [1] : _tokenUSDC (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [2] : _tokenUSDT (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [3] : _token3CRV (address): 0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490
Arg [4] : _tokenYAX (address): 0xb1dC9124c395c1e97773ab855d66E879f053A289
Arg [5] : _yaxPerBlock (uint256): 1000000000000
Arg [6] : _startBlock (uint256): 11163000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [2] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [3] : 0000000000000000000000006c3f90f043a72fa612cbac8115ee7e52bde6e490
Arg [4] : 000000000000000000000000b1dc9124c395c1e97773ab855d66e879f053a289
Arg [5] : 000000000000000000000000000000000000000000000000000000e8d4a51000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000aa5578


Deployed Bytecode Sourcemap

32794:19905:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49642:1888;;;;;;;;;;;;;;;;-1:-1:-1;49642:1888:0;;;;;;-1:-1:-1;;;;;49642:1888:0;;:::i;:::-;;48768:253;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;48768:253:0;;;;;;;;:::i;42213:1202::-;;;;;;;;;;;;;;;;-1:-1:-1;42213:1202:0;;;-1:-1:-1;;;;;42213:1202:0;;;;;;;;;;;;;;;;;:::i;17027:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19133:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19133:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43503:1706;;;;;;;;;;;;;;;;-1:-1:-1;43503:1706:0;;;;;;;;;;;:::i;32943:28::-;;;;;;;;;;;;;;;;-1:-1:-1;32943:28:0;;:::i;:::-;;;;-1:-1:-1;;;;;32943:28:0;;;;;;;;;;;;;;37753:391;;;;;;;;;;;;;;;;-1:-1:-1;37753:391:0;;;;;;;;;:::i;18102:100::-;;;:::i;:::-;;;;;;;;;;;;;;;;33769:44;;;;;;;;;;;;;;;;-1:-1:-1;33769:44:0;-1:-1:-1;;;;;33769:44:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;51538:101;;;:::i;19776:321::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19776:321:0;;;;;;;;;;;;;;;;;:::i;49072:494::-;;;;;;;;;;;;;;;;-1:-1:-1;49072:494:0;;:::i;17954:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37566:179;;;;;;;;;;;;;;;;-1:-1:-1;37566:179:0;;:::i;42030:175::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42030:175:0;;;;;;;;:::i;20506:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20506:218:0;;;;;;;;:::i;34001:29::-;;;;;;;;;;;;;;;;-1:-1:-1;34001:29:0;;:::i;36132:124::-;;;;;;;;;;;;;;;;-1:-1:-1;36132:124:0;;:::i;33822:74::-;;;:::i;40639:135::-;;;:::i;45217:357::-;;;;;;;;;;;;;;;;-1:-1:-1;45217:357:0;;:::i;33303:25::-;;;:::i;33210:44::-;;;:::i;33035:22::-;;;:::i;33095:32::-;;;:::i;37356:202::-;;;;;;;;;;;;;;;;-1:-1:-1;37356:202:0;;;;:::i;18265:119::-;;;;;;;;;;;;;;;;-1:-1:-1;18265:119:0;-1:-1:-1;;;;;18265:119:0;;:::i;38152:365::-;;;;;;;;;;;;;;;;-1:-1:-1;38152:365:0;;;;;;;;;:::i;51647:134::-;;;:::i;33367:21::-;;;:::i;33395:33::-;;;:::i;38593:1133::-;;;;;;;;;;;;;;;;-1:-1:-1;38593:1133:0;;;;;;;:::i;33136:36::-;;;:::i;37004:166::-;;;;;;;;;;;;;;;;-1:-1:-1;37004:166:0;;:::i;36425:162::-;;;;;;;;;;;;;;;;-1:-1:-1;36425:162:0;-1:-1:-1;;;;;36425:162:0;;:::i;17229:87::-;;;:::i;52172:524::-;;;;;;;;;;;;;;;;-1:-1:-1;52172:524:0;-1:-1:-1;;;;;52172:524:0;;:::i;33471:43::-;;;:::i;21227:269::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21227:269:0;;;;;;;;:::i;33005:23::-;;;:::i;39911:468::-;;;:::i;39734:169::-;;;;;;;;;;;;;;;;-1:-1:-1;39734:169:0;-1:-1:-1;;;;;39734:169:0;;:::i;18597:175::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18597:175:0;;;;;;;;:::i;33668:27::-;;;:::i;36264:153::-;;;;;;;;;;;;;;;;-1:-1:-1;36264:153:0;-1:-1:-1;;;;;36264:153:0;;:::i;41536:486::-;;;;;;;;;;;;;;;;-1:-1:-1;41536:486:0;;;;;;-1:-1:-1;;;;;41536:486:0;;:::i;36595:226::-;;;;;;;;;;;;;;;;-1:-1:-1;36595:226:0;-1:-1:-1;;;;;36595:226:0;;:::i;36829:167::-;;;;;;;;;;;;;;;;-1:-1:-1;36829:167:0;-1:-1:-1;;;;;36829:167:0;;:::i;35860:264::-;;;:::i;33737:23::-;;;:::i;33435:27::-;;;:::i;40782:194::-;;;;;;;;;;;;;;;;-1:-1:-1;40782:194:0;;:::i;33702:26::-;;;:::i;41361:167::-;;;;;;;;;;;;;;;;-1:-1:-1;41361:167:0;:::i;40984:369::-;;;:::i;18835:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18835:151:0;;;;;;;;;;:::i;34117:77::-;;;;;;;;;;;;;;;;-1:-1:-1;34117:77:0;;:::i;37178:170::-;;;;;;;;;;;;;;;;-1:-1:-1;37178:170:0;;:::i;47605:495::-;;;:::i;33335:25::-;;;:::i;33066:22::-;;;:::i;47014:583::-;;;;;;;;;;;;;;;;-1:-1:-1;47014:583:0;-1:-1:-1;;;;;47014:583:0;;:::i;48521:153::-;;;;;;;;;;;;;;;;-1:-1:-1;48521:153:0;-1:-1:-1;;;;;48521:153:0;;:::i;33905:44::-;;;:::i;49642:1888::-;49718:13;49734:21;49744:10;49734:9;:21::i;:::-;49718:37;;49780:8;49770:7;:18;49766:203;;;49805:10;49818:21;:7;49830:8;49818:11;:21::i;:::-;49880:10;49871:20;;;;:8;:20;;;;;:27;49805:34;;-1:-1:-1;49862:36:0;;;49854:74;;;;;-1:-1:-1;;;49854:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;49943:14;49951:5;49943:7;:14::i;:::-;49766:203;;49979:6;49988:43;50017:13;:11;:13::i;:::-;49989:22;50003:7;49989:9;:7;:9::i;:::-;:13;;:22::i;:::-;49988:28;;:43::i;:::-;49979:52;;50042:26;50048:10;50060:7;50042:5;:26::i;:::-;50093:12;;-1:-1:-1;;;;;50093:12:0;50085:35;50081:511;;50337:12;;:38;;;-1:-1:-1;;;50337:38:0;;;;50305:29;;-1:-1:-1;;;;;50337:12:0;;:36;;:38;;;;;;;;;;;;;;:12;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50337:38:0;;-1:-1:-1;50394:28:0;;50390:191;;50443:26;50472:42;50508:5;50472:31;:1;50478:24;50472:5;:31::i;:42::-;50443:71;-1:-1:-1;50537:28:0;:1;50443:71;50537:5;:28::i;:::-;50533:32;;50390:191;;50081:511;;50639:9;;:34;;;-1:-1:-1;;;50639:34:0;;50667:4;50639:34;;;;;;50630:6;;-1:-1:-1;;;;;50639:9:0;;:19;;:34;;;;;;;;;;;;;;:9;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50639:34:0;;-1:-1:-1;50688:5:0;;;50684:403;;;50710:16;50729:8;:1;50735;50729:5;:8::i;:::-;50756:10;;50710:27;;-1:-1:-1;;;;;;50756:10:0;:24;50752:130;;50813:10;;50842:9;;50801:65;;;-1:-1:-1;;;50801:65:0;;-1:-1:-1;;;;;50842:9:0;;;50801:65;;;;;;;;;;;;50813:10;;;;;50801:32;;:65;;;;;50813:10;;50801:65;;;;;;;50813:10;;50801:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50752:130;50910:9;;:34;;;-1:-1:-1;;;50910:34:0;;50938:4;50910:34;;;;;;50896:11;;-1:-1:-1;;;;;50910:9:0;;:19;;:34;;;;;;;;;;;;;;:9;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50910:34:0;;-1:-1:-1;50959:10:0;50972:13;50910:34;50983:1;50972:10;:13::i;:::-;50959:26;;51012:11;51004:5;:19;51000:76;;;51048:12;:1;51054:5;51048;:12::i;:::-;51044:16;;51000:76;50684:403;;;;51122:9;;-1:-1:-1;;;;;51103:29:0;;;51122:9;;51103:29;51099:424;;;51149:9;;:37;;-1:-1:-1;;;;;51149:9:0;51172:10;51184:1;51149:22;:37::i;:::-;51099:424;;;51227:9;;51258;;51227:54;;;-1:-1:-1;;;51227:54:0;;-1:-1:-1;;;;;51258:9:0;;;51227:54;;;;;;;;;;;;;;;;;;;51284:1;;51227:9;;;;;:22;;:54;;;;;;;;;;;;;;;:9;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51227:54:0;:58;51219:77;;;;;-1:-1:-1;;;51219:77:0;;;;;;;;;;;;-1:-1:-1;;;51219:77:0;;;;;;;;;;;;;;;51342:9;;51311;;:45;;-1:-1:-1;;;;;51311:9:0;;;;51342;51354:1;51311:22;:45::i;:::-;51392:9;;51418;;51392:49;;;-1:-1:-1;;;51392:49:0;;-1:-1:-1;;;;;51418:9:0;;;51392:49;;;;;;;;;;;;;;;;;;;51371:18;;51392:9;;;;;:17;;:49;;;;;;;;;;;;;;;51371:18;51392:9;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51392:49:0;;-1:-1:-1;51456:55:0;-1:-1:-1;;;;;51456:28:0;;51485:10;51392:49;51456:28;:55::i;:::-;51099:424;;49642:1888;;;;;:::o;48768:253::-;48866:10;;-1:-1:-1;;;;;48866:10:0;48852;:24;48844:48;;;;;-1:-1:-1;;;48844:48:0;;;;;;;;;;;;-1:-1:-1;;;48844:48:0;;;;;;;;;;;;;;;48930:9;;-1:-1:-1;;;;;48911:29:0;;;48930:9;;48911:29;;48903:51;;;;;-1:-1:-1;;;48903:51:0;;;;;;;;;;;;-1:-1:-1;;;48903:51:0;;;;;;;;;;;;;;;48994:10;;48965:48;;-1:-1:-1;;;;;48965:28:0;;;;48994:10;49006:6;48965:28;:48::i;:::-;48768:253;;:::o;42213:1202::-;35621:23;;-1:-1:-1;;;35621:23:0;;;;35616:162;;35670:32;35678:10;35670:30;:32::i;:::-;35669:33;:60;;;;-1:-1:-1;35706:10:0;35720:9;35706:23;35669:60;35661:105;;;;;-1:-1:-1;;;35661:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42359:1:::1;42349:7;:11;42341:32;;;::::0;;-1:-1:-1;;;42341:32:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42341:32:0;;;;;;;;;;;;;::::1;;42384:10;42397:9;:7;:9::i;:::-;42432;::::0;:34:::1;::::0;;-1:-1:-1;;;42432:34:0;;42460:4:::1;42432:34;::::0;::::1;::::0;;;42384:22;;-1:-1:-1;42417:12:0::1;::::0;-1:-1:-1;;;;;42432:9:0;;::::1;::::0;:19:::1;::::0;:34;;;;;::::1;::::0;;;;;;;;;:9;:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;42432:34:0;42499:9:::1;::::0;42432:34;;-1:-1:-1;;;;;;42481:28:0;;::::1;42499:9:::0;::::1;42481:28;42477:366;;;42526:9;::::0;:62:::1;::::0;-1:-1:-1;;;;;42526:9:0::1;42553:10;42573:4;42580:7:::0;42526:26:::1;:62::i;:::-;42477:366;;;42610:9;::::0;42649::::1;::::0;42610:59:::1;::::0;;-1:-1:-1;;;42610:59:0;;-1:-1:-1;;;;;42610:59:0;;::::1;;::::0;::::1;::::0;42649:9;;::::1;42610:59:::0;;;;;;;;;;;;42672:1:::1;::::0;42610:9;;;::::1;::::0;:22:::1;::::0;:59;;;;;::::1;::::0;;;;;;;;;:9;:59;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;42610:59:0;:63:::1;42606:237;;;42742:9;::::0;42690:72:::1;::::0;-1:-1:-1;;;;;42690:31:0;;::::1;::::0;42722:10:::1;::::0;42742:9:::1;42754:7:::0;42690:31:::1;:72::i;:::-;42777:9;::::0;42811::::1;::::0;42777:54:::1;::::0;;-1:-1:-1;;;42777:54:0;;-1:-1:-1;;;;;42777:54:0;;::::1;;::::0;::::1;::::0;42811:9;;::::1;42777:54:::0;;;;;;;;;;;;:9;;;::::1;::::0;:17:::1;::::0;:54;;;;;::::1;::::0;;;;;;;;:9:::1;::::0;:54;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;42606:237:0::1;42867:9;::::0;:34:::1;::::0;;-1:-1:-1;;;42867:34:0;;42895:4:::1;42867:34;::::0;::::1;::::0;;;42853:11:::1;::::0;-1:-1:-1;;;;;42867:9:0::1;::::0;:19:::1;::::0;:34;;;;;::::1;::::0;;;;;;;;:9;:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;42867:34:0;42920:15:::1;::::0;42867:34;;-1:-1:-1;42920:20:0;;:49:::1;;;42954:15;;42944:6;:25;;42920:49;42912:78;;;::::0;;-1:-1:-1;;;42912:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42912:78:0;;;;;;;;;;;;;::::1;;43011:19;:6:::0;43022:7;43011:10:::1;:19::i;:::-;43001:29;;43104:16;43093:7;:27;;43085:48;;;::::0;;-1:-1:-1;;;43085:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;43085:48:0;;;;;;;;;;;;;::::1;;43148:11:::0;;43144:264:::1;;43181:8;43176:221;;43210:36;43219:10;43231:5;43238:7;43210:8;:36::i;:::-;;43176:221;;;43287:12;43302:39;43319:4;43326:5;43333:7;43302:8;:39::i;:::-;43287:54;;43360:21;43373:7;43360:12;:21::i;:::-;43176:221;;35788:1;;;42213:1202:::0;;;;:::o;17027:83::-;17097:5;17090:12;;;;;;;;-1:-1:-1;;17090:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17064:13;;17090:12;;17097:5;;17090:12;;17097:5;17090:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17027:83;:::o;19133:169::-;19216:4;19233:39;19242:12;:10;:12::i;:::-;19256:7;19265:6;19233:8;:39::i;:::-;-1:-1:-1;19290:4:0;19133:169;;;;;:::o;43503:1706::-;35621:23;;-1:-1:-1;;;35621:23:0;;;;35616:162;;35670:32;35678:10;35670:30;:32::i;:::-;35669:33;:60;;;;-1:-1:-1;35706:10:0;35720:9;35706:23;35669:60;35661:105;;;;;-1:-1:-1;;;35661:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43622:10:::1;43635:9;:7;:9::i;:::-;43670;::::0;:34:::1;::::0;;-1:-1:-1;;;43670:34:0;;43698:4:::1;43670:34;::::0;::::1;::::0;;;43622:22;;-1:-1:-1;43655:12:0::1;::::0;-1:-1:-1;;;;;43670:9:0;;::::1;::::0;:19:::1;::::0;:34;;;;;::::1;::::0;;;;;;;;;:9;:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;43670:34:0;;-1:-1:-1;43715:15:0::1;::::0;43749:542:::1;43771:1;43767;:5;;;43749:542;;;43794:17;43814:8;43823:1;43814:11;;;;;;;;;;;;;::::0;-1:-1:-1;43844:16:0;;43840:440:::1;;43885:1;:6;;43890:1;43885:6;43881:384;;;43916:72;43948:10;43968:4;43975:12;43916:11;43928:1;43916:14;;;;;;;;;;::::0;-1:-1:-1;;;;;43916:14:0::1;::::0;:72;;:31:::1;:72::i;:::-;43881:384;;;44018:9;::::0;44102:1:::1;::::0;-1:-1:-1;;;;;44018:9:0::1;:22;44049:11;:14;::::0;::::1;;::::0;::::1;;;;;;::::0;44074:9:::1;::::0;44018:81:::1;::::0;;::::1;::::0;;;-1:-1:-1;;;;;;44018:81:0;;;-1:-1:-1;;;;;44049:14:0;;::::1;44018:81;::::0;::::1;::::0;44074:9;;;::::1;44018:81:::0;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;44018:81:0;:85:::1;44014:251;;;44180:9;::::0;44128:77:::1;::::0;44160:10:::1;::::0;-1:-1:-1;;;;;44180:9:0::1;44192:12:::0;44128:11:::1;:14;::::0;::::1;;::::0;::::1;;;;:77;44241:4;44228:17;;44014:251;-1:-1:-1::0;43774:3:0::1;;43749:542;;;;44305:10;44301:271;;;44332:30;;:::i;:::-;44398:11:::0;::::1;44377:32:::0;;44398:11:::1;44445::::0;;::::1;;44424:18:::0;;::::1;:32:::0;44492:11;;;::::1;;44471:18:::0;;::::1;:32:::0;44518:9:::1;::::0;:42;;-1:-1:-1;;;44518:42:0;;-1:-1:-1;;;;;44518:9:0;;::::1;::::0;:25:::1;::::0;44377:15;;44518:42:::1;;::::0;44377:15;44518:42;;;44377:15;44407:1:::1;44518:42;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;44301:271:0::1;44596:9;::::0;:34:::1;::::0;;-1:-1:-1;;;44596:34:0;;44624:4:::1;44596:34;::::0;::::1;::::0;;;44582:11:::1;::::0;-1:-1:-1;;;;;44596:9:0::1;::::0;:19:::1;::::0;:34;;;;;::::1;::::0;;;;;;;;:9;:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;44596:34:0;44649:15:::1;::::0;44596:34;;-1:-1:-1;44649:20:0;;:49:::1;;;44683:15;;44673:6;:25;;44649:49;44641:78;;;::::0;;-1:-1:-1;;;44641:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;44641:78:0;;;;;;;;;;;;;::::1;;44730:24;44757:19;:6:::0;44768:7;44757:10:::1;:19::i;:::-;44730:46;;44862:16;44839:19;:39;;44831:60;;;::::0;;-1:-1:-1;;;44831:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;44831:60:0;;;;;;;;;;;;;::::1;;44906:23:::0;;44902:300:::1;;44951:8;44946:245;;44980:48;44989:10;45001:5;45008:19;44980:8;:48::i;:::-;;44946:245;;;45069:12;45084:51;45101:4;45108:5;45115:19;45084:8;:51::i;:::-;45069:66;;45154:21;45167:7;45154:12;:21::i;:::-;44946:245;35788:1;;;;;43503:1706:::0;;;:::o;32943:28::-;;;;;;;;;;;;-1:-1:-1;;;;;32943:28:0;;-1:-1:-1;32943:28:0;:::o;37753:391::-;37857:10;;-1:-1:-1;;;;;37857:10:0;37843;:24;37835:48;;;;;-1:-1:-1;;;37835:48:0;;;;;;;;;;;;-1:-1:-1;;;37835:48:0;;;;;;;;;;;;;;;37911:1;37902:6;:10;;;37894:42;;;;;-1:-1:-1;;;37894:42:0;;;;;;;;;;;;-1:-1:-1;;;37894:42:0;;;;;;;;;;;;;;;37972:12;37955:14;:29;37947:60;;;;;-1:-1:-1;;;37947:60:0;;;;;;;;;;;;-1:-1:-1;;;37947:60:0;;;;;;;;;;;;;;;38051:12;38026:14;38041:6;38026:22;;;;;;;;;;;:37;38018:68;;;;;-1:-1:-1;;;38018:68:0;;;;;;;;;;;;-1:-1:-1;;;38018:68:0;;;;;;;;;;;;;;;38122:14;38097;38112:6;38097:22;;;;;;;;;;:39;-1:-1:-1;;37753:391:0:o;18102:100::-;18182:12;;18102:100;:::o;33769:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51538:101::-;51621:9;;-1:-1:-1;;;;;51621:9:0;51538:101;:::o;19776:321::-;19882:4;19899:36;19909:6;19917:9;19928:6;19899:9;:36::i;:::-;19946:121;19955:6;19963:12;:10;:12::i;:::-;19977:89;20015:6;19977:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19977:19:0;;;;;;:11;:19;;;;;;19997:12;:10;:12::i;:::-;-1:-1:-1;;;;;19977:33:0;;;;;;;;;;;;-1:-1:-1;19977:33:0;;;:89;:37;:89::i;:::-;19946:8;:121::i;:::-;-1:-1:-1;20085:4:0;19776:321;;;;;;:::o;49072:494::-;49121:14;:12;:14::i;:::-;49146:12;:10;:12::i;:::-;49202:10;49169:21;49193:20;;;:8;:20;;;;;49228:11;;49224:217;;49264:11;;:22;-1:-1:-1;49264:22:0;49256:54;;;;;-1:-1:-1;;;49256:54:0;;;;;;;;;;;;-1:-1:-1;;;49256:54:0;;;;;;;;;;;;;;;49339:11;;:24;;49355:7;49339:15;:24::i;:::-;49325:38;;49378:51;;;-1:-1:-1;;;49378:51:0;;49409:10;49378:51;;;;;;;;;;;;49393:4;;49378:30;;:51;;;;;;;;;;;;;;49325:11;49393:4;49378:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49224:217:0;49488:14;;49472:11;;:41;;49508:4;;49472:31;;:15;:31::i;:41::-;49451:18;;;:62;49529:29;;;;;;;;49538:10;;49529:29;;;;;;;;;;49072:494;;:::o;17954:83::-;18020:9;;;;17954:83;:::o;37566:179::-;37649:10;;-1:-1:-1;;;;;37649:10:0;37635;:24;37627:48;;;;;-1:-1:-1;;;37627:48:0;;;;;;;;;;;;-1:-1:-1;;;37627:48:0;;;;;;;;;;;;;;;37686:14;:12;:14::i;:::-;37711:11;:26;37566:179::o;42030:175::-;42138:9;;42177;;42138:59;;;-1:-1:-1;;;42138:59:0;;-1:-1:-1;;;;;42138:59:0;;;;;;;42177:9;;;42138:59;;;;;;;;;;;;42114:4;;42138:9;;;;;:22;;:59;;;;;;;;;;;;;;;:9;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42138:59:0;;42030:175;-1:-1:-1;;;42030:175:0:o;20506:218::-;20594:4;20611:83;20620:12;:10;:12::i;:::-;20634:7;20643:50;20682:10;20643:11;:25;20655:12;:10;:12::i;:::-;-1:-1:-1;;;;;20643:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;20643:25:0;;;:34;;;;;;;;;;;:38;:50::i;34001:29::-;;;;;;;;;;;;;-1:-1:-1;34001:29:0;:::o;36132:124::-;36201:10;;-1:-1:-1;;;;;36201:10:0;36187;:24;36179:48;;;;;-1:-1:-1;;;36179:48:0;;;;;;;;;;;;-1:-1:-1;;;36179:48:0;;;;;;;;;;;;;;;36238:3;:10;36132:124::o;33822:74::-;;;-1:-1:-1;;;;;33822:74:0;;:::o;40639:135::-;40753:3;;40714:9;;:34;;;-1:-1:-1;;;40714:34:0;;40742:4;40714:34;;;;;;40690:4;;40714:52;;33122:5;;40714:43;;-1:-1:-1;;;;;40714:9:0;;;;:19;;:34;;;;;;;;;;;;;;;:9;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40714:34:0;;:38;:43::i;:52::-;40707:59;;40639:135;:::o;45217:357::-;45272:12;45287:24;45305:4;45287:9;:24::i;:::-;45322:70;;;-1:-1:-1;;;45322:70:0;;45357:10;45322:70;;;;45337:4;45322:70;;;;;;;;;;;;;;45272:39;;-1:-1:-1;45337:4:0;;45322:34;;:70;;;;;;;;;;;;;;;-1:-1:-1;45337:4:0;45322:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45403:11:0;;-1:-1:-1;45417:24:0;45435:4;45417:9;:24::i;:::-;45403:38;-1:-1:-1;45462:19:0;45403:38;45473:7;45462:10;:19::i;:::-;45452:29;;45545:21;45558:7;45545:12;:21::i;:::-;45217:357;;;:::o;33303:25::-;;;-1:-1:-1;;;;;33303:25:0;;:::o;33210:44::-;;;;:::o;33035:22::-;;;-1:-1:-1;;;;;33035:22:0;;:::o;33095:32::-;33122:5;33095:32;:::o;37356:202::-;37463:10;;-1:-1:-1;;;;;37463:10:0;37449;:24;37441:48;;;;;-1:-1:-1;;;37441:48:0;;;;;;;;;;;;-1:-1:-1;;;37441:48:0;;;;;;;;;;;;;;;37500:23;:50;;;;;-1:-1:-1;;;37500:50:0;-1:-1:-1;;;;37500:50:0;;;;;;;;;37356:202::o;18265:119::-;-1:-1:-1;;;;;18358:18:0;18331:7;18358:18;;;;;;;;;;;;18265:119::o;38152:365::-;38270:10;;-1:-1:-1;;;;;38270:10:0;38256;:24;38248:48;;;;;-1:-1:-1;;;38248:48:0;;;;;;;;;;;;-1:-1:-1;;;38248:48:0;;;;;;;;;;;;;;;38324:1;38315:6;:10;;;:24;;;;;38338:1;38329:6;:10;;;38315:24;38307:55;;;;;-1:-1:-1;;;38307:55:0;;;;;;;;;;;;-1:-1:-1;;;38307:55:0;;;;;;;;;;;;;;;38410:12;38381:14;38405:1;38396:6;:10;38381:26;;;;;;;;;;;:41;38373:72;;;;;-1:-1:-1;;;38373:72:0;;;;;;;;;;;;-1:-1:-1;;;38373:72:0;;;;;;;;;;;;;;;38488:21;38456;38478:6;38456:29;;;;;;;;51647:134;51711:4;51735:38;51759:13;:11;:13::i;:::-;51735:19;51749:4;51735:9;:7;:9::i;33367:21::-;;;;:::o;33395:33::-;;;-1:-1:-1;;;;;33395:33:0;;:::o;38593:1133::-;38665:7;38706:1;38685:972;38720:1;38709:7;:12;;;38685:972;;38760:14;38785:1;38775:7;:11;38760:27;;;;;;;;;;;38753:3;:34;38749:897;;38821:14;38846:1;38836:7;:11;38821:27;;;;;;;;;;;38812:5;:36;38808:99;;38857:50;38876:21;38898:7;38876:30;;;;;;;;;;;38857:14;:3;38865:5;38857:7;:14::i;:50::-;38850:57;;;;;38808:99;38926:18;38947:72;38988:21;39010:7;38988:30;;;;;;;;;;;38947:36;38955:14;38980:1;38970:7;:11;38955:27;;;;;;;;;;;38947:3;;:7;:36::i;:72::-;38926:93;;39042:7;:12;;39053:1;39042:12;39038:99;;;39063:74;39078:58;39111:21;39133:1;39111:24;;;39078:28;39100:5;39078:14;39093:1;39078:17;;;;:21;:28::i;:58::-;39063:10;;:14;:74::i;:::-;39056:81;;;;;;39038:99;39181:1;39171:7;:11;39161:21;;39156:375;39195:1;39184:7;:12;;;39156:375;;39245:14;39270:1;39260:7;:11;39245:27;;;;;;;;;;;39236:5;:36;39232:135;;39281:86;39296:70;39335:21;39357:7;39335:30;;;;;;;;;;;39296:34;39324:5;39296:14;39311:7;39296:23;;;;;;;;39232:135;39403:108;39418:92;39479:21;39501:7;39479:30;;;;;;;;;;;39418:56;39446:14;39471:1;39461:7;:11;39446:27;;;;;;;;;;;39418:14;39433:7;39418:23;;;;;;;;39403:108;-1:-1:-1;;39198:9:0;;;;39390:121;-1:-1:-1;39156:375:0;;;39556:74;39571:58;39604:21;39626:1;39604:24;;38749:897;-1:-1:-1;;38723:9:0;38685:972;;;-1:-1:-1;39693:21:0;:24;39674:44;;:14;:3;39682:5;39674:7;:14::i;33136:36::-;;;;:::o;37004:166::-;37093:10;;-1:-1:-1;;;;;37093:10:0;37079;:24;37071:48;;;;;-1:-1:-1;;;37071:48:0;;;;;;;;;;;;-1:-1:-1;;;37071:48:0;;;;;;;;;;;;;;;37130:14;:32;37004:166::o;36425:162::-;36518:10;;-1:-1:-1;;;;;36518:10:0;36504;:24;36496:48;;;;;-1:-1:-1;;;36496:48:0;;;;;;;;;;;;-1:-1:-1;;;36496:48:0;;;;;;;;;;;;;;;36555:10;:24;;-1:-1:-1;;;;;;36555:24:0;-1:-1:-1;;;;;36555:24:0;;;;;;;;;;36425:162::o;17229:87::-;17301:7;17294:14;;;;;;;;-1:-1:-1;;17294:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17268:13;;17294:14;;17301:7;;17294:14;;17301:7;17294:14;;;;;;;;;;;;;;;;;;;;;;;;52172:524;52247:10;;-1:-1:-1;;;;;52247:10:0;52233;:24;52225:48;;;;;-1:-1:-1;;;52225:48:0;;;;;;;;;;;;-1:-1:-1;;;52225:48:0;;;;;;;;;;;;;;;52319:9;;-1:-1:-1;;;;;52292:37:0;;;52319:9;;52292:37;;52284:54;;;;;-1:-1:-1;;;52284:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;52284:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;52357:32:0;;52384:4;52357:32;;52349:49;;;;;-1:-1:-1;;;52349:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;52349:49:0;;;;;;;;;;;;;;;52409:12;52431:6;-1:-1:-1;;;;;52424:24:0;;52457:4;52424:39;;;;;;;;;;;;;-1:-1:-1;;;;;52424:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52424:39:0;52482:9;;52521;;52482:59;;;-1:-1:-1;;;52482:59:0;;-1:-1:-1;;;;;52482:59:0;;;;;;;52521:9;;;52482:59;;;;;;;;;;;;52424:39;;-1:-1:-1;52544:1:0;;52482:9;;;;;:22;;:59;;;;;52424:39;;52482:59;;;;;;;:9;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52482:59:0;:63;52474:82;;;;;-1:-1:-1;;;52474:82:0;;;;;;;;;;;;-1:-1:-1;;;52474:82:0;;;;;;;;;;;;;;;52603:9;;52567:56;;-1:-1:-1;;;;;52567:27:0;;;;52603:9;52615:7;52567:27;:56::i;:::-;52634:9;;52668;;52634:54;;;-1:-1:-1;;;52634:54:0;;-1:-1:-1;;;;;52634:54:0;;;;;;;52668:9;;;52634:54;;;;;;;;;;;;:9;;;;;:17;;:54;;;;;;;;;;;;;;:9;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;52172:524:0:o;33471:43::-;;;-1:-1:-1;;;33471:43:0;;;;;:::o;21227:269::-;21320:4;21337:129;21346:12;:10;:12::i;:::-;21360:7;21369:96;21408:15;21369:96;;;;;;;;;;;;;;;;;:11;:25;21381:12;:10;:12::i;:::-;-1:-1:-1;;;;;21369:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21369:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;33005:23::-;;;-1:-1:-1;;;;;33005:23:0;;:::o;39911:468::-;40147:10;;-1:-1:-1;;;;;40147:10:0;40133;:24;40129:219;;40246:10;;-1:-1:-1;;;;;40246:10:0;40232;:24;40224:48;;;;;-1:-1:-1;;;40224:48:0;;;;;;;;;;;;-1:-1:-1;;;40224:48:0;;;;;;;;;;;;;;;40310:14;;40326:9;;40287;;:49;;-1:-1:-1;;;;;40287:9:0;;;;40310:14;;;40287:22;:49::i;:::-;40370:1;40358:9;:13;39911:468::o;39734:169::-;39826:10;;-1:-1:-1;;;;;39826:10:0;39812;:24;39804:48;;;;;-1:-1:-1;;;39804:48:0;;;;;;;;;;;;-1:-1:-1;;;39804:48:0;;;;;;;;;;;;;;;39863:14;:32;;-1:-1:-1;;;;;;39863:32:0;-1:-1:-1;;;;;39863:32:0;;;;;;;;;;39734:169::o;18597:175::-;18683:4;18700:42;18710:12;:10;:12::i;:::-;18724:9;18735:6;18700:9;:42::i;33668:27::-;;;;:::o;36264:153::-;36348:10;;-1:-1:-1;;;;;36348:10:0;36334;:24;36326:48;;;;;-1:-1:-1;;;36326:48:0;;;;;;;;;;;;-1:-1:-1;;;36326:48:0;;;;;;;;;;;;;;;36385:10;:24;;-1:-1:-1;;;;;;36385:24:0;-1:-1:-1;;;;;36385:24:0;;;;;;;;;;36264:153::o;41536:486::-;41635:4;41652:17;41672:20;41684:7;41672:11;:20::i;:::-;41652:40;-1:-1:-1;41707:16:0;;41703:103;;41750:44;41788:5;41750:33;:7;41762:20;;;41750:11;:33::i;:44::-;41740:54;;41703:103;41816:6;41825:43;41854:13;:11;:13::i;:::-;41826:22;41840:7;41826:9;:7;:9::i;41825:43::-;41902:9;;41816:52;;-1:-1:-1;;;;;;41883:29:0;;;41902:9;;41883:29;41879:70;;;41936:1;-1:-1:-1;41929:8:0;;-1:-1:-1;41929:8:0;41879:70;41966:9;;:48;;;-1:-1:-1;;;41966:48:0;;;;;;;;-1:-1:-1;;;;;41966:48:0;;;;;;;;;:9;;;;;:36;;:48;;;;;;;;;;;;;;:9;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41966:48:0;;41536:486;-1:-1:-1;;;;;41536:486:0:o;36595:226::-;36680:10;;-1:-1:-1;;;;;36680:10:0;36666;:24;36658:48;;;;;-1:-1:-1;;;36658:48:0;;;;;;;;;;;;-1:-1:-1;;;36658:48:0;;;;;;;;;;;;;;;36755:9;;36725:18;;;-1:-1:-1;;;36725:18:0;;;;-1:-1:-1;;;;;36755:9:0;;;;36725:16;;;;;:18;;;;;;;;;;;;;;36755:9;36725:16;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36725:18:0;-1:-1:-1;;;;;36725:40:0;;36717:63;;;;;-1:-1:-1;;;36717:63:0;;;;;;;;;;;;-1:-1:-1;;;36717:63:0;;;;;;;;;;;;;;;36791:9;:22;;-1:-1:-1;;;;;;36791:22:0;-1:-1:-1;;;;;36791:22:0;;;;;;;;;;36595:226::o;36829:167::-;36923:10;;-1:-1:-1;;;;;36923:10:0;36909;:24;36901:48;;;;;-1:-1:-1;;;36901:48:0;;;;;;;;;;;;-1:-1:-1;;;36901:48:0;;;;;;;;;;;;;;;36960:12;:28;;-1:-1:-1;;;;;;36960:28:0;-1:-1:-1;;;;;36960:28:0;;;;;;;;;;36829:167::o;35860:264::-;35937:9;;:34;;;-1:-1:-1;;;35937:34:0;;35965:4;35937:34;;;;;;35909:4;;;;-1:-1:-1;;;;;35937:9:0;;;;:19;;:34;;;;;;;;;;;;;;;:9;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35937:34:0;35986:10;;35937:34;;-1:-1:-1;;;;;;35986:10:0;:24;35982:98;;36038:10;;36068:9;;36026:53;;;-1:-1:-1;;;36026:53:0;;-1:-1:-1;;;;;36068:9:0;;;36026:53;;;;;;36018:62;;36038:10;;;;;36026:33;;:53;;;;;;;;;;;;;;;36038:10;36026:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36026:53:0;36018:3;;:7;:62::i;:::-;36012:68;;35982:98;36106:9;;36098:18;;:3;;:7;:18::i;:::-;36091:25;;;35860:264;:::o;33737:23::-;;;;:::o;33435:27::-;;;-1:-1:-1;;;;;33435:27:0;;:::o;40782:194::-;40872:10;;40847:4;;-1:-1:-1;;;;;40872:10:0;:24;40871:97;;40916:10;;40948:9;;40904:64;;;-1:-1:-1;;;40904:64:0;;-1:-1:-1;;;;;40948:9:0;;;40904:64;;;;;;;;;;;;40916:10;;;;;40904:35;;:64;;;;;;;;;;;;;;40916:10;40904:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40904:64:0;40871:97;;;40900:1;40864:104;40782:194;-1:-1:-1;;40782:194:0:o;33702:26::-;;;;:::o;41361:167::-;41478:9;;:42;;-1:-1:-1;;;41478:42:0;;41454:4;;-1:-1:-1;;;;;41478:9:0;;:27;;41506:7;;41478:9;;:42;;;41506:7;41478:42;;41506:7;41478:42;;;;;;;;;;;;;;-1:-1:-1;;41478:42:0;;;;;;;-1:-1:-1;;41478:42:0;;;;;;;-1:-1:-1;41478:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41478:42:0;;41361:167;-1:-1:-1;;41361:167:0:o;40984:369::-;41031:10;;-1:-1:-1;;;;;41031:10:0;:24;41027:319;;41106:10;;41136:23;;;-1:-1:-1;;;41136:23:0;;;;-1:-1:-1;;;;;41106:10:0;;;;;;41136:21;;:23;;;;;;;;;;;;;;41106:10;41136:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41136:23:0;41132:203;;;41180:9;41192:11;:9;:11::i;:::-;41245:10;;41222:9;;41180:23;;-1:-1:-1;41222:40:0;;-1:-1:-1;;;;;41222:9:0;;;;41245:10;41180:23;41222:22;:40::i;:::-;41302:9;;41281:38;;;-1:-1:-1;;;41281:38:0;;-1:-1:-1;;;;;41302:9:0;;;41281:38;;;;;;;;;;;;:12;;;;;;:38;;;;;41302:9;;41281:38;;;;;;;;41302:9;41281:12;:38;;;;;;;;;;;;;;;;;;;;;;;;;;41132:203;41027:319;;40984:369::o;18835:151::-;-1:-1:-1;;;;;18951:18:0;;;18924:7;18951:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18835:151::o;34117:77::-;;;;;;;;;37178:170;37269:10;;-1:-1:-1;;;;;37269:10:0;37255;:24;37247:48;;;;;-1:-1:-1;;;37247:48:0;;;;;;;;;;;;-1:-1:-1;;;37247:48:0;;;;;;;;;;;;;;;37306:15;:34;37178:170::o;47605:495::-;47667:15;;47651:12;:31;47647:70;;47699:7;;47647:70;47727:13;47743:24;47761:4;47743:9;:24::i;:::-;47727:40;-1:-1:-1;47782:13:0;47778:97;;-1:-1:-1;47830:12:0;47812:15;:30;47857:7;;47778:97;47885:19;47907:44;47921:15;;47938:12;47907:13;:44::i;:::-;47885:66;;47979:72;47998:52;48041:8;47998:38;48031:4;47998:28;48014:11;;47998;:15;;:28;;;;:::i;:52::-;47979:14;;;:18;:72::i;:::-;47962:14;:89;-1:-1:-1;;48080:12:0;48062:15;:30;47605:495::o;33335:25::-;;;-1:-1:-1;;;;;33335:25:0;;:::o;33066:22::-;;;;:::o;47014:583::-;-1:-1:-1;;;;;47123:18:0;;47073:13;47123:18;;;:8;:18;;;;;47175:14;;47073:13;47216:24;47234:4;47216:9;:24::i;:::-;47200:40;;47270:15;;47255:12;:30;:47;;;;-1:-1:-1;47289:13:0;;;47255:47;47251:251;;;47319:19;47341:44;47355:15;;47372:12;47341:13;:44::i;:::-;47319:66;;47418:72;47437:52;47480:8;47437:38;47470:4;47437:28;47453:11;;47437;:15;;:28;;;;:::i;47418:72::-;47400:90;;47251:251;;47523:66;47570:4;:18;;;47523:42;47560:4;47523:32;47539:15;47523:4;:11;;;:15;;:32;;;;:::i;:42::-;:46;;:66::i;:::-;47512:77;47014:583;-1:-1:-1;;;;;47014:583:0:o;48521:153::-;48596:10;48587:20;;;;:8;:20;;;;;:27;48579:36;;:7;:36::i;:::-;48626:40;48635:21;48645:10;48635:9;:21::i;:::-;48658:7;48626:8;:40::i;33905:44::-;33944:5;33905:44;:::o;4079:136::-;4137:7;4164:43;4168:1;4171;4164:43;;;;;;;;;;;;;;;;;:3;:43::i;4969:471::-;5027:7;5272:6;5268:47;;-1:-1:-1;5302:1:0;5295:8;;5268:47;5339:5;;;5343:1;5339;:5;:1;5363:5;;;;;:10;5355:56;;;;-1:-1:-1;;;5355:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5916:132;5974:7;6001:39;6005:1;6008;6001:39;;;;;;;;;;;;;;;;;:3;:39::i;23516:418::-;-1:-1:-1;;;;;23600:21:0;;23592:67;;;;-1:-1:-1;;;23592:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23672:49;23693:7;23710:1;23714:6;23672:20;:49::i;:::-;23755:68;23778:6;23755:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23755:18:0;;:9;:18;;;;;;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;23734:18:0;;:9;:18;;;;;;;;;;:89;23849:12;;:24;;23866:6;23849:16;:24::i;:::-;23834:12;:39;23889:37;;;;;;;;23915:1;;-1:-1:-1;;;;;23889:37:0;;;;;;;;;;;;23516:418;;:::o;3615:181::-;3673:7;3705:5;;;3729:6;;;;3721:46;;;;;-1:-1:-1;;;3721:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;26401:177;26511:58;;;-1:-1:-1;;;;;26511:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26511:58:0;-1:-1:-1;;;26511:58:0;;;26484:86;;26504:5;;26484:19;:86::i;8756:422::-;9123:20;9162:8;;;8756:422::o;26586:205::-;26714:68;;;-1:-1:-1;;;;;26714:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26714:68:0;-1:-1:-1;;;26714:68:0;;;26687:96;;26707:5;;26687:19;:96::i;45582:1039::-;45698:12;;45661;;-1:-1:-1;;;;;45698:12:0;45690:35;45686:577;;45989:12;;:27;;;-1:-1:-1;;;45989:27:0;;;;45968:18;;-1:-1:-1;;;;;45989:12:0;;:25;;:27;;;;;;;;;;;;;;:12;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45989:27:0;;-1:-1:-1;46035:17:0;;46031:221;;46073:15;46091:37;46122:5;46091:26;:7;46103:13;46091:11;:26::i;:37::-;46073:55;-1:-1:-1;46157:23:0;:7;46073:55;46157:11;:23::i;:::-;46211:9;;46147:33;;-1:-1:-1;46211:25:0;;46225:10;46211:13;:25::i;:::-;46199:9;:37;-1:-1:-1;46031:221:0;45686:577;;46279:13;:11;:13::i;:::-;46275:150;;-1:-1:-1;46324:7:0;46275:150;;;46374:39;46407:5;46375:26;46387:13;:11;:13::i;:::-;46375:7;;:11;:26::i;46374:39::-;46364:49;;46275:150;46439:11;;46435:179;;46508:14;;46471:9;;:34;;;-1:-1:-1;;;46471:34:0;;46499:4;46471:34;;;;;;-1:-1:-1;;;;;46471:9:0;;;;:19;;:34;;;;;;;;;;;;;;;:9;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46471:34:0;:51;46467:98;;;46543:6;:4;:6::i;:::-;46579:23;46585:7;46594;46579:5;:23::i;46629:322::-;46718:10;46685:21;46709:20;;;:8;:20;;;;;46740:14;:12;:14::i;:::-;46765:12;:10;:12::i;:::-;46802:11;;:24;;46818:7;46802:15;:24::i;:::-;46788:38;;;46874:14;;46858:41;;46894:4;;46858:31;;46788:38;46858:15;:31::i;:41::-;46837:18;;;:62;46915:28;;;;;;;;46923:10;;46915:28;;;;;;;;;;46629:322;;:::o;14580:106::-;14668:10;14580:106;:::o;24372:346::-;-1:-1:-1;;;;;24474:19:0;;24466:68;;;;-1:-1:-1;;;24466:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24553:21:0;;24545:68;;;;-1:-1:-1;;;24545:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24626:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24678:32;;;;;;;;;;;;;;;;;24372:346;;;:::o;21986:539::-;-1:-1:-1;;;;;22092:20:0;;22084:70;;;;-1:-1:-1;;;22084:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22173:23:0;;22165:71;;;;-1:-1:-1;;;22165:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22249:47;22270:6;22278:9;22289:6;22249:20;:47::i;:::-;22329:71;22351:6;22329:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22329:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;22309:17:0;;;:9;:17;;;;;;;;;;;:91;;;;22434:20;;;;;;;:32;;22459:6;22434:24;:32::i;:::-;-1:-1:-1;;;;;22411:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;22482:35;;;;;;;22411:20;;22482:35;;;;;;;;;;;;;21986:539;;;:::o;4518:192::-;4604:7;4640:12;4632:6;;;;4624:29;;;;-1:-1:-1;;;4624:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4676:5:0;;;4518:192::o;48108:405::-;48183:10;48150:21;48174:20;;;:8;:20;;;;;48270:18;;;;48240:14;;48224:11;;48174:20;;48150:21;48224:65;;48270:18;48224:41;;48260:4;;48224:31;;:11;:15;:31::i;:65::-;48205:84;-1:-1:-1;48304:15:0;;48300:206;;48353:14;;;;:31;;48372:11;48353:18;:31::i;:::-;48336:14;;;:48;48399:40;48415:10;48427:11;48399:15;:40::i;:::-;48459:35;;;;;;;;48470:10;;48459:35;;;;;;;;;;48108:405;;:::o;6544:278::-;6630:7;6665:12;6658:5;6650:28;;;;-1:-1:-1;;;6650:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6689:9;6705:1;6701;:5;;;;;;;6544:278;-1:-1:-1;;;;;6544:278:0:o;28706:761::-;29130:23;29156:69;29184:4;29156:69;;;;;;;;;;;;;;;;;29164:5;-1:-1:-1;;;;;29156:27:0;;;:69;;;;;:::i;:::-;29240:17;;29130:95;;-1:-1:-1;29240:21:0;29236:224;;29382:10;29371:30;;;;;;;;;;;;;;;-1:-1:-1;29371:30:0;29363:85;;;;-1:-1:-1;;;29363:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22806:378;-1:-1:-1;;;;;22890:21:0;;22882:65;;;;;-1:-1:-1;;;22882:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;22960:49;22989:1;22993:7;23002:6;22960:20;:49::i;:::-;23037:12;;:24;;23054:6;23037:16;:24::i;:::-;23022:12;:39;-1:-1:-1;;;;;23093:18:0;;:9;:18;;;;;;;;;;;:30;;23116:6;23093:22;:30::i;:::-;-1:-1:-1;;;;;23072:18:0;;:9;:18;;;;;;;;;;;:51;;;;23139:37;;;;;;;23072:18;;:9;;23139:37;;;;;;;;;;22806:378;;:::o;51847:212::-;51936:8;;:33;;;-1:-1:-1;;;51936:33:0;;51963:4;51936:33;;;;;;51919:14;;-1:-1:-1;;;;;51936:8:0;;:18;;:33;;;;;;;;;;;;;;:8;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51936:33:0;;-1:-1:-1;51980:71:0;52002:3;52008:19;;;52007:43;;52043:7;52007:43;;;52031:9;52007:43;51980:8;;-1:-1:-1;;;;;51980:8:0;;:71;:21;:71::i;11674:196::-;11777:12;11809:53;11832:6;11840:4;11846:1;11849:12;11809:22;:53::i;:::-;11802:60;11674:196;-1:-1:-1;;;;11674:196:0:o;13051:979::-;13181:12;13214:18;13225:6;13214:10;:18::i;:::-;13206:60;;;;;-1:-1:-1;;;13206:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13340:12;13354:23;13381:6;-1:-1:-1;;;;;13381:11:0;13401:8;13412:4;13381:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13381:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13339:78;;;;13432:7;13428:595;;;13463:10;-1:-1:-1;13456:17:0;;-1:-1:-1;13456:17:0;13428:595;13577:17;;:21;13573:439;;13840:10;13834:17;13901:15;13888:10;13884:2;13880:19;13873:44;13788:148;13976:20;;-1:-1:-1;;;13976:20:0;;;;;;;;;;;;;;;;;13983:12;;13976:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://9fe59dda821dd8a56e8227536198e7550c081072e43c7590ae9e6743bb337028

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.

Connect a Wallet
Connect a Wallet

Compiler specific version warnings:

The compiled contract might be susceptible to FullInlinerNonExpressionSplitArgumentEvaluationOrder (low-severity), MissingSideEffectsOnSelectorAccess (low-severity), AbiReencodingHeadOverflowWithStaticArrayCleanup (medium-severity), DirtyBytesArrayToStorage (low-severity), DataLocationChangeInInternalOverride (very low-severity), NestedCalldataArrayAbiReencodingSizeValidation (very low-severity), SignedImmutables (very low-severity), ABIDecodeTwoDimensionalArrayMemory (very low-severity), KeccakCaching (medium-severity), EmptyByteArrayCopy (medium-severity), DynamicArrayCleanup (medium-severity) Solidity Compiler Bugs.

yAxis.io:MetaVault:3CRV (MVLT) Token Tracker | Etherscan (2024)

References

Top Articles
Latest Posts
Article information

Author: Nathanial Hackett

Last Updated:

Views: 5803

Rating: 4.1 / 5 (72 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Nathanial Hackett

Birthday: 1997-10-09

Address: Apt. 935 264 Abshire Canyon, South Nerissachester, NM 01800

Phone: +9752624861224

Job: Forward Technology Assistant

Hobby: Listening to music, Shopping, Vacation, Baton twirling, Flower arranging, Blacksmithing, Do it yourself

Introduction: My name is Nathanial Hackett, I am a lovely, curious, smiling, lively, thoughtful, courageous, lively person who loves writing and wants to share my knowledge and understanding with you.