Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 51 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Pause | 16721146 | 715 days ago | IN | 0 ETH | 0.00068168 | ||||
Emergency | 14835926 | 994 days ago | IN | 0 ETH | 0.00675277 | ||||
Emergency | 14766439 | 1006 days ago | IN | 0 ETH | 0.010656 | ||||
Distribute Curve... | 14237906 | 1088 days ago | IN | 0 ETH | 0.03208944 | ||||
Pause | 13868831 | 1145 days ago | IN | 0 ETH | 0.00218722 | ||||
Pause | 13500488 | 1203 days ago | IN | 0 ETH | 0.00744047 | ||||
Transfer Ownersh... | 12952833 | 1288 days ago | IN | 0 ETH | 0.00101987 | ||||
Prepare Transfer... | 12952821 | 1288 days ago | IN | 0 ETH | 0.00235695 | ||||
Set Big Fish Thr... | 12928390 | 1292 days ago | IN | 0 ETH | 0.0010392 | ||||
Update Safe Addr... | 12901228 | 1297 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12901225 | 1297 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883320 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883318 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883316 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883315 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883311 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883307 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883305 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883299 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883292 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883287 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883285 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883284 | 1299 days ago | IN | 0 ETH | 0.0014295 | ||||
Update Safe Addr... | 12883278 | 1299 days ago | IN | 0 ETH | 0.00142914 | ||||
Safe Addresses | 12856012 | 1304 days ago | IN | 0 ETH | 0.0004787 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Controller
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-17 */ // SPDX-License-Identifier: AGPLv3 pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, 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) { 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; 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; } } pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https: * * 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); } pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { uint256 size; 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: * 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: * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https: */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (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: * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity >=0.6.0 <0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { 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 { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } pragma solidity >=0.6.0 <0.7.0; contract Constants { uint8 public constant N_COINS = 3; uint8 public constant DEFAULT_DECIMALS = 18; uint256 public constant DEFAULT_DECIMALS_FACTOR = uint256(10)**DEFAULT_DECIMALS; uint8 public constant CHAINLINK_PRICE_DECIMALS = 8; uint256 public constant CHAINLINK_PRICE_DECIMAL_FACTOR = uint256(10)**CHAINLINK_PRICE_DECIMALS; uint8 public constant PERCENTAGE_DECIMALS = 4; uint256 public constant PERCENTAGE_DECIMAL_FACTOR = uint256(10)**PERCENTAGE_DECIMALS; uint256 public constant CURVE_RATIO_DECIMALS = 6; uint256 public constant CURVE_RATIO_DECIMALS_FACTOR = uint256(10)**CURVE_RATIO_DECIMALS; } pragma solidity >=0.6.0 <0.7.0; interface IToken { function factor() external view returns (uint256); function factor(uint256 totalAssets) external view returns (uint256); function mint( address account, uint256 _factor, uint256 amount ) external; function burn( address account, uint256 _factor, uint256 amount ) external; function burnAll(address account) external; function totalAssets() external view returns (uint256); function getPricePerShare() external view returns (uint256); function getShareAssets(uint256 shares) external view returns (uint256); function getAssets(address account) external view returns (uint256); } pragma solidity >=0.6.0 <0.7.0; interface IVault { function withdraw(uint256 amount) external; function withdraw(uint256 amount, address recipient) external; function withdrawByStrategyOrder( uint256 amount, address recipient, bool reversed ) external; function withdrawByStrategyIndex( uint256 amount, address recipient, uint256 strategyIndex ) external; function deposit(uint256 amount) external; function updateStrategyRatio(uint256[] calldata strategyRetios) external; function totalAssets() external view returns (uint256); function getStrategiesLength() external view returns (uint256); function strategyHarvestTrigger(uint256 index, uint256 callCost) external view returns (bool); function strategyHarvest(uint256 index) external returns (bool); function getStrategyAssets(uint256 index) external view returns (uint256); function token() external view returns (address); function vault() external view returns (address); function investTrigger() external view returns (bool); function invest() external; } pragma solidity >=0.6.0 <0.7.0; contract FixedStablecoins is Constants { address public immutable DAI; address public immutable USDC; address public immutable USDT; uint256 public immutable DAI_DECIMALS; uint256 public immutable USDC_DECIMALS; uint256 public immutable USDT_DECIMALS; constructor(address[N_COINS] memory _tokens, uint256[N_COINS] memory _decimals) public { DAI = _tokens[0]; USDC = _tokens[1]; USDT = _tokens[2]; DAI_DECIMALS = _decimals[0]; USDC_DECIMALS = _decimals[1]; USDT_DECIMALS = _decimals[2]; } function underlyingTokens() internal view returns (address[N_COINS] memory tokens) { tokens[0] = DAI; tokens[1] = USDC; tokens[2] = USDT; } function getToken(uint256 index) internal view returns (address) { if (index == 0) { return DAI; } else if (index == 1) { return USDC; } else { return USDT; } } function decimals() internal view returns (uint256[N_COINS] memory _decimals) { _decimals[0] = DAI_DECIMALS; _decimals[1] = USDC_DECIMALS; _decimals[2] = USDT_DECIMALS; } function getDecimal(uint256 index) internal view returns (uint256) { if (index == 0) { return DAI_DECIMALS; } else if (index == 1) { return USDC_DECIMALS; } else { return USDT_DECIMALS; } } } contract FixedGTokens { IToken public immutable pwrd; IToken public immutable gvt; constructor(address _pwrd, address _gvt) public { pwrd = IToken(_pwrd); gvt = IToken(_gvt); } function gTokens(bool _pwrd) internal view returns (IToken) { if (_pwrd) { return pwrd; } else { return gvt; } } } contract FixedVaults is Constants { address public immutable DAI_VAULT; address public immutable USDC_VAULT; address public immutable USDT_VAULT; constructor(address[N_COINS] memory _vaults) public { DAI_VAULT = _vaults[0]; USDC_VAULT = _vaults[1]; USDT_VAULT = _vaults[2]; } function getVault(uint256 index) internal view returns (address) { if (index == 0) { return DAI_VAULT; } else if (index == 1) { return USDC_VAULT; } else { return USDT_VAULT; } } function vaults() internal view returns (address[N_COINS] memory _vaults) { _vaults[0] = DAI_VAULT; _vaults[1] = USDC_VAULT; _vaults[2] = USDT_VAULT; } } pragma solidity >=0.6.0 <0.7.0; contract Whitelist is Ownable { mapping(address => bool) public whitelist; event LogAddToWhitelist(address indexed user); event LogRemoveFromWhitelist(address indexed user); modifier onlyWhitelist() { require(whitelist[msg.sender], "only whitelist"); _; } function addToWhitelist(address user) external onlyOwner { require(user != address(0), "WhiteList: 0x"); whitelist[user] = true; emit LogAddToWhitelist(user); } function removeFromWhitelist(address user) external onlyOwner { require(user != address(0), "WhiteList: 0x"); whitelist[user] = false; emit LogRemoveFromWhitelist(user); } } pragma solidity >=0.6.0 <0.7.0; interface IBuoy { function safetyCheck() external view returns (bool); function updateRatios() external returns (bool); function updateRatiosWithTolerance(uint256 tolerance) external returns (bool); function lpToUsd(uint256 inAmount) external view returns (uint256); function usdToLp(uint256 inAmount) external view returns (uint256); function stableToUsd(uint256[3] calldata inAmount, bool deposit) external view returns (uint256); function stableToLp(uint256[3] calldata inAmount, bool deposit) external view returns (uint256); function singleStableFromLp(uint256 inAmount, int128 i) external view returns (uint256); function getVirtualPrice() external view returns (uint256); function singleStableFromUsd(uint256 inAmount, int128 i) external view returns (uint256); function singleStableToUsd(uint256 inAmount, uint256 i) external view returns (uint256); } pragma solidity >=0.6.0 <0.7.0; interface IChainPrice { function getPriceFeed(uint256 i) external view returns (uint256 _price); } pragma solidity >=0.6.0 <0.7.0; interface IController { function stablecoins() external view returns (address[3] memory); function vaults() external view returns (address[3] memory); function underlyingVaults(uint256 i) external view returns (address vault); function curveVault() external view returns (address); function pnl() external view returns (address); function insurance() external view returns (address); function lifeGuard() external view returns (address); function buoy() external view returns (address); function reward() external view returns (address); function isValidBigFish( bool pwrd, bool deposit, uint256 amount ) external view returns (bool); function withdrawHandler() external view returns (address); function emergencyHandler() external view returns (address); function depositHandler() external view returns (address); function totalAssets() external view returns (uint256); function gTokenTotalAssets() external view returns (uint256); function eoaOnly(address sender) external; function getSkimPercent() external view returns (uint256); function gToken(bool _pwrd) external view returns (address); function emergencyState() external view returns (bool); function deadCoin() external view returns (uint256); function distributeStrategyGainLoss(uint256 gain, uint256 loss) external; function burnGToken( bool pwrd, bool all, address account, uint256 amount, uint256 bonus ) external; function mintGToken( bool pwrd, address account, uint256 amount ) external; function getUserAssets(bool pwrd, address account) external view returns (uint256 deductUsd); function referrals(address account) external view returns (address); function addReferral(address account, address referral) external; function getStrategiesTargetRatio() external view returns (uint256[] memory); function withdrawalFee(bool pwrd) external view returns (uint256); function validGTokenDecrease(uint256 amount) external view returns (bool); } pragma solidity >=0.6.0 <0.7.0; interface IERC20Detailed { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } pragma solidity >=0.6.0 <0.7.0; interface IInsurance { function calculateDepositDeltasOnAllVaults() external view returns (uint256[3] memory); function rebalanceTrigger() external view returns (bool sysNeedRebalance); function rebalance() external; function calcSkim() external view returns (uint256); function rebalanceForWithdraw(uint256 withdrawUsd, bool pwrd) external returns (bool); function getDelta(uint256 withdrawUsd) external view returns (uint256[3] memory delta); function getVaultDeltaForDeposit(uint256 amount) external view returns (uint256[3] memory, uint256); function sortVaultsByDelta(bool bigFirst) external view returns (uint256[3] memory vaultIndexes); function getStrategiesTargetRatio(uint256 utilRatio) external view returns (uint256[] memory); function setUnderlyingTokenPercents(uint256[3] calldata percents) external; } pragma solidity >=0.6.0 <0.7.0; interface ILifeGuard { function assets(uint256 i) external view returns (uint256); function totalAssets() external view returns (uint256); function getAssets() external view returns (uint256[3] memory); function totalAssetsUsd() external view returns (uint256); function availableUsd() external view returns (uint256 dollar); function availableLP() external view returns (uint256); function depositStable(bool rebalance) external returns (uint256); function investToCurveVault() external; function distributeCurveVault(uint256 amount, uint256[3] memory delta) external returns (uint256[3] memory); function deposit() external returns (uint256 usdAmount); function withdrawSingleByLiquidity( uint256 i, uint256 minAmount, address recipient ) external returns (uint256 usdAmount, uint256 amount); function withdrawSingleByExchange( uint256 i, uint256 minAmount, address recipient ) external returns (uint256 usdAmount, uint256 amount); function invest(uint256 whaleDepositAmount, uint256[3] calldata delta) external returns (uint256 dollarAmount); function getBuoy() external view returns (address); function investSingle( uint256[3] calldata inAmounts, uint256 i, uint256 j ) external returns (uint256 dollarAmount); function investToCurveVaultTrigger() external view returns (bool _invest); } pragma solidity >=0.6.0 <0.7.0; interface IPnL { function calcPnL() external view returns (uint256, uint256); function increaseGTokenLastAmount(bool pwrd, uint256 dollarAmount) external; function decreaseGTokenLastAmount( bool pwrd, uint256 dollarAmount, uint256 bonus ) external; function lastGvtAssets() external view returns (uint256); function lastPwrdAssets() external view returns (uint256); function utilisationRatio() external view returns (uint256); function emergencyPnL() external; function recover() external; function distributeStrategyGainLoss( uint256 gain, uint256 loss, address reward ) external; function distributePriceChange(uint256 currentTotalAssets) external; } pragma solidity >=0.6.0 <0.7.0; contract Controller is Pausable, Ownable, Whitelist, FixedStablecoins, FixedGTokens, IController { using SafeERC20 for IERC20; using SafeMath for uint256; address public override curveVault; bool public preventSmartContracts; bool public override emergencyState; bool public pendingOwnershipRemoval; address public override insurance; address public override pnl; address public override lifeGuard; address public override buoy; address public override depositHandler; address public override withdrawHandler; address public override emergencyHandler; uint256 public override deadCoin = N_COINS; uint256 public utilisationRatioLimitGvt; uint256 public utilisationRatioLimitPwrd; uint256 public bigFishThreshold = 100; uint256 public bigFishAbsoluteThreshold = 0; address public override reward; address public pendingOwner; mapping(address => bool) public safeAddresses; mapping(uint256 => address) public override underlyingVaults; mapping(address => uint256) public vaultIndexes; mapping(address => address) public override referrals; mapping(bool => uint256) public override withdrawalFee; event LogNewWithdrawHandler(address withdrawHandler, address emergencyHandler); event LogNewDepositHandler(address tokens); event LogNewVault(uint256 index, address vault); event LogNewCurveVault(address curveVault); event LogNewLifeguard(address lifeguard); event LogNewInsurance(address insurance); event LogNewPnl(address pnl); event LogNewBigFishThreshold(uint256 percent, uint256 absolute); event LogEoaOnly(bool status); event LogUpdateSafeAddress(address account, bool status); event LogNewRewardsContract(address reward); event LogNewUtilLimit(bool indexed pwrd, uint256 limit); event LogNewCurveToStableDistribution(uint256 amount, uint256[N_COINS] amounts, uint256[N_COINS] delta); event LogNewWithdrawalFee(address user, bool pwrd, uint256 newFee); event LogNewPendingOwnershipRemoval(bool status); event LogNewPendingOwnershipChange(address pendingOwner); event LogContractRetired(address owner); constructor( address pwrd, address gvt, address[N_COINS] memory _tokens, uint256[N_COINS] memory _decimals ) public FixedStablecoins(_tokens, _decimals) FixedGTokens(pwrd, gvt) {} function pause() external onlyWhitelist { _pause(); } function unpause() external onlyOwner { _unpause(); } function prepareRenounceOwnership(bool status) external onlyOwner { require(pendingOwnershipRemoval != status, "prepareRenounceOwnership: status"); emit LogNewPendingOwnershipRemoval(status); pendingOwnershipRemoval = status; } function renounceOwnership() public override onlyOwner { require(pendingOwnershipRemoval, "renounceOwnership: !pendingOwnershipRemoval"); insurance = address(0); pnl = address(0); lifeGuard = address(0); buoy = address(0); depositHandler = address(0); withdrawHandler = address(0); emergencyHandler = address(0); pendingOwnershipRemoval = false; address lastOwner = owner(); super.renounceOwnership(); emit LogContractRetired(lastOwner); } function prepareTransferOwnership(address newOwner) external onlyOwner { emit LogNewPendingOwnershipChange(newOwner); pendingOwner = newOwner; } function transferOwnership(address newOwner) public override onlyOwner { require(pendingOwner != address(0), "transferOwnership: 0x"); super.transferOwnership(pendingOwner); pendingOwner = address(0); } function setWithdrawHandler(address _withdrawHandler, address _emergencyHandler) external onlyOwner { require(_withdrawHandler != address(0) && _emergencyHandler != address(0), "setWithdrawHandler: 0x"); withdrawHandler = _withdrawHandler; emergencyHandler = _emergencyHandler; emit LogNewWithdrawHandler(_withdrawHandler, _emergencyHandler); } function setDepositHandler(address _depositHandler) external onlyOwner { require(_depositHandler != address(0), "setDepositHandler: 0x"); depositHandler = _depositHandler; emit LogNewDepositHandler(_depositHandler); } function stablecoins() external view override returns (address[N_COINS] memory) { return underlyingTokens(); } function getSkimPercent() external view override returns (uint256) { return IInsurance(insurance).calcSkim(); } function vaults() external view override returns (address[N_COINS] memory) { address[N_COINS] memory result; for (uint256 i = 0; i < N_COINS; i++) { result[i] = underlyingVaults[i]; } return result; } function setVault(uint256 index, address vault) external onlyOwner { require(vault != address(0), "setVault: 0x"); require(index < N_COINS, "setVault: !index"); underlyingVaults[index] = vault; vaultIndexes[vault] = index + 1; emit LogNewVault(index, vault); } function setCurveVault(address _curveVault) external onlyOwner { require(_curveVault != address(0), "setCurveVault: 0x"); curveVault = _curveVault; vaultIndexes[_curveVault] = N_COINS + 1; emit LogNewCurveVault(_curveVault); } function setLifeGuard(address _lifeGuard) external onlyOwner { require(_lifeGuard != address(0), "setLifeGuard: 0x"); lifeGuard = _lifeGuard; buoy = ILifeGuard(_lifeGuard).getBuoy(); emit LogNewLifeguard(_lifeGuard); } function setInsurance(address _insurance) external onlyOwner { require(_insurance != address(0), "setInsurance: 0x"); insurance = _insurance; emit LogNewInsurance(_insurance); } function setPnL(address _pnl) external onlyOwner { require(_pnl != address(0), "setPnl: 0x"); pnl = _pnl; emit LogNewPnl(_pnl); } function updateSafeAddress(address account, bool status) external onlyOwner { safeAddresses[account] = status; emit LogUpdateSafeAddress(account, status); } function switchEoaOnly(bool check) external onlyOwner { preventSmartContracts = check; emit LogEoaOnly(check); } function setBigFishThreshold(uint256 _percent, uint256 _absolute) external onlyOwner { require(_percent > 0, "_whaleLimit is 0"); bigFishThreshold = _percent; bigFishAbsoluteThreshold = _absolute; emit LogNewBigFishThreshold(_percent, _absolute); } function setReward(address _reward) external onlyOwner { require(_reward != address(0), "setReward: 0x"); reward = _reward; emit LogNewRewardsContract(_reward); } function addReferral(address account, address referral) external override { require(msg.sender == depositHandler, "!depositHandler"); if (referral != address(0) && referrals[account] == address(0)) { referrals[account] = referral; } } function setWithdrawalFee(bool pwrd, uint256 newFee) external onlyOwner { withdrawalFee[pwrd] = newFee; emit LogNewWithdrawalFee(msg.sender, pwrd, newFee); } function totalAssets() external view override returns (uint256) { return emergencyState ? _totalAssetsEmergency() : _totalAssets(); } function gTokenTotalAssets() public view override returns (uint256) { (uint256 gvtAssets, uint256 pwrdAssets) = IPnL(pnl).calcPnL(); if (msg.sender == address(gvt)) { return gvtAssets; } if (msg.sender == address(pwrd)) { return pwrdAssets; } return 0; } function gToken(bool isPWRD) external view override returns (address) { return isPWRD ? address(pwrd) : address(gvt); } function isValidBigFish( bool pwrd, bool deposit, uint256 amount ) external view override returns (bool) { if (deposit && pwrd) { require(validGTokenIncrease(amount), "isBigFish: !validGTokenIncrease"); } else if (!pwrd && !deposit) { require(_validGTokenDecrease(amount), "isBigFish: !validGTokenDecrease"); } if (amount < bigFishAbsoluteThreshold) { return false; } else { (uint256 gvtAssets, uint256 pwrdAssets) = IPnL(pnl).calcPnL(); uint256 assets = pwrdAssets.add(gvtAssets); if (amount > assets) { return true; } else { return amount > assets.mul(bigFishThreshold).div(PERCENTAGE_DECIMAL_FACTOR); } } } function distributeCurveAssets(uint256 amount, uint256[N_COINS] memory delta) external onlyWhitelist { uint256[N_COINS] memory amounts = ILifeGuard(lifeGuard).distributeCurveVault(amount, delta); emit LogNewCurveToStableDistribution(amount, amounts, delta); } function eoaOnly(address sender) external override { if (preventSmartContracts && !safeAddresses[tx.origin]) { require(sender == tx.origin, "EOA only"); } } function _totalAssets() private view returns (uint256) { require(IBuoy(buoy).safetyCheck(), "!buoy.safetyCheck"); uint256[N_COINS] memory lgAssets = ILifeGuard(lifeGuard).getAssets(); uint256[N_COINS] memory vaultAssets; for (uint256 i = 0; i < N_COINS; i++) { vaultAssets[i] = lgAssets[i].add(IVault(underlyingVaults[i]).totalAssets()); } uint256 totalLp = IVault(curveVault).totalAssets(); totalLp = totalLp.add(IBuoy(buoy).stableToLp(vaultAssets, true)); uint256 vp = IBuoy(buoy).getVirtualPrice(); return totalLp.mul(vp).div(DEFAULT_DECIMALS_FACTOR); } function _totalAssetsEmergency() private view returns (uint256) { IChainPrice chainPrice = IChainPrice(buoy); uint256 total; for (uint256 i = 0; i < N_COINS; i++) { if (i != deadCoin) { address tokenAddress = getToken(i); uint256 decimals = getDecimal(i); IERC20 token = IERC20(tokenAddress); uint256 price = chainPrice.getPriceFeed(i); uint256 assets = IVault(underlyingVaults[i]).totalAssets().add(token.balanceOf(lifeGuard)); assets = assets.mul(price).div(CHAINLINK_PRICE_DECIMAL_FACTOR); assets = assets.mul(DEFAULT_DECIMALS_FACTOR).div(decimals); total = total.add(assets); } } return total; } function emergency(uint256 coin) external onlyWhitelist { require(coin <= N_COINS, "invalid coin"); if (!paused()) { _pause(); } emergencyState = true; if (coin < N_COINS) { uint256[N_COINS] memory percents; percents[coin] = PERCENTAGE_DECIMAL_FACTOR; IInsurance(insurance).setUnderlyingTokenPercents(percents); deadCoin = coin; } IPnL(pnl).emergencyPnL(); } function restart(uint256[N_COINS] calldata allocations) external onlyOwner whenPaused { _unpause(); deadCoin = N_COINS; emergencyState = false; IInsurance(insurance).setUnderlyingTokenPercents(allocations); IPnL(pnl).recover(); } function distributeStrategyGainLoss(uint256 gain, uint256 loss) external override { uint256 index = vaultIndexes[msg.sender]; require(index > 0 && index <= N_COINS + 1, "!VaultAdaptor"); IPnL ipnl = IPnL(pnl); IBuoy ibuoy = IBuoy(buoy); uint256 gainUsd; uint256 lossUsd; index = index - 1; if (index < N_COINS) { if (gain > 0) { gainUsd = ibuoy.singleStableToUsd(gain, index); } else if (loss > 0) { lossUsd = ibuoy.singleStableToUsd(loss, index); } } else { if (gain > 0) { gainUsd = ibuoy.lpToUsd(gain); } else if (loss > 0) { lossUsd = ibuoy.lpToUsd(loss); } } ipnl.distributeStrategyGainLoss(gainUsd, lossUsd, reward); if (ibuoy.updateRatios()) { ipnl.distributePriceChange(_totalAssets()); } } function realizePriceChange(uint256 tolerance) external onlyOwner { IPnL ipnl = IPnL(pnl); IBuoy ibuoy = IBuoy(buoy); if (emergencyState) { ipnl.distributePriceChange(_totalAssetsEmergency()); } else { if (ibuoy.updateRatiosWithTolerance(tolerance)) { ipnl.distributePriceChange(_totalAssets()); } } } function burnGToken( bool pwrd, bool all, address account, uint256 amount, uint256 bonus ) external override { require( msg.sender == withdrawHandler || msg.sender == emergencyHandler, "burnGToken: !withdrawHandler|emergencyHandler" ); IToken gt = gTokens(pwrd); if (!all) { gt.burn(account, gt.factor(), amount); } else { gt.burnAll(account); } IPnL(pnl).decreaseGTokenLastAmount(pwrd, amount, bonus); } function mintGToken( bool pwrd, address account, uint256 amount ) external override { require(msg.sender == depositHandler, "burnGToken: !depositHandler"); IToken gt = gTokens(pwrd); gt.mint(account, gt.factor(), amount); IPnL(pnl).increaseGTokenLastAmount(pwrd, amount); } function getUserAssets(bool pwrd, address account) external view override returns (uint256 deductUsd) { IToken gt = gTokens(pwrd); deductUsd = gt.getAssets(account); require(deductUsd > 0, "!minAmount"); } function validGTokenIncrease(uint256 amount) private view returns (bool) { return gTokens(false).totalAssets().mul(utilisationRatioLimitPwrd).div(PERCENTAGE_DECIMAL_FACTOR) >= amount.add(gTokens(true).totalAssets()); } function _validGTokenDecrease(uint256 amount) private view returns (bool) { return gTokens(false).totalAssets().sub(amount).mul(utilisationRatioLimitGvt).div(PERCENTAGE_DECIMAL_FACTOR) >= gTokens(true).totalAssets(); } function validGTokenDecrease(uint256 amount) external view override returns (bool) { return _validGTokenDecrease(amount); } function setUtilisationRatioLimitPwrd(uint256 _utilisationRatioLimitPwrd) external onlyOwner { utilisationRatioLimitPwrd = _utilisationRatioLimitPwrd; emit LogNewUtilLimit(true, _utilisationRatioLimitPwrd); } function setUtilisationRatioLimitGvt(uint256 _utilisationRatioLimitGvt) external onlyOwner { utilisationRatioLimitGvt = _utilisationRatioLimitGvt; emit LogNewUtilLimit(false, _utilisationRatioLimitGvt); } function getStrategiesTargetRatio() external view override returns (uint256[] memory) { uint256 utilRatio = IPnL(pnl).utilisationRatio(); return IInsurance(insurance).getStrategiesTargetRatio(utilRatio); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"pwrd","type":"address"},{"internalType":"address","name":"gvt","type":"address"},{"internalType":"address[3]","name":"_tokens","type":"address[3]"},{"internalType":"uint256[3]","name":"_decimals","type":"uint256[3]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"LogAddToWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"LogContractRetired","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"LogEoaOnly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"absolute","type":"uint256"}],"name":"LogNewBigFishThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256[3]","name":"amounts","type":"uint256[3]"},{"indexed":false,"internalType":"uint256[3]","name":"delta","type":"uint256[3]"}],"name":"LogNewCurveToStableDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"curveVault","type":"address"}],"name":"LogNewCurveVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokens","type":"address"}],"name":"LogNewDepositHandler","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"insurance","type":"address"}],"name":"LogNewInsurance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lifeguard","type":"address"}],"name":"LogNewLifeguard","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"LogNewPendingOwnershipChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"LogNewPendingOwnershipRemoval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pnl","type":"address"}],"name":"LogNewPnl","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"reward","type":"address"}],"name":"LogNewRewardsContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"pwrd","type":"bool"},{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"LogNewUtilLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"vault","type":"address"}],"name":"LogNewVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"withdrawHandler","type":"address"},{"indexed":false,"internalType":"address","name":"emergencyHandler","type":"address"}],"name":"LogNewWithdrawHandler","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"pwrd","type":"bool"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"LogNewWithdrawalFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"LogRemoveFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"LogUpdateSafeAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"CHAINLINK_PRICE_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CHAINLINK_PRICE_DECIMAL_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURVE_RATIO_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURVE_RATIO_DECIMALS_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAI","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAI_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_DECIMALS_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"N_COINS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENTAGE_DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENTAGE_DECIMAL_FACTOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"referral","type":"address"}],"name":"addReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bigFishAbsoluteThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bigFishThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buoy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"pwrd","type":"bool"},{"internalType":"bool","name":"all","type":"bool"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"burnGToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"curveVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadCoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositHandler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256[3]","name":"delta","type":"uint256[3]"}],"name":"distributeCurveAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gain","type":"uint256"},{"internalType":"uint256","name":"loss","type":"uint256"}],"name":"distributeStrategyGainLoss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"coin","type":"uint256"}],"name":"emergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyHandler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"eoaOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPWRD","type":"bool"}],"name":"gToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gTokenTotalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSkimPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStrategiesTargetRatio","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"pwrd","type":"bool"},{"internalType":"address","name":"account","type":"address"}],"name":"getUserAssets","outputs":[{"internalType":"uint256","name":"deductUsd","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gvt","outputs":[{"internalType":"contract IToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"insurance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"pwrd","type":"bool"},{"internalType":"bool","name":"deposit","type":"bool"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"isValidBigFish","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lifeGuard","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"pwrd","type":"bool"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintGToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwnershipRemoval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pnl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"prepareRenounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"prepareTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"preventSmartContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pwrd","outputs":[{"internalType":"contract IToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tolerance","type":"uint256"}],"name":"realizePriceChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrals","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[3]","name":"allocations","type":"uint256[3]"}],"name":"restart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"safeAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"uint256","name":"_absolute","type":"uint256"}],"name":"setBigFishThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_curveVault","type":"address"}],"name":"setCurveVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_depositHandler","type":"address"}],"name":"setDepositHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_insurance","type":"address"}],"name":"setInsurance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lifeGuard","type":"address"}],"name":"setLifeGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pnl","type":"address"}],"name":"setPnL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_reward","type":"address"}],"name":"setReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_utilisationRatioLimitGvt","type":"uint256"}],"name":"setUtilisationRatioLimitGvt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_utilisationRatioLimitPwrd","type":"uint256"}],"name":"setUtilisationRatioLimitPwrd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"vault","type":"address"}],"name":"setVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_withdrawHandler","type":"address"},{"internalType":"address","name":"_emergencyHandler","type":"address"}],"name":"setWithdrawHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"pwrd","type":"bool"},{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"setWithdrawalFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stablecoins","outputs":[{"internalType":"address[3]","name":"","type":"address[3]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"check","type":"bool"}],"name":"switchEoaOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"underlyingVaults","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateSafeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"utilisationRatioLimitGvt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"utilisationRatioLimitPwrd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"validGTokenDecrease","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vaultIndexes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vaults","outputs":[{"internalType":"address[3]","name":"","type":"address[3]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawHandler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"","type":"bool"}],"name":"withdrawalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6101806040526003600a556064600d556000600e553480156200002157600080fd5b5060405162004be538038062004be583398181016040526101008110156200004857600080fd5b50805160208201516000805460ff1916815591929091604082019160a0019084908490849084906200007962000129565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516001600160601b0319606091821b8116608052602080850151831b821660a052604094850151831b821660c052835160e0528301516101005291909201516101205292811b8316610140521b1661016052506200012d92505050565b3390565b60805160601c60a05160601c60c05160601c60e05161010051610120516101405160601c6101605160601c614a00620001e56000398061138d52806118e35280612ace52806140275250806111ed52806113b3528061191c5280614000525080613901528061478b525080613081528061476452508061211e528061473452508061317952806145755280614706525080612215528061454d52806146df525080613341528061452852806146af5250614a006000f3fe608060405234801561001057600080fd5b50600436106104ac5760003560e01c80638da5cb5b1161026d578063c1419def11610151578063e5932c40116100ce578063eef2f89111610092578063eef2f89114610c5f578063ef2cfd1a14610c85578063f06d004114610c8d578063f2fde38b14610c95578063f8a338a514610cbb578063faafe10714610cc3576104ac565b8063e5932c4014610bed578063e5c3012014610c13578063e963f18f14610c30578063ea0d5c5214610c38578063edc9203b14610c40576104ac565b8063dbfdc6e711610115578063dbfdc6e714610b57578063e0501ecf14610baf578063e0bab4c414610bb7578063e30c397814610bbf578063e43252d714610bc7576104ac565b8063c1419def14610b09578063c3709e5b14610b11578063c5008f4614610b3f578063c54e44eb14610b47578063cb33562314610b4f576104ac565b8063a220f60a116101ea578063ae70b98a116101ae578063ae70b98a14610a65578063b1c4dbc314610a6d578063b1cbf3ad14610a9b578063b39f9cc814610aa3578063b4f67ab314610aab578063bbcb15c214610b01576104ac565b8063a220f60a146109e4578063a3253dc414610a0a578063a8fb4c5014610a38578063a93cf89014610a40578063ab3ec00314610a48576104ac565b80639b19251a116102315780639b19251a146109625780639c8b2cfb146109885780639ca423b3146109905780639e574a1e146109b6578063a1c317fd146109be576104ac565b80638da5cb5b146108e35780638dc83df8146108eb578063907064251461091157806393ce07b214610919578063944f54921461093c576104ac565b8063455cb58911610394578063715018a611610311578063830b76ab116102d5578063830b76ab146108535780638456cb591461087957806389a302711461088157806389cf3204146108895780638ab1d681146108915780638c16d1da146108b7576104ac565b8063715018a6146107a457806378a88477146107ac5780637a116d7c146107ee5780637ffc945c1461080b5780638220ef5b14610813576104ac565b80635ba6aa2f116103585780635ba6aa2f146107495780635c975abb146107665780636c6ed04b1461076e5780636cd7751f146107765780636f923e731461079c576104ac565b8063455cb589146106e05780634941995d146106e85780634ea8e2a9146106f057806350d3deaf1461070d57806354c875691461072c576104ac565b80631d5760301161042d578063283c5bbe116103f1578063283c5bbe14610628578063293577501461064b5780633056f68b146106695780633f2cc994146106715780633f4ba83a14610697578063409468591461069f576104ac565b80631d576030146105b557806321f1b8e9146105d4578063228cb733146105f357806322a64ec2146105fb578063250108f614610620576104ac565b8063083473ef11610474578063083473ef1461054b578063087eb7371461056f5780630b5c3f8714610577578063141233d7146105a55780631d260a2c146105ad576104ac565b806301c71360146104b157806301e1d114146104d95780630251d893146104f3578063027dee7f146105275780630630311c14610543575b600080fd5b6104d7600480360360208110156104c757600080fd5b50356001600160a01b0316610ccb565b005b6104e1610e4a565b60408051918252519081900360200190f35b6104d76004803603606081101561050957600080fd5b5080351515906001600160a01b036020820135169060400135610e79565b6104d76004803603606081101561053d57600080fd5b5061103b565b6104e16111d6565b6105536111dc565b604080516001600160a01b039092168252519081900360200190f35b6105536111eb565b6104d76004803603604081101561058d57600080fd5b506001600160a01b038135811691602001351661120f565b6104e16112c8565b6104e16112ce565b6104d7600480360360208110156105cb57600080fd5b503515156112d4565b610553600480360360208110156105ea57600080fd5b50351515611384565b6105536113db565b6104d76004803603604081101561061157600080fd5b508035151590602001356113ea565b6104e16114a0565b6104d76004803603604081101561063e57600080fd5b50803590602001356114a7565b610653611595565b6040805160ff9092168252519081900360200190f35b61055361159a565b6104e16004803603602081101561068757600080fd5b50356001600160a01b03166115a9565b6104d76115bb565b6106cc600480360360608110156106b557600080fd5b508035151590602081013515159060400135611622565b604080519115158252519081900360200190f35b6104e16117d8565b6104e161184e565b6104d76004803603602081101561070657600080fd5b5035611954565b6104e16004803603602081101561072357600080fd5b503515156119f0565b6104d76004803603602081101561074257600080fd5b5035611a02565b6104d76004803603602081101561075f57600080fd5b5035611a9e565b6106cc611c6f565b6106cc611c78565b6104d76004803603602081101561078c57600080fd5b50356001600160a01b0316611c88565b610653611d87565b6104d7611d8c565b6104d7600480360360a08110156107c257600080fd5b50803515159060208101351515906001600160a01b036040820135169060608101359060800135611ed5565b6106cc6004803603602081101561080457600080fd5b5035612111565b6104e161211c565b61081b612140565b6040518082606080838360005b83811015610840578181015183820152602001610828565b5050505090500191505060405180910390f35b6106cc6004803603602081101561086957600080fd5b50356001600160a01b03166121a1565b6104d76121b6565b610553612213565b610553612237565b6104d7600480360360208110156108a757600080fd5b50356001600160a01b0316612246565b6104d7600480360360408110156108cd57600080fd5b50803590602001356001600160a01b0316612337565b6105536124a1565b6104d76004803603602081101561090157600080fd5b50356001600160a01b03166124b5565b6106536125ae565b6104d76004803603604081101561092f57600080fd5b50803590602001356125b3565b6104d76004803603602081101561095257600080fd5b50356001600160a01b0316612989565b6106cc6004803603602081101561097857600080fd5b50356001600160a01b0316612a8d565b610553612aa2565b610553600480360360208110156109a657600080fd5b50356001600160a01b0316612ab1565b610553612acc565b6104d7600480360360208110156109d457600080fd5b50356001600160a01b0316612af0565b6104d7600480360360208110156109fa57600080fd5b50356001600160a01b0316612c04565b6104d760048036036040811015610a2057600080fd5b506001600160a01b0381351690602001351515612c7d565b61081b612d3e565b6104e1612d4e565b61055360048036036020811015610a5e57600080fd5b5035612d54565b6104e1612d6f565b6104d760048036036040811015610a8357600080fd5b506001600160a01b0381358116916020013516612d75565b610553612eab565b610553612eba565b6104d760048036036080811015610ac157600080fd5b604080516060818101909252833593928301929160808301919060208401906003908390839080828437600092019190915250919450612ec99350505050565b610553613070565b6104e161307f565b6104e160048036036040811015610b2757600080fd5b508035151590602001356001600160a01b03166130a3565b610653613172565b610553613177565b6106cc61319b565b610b5f6131ab565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b9b578181015183820152602001610b83565b505050509050019250505060405180910390f35b6104e161333a565b61055361333f565b610553613363565b6104d760048036036020811015610bdd57600080fd5b50356001600160a01b0316613372565b6104d760048036036020811015610c0357600080fd5b50356001600160a01b0316613469565b6104d760048036036020811015610c2957600080fd5b5035613565565b6104e161371a565b6104e1613722565b6104d760048036036020811015610c5657600080fd5b5035151561372e565b6104d760048036036020811015610c7557600080fd5b50356001600160a01b0316613844565b6104e16138ff565b610553613923565b6104d760048036036020811015610cab57600080fd5b50356001600160a01b0316613932565b6106cc613a0c565b6104e1613a1c565b610cd3613a22565b60005461010090046001600160a01b03908116911614610d28576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038116610d76576040805162461bcd60e51b815260206004820152601060248201526f0e6cae898d2ccca8eeac2e4c8744060f60831b604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040805163522b5b8160e11b8152905163a456b70291600480820192602092909190829003018186803b158015610dca57600080fd5b505afa158015610dde573d6000803e3d6000fd5b505050506040513d6020811015610df457600080fd5b5051600680546001600160a01b0319166001600160a01b03928316179055604080519183168252517f63d895904e369543621a89359ddbc6a7d89942bf77b40a96f1ee4f631c49cbaf916020908290030190a150565b600254600090600160a81b900460ff16610e6b57610e66613a26565b610e73565b610e73613df0565b90505b90565b6007546001600160a01b03163314610ed8576040805162461bcd60e51b815260206004820152601b60248201527f6275726e47546f6b656e3a20216465706f73697448616e646c65720000000000604482015290519081900360640190fd5b6000610ee384613ff5565b9050806001600160a01b031663156e29f684836001600160a01b03166354f703f86040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2e57600080fd5b505afa158015610f42573d6000803e3d6000fd5b505050506040513d6020811015610f5857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820186905251606480830192600092919082900301818387803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b50506004805460408051631f885a3160e21b81528915159381019390935260248301879052516001600160a01b039091169350637e2168c49250604480830192600092919082900301818387803b15801561101d57600080fd5b505af1158015611031573d6000803e3d6000fd5b5050505050505050565b611043613a22565b60005461010090046001600160a01b03908116911614611098576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b60005460ff166110e6576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6110ee61404b565b6003600a8190556002805460ff60a81b1916905554604051638a5495a360e01b81526001600160a01b0390911690638a5495a390839060040180826060808284376000838201819052604051601f909201601f1916909301945091925050808303818387803b15801561116057600080fd5b505af1158015611174573d6000803e3d6000fd5b5050600480546040805163339d180960e21b815290516001600160a01b03909216945063ce7460249350808301926000929182900301818387803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b5050505050565b600c5481565b6008546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6007546001600160a01b03163314611260576040805162461bcd60e51b815260206004820152600f60248201526e10b232b837b9b4ba2430b7323632b960891b604482015290519081900360640190fd5b6001600160a01b0381161580159061129057506001600160a01b0382811660009081526014602052604090205416155b156112c4576001600160a01b03828116600090815260146020526040902080546001600160a01b0319169183169190911790555b5050565b600b5481565b600e5481565b6112dc613a22565b60005461010090046001600160a01b03908116911614611331576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b60028054821515600160a01b810260ff60a01b199092169190911790915560408051918252517f990973491da31a4a90adc36d160a81a0ea3bbcaa84dbf07628fd17c1b102709c9181900360200190a150565b6000816113b1577f00000000000000000000000000000000000000000000000000000000000000006113d3565b7f00000000000000000000000000000000000000000000000000000000000000005b90505b919050565b600f546001600160a01b031681565b6113f2613a22565b60005461010090046001600160a01b03908116911614611447576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b811515600081815260156020908152604091829020849055815133815290810192909252818101839052517fd613b7a09cd076330c61826ccd93da9455397580588847225bf246f34e76fdcd9181900360600190a15050565b620f424081565b6114af613a22565b60005461010090046001600160a01b03908116911614611504576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6000821161154c576040805162461bcd60e51b815260206004820152601060248201526f05f7768616c654c696d697420697320360841b604482015290519081900360640190fd5b600d829055600e819055604080518381526020810183905281517f3ab1f98168d1c41f83a4f0bba310a6f587d4f5600212d84d73d95ba9b6694ab9929181900390910190a15050565b600381565b6004546001600160a01b031681565b60136020526000908152604090205481565b6115c3613a22565b60005461010090046001600160a01b03908116911614611618576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b61162061404b565b565b600082801561162e5750835b156116925761163c826140e9565b61168d576040805162461bcd60e51b815260206004820152601f60248201527f6973426967466973683a202176616c696447546f6b656e496e63726561736500604482015290519081900360640190fd5b6116fd565b8315801561169e575082155b156116fd576116ac826141ee565b6116fd576040805162461bcd60e51b815260206004820152601f60248201527f6973426967466973683a202176616c696447546f6b656e446563726561736500604482015290519081900360640190fd5b600e5482101561170f575060006117d1565b60048054604080516320458c5560e01b8152815160009485946001600160a01b0316936320458c559380830193919290829003018186803b15801561175357600080fd5b505afa158015611767573d6000803e3d6000fd5b505050506040513d604081101561177d57600080fd5b5080516020909101519092509050600061179782846142eb565b9050808511156117ad57600193505050506117d1565b600d546117c990612710906117c390849061434e565b906143a7565b851193505050505b9392505050565b6003546040805163e8ca78d360e01b815290516000926001600160a01b03169163e8ca78d3916004808301926020929190829003018186803b15801561181d57600080fd5b505afa158015611831573d6000803e3d6000fd5b505050506040513d602081101561184757600080fd5b5051905090565b6000806000600460009054906101000a90046001600160a01b03166001600160a01b03166320458c556040518163ffffffff1660e01b8152600401604080518083038186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d60408110156118ca57600080fd5b5080516020909101519092509050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561191157509050610e76565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561194b579150610e769050565b60009250505090565b61195c613a22565b60005461010090046001600160a01b039081169116146119b1576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b600c8190556040805182815290516001917fe747b7cee66156de797b1188f55aa945bf0a209a3c73708c29b01c1eb50efbfb919081900360200190a250565b60156020526000908152604090205481565b611a0a613a22565b60005461010090046001600160a01b03908116911614611a5f576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b600b8190556040805182815290516000917fe747b7cee66156de797b1188f55aa945bf0a209a3c73708c29b01c1eb50efbfb919081900360200190a250565b611aa6613a22565b60005461010090046001600160a01b03908116911614611afb576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6004546006546002546001600160a01b039283169290911690600160a81b900460ff1615611b8d57816001600160a01b031663e3d94944611b3a613df0565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b7057600080fd5b505af1158015611b84573d6000803e3d6000fd5b50505050611c6a565b806001600160a01b031663b6217980846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050506040513d6020811015611bfd57600080fd5b505115611c6a57816001600160a01b031663e3d94944611c1b613a26565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c5157600080fd5b505af1158015611c65573d6000803e3d6000fd5b505050505b505050565b60005460ff1690565b600254600160a01b900460ff1681565b611c90613a22565b60005461010090046001600160a01b03908116911614611ce5576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038116611d33576040805162461bcd60e51b815260206004820152601060248201526f0e6cae892dce6eae4c2dcc6ca744060f60831b604482015290519081900360640190fd5b600380546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fb455053f0624a04600b7306c5437a9cc5dbec51cc7bec1f09796772eee95d2e39181900360200190a150565b600881565b611d94613a22565b60005461010090046001600160a01b03908116911614611de9576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b600254600160b01b900460ff16611e315760405162461bcd60e51b815260040180806020018281038252602b8152602001806149a0602b913960400191505060405180910390fd5b600380546001600160a01b0319908116909155600480548216905560058054821690556006805482169055600780548216905560088054821690556009805490911690556002805460ff60b01b191690556000611e8c6124a1565b9050611e966143e9565b604080516001600160a01b038316815290517f5b010b9640c9f82299355090c42f932a190e92309f6ed795380fa168c4446d419181900360200190a150565b6008546001600160a01b0316331480611ef857506009546001600160a01b031633145b611f335760405162461bcd60e51b815260040180806020018281038252602d815260200180614932602d913960400191505060405180910390fd5b6000611f3e86613ff5565b90508461202c57806001600160a01b031663f5298aca85836001600160a01b03166354f703f86040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8e57600080fd5b505afa158015611fa2573d6000803e3d6000fd5b505050506040513d6020811015611fb857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820187905251606480830192600092919082900301818387803b15801561200f57600080fd5b505af1158015612023573d6000803e3d6000fd5b50505050612094565b806001600160a01b0316637e9d2ac1856040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561207b57600080fd5b505af115801561208f573d6000803e3d6000fd5b505050505b6004805460408051634175e52160e01b8152891515938101939093526024830186905260448301859052516001600160a01b0390911691634175e52191606480830192600092919082900301818387803b1580156120f157600080fd5b505af1158015612105573d6000803e3d6000fd5b50505050505050505050565b60006113d3826141ee565b7f000000000000000000000000000000000000000000000000000000000000000081565b6121486148ed565b6121506148ed565b60005b600381101561219b576000818152601260205260409020546001600160a01b031682826003811061218057fe5b6001600160a01b039092166020929092020152600101612153565b50905090565b60116020526000908152604090205460ff1681565b3360009081526001602052604090205460ff1661220b576040805162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b604482015290519081900360640190fd5b611620614495565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003546001600160a01b031681565b61224e613a22565b60005461010090046001600160a01b039081169116146122a3576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b0381166122ee576040805162461bcd60e51b815260206004820152600d60248201526c0aed0d2e8ca98d2e6e8744060f609b1b604482015290519081900360640190fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517f9e9499495e2efd848d33cb197bde94612c1ec36f30605b60d445511e056069e19190a250565b61233f613a22565b60005461010090046001600160a01b03908116911614612394576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b0381166123de576040805162461bcd60e51b815260206004820152600c60248201526b0e6cae8acc2ead8e8744060f60a31b604482015290519081900360640190fd5b60038210612426576040805162461bcd60e51b815260206004820152601060248201526f0e6cae8acc2ead8e8744042d2dcc8caf60831b604482015290519081900360640190fd5b600082815260126020908152604080832080546001600160a01b0319166001600160a01b038616908117909155808452601383529281902060018601905580518581529182019290925281517f7f5d10afc9d4f61463db9789d8377dc00fa4f4766537eb41e1bcbb1fb6adc8eb929181900390910190a15050565b60005461010090046001600160a01b031690565b6124bd613a22565b60005461010090046001600160a01b03908116911614612512576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b03811661255a576040805162461bcd60e51b815260206004820152600a6024820152690e6cae8a0dcd8744060f60b31b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f88ba032772250acc5b02184579c073e706c46818fa418a4b8351908b67cfa6299181900360200190a150565b600481565b3360009081526013602052604090205480158015906125d3575060048111155b612614576040805162461bcd60e51b815260206004820152600d60248201526c10ab30bab63a20b230b83a37b960991b604482015290519081900360640190fd5b600454600654600019909201916001600160a01b03918216911660008060038510156127455786156126bf57826001600160a01b031663884d981288876040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561268c57600080fd5b505afa1580156126a0573d6000803e3d6000fd5b505050506040513d60208110156126b657600080fd5b50519150612740565b851561274057826001600160a01b031663884d981287876040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561271157600080fd5b505afa158015612725573d6000803e3d6000fd5b505050506040513d602081101561273b57600080fd5b505190505b61283b565b86156127c257826001600160a01b03166303e6f5cc886040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561278f57600080fd5b505afa1580156127a3573d6000803e3d6000fd5b505050506040513d60208110156127b957600080fd5b5051915061283b565b851561283b57826001600160a01b03166303e6f5cc876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561280c57600080fd5b505afa158015612820573d6000803e3d6000fd5b505050506040513d602081101561283657600080fd5b505190505b600f5460408051639ecf47c160e01b815260048101859052602481018490526001600160a01b039283166044820152905191861691639ecf47c19160648082019260009290919082900301818387803b15801561289757600080fd5b505af11580156128ab573d6000803e3d6000fd5b50505050826001600160a01b03166365b68d516040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156128ea57600080fd5b505af11580156128fe573d6000803e3d6000fd5b505050506040513d602081101561291457600080fd5b505115611c6557836001600160a01b031663e3d94944612932613a26565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561296857600080fd5b505af115801561297c573d6000803e3d6000fd5b5050505050505050505050565b612991613a22565b60005461010090046001600160a01b039081169116146129e6576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038116612a39576040805162461bcd60e51b81526020600482015260156024820152740e6cae888cae0dee6d2e890c2dcc8d8cae4744060f605b1b604482015290519081900360640190fd5b600780546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa6b7402f6ee9ac18beddf377e998056aed4b27a41ba0c7fa912c0b8d106a3e2a9181900360200190a150565b60016020526000908152604090205460ff1681565b6007546001600160a01b031681565b6014602052600090815260409020546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b612af8613a22565b60005461010090046001600160a01b03908116911614612b4d576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038116612b9c576040805162461bcd60e51b81526020600482015260116024820152700e6cae886eae4eccaacc2ead8e8744060f607b1b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b03831690811790915560008181526013602090815260409182902060049055815192835290517f40330b54633a95e4fc9b2067c98757db97fe718654800ed18cd1b7c1dde8f7479281900390910190a150565b600254600160a01b900460ff168015612c2d57503260009081526011602052604090205460ff16155b15612c7a576001600160a01b0381163214612c7a576040805162461bcd60e51b8152602060048201526008602482015267454f41206f6e6c7960c01b604482015290519081900360640190fd5b50565b612c85613a22565b60005461010090046001600160a01b03908116911614612cda576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915582519384529083015280517fe96e151fb4e39ab8ece2437dec067abb2b8f122089211e16960e866ebdf4c18c9281900390910190a15050565b612d466148ed565b610e73614516565b600a5481565b6012602052600090815260409020546001600160a01b031681565b61271081565b612d7d613a22565b60005461010090046001600160a01b03908116911614612dd2576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b03821615801590612df257506001600160a01b03811615155b612e3c576040805162461bcd60e51b81526020600482015260166024820152750e6cae8aed2e8d0c8e4c2ee90c2dcc8d8cae4744060f60531b604482015290519081900360640190fd5b600880546001600160a01b038085166001600160a01b031992831681179093556009805491851691909216811790915560408051928352602083019190915280517fa0ff2d53ae9ab58f2cd0cc1fb64b0c198803e1dbc006ca8f87150781c34048069281900390910190a15050565b6006546001600160a01b031681565b6005546001600160a01b031681565b3360009081526001602052604090205460ff16612f1e576040805162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b604482015290519081900360640190fd5b612f266148ed565b600554604051632126201360e11b8152600481018581526001600160a01b039092169163424c4026918691869160240182606080838360005b83811015612f77578181015183820152602001612f5f565b5050505090500192505050606060405180830381600087803b158015612f9c57600080fd5b505af1158015612fb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506060811015612fd557600080fd5b506040518481529091507f5fa91bdf23b8b21c94b98ca463fe192bf3a5019409d47909fa0b98dfb64987ab908490839085906020810183606080838360005b8381101561302c578181015183820152602001613014565b5050505090500182600360200280838360005b8381101561305757818101518382015260200161303f565b50505050905001935050505060405180910390a1505050565b6002546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000806130af84613ff5565b9050806001600160a01b031663742978da846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156130fe57600080fd5b505afa158015613112573d6000803e3d6000fd5b505050506040513d602081101561312857600080fd5b505191508161316b576040805162461bcd60e51b815260206004820152600a602482015269085b5a5b905b5bdd5b9d60b21b604482015290519081900360640190fd5b5092915050565b601281565b7f000000000000000000000000000000000000000000000000000000000000000081565b600254600160b01b900460ff1681565b60048054604080516352391f1760e11b815290516060936000936001600160a01b03169263a4723e2e9281830192602092829003018186803b1580156131f057600080fd5b505afa158015613204573d6000803e3d6000fd5b505050506040513d602081101561321a57600080fd5b50516003546040805163276765bb60e11b81526004810184905290519293506001600160a01b0390911691634ececb7691602480820192600092909190829003018186803b15801561326b57600080fd5b505afa15801561327f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156132a857600080fd5b81019080805160405193929190846401000000008211156132c857600080fd5b9083019060208201858111156132dd57600080fd5b82518660208202830111640100000000821117156132fa57600080fd5b82525081516020918201928201910280838360005b8381101561332757818101518382015260200161330f565b5050505090500160405250505091505090565b600681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6010546001600160a01b031681565b61337a613a22565b60005461010090046001600160a01b039081169116146133cf576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b03811661341a576040805162461bcd60e51b815260206004820152600d60248201526c0aed0d2e8ca98d2e6e8744060f609b1b604482015290519081900360640190fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f4e3d8c117d484081f7268ed79cded71ad42979b92feb5f8f7f9824ac5cbfe3759190a250565b613471613a22565b60005461010090046001600160a01b039081169116146134c6576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038116613511576040805162461bcd60e51b815260206004820152600d60248201526c0e6cae8a4caeec2e4c8744060f609b1b604482015290519081900360640190fd5b600f80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f89b988499f10a211a37c87285cc777f5b63ff3c638af96ec1da38d44cc91da259181900360200190a150565b3360009081526001602052604090205460ff166135ba576040805162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b604482015290519081900360640190fd5b60038111156135ff576040805162461bcd60e51b815260206004820152600c60248201526b34b73b30b634b21031b7b4b760a11b604482015290519081900360640190fd5b613607611c6f565b61361357613613614495565b6002805460ff60a81b1916600160a81b17905560038110156136d7576136376148ed565b61271081836003811061364657fe5b6020020152600354604051638a5495a360e01b81526001600160a01b0390911690638a5495a39083906004018082606080838360005b8381101561369457818101518382015260200161367c565b50505050905001915050600060405180830381600087803b1580156136b857600080fd5b505af11580156136cc573d6000803e3d6000fd5b505050600a83905550505b6004805460408051632afa129d60e11b815290516001600160a01b03909216926355f4253a92828201926000929082900301818387803b1580156111bb57600080fd5b6305f5e10081565b670de0b6b3a764000081565b613736613a22565b60005461010090046001600160a01b0390811691161461378b576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b60025460ff600160b01b90910416151581151514156137f1576040805162461bcd60e51b815260206004820181905260248201527f7072657061726552656e6f756e63654f776e6572736869703a20737461747573604482015290519081900360640190fd5b60408051821515815290517fbe363c149a958057c9f858923a2066b32b370abd767deb4376d14b5713c0233d9181900360200190a160028054911515600160b01b0260ff60b01b19909216919091179055565b61384c613a22565b60005461010090046001600160a01b039081169116146138a1576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b604080516001600160a01b038316815290517f34c04e418602e2d385d3486f523f5caa03a5b9254c44aa32f5d085a1580c9c2c9181900360200190a1601080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009546001600160a01b031681565b61393a613a22565b60005461010090046001600160a01b0390811691161461398f576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6010546001600160a01b03166139e4576040805162461bcd60e51b81526020600482015260156024820152740e8e4c2dce6cccae49eeedccae4e6d0d2e0744060f605b1b604482015290519081900360640190fd5b6010546139f9906001600160a01b031661459d565b50601080546001600160a01b0319169055565b600254600160a81b900460ff1681565b600d5481565b3390565b6006546040805163aff1d8e560e01b815290516000926001600160a01b03169163aff1d8e5916004808301926020929190829003018186803b158015613a6b57600080fd5b505afa158015613a7f573d6000803e3d6000fd5b505050506040513d6020811015613a9557600080fd5b5051613adc576040805162461bcd60e51b81526020600482015260116024820152702162756f792e736166657479436865636b60781b604482015290519081900360640190fd5b613ae46148ed565b600560009054906101000a90046001600160a01b03166001600160a01b03166367e4ac2c6040518163ffffffff1660e01b815260040160606040518083038186803b158015613b3257600080fd5b505afa158015613b46573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506060811015613b6b57600080fd5b509050613b766148ed565b60005b6003811015613c2f576000818152601260209081526040918290205482516278744560e21b81529251613c16936001600160a01b03909216926301e1d1149260048082019391829003018186803b158015613bd357600080fd5b505afa158015613be7573d6000803e3d6000fd5b505050506040513d6020811015613bfd57600080fd5b5051848360038110613c0b57fe5b6020020151906142eb565b828260038110613c2257fe5b6020020152600101613b79565b50600254604080516278744560e21b815290516000926001600160a01b0316916301e1d114916004808301926020929190829003018186803b158015613c7457600080fd5b505afa158015613c88573d6000803e3d6000fd5b505050506040513d6020811015613c9e57600080fd5b50516006546040516366c2bdcf60e01b8152919250613d51916001600160a01b03909116906366c2bdcf9085906001906004018083606080838360005b83811015613cf3578181015183820152602001613cdb565b5050505090500182151581526020019250505060206040518083038186803b158015613d1e57600080fd5b505afa158015613d32573d6000803e3d6000fd5b505050506040513d6020811015613d4857600080fd5b505182906142eb565b90506000600660009054906101000a90046001600160a01b03166001600160a01b031663e25aa5fa6040518163ffffffff1660e01b815260040160206040518083038186803b158015613da357600080fd5b505afa158015613db7573d6000803e3d6000fd5b505050506040513d6020811015613dcd57600080fd5b50519050613de7670de0b6b3a76400006117c3848461434e565b94505050505090565b6006546000906001600160a01b031681805b6003811015613fee57600a548114613fe6576000613e1f826146a5565b90506000613e2c8361472a565b905060008290506000866001600160a01b031663f91d443f866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613e7957600080fd5b505afa158015613e8d573d6000803e3d6000fd5b505050506040513d6020811015613ea357600080fd5b5051600554604080516370a0823160e01b81526001600160a01b0392831660048201529051929350600092613fa6928616916370a08231916024808301926020929190829003018186803b158015613efa57600080fd5b505afa158015613f0e573d6000803e3d6000fd5b505050506040513d6020811015613f2457600080fd5b50516000888152601260209081526040918290205482516278744560e21b815292516001600160a01b03909116926301e1d114926004808301939192829003018186803b158015613f7457600080fd5b505afa158015613f88573d6000803e3d6000fd5b505050506040513d6020811015613f9e57600080fd5b5051906142eb565b9050613fba6305f5e1006117c3838561434e565b9050613fd2846117c383670de0b6b3a764000061434e565b9050613fde87826142eb565b965050505050505b600101613e02565b5091505090565b6000811561402457507f00000000000000000000000000000000000000000000000000000000000000006113d6565b507f00000000000000000000000000000000000000000000000000000000000000006113d6565b60005460ff16614099576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6140cc613a22565b604080516001600160a01b039092168252519081900360200190a1565b60006141636140f86001613ff5565b6001600160a01b03166301e1d1146040518163ffffffff1660e01b815260040160206040518083038186803b15801561413057600080fd5b505afa158015614144573d6000803e3d6000fd5b505050506040513d602081101561415a57600080fd5b505183906142eb565b600c546141e690612710906117c39061417c6000613ff5565b6001600160a01b03166301e1d1146040518163ffffffff1660e01b815260040160206040518083038186803b1580156141b457600080fd5b505afa1580156141c8573d6000803e3d6000fd5b505050506040513d60208110156141de57600080fd5b50519061434e565b101592915050565b60006141fa6001613ff5565b6001600160a01b03166301e1d1146040518163ffffffff1660e01b815260040160206040518083038186803b15801561423257600080fd5b505afa158015614246573d6000803e3d6000fd5b505050506040513d602081101561425c57600080fd5b5051600b546141e690612710906117c3906142e58761427b6000613ff5565b6001600160a01b03166301e1d1146040518163ffffffff1660e01b815260040160206040518083038186803b1580156142b357600080fd5b505afa1580156142c7573d6000803e3d6000fd5b505050506040513d60208110156142dd57600080fd5b5051906147af565b9061434e565b600082820183811015614345576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60008261435d57506000614348565b8282028284828161436a57fe5b04146143455760405162461bcd60e51b815260040180806020018281038252602181526020018061495f6021913960400191505060405180910390fd5b600061434583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506147f1565b6143f1613a22565b60005461010090046001600160a01b03908116911614614446576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b60005460ff16156144e0576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586140cc613a22565b61451e6148ed565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682527f0000000000000000000000000000000000000000000000000000000000000000811660208301527f000000000000000000000000000000000000000000000000000000000000000016604082015290565b6145a5613a22565b60005461010090046001600160a01b039081169116146145fa576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b03811661463f5760405162461bcd60e51b815260040180806020018281038252602681526020018061490c6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000816146d357507f00000000000000000000000000000000000000000000000000000000000000006113d6565b816001141561470357507f00000000000000000000000000000000000000000000000000000000000000006113d6565b507f00000000000000000000000000000000000000000000000000000000000000006113d6565b60008161475857507f00000000000000000000000000000000000000000000000000000000000000006113d6565b816001141561478857507f00000000000000000000000000000000000000000000000000000000000000006113d6565b507f00000000000000000000000000000000000000000000000000000000000000006113d6565b600061434583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614893565b6000818361487d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561484257818101518382015260200161482a565b50505050905090810190601f16801561486f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161488957fe5b0495945050505050565b600081848411156148e55760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561484257818101518382015260200161482a565b505050900390565b6040518060600160405280600390602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573736275726e47546f6b656e3a2021776974686472617748616e646c65727c656d657267656e637948616e646c6572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657272656e6f756e63654f776e6572736869703a202170656e64696e674f776e65727368697052656d6f76616ca26469706673582212201d5d433f11c5d2a652dabe274dfd55fe9dca28b9888fe79fce527c20a241260e64736f6c634300060c0033000000000000000000000000f0a93d4994b3d98fb5e3a2f90dbc2d69073cb86b0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f4240
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106104ac5760003560e01c80638da5cb5b1161026d578063c1419def11610151578063e5932c40116100ce578063eef2f89111610092578063eef2f89114610c5f578063ef2cfd1a14610c85578063f06d004114610c8d578063f2fde38b14610c95578063f8a338a514610cbb578063faafe10714610cc3576104ac565b8063e5932c4014610bed578063e5c3012014610c13578063e963f18f14610c30578063ea0d5c5214610c38578063edc9203b14610c40576104ac565b8063dbfdc6e711610115578063dbfdc6e714610b57578063e0501ecf14610baf578063e0bab4c414610bb7578063e30c397814610bbf578063e43252d714610bc7576104ac565b8063c1419def14610b09578063c3709e5b14610b11578063c5008f4614610b3f578063c54e44eb14610b47578063cb33562314610b4f576104ac565b8063a220f60a116101ea578063ae70b98a116101ae578063ae70b98a14610a65578063b1c4dbc314610a6d578063b1cbf3ad14610a9b578063b39f9cc814610aa3578063b4f67ab314610aab578063bbcb15c214610b01576104ac565b8063a220f60a146109e4578063a3253dc414610a0a578063a8fb4c5014610a38578063a93cf89014610a40578063ab3ec00314610a48576104ac565b80639b19251a116102315780639b19251a146109625780639c8b2cfb146109885780639ca423b3146109905780639e574a1e146109b6578063a1c317fd146109be576104ac565b80638da5cb5b146108e35780638dc83df8146108eb578063907064251461091157806393ce07b214610919578063944f54921461093c576104ac565b8063455cb58911610394578063715018a611610311578063830b76ab116102d5578063830b76ab146108535780638456cb591461087957806389a302711461088157806389cf3204146108895780638ab1d681146108915780638c16d1da146108b7576104ac565b8063715018a6146107a457806378a88477146107ac5780637a116d7c146107ee5780637ffc945c1461080b5780638220ef5b14610813576104ac565b80635ba6aa2f116103585780635ba6aa2f146107495780635c975abb146107665780636c6ed04b1461076e5780636cd7751f146107765780636f923e731461079c576104ac565b8063455cb589146106e05780634941995d146106e85780634ea8e2a9146106f057806350d3deaf1461070d57806354c875691461072c576104ac565b80631d5760301161042d578063283c5bbe116103f1578063283c5bbe14610628578063293577501461064b5780633056f68b146106695780633f2cc994146106715780633f4ba83a14610697578063409468591461069f576104ac565b80631d576030146105b557806321f1b8e9146105d4578063228cb733146105f357806322a64ec2146105fb578063250108f614610620576104ac565b8063083473ef11610474578063083473ef1461054b578063087eb7371461056f5780630b5c3f8714610577578063141233d7146105a55780631d260a2c146105ad576104ac565b806301c71360146104b157806301e1d114146104d95780630251d893146104f3578063027dee7f146105275780630630311c14610543575b600080fd5b6104d7600480360360208110156104c757600080fd5b50356001600160a01b0316610ccb565b005b6104e1610e4a565b60408051918252519081900360200190f35b6104d76004803603606081101561050957600080fd5b5080351515906001600160a01b036020820135169060400135610e79565b6104d76004803603606081101561053d57600080fd5b5061103b565b6104e16111d6565b6105536111dc565b604080516001600160a01b039092168252519081900360200190f35b6105536111eb565b6104d76004803603604081101561058d57600080fd5b506001600160a01b038135811691602001351661120f565b6104e16112c8565b6104e16112ce565b6104d7600480360360208110156105cb57600080fd5b503515156112d4565b610553600480360360208110156105ea57600080fd5b50351515611384565b6105536113db565b6104d76004803603604081101561061157600080fd5b508035151590602001356113ea565b6104e16114a0565b6104d76004803603604081101561063e57600080fd5b50803590602001356114a7565b610653611595565b6040805160ff9092168252519081900360200190f35b61055361159a565b6104e16004803603602081101561068757600080fd5b50356001600160a01b03166115a9565b6104d76115bb565b6106cc600480360360608110156106b557600080fd5b508035151590602081013515159060400135611622565b604080519115158252519081900360200190f35b6104e16117d8565b6104e161184e565b6104d76004803603602081101561070657600080fd5b5035611954565b6104e16004803603602081101561072357600080fd5b503515156119f0565b6104d76004803603602081101561074257600080fd5b5035611a02565b6104d76004803603602081101561075f57600080fd5b5035611a9e565b6106cc611c6f565b6106cc611c78565b6104d76004803603602081101561078c57600080fd5b50356001600160a01b0316611c88565b610653611d87565b6104d7611d8c565b6104d7600480360360a08110156107c257600080fd5b50803515159060208101351515906001600160a01b036040820135169060608101359060800135611ed5565b6106cc6004803603602081101561080457600080fd5b5035612111565b6104e161211c565b61081b612140565b6040518082606080838360005b83811015610840578181015183820152602001610828565b5050505090500191505060405180910390f35b6106cc6004803603602081101561086957600080fd5b50356001600160a01b03166121a1565b6104d76121b6565b610553612213565b610553612237565b6104d7600480360360208110156108a757600080fd5b50356001600160a01b0316612246565b6104d7600480360360408110156108cd57600080fd5b50803590602001356001600160a01b0316612337565b6105536124a1565b6104d76004803603602081101561090157600080fd5b50356001600160a01b03166124b5565b6106536125ae565b6104d76004803603604081101561092f57600080fd5b50803590602001356125b3565b6104d76004803603602081101561095257600080fd5b50356001600160a01b0316612989565b6106cc6004803603602081101561097857600080fd5b50356001600160a01b0316612a8d565b610553612aa2565b610553600480360360208110156109a657600080fd5b50356001600160a01b0316612ab1565b610553612acc565b6104d7600480360360208110156109d457600080fd5b50356001600160a01b0316612af0565b6104d7600480360360208110156109fa57600080fd5b50356001600160a01b0316612c04565b6104d760048036036040811015610a2057600080fd5b506001600160a01b0381351690602001351515612c7d565b61081b612d3e565b6104e1612d4e565b61055360048036036020811015610a5e57600080fd5b5035612d54565b6104e1612d6f565b6104d760048036036040811015610a8357600080fd5b506001600160a01b0381358116916020013516612d75565b610553612eab565b610553612eba565b6104d760048036036080811015610ac157600080fd5b604080516060818101909252833593928301929160808301919060208401906003908390839080828437600092019190915250919450612ec99350505050565b610553613070565b6104e161307f565b6104e160048036036040811015610b2757600080fd5b508035151590602001356001600160a01b03166130a3565b610653613172565b610553613177565b6106cc61319b565b610b5f6131ab565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b9b578181015183820152602001610b83565b505050509050019250505060405180910390f35b6104e161333a565b61055361333f565b610553613363565b6104d760048036036020811015610bdd57600080fd5b50356001600160a01b0316613372565b6104d760048036036020811015610c0357600080fd5b50356001600160a01b0316613469565b6104d760048036036020811015610c2957600080fd5b5035613565565b6104e161371a565b6104e1613722565b6104d760048036036020811015610c5657600080fd5b5035151561372e565b6104d760048036036020811015610c7557600080fd5b50356001600160a01b0316613844565b6104e16138ff565b610553613923565b6104d760048036036020811015610cab57600080fd5b50356001600160a01b0316613932565b6106cc613a0c565b6104e1613a1c565b610cd3613a22565b60005461010090046001600160a01b03908116911614610d28576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038116610d76576040805162461bcd60e51b815260206004820152601060248201526f0e6cae898d2ccca8eeac2e4c8744060f60831b604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040805163522b5b8160e11b8152905163a456b70291600480820192602092909190829003018186803b158015610dca57600080fd5b505afa158015610dde573d6000803e3d6000fd5b505050506040513d6020811015610df457600080fd5b5051600680546001600160a01b0319166001600160a01b03928316179055604080519183168252517f63d895904e369543621a89359ddbc6a7d89942bf77b40a96f1ee4f631c49cbaf916020908290030190a150565b600254600090600160a81b900460ff16610e6b57610e66613a26565b610e73565b610e73613df0565b90505b90565b6007546001600160a01b03163314610ed8576040805162461bcd60e51b815260206004820152601b60248201527f6275726e47546f6b656e3a20216465706f73697448616e646c65720000000000604482015290519081900360640190fd5b6000610ee384613ff5565b9050806001600160a01b031663156e29f684836001600160a01b03166354f703f86040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2e57600080fd5b505afa158015610f42573d6000803e3d6000fd5b505050506040513d6020811015610f5857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820186905251606480830192600092919082900301818387803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b50506004805460408051631f885a3160e21b81528915159381019390935260248301879052516001600160a01b039091169350637e2168c49250604480830192600092919082900301818387803b15801561101d57600080fd5b505af1158015611031573d6000803e3d6000fd5b5050505050505050565b611043613a22565b60005461010090046001600160a01b03908116911614611098576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b60005460ff166110e6576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6110ee61404b565b6003600a8190556002805460ff60a81b1916905554604051638a5495a360e01b81526001600160a01b0390911690638a5495a390839060040180826060808284376000838201819052604051601f909201601f1916909301945091925050808303818387803b15801561116057600080fd5b505af1158015611174573d6000803e3d6000fd5b5050600480546040805163339d180960e21b815290516001600160a01b03909216945063ce7460249350808301926000929182900301818387803b1580156111bb57600080fd5b505af11580156111cf573d6000803e3d6000fd5b5050505050565b600c5481565b6008546001600160a01b031681565b7f000000000000000000000000f0a93d4994b3d98fb5e3a2f90dbc2d69073cb86b81565b6007546001600160a01b03163314611260576040805162461bcd60e51b815260206004820152600f60248201526e10b232b837b9b4ba2430b7323632b960891b604482015290519081900360640190fd5b6001600160a01b0381161580159061129057506001600160a01b0382811660009081526014602052604090205416155b156112c4576001600160a01b03828116600090815260146020526040902080546001600160a01b0319169183169190911790555b5050565b600b5481565b600e5481565b6112dc613a22565b60005461010090046001600160a01b03908116911614611331576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b60028054821515600160a01b810260ff60a01b199092169190911790915560408051918252517f990973491da31a4a90adc36d160a81a0ea3bbcaa84dbf07628fd17c1b102709c9181900360200190a150565b6000816113b1577f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6113d3565b7f000000000000000000000000f0a93d4994b3d98fb5e3a2f90dbc2d69073cb86b5b90505b919050565b600f546001600160a01b031681565b6113f2613a22565b60005461010090046001600160a01b03908116911614611447576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b811515600081815260156020908152604091829020849055815133815290810192909252818101839052517fd613b7a09cd076330c61826ccd93da9455397580588847225bf246f34e76fdcd9181900360600190a15050565b620f424081565b6114af613a22565b60005461010090046001600160a01b03908116911614611504576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6000821161154c576040805162461bcd60e51b815260206004820152601060248201526f05f7768616c654c696d697420697320360841b604482015290519081900360640190fd5b600d829055600e819055604080518381526020810183905281517f3ab1f98168d1c41f83a4f0bba310a6f587d4f5600212d84d73d95ba9b6694ab9929181900390910190a15050565b600381565b6004546001600160a01b031681565b60136020526000908152604090205481565b6115c3613a22565b60005461010090046001600160a01b03908116911614611618576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b61162061404b565b565b600082801561162e5750835b156116925761163c826140e9565b61168d576040805162461bcd60e51b815260206004820152601f60248201527f6973426967466973683a202176616c696447546f6b656e496e63726561736500604482015290519081900360640190fd5b6116fd565b8315801561169e575082155b156116fd576116ac826141ee565b6116fd576040805162461bcd60e51b815260206004820152601f60248201527f6973426967466973683a202176616c696447546f6b656e446563726561736500604482015290519081900360640190fd5b600e5482101561170f575060006117d1565b60048054604080516320458c5560e01b8152815160009485946001600160a01b0316936320458c559380830193919290829003018186803b15801561175357600080fd5b505afa158015611767573d6000803e3d6000fd5b505050506040513d604081101561177d57600080fd5b5080516020909101519092509050600061179782846142eb565b9050808511156117ad57600193505050506117d1565b600d546117c990612710906117c390849061434e565b906143a7565b851193505050505b9392505050565b6003546040805163e8ca78d360e01b815290516000926001600160a01b03169163e8ca78d3916004808301926020929190829003018186803b15801561181d57600080fd5b505afa158015611831573d6000803e3d6000fd5b505050506040513d602081101561184757600080fd5b5051905090565b6000806000600460009054906101000a90046001600160a01b03166001600160a01b03166320458c556040518163ffffffff1660e01b8152600401604080518083038186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d60408110156118ca57600080fd5b5080516020909101519092509050336001600160a01b037f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c16141561191157509050610e76565b336001600160a01b037f000000000000000000000000f0a93d4994b3d98fb5e3a2f90dbc2d69073cb86b16141561194b579150610e769050565b60009250505090565b61195c613a22565b60005461010090046001600160a01b039081169116146119b1576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b600c8190556040805182815290516001917fe747b7cee66156de797b1188f55aa945bf0a209a3c73708c29b01c1eb50efbfb919081900360200190a250565b60156020526000908152604090205481565b611a0a613a22565b60005461010090046001600160a01b03908116911614611a5f576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b600b8190556040805182815290516000917fe747b7cee66156de797b1188f55aa945bf0a209a3c73708c29b01c1eb50efbfb919081900360200190a250565b611aa6613a22565b60005461010090046001600160a01b03908116911614611afb576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6004546006546002546001600160a01b039283169290911690600160a81b900460ff1615611b8d57816001600160a01b031663e3d94944611b3a613df0565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b7057600080fd5b505af1158015611b84573d6000803e3d6000fd5b50505050611c6a565b806001600160a01b031663b6217980846040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050506040513d6020811015611bfd57600080fd5b505115611c6a57816001600160a01b031663e3d94944611c1b613a26565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611c5157600080fd5b505af1158015611c65573d6000803e3d6000fd5b505050505b505050565b60005460ff1690565b600254600160a01b900460ff1681565b611c90613a22565b60005461010090046001600160a01b03908116911614611ce5576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038116611d33576040805162461bcd60e51b815260206004820152601060248201526f0e6cae892dce6eae4c2dcc6ca744060f60831b604482015290519081900360640190fd5b600380546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fb455053f0624a04600b7306c5437a9cc5dbec51cc7bec1f09796772eee95d2e39181900360200190a150565b600881565b611d94613a22565b60005461010090046001600160a01b03908116911614611de9576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b600254600160b01b900460ff16611e315760405162461bcd60e51b815260040180806020018281038252602b8152602001806149a0602b913960400191505060405180910390fd5b600380546001600160a01b0319908116909155600480548216905560058054821690556006805482169055600780548216905560088054821690556009805490911690556002805460ff60b01b191690556000611e8c6124a1565b9050611e966143e9565b604080516001600160a01b038316815290517f5b010b9640c9f82299355090c42f932a190e92309f6ed795380fa168c4446d419181900360200190a150565b6008546001600160a01b0316331480611ef857506009546001600160a01b031633145b611f335760405162461bcd60e51b815260040180806020018281038252602d815260200180614932602d913960400191505060405180910390fd5b6000611f3e86613ff5565b90508461202c57806001600160a01b031663f5298aca85836001600160a01b03166354f703f86040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8e57600080fd5b505afa158015611fa2573d6000803e3d6000fd5b505050506040513d6020811015611fb857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091526044820187905251606480830192600092919082900301818387803b15801561200f57600080fd5b505af1158015612023573d6000803e3d6000fd5b50505050612094565b806001600160a01b0316637e9d2ac1856040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561207b57600080fd5b505af115801561208f573d6000803e3d6000fd5b505050505b6004805460408051634175e52160e01b8152891515938101939093526024830186905260448301859052516001600160a01b0390911691634175e52191606480830192600092919082900301818387803b1580156120f157600080fd5b505af1158015612105573d6000803e3d6000fd5b50505050505050505050565b60006113d3826141ee565b7f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b6121486148ed565b6121506148ed565b60005b600381101561219b576000818152601260205260409020546001600160a01b031682826003811061218057fe5b6001600160a01b039092166020929092020152600101612153565b50905090565b60116020526000908152604090205460ff1681565b3360009081526001602052604090205460ff1661220b576040805162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b604482015290519081900360640190fd5b611620614495565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6003546001600160a01b031681565b61224e613a22565b60005461010090046001600160a01b039081169116146122a3576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b0381166122ee576040805162461bcd60e51b815260206004820152600d60248201526c0aed0d2e8ca98d2e6e8744060f609b1b604482015290519081900360640190fd5b6001600160a01b038116600081815260016020526040808220805460ff19169055517f9e9499495e2efd848d33cb197bde94612c1ec36f30605b60d445511e056069e19190a250565b61233f613a22565b60005461010090046001600160a01b03908116911614612394576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b0381166123de576040805162461bcd60e51b815260206004820152600c60248201526b0e6cae8acc2ead8e8744060f60a31b604482015290519081900360640190fd5b60038210612426576040805162461bcd60e51b815260206004820152601060248201526f0e6cae8acc2ead8e8744042d2dcc8caf60831b604482015290519081900360640190fd5b600082815260126020908152604080832080546001600160a01b0319166001600160a01b038616908117909155808452601383529281902060018601905580518581529182019290925281517f7f5d10afc9d4f61463db9789d8377dc00fa4f4766537eb41e1bcbb1fb6adc8eb929181900390910190a15050565b60005461010090046001600160a01b031690565b6124bd613a22565b60005461010090046001600160a01b03908116911614612512576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b03811661255a576040805162461bcd60e51b815260206004820152600a6024820152690e6cae8a0dcd8744060f60b31b604482015290519081900360640190fd5b600480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f88ba032772250acc5b02184579c073e706c46818fa418a4b8351908b67cfa6299181900360200190a150565b600481565b3360009081526013602052604090205480158015906125d3575060048111155b612614576040805162461bcd60e51b815260206004820152600d60248201526c10ab30bab63a20b230b83a37b960991b604482015290519081900360640190fd5b600454600654600019909201916001600160a01b03918216911660008060038510156127455786156126bf57826001600160a01b031663884d981288876040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561268c57600080fd5b505afa1580156126a0573d6000803e3d6000fd5b505050506040513d60208110156126b657600080fd5b50519150612740565b851561274057826001600160a01b031663884d981287876040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561271157600080fd5b505afa158015612725573d6000803e3d6000fd5b505050506040513d602081101561273b57600080fd5b505190505b61283b565b86156127c257826001600160a01b03166303e6f5cc886040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561278f57600080fd5b505afa1580156127a3573d6000803e3d6000fd5b505050506040513d60208110156127b957600080fd5b5051915061283b565b851561283b57826001600160a01b03166303e6f5cc876040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561280c57600080fd5b505afa158015612820573d6000803e3d6000fd5b505050506040513d602081101561283657600080fd5b505190505b600f5460408051639ecf47c160e01b815260048101859052602481018490526001600160a01b039283166044820152905191861691639ecf47c19160648082019260009290919082900301818387803b15801561289757600080fd5b505af11580156128ab573d6000803e3d6000fd5b50505050826001600160a01b03166365b68d516040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156128ea57600080fd5b505af11580156128fe573d6000803e3d6000fd5b505050506040513d602081101561291457600080fd5b505115611c6557836001600160a01b031663e3d94944612932613a26565b6040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561296857600080fd5b505af115801561297c573d6000803e3d6000fd5b5050505050505050505050565b612991613a22565b60005461010090046001600160a01b039081169116146129e6576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038116612a39576040805162461bcd60e51b81526020600482015260156024820152740e6cae888cae0dee6d2e890c2dcc8d8cae4744060f605b1b604482015290519081900360640190fd5b600780546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa6b7402f6ee9ac18beddf377e998056aed4b27a41ba0c7fa912c0b8d106a3e2a9181900360200190a150565b60016020526000908152604090205460ff1681565b6007546001600160a01b031681565b6014602052600090815260409020546001600160a01b031681565b7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c81565b612af8613a22565b60005461010090046001600160a01b03908116911614612b4d576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038116612b9c576040805162461bcd60e51b81526020600482015260116024820152700e6cae886eae4eccaacc2ead8e8744060f607b1b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b03831690811790915560008181526013602090815260409182902060049055815192835290517f40330b54633a95e4fc9b2067c98757db97fe718654800ed18cd1b7c1dde8f7479281900390910190a150565b600254600160a01b900460ff168015612c2d57503260009081526011602052604090205460ff16155b15612c7a576001600160a01b0381163214612c7a576040805162461bcd60e51b8152602060048201526008602482015267454f41206f6e6c7960c01b604482015290519081900360640190fd5b50565b612c85613a22565b60005461010090046001600160a01b03908116911614612cda576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038216600081815260116020908152604091829020805460ff191685151590811790915582519384529083015280517fe96e151fb4e39ab8ece2437dec067abb2b8f122089211e16960e866ebdf4c18c9281900390910190a15050565b612d466148ed565b610e73614516565b600a5481565b6012602052600090815260409020546001600160a01b031681565b61271081565b612d7d613a22565b60005461010090046001600160a01b03908116911614612dd2576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b03821615801590612df257506001600160a01b03811615155b612e3c576040805162461bcd60e51b81526020600482015260166024820152750e6cae8aed2e8d0c8e4c2ee90c2dcc8d8cae4744060f60531b604482015290519081900360640190fd5b600880546001600160a01b038085166001600160a01b031992831681179093556009805491851691909216811790915560408051928352602083019190915280517fa0ff2d53ae9ab58f2cd0cc1fb64b0c198803e1dbc006ca8f87150781c34048069281900390910190a15050565b6006546001600160a01b031681565b6005546001600160a01b031681565b3360009081526001602052604090205460ff16612f1e576040805162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b604482015290519081900360640190fd5b612f266148ed565b600554604051632126201360e11b8152600481018581526001600160a01b039092169163424c4026918691869160240182606080838360005b83811015612f77578181015183820152602001612f5f565b5050505090500192505050606060405180830381600087803b158015612f9c57600080fd5b505af1158015612fb0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506060811015612fd557600080fd5b506040518481529091507f5fa91bdf23b8b21c94b98ca463fe192bf3a5019409d47909fa0b98dfb64987ab908490839085906020810183606080838360005b8381101561302c578181015183820152602001613014565b5050505090500182600360200280838360005b8381101561305757818101518382015260200161303f565b50505050905001935050505060405180910390a1505050565b6002546001600160a01b031681565b7f00000000000000000000000000000000000000000000000000000000000f424081565b6000806130af84613ff5565b9050806001600160a01b031663742978da846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156130fe57600080fd5b505afa158015613112573d6000803e3d6000fd5b505050506040513d602081101561312857600080fd5b505191508161316b576040805162461bcd60e51b815260206004820152600a602482015269085b5a5b905b5bdd5b9d60b21b604482015290519081900360640190fd5b5092915050565b601281565b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b600254600160b01b900460ff1681565b60048054604080516352391f1760e11b815290516060936000936001600160a01b03169263a4723e2e9281830192602092829003018186803b1580156131f057600080fd5b505afa158015613204573d6000803e3d6000fd5b505050506040513d602081101561321a57600080fd5b50516003546040805163276765bb60e11b81526004810184905290519293506001600160a01b0390911691634ececb7691602480820192600092909190829003018186803b15801561326b57600080fd5b505afa15801561327f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156132a857600080fd5b81019080805160405193929190846401000000008211156132c857600080fd5b9083019060208201858111156132dd57600080fd5b82518660208202830111640100000000821117156132fa57600080fd5b82525081516020918201928201910280838360005b8381101561332757818101518382015260200161330f565b5050505090500160405250505091505090565b600681565b7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b6010546001600160a01b031681565b61337a613a22565b60005461010090046001600160a01b039081169116146133cf576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b03811661341a576040805162461bcd60e51b815260206004820152600d60248201526c0aed0d2e8ca98d2e6e8744060f609b1b604482015290519081900360640190fd5b6001600160a01b0381166000818152600160208190526040808320805460ff1916909217909155517f4e3d8c117d484081f7268ed79cded71ad42979b92feb5f8f7f9824ac5cbfe3759190a250565b613471613a22565b60005461010090046001600160a01b039081169116146134c6576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b038116613511576040805162461bcd60e51b815260206004820152600d60248201526c0e6cae8a4caeec2e4c8744060f609b1b604482015290519081900360640190fd5b600f80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f89b988499f10a211a37c87285cc777f5b63ff3c638af96ec1da38d44cc91da259181900360200190a150565b3360009081526001602052604090205460ff166135ba576040805162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b604482015290519081900360640190fd5b60038111156135ff576040805162461bcd60e51b815260206004820152600c60248201526b34b73b30b634b21031b7b4b760a11b604482015290519081900360640190fd5b613607611c6f565b61361357613613614495565b6002805460ff60a81b1916600160a81b17905560038110156136d7576136376148ed565b61271081836003811061364657fe5b6020020152600354604051638a5495a360e01b81526001600160a01b0390911690638a5495a39083906004018082606080838360005b8381101561369457818101518382015260200161367c565b50505050905001915050600060405180830381600087803b1580156136b857600080fd5b505af11580156136cc573d6000803e3d6000fd5b505050600a83905550505b6004805460408051632afa129d60e11b815290516001600160a01b03909216926355f4253a92828201926000929082900301818387803b1580156111bb57600080fd5b6305f5e10081565b670de0b6b3a764000081565b613736613a22565b60005461010090046001600160a01b0390811691161461378b576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b60025460ff600160b01b90910416151581151514156137f1576040805162461bcd60e51b815260206004820181905260248201527f7072657061726552656e6f756e63654f776e6572736869703a20737461747573604482015290519081900360640190fd5b60408051821515815290517fbe363c149a958057c9f858923a2066b32b370abd767deb4376d14b5713c0233d9181900360200190a160028054911515600160b01b0260ff60b01b19909216919091179055565b61384c613a22565b60005461010090046001600160a01b039081169116146138a1576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b604080516001600160a01b038316815290517f34c04e418602e2d385d3486f523f5caa03a5b9254c44aa32f5d085a1580c9c2c9181900360200190a1601080546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000f424081565b6009546001600160a01b031681565b61393a613a22565b60005461010090046001600160a01b0390811691161461398f576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6010546001600160a01b03166139e4576040805162461bcd60e51b81526020600482015260156024820152740e8e4c2dce6cccae49eeedccae4e6d0d2e0744060f605b1b604482015290519081900360640190fd5b6010546139f9906001600160a01b031661459d565b50601080546001600160a01b0319169055565b600254600160a81b900460ff1681565b600d5481565b3390565b6006546040805163aff1d8e560e01b815290516000926001600160a01b03169163aff1d8e5916004808301926020929190829003018186803b158015613a6b57600080fd5b505afa158015613a7f573d6000803e3d6000fd5b505050506040513d6020811015613a9557600080fd5b5051613adc576040805162461bcd60e51b81526020600482015260116024820152702162756f792e736166657479436865636b60781b604482015290519081900360640190fd5b613ae46148ed565b600560009054906101000a90046001600160a01b03166001600160a01b03166367e4ac2c6040518163ffffffff1660e01b815260040160606040518083038186803b158015613b3257600080fd5b505afa158015613b46573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506060811015613b6b57600080fd5b509050613b766148ed565b60005b6003811015613c2f576000818152601260209081526040918290205482516278744560e21b81529251613c16936001600160a01b03909216926301e1d1149260048082019391829003018186803b158015613bd357600080fd5b505afa158015613be7573d6000803e3d6000fd5b505050506040513d6020811015613bfd57600080fd5b5051848360038110613c0b57fe5b6020020151906142eb565b828260038110613c2257fe5b6020020152600101613b79565b50600254604080516278744560e21b815290516000926001600160a01b0316916301e1d114916004808301926020929190829003018186803b158015613c7457600080fd5b505afa158015613c88573d6000803e3d6000fd5b505050506040513d6020811015613c9e57600080fd5b50516006546040516366c2bdcf60e01b8152919250613d51916001600160a01b03909116906366c2bdcf9085906001906004018083606080838360005b83811015613cf3578181015183820152602001613cdb565b5050505090500182151581526020019250505060206040518083038186803b158015613d1e57600080fd5b505afa158015613d32573d6000803e3d6000fd5b505050506040513d6020811015613d4857600080fd5b505182906142eb565b90506000600660009054906101000a90046001600160a01b03166001600160a01b031663e25aa5fa6040518163ffffffff1660e01b815260040160206040518083038186803b158015613da357600080fd5b505afa158015613db7573d6000803e3d6000fd5b505050506040513d6020811015613dcd57600080fd5b50519050613de7670de0b6b3a76400006117c3848461434e565b94505050505090565b6006546000906001600160a01b031681805b6003811015613fee57600a548114613fe6576000613e1f826146a5565b90506000613e2c8361472a565b905060008290506000866001600160a01b031663f91d443f866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015613e7957600080fd5b505afa158015613e8d573d6000803e3d6000fd5b505050506040513d6020811015613ea357600080fd5b5051600554604080516370a0823160e01b81526001600160a01b0392831660048201529051929350600092613fa6928616916370a08231916024808301926020929190829003018186803b158015613efa57600080fd5b505afa158015613f0e573d6000803e3d6000fd5b505050506040513d6020811015613f2457600080fd5b50516000888152601260209081526040918290205482516278744560e21b815292516001600160a01b03909116926301e1d114926004808301939192829003018186803b158015613f7457600080fd5b505afa158015613f88573d6000803e3d6000fd5b505050506040513d6020811015613f9e57600080fd5b5051906142eb565b9050613fba6305f5e1006117c3838561434e565b9050613fd2846117c383670de0b6b3a764000061434e565b9050613fde87826142eb565b965050505050505b600101613e02565b5091505090565b6000811561402457507f000000000000000000000000f0a93d4994b3d98fb5e3a2f90dbc2d69073cb86b6113d6565b507f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6113d6565b60005460ff16614099576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6140cc613a22565b604080516001600160a01b039092168252519081900360200190a1565b60006141636140f86001613ff5565b6001600160a01b03166301e1d1146040518163ffffffff1660e01b815260040160206040518083038186803b15801561413057600080fd5b505afa158015614144573d6000803e3d6000fd5b505050506040513d602081101561415a57600080fd5b505183906142eb565b600c546141e690612710906117c39061417c6000613ff5565b6001600160a01b03166301e1d1146040518163ffffffff1660e01b815260040160206040518083038186803b1580156141b457600080fd5b505afa1580156141c8573d6000803e3d6000fd5b505050506040513d60208110156141de57600080fd5b50519061434e565b101592915050565b60006141fa6001613ff5565b6001600160a01b03166301e1d1146040518163ffffffff1660e01b815260040160206040518083038186803b15801561423257600080fd5b505afa158015614246573d6000803e3d6000fd5b505050506040513d602081101561425c57600080fd5b5051600b546141e690612710906117c3906142e58761427b6000613ff5565b6001600160a01b03166301e1d1146040518163ffffffff1660e01b815260040160206040518083038186803b1580156142b357600080fd5b505afa1580156142c7573d6000803e3d6000fd5b505050506040513d60208110156142dd57600080fd5b5051906147af565b9061434e565b600082820183811015614345576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60008261435d57506000614348565b8282028284828161436a57fe5b04146143455760405162461bcd60e51b815260040180806020018281038252602181526020018061495f6021913960400191505060405180910390fd5b600061434583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506147f1565b6143f1613a22565b60005461010090046001600160a01b03908116911614614446576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b60005460ff16156144e0576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586140cc613a22565b61451e6148ed565b6001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f811682527f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48811660208301527f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec716604082015290565b6145a5613a22565b60005461010090046001600160a01b039081169116146145fa576040805162461bcd60e51b81526020600482018190526024820152600080516020614980833981519152604482015290519081900360640190fd5b6001600160a01b03811661463f5760405162461bcd60e51b815260040180806020018281038252602681526020018061490c6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000816146d357507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6113d6565b816001141561470357507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486113d6565b507f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec76113d6565b60008161475857507f0000000000000000000000000000000000000000000000000de0b6b3a76400006113d6565b816001141561478857507f00000000000000000000000000000000000000000000000000000000000f42406113d6565b507f00000000000000000000000000000000000000000000000000000000000f42406113d6565b600061434583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614893565b6000818361487d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561484257818101518382015260200161482a565b50505050905090810190601f16801561486f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161488957fe5b0495945050505050565b600081848411156148e55760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561484257818101518382015260200161482a565b505050900390565b6040518060600160405280600390602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573736275726e47546f6b656e3a2021776974686472617748616e646c65727c656d657267656e637948616e646c6572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657272656e6f756e63654f776e6572736869703a202170656e64696e674f776e65727368697052656d6f76616ca26469706673582212201d5d433f11c5d2a652dabe274dfd55fe9dca28b9888fe79fce527c20a241260e64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f0a93d4994b3d98fb5e3a2f90dbc2d69073cb86b0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000000000000000000000000000000f4240
-----Decoded View---------------
Arg [0] : pwrd (address): 0xF0a93d4994B3d98Fb5e3A2F90dBc2d69073Cb86b
Arg [1] : gvt (address): 0x3ADb04E127b9C0a5D36094125669d4603AC52a0c
Arg [2] : _tokens (address[3]): 0x6B175474E89094C44Da98b954EedeAC495271d0F,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [3] : _decimals (uint256[3]): 1000000000000000000,1000000,1000000
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 000000000000000000000000f0a93d4994b3d98fb5e3a2f90dbc2d69073cb86b
Arg [1] : 0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c
Arg [2] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [3] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [4] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [5] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [6] : 00000000000000000000000000000000000000000000000000000000000f4240
Arg [7] : 00000000000000000000000000000000000000000000000000000000000f4240
Deployed Bytecode Sourcemap
35176:15895:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40828:259;;;;;;;;;;;;;;;;-1:-1:-1;40828:259:0;-1:-1:-1;;;;;40828:259:0;;:::i;:::-;;42785:147;;;:::i;:::-;;;;;;;;;;;;;;;;49090:346;;;;;;;;;;;;;;;;-1:-1:-1;49090:346:0;;;;;-1:-1:-1;;;;;49090:346:0;;;;;;;;;;:::i;46751:281::-;;;;;;;;;;;;;;;;-1:-1:-1;46751:281:0;:::i;35914:40::-;;;:::i;35716:39::-;;;:::i;:::-;;;;-1:-1:-1;;;;;35716:39:0;;;;;;;;;;;;;;26307:28;;;:::i;42310:279::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;42310:279:0;;;;;;;;;;:::i;35868:39::-;;;:::i;36008:43::-;;;:::i;41668:135::-;;;;;;;;;;;;;;;;-1:-1:-1;41668:135:0;;;;:::i;43287:133::-;;;;;;;;;;;;;;;;-1:-1:-1;43287:133:0;;;;:::i;36059:30::-;;;:::i;42597:180::-;;;;;;;;;;;;;;;;-1:-1:-1;42597:180:0;;;;;;;;;:::i;22688:87::-;;;:::i;41811:289::-;;;;;;;;;;;;;;;;-1:-1:-1;41811:289:0;;;;;;;:::i;22155:33::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35559:27;;;:::i;36253:47::-;;;;;;;;;;;;;;;;-1:-1:-1;36253:47:0;-1:-1:-1;;;;;36253:47:0;;:::i;37739:67::-;;;:::i;43428:838::-;;;;;;;;;;;;;;;;-1:-1:-1;43428:838:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;39840:125;;;:::i;42940:339::-;;;:::i;50366:231::-;;;;;;;;;;;;;;;;-1:-1:-1;50366:231:0;;:::i;36377:54::-;;;;;;;;;;;;;;;;-1:-1:-1;36377:54:0;;;;:::i;50605:227::-;;;;;;;;;;;;;;;;-1:-1:-1;50605:227:0;;:::i;48051:439::-;;;;;;;;;;;;;;;;-1:-1:-1;48051:439:0;;:::i;20918:78::-;;;:::i;35392:33::-;;;:::i;41095:209::-;;;;;;;;;;;;;;;;-1:-1:-1;41095:209:0;-1:-1:-1;;;;;41095:209:0;;:::i;22332:50::-;;;:::i;38081:552::-;;;:::i;48498:584::-;;;;;;;;;;;;;;;;-1:-1:-1;48498:584:0;;;;;;;;;;;;-1:-1:-1;;;;;48498:584:0;;;;;;;;;;;;;;;:::i;50221:137::-;;;;;;;;;;;;;;;;-1:-1:-1;50221:137:0;;:::i;24924:37::-;;;:::i;39973:254::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36132:45;;;;;;;;;;;;;;;;-1:-1:-1;36132:45:0;-1:-1:-1;;;;;36132:45:0;;:::i;37664:67::-;;;:::i;24848:29::-;;;:::i;35518:33::-;;;:::i;28017:203::-;;;;;;;;;;;;;;;;-1:-1:-1;28017:203:0;-1:-1:-1;;;;;28017:203:0;;:::i;40235:310::-;;;;;;;;;;;;;;;;-1:-1:-1;40235:310:0;;;;;;-1:-1:-1;;;;;40235:310:0;;:::i;1902:79::-;;;:::i;41312:161::-;;;;;;;;;;;;;;;;-1:-1:-1;41312:161:0;-1:-1:-1;;;;;41312:161:0;;:::i;22490:45::-;;;:::i;47040:1003::-;;;;;;;;;;;;;;;;-1:-1:-1;47040:1003:0;;;;;;;:::i;39451:249::-;;;;;;;;;;;;;;;;-1:-1:-1;39451:249:0;-1:-1:-1;;;;;39451:249:0;;:::i;27544:41::-;;;;;;;;;;;;;;;;-1:-1:-1;27544:41:0;-1:-1:-1;;;;;27544:41:0;;:::i;35671:38::-;;;:::i;36309:53::-;;;;;;;;;;;;;;;;-1:-1:-1;36309:53:0;-1:-1:-1;;;;;36309:53:0;;:::i;26342:27::-;;;:::i;40553:267::-;;;;;;;;;;;;;;;;-1:-1:-1;40553:267:0;-1:-1:-1;;;;;40553:267:0;;:::i;44564:192::-;;;;;;;;;;;;;;;;-1:-1:-1;44564:192:0;-1:-1:-1;;;;;44564:192:0;;:::i;41481:179::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41481:179:0;;;;;;;;;;:::i;39708:124::-;;;:::i;35811:42::-;;;:::i;36185:60::-;;;;;;;;;;;;;;;;-1:-1:-1;36185:60:0;;:::i;22542:84::-;;;:::i;39058:385::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39058:385:0;;;;;;;;;;:::i;35635:28::-;;;:::i;35594:33::-;;;:::i;44274:282::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44274:282:0;;-1:-1:-1;44274:282:0;;-1:-1:-1;;;;44274:282:0:i;35348:34::-;;;:::i;24969:38::-;;;:::i;49444:237::-;;;;;;;;;;;;;;;;-1:-1:-1;49444:237:0;;;;;;;;-1:-1:-1;;;;;49444:237:0;;:::i;22195:43::-;;;:::i;24885:29::-;;;:::i;35474:35::-;;;:::i;50840:228::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22633:48;;;:::i;24812:28::-;;;:::i;36096:27::-;;;:::i;27817:192::-;;;;;;;;;;;;;;;;-1:-1:-1;27817:192:0;-1:-1:-1;;;;;27817:192:0;;:::i;42108:194::-;;;;;;;;;;;;;;;;-1:-1:-1;42108:194:0;-1:-1:-1;;;;;42108:194:0;;:::i;46248:495::-;;;;;;;;;;;;;;;;-1:-1:-1;46248:495:0;;:::i;22389:94::-;;;:::i;22246:79::-;;;:::i;37814:259::-;;;;;;;;;;;;;;;;-1:-1:-1;37814:259:0;;;;:::i;38641:167::-;;;;;;;;;;;;;;;;-1:-1:-1;38641:167:0;-1:-1:-1;;;;;38641:167:0;;:::i;25015:38::-;;;:::i;35762:40::-;;;:::i;38816:234::-;;;;;;;;;;;;;;;;-1:-1:-1;38816:234:0;-1:-1:-1;;;;;38816:234:0;;:::i;35432:35::-;;;:::i;35963:37::-;;;:::i;40828:259::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40908:24:0;::::1;40900:53;;;::::0;;-1:-1:-1;;;40900:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40900:53:0;;;;;;;;;;;;;::::1;;40964:9;:22:::0;;-1:-1:-1;;;;;;40964:22:0::1;-1:-1:-1::0;;;;;40964:22:0;::::1;::::0;;::::1;::::0;;;41004:32:::1;::::0;;-1:-1:-1;;;41004:32:0;;;;:30:::1;::::0;:32:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;40964:22;41004:32;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;41004:32:0;40997:4:::1;:39:::0;;-1:-1:-1;;;;;;40997:39:0::1;-1:-1:-1::0;;;;;40997:39:0;;::::1;;::::0;;41052:27:::1;::::0;;;;::::1;::::0;;;::::1;::::0;41004:32:::1;41052:27:::0;;;;;;::::1;40828:259:::0;:::o;42785:147::-;42867:14;;42840:7;;-1:-1:-1;;;42867:14:0;;;;:57;;42910:14;:12;:14::i;:::-;42867:57;;;42884:23;:21;:23::i;:::-;42860:64;;42785:147;;:::o;49090:346::-;49239:14;;-1:-1:-1;;;;;49239:14:0;49225:10;:28;49217:68;;;;;-1:-1:-1;;;49217:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;49296:9;49308:13;49316:4;49308:7;:13::i;:::-;49296:25;;49332:2;-1:-1:-1;;;;;49332:7:0;;49340;49349:2;-1:-1:-1;;;;;49349:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49349:11:0;49332:37;;;-1:-1:-1;;;;;;49332:37:0;;;;;;;-1:-1:-1;;;;;49332:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49332:37:0;;;;;;;-1:-1:-1;49332:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49385:3:0;;;49380:48;;;-1:-1:-1;;;49380:48:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49385:3:0;;;;-1:-1:-1;49380:34:0;;-1:-1:-1;49380:48:0;;;;;49385:3;;49380:48;;;;;;;49385:3;;49380:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49090:346;;;;:::o;46751:281::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;21512:7:::1;::::0;::::1;;21504:40;;;::::0;;-1:-1:-1;;;21504:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;21504:40:0;;;;;;;;;;;;;::::1;;46848:10:::2;:8;:10::i;:::-;22187:1;46869:8;:18:::0;;;46898:14:::2;:22:::0;;-1:-1:-1;;;;46898:22:0::2;::::0;;46944:9;46933:61:::2;::::0;-1:-1:-1;;;46933:61:0;;-1:-1:-1;;;;;46944:9:0;;::::2;::::0;46933:48:::2;::::0;46982:11;;46933:61:::2;;::::0;46982:11;46933:61;;46982:11;46933:61;::::2;;::::0;;::::2;::::0;;;::::2;::::0;::::2;::::0;;::::2;-1:-1:-1::0;;46933:61:0::2;::::0;;::::2;::::0;-1:-1:-1;46933:61:0;;-1:-1:-1;;46933:61:0;;::::2;::::0;;;;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;47010:3:0::2;::::0;;47005:19:::2;::::0;;-1:-1:-1;;;47005:19:0;;;;-1:-1:-1;;;;;47010:3:0;;::::2;::::0;-1:-1:-1;47005:17:0::2;::::0;-1:-1:-1;47005:19:0;;::::2;::::0;47010:3:::2;::::0;47005:19;;;;;;47010:3;;47005:19;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;46751:281:::0;:::o;35914:40::-;;;;:::o;35716:39::-;;;-1:-1:-1;;;;;35716:39:0;;:::o;26307:28::-;;;:::o;42310:279::-;42417:14;;-1:-1:-1;;;;;42417:14:0;42403:10;:28;42395:56;;;;;-1:-1:-1;;;42395:56:0;;;;;;;;;;;;-1:-1:-1;;;42395:56:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42466:22:0;;;;;;:58;;-1:-1:-1;;;;;;42492:18:0;;;42522:1;42492:18;;;:9;:18;;;;;;;:32;42466:58;42462:120;;;-1:-1:-1;;;;;42541:18:0;;;;;;;:9;:18;;;;;:29;;-1:-1:-1;;;;;;42541:29:0;;;;;;;;;;42462:120;42310:279;;:::o;35868:39::-;;;;:::o;36008:43::-;;;;:::o;41668:135::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;41733:21:::1;:29:::0;;;::::1;;-1:-1:-1::0;;;41733:29:0;::::1;-1:-1:-1::0;;;;41733:29:0;;::::1;::::0;;;::::1;::::0;;;41778:17:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;41668:135:::0;:::o;43287:133::-;43348:7;43375:6;:37;;43408:3;43375:37;;;43392:4;43375:37;43368:44;;43287:133;;;;:::o;36059:30::-;;;-1:-1:-1;;;;;36059:30:0;;:::o;42597:180::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;42680:19;::::1;;;::::0;;;:13:::1;:19;::::0;;;;;;;;:28;;;42724:45;;42744:10:::1;42724:45:::0;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;42597:180:::0;;:::o;22688:87::-;22742:33;22688:87;:::o;41811:289::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;41926:1:::1;41915:8;:12;41907:41;;;::::0;;-1:-1:-1;;;41907:41:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41907:41:0;;;;;;;;;;;;;::::1;;41959:16;:27:::0;;;41997:24:::1;:36:::0;;;42049:43:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;41811:289:::0;;:::o;22155:33::-;22187:1;22155:33;:::o;35559:27::-;;;-1:-1:-1;;;;;35559:27:0;;:::o;36253:47::-;;;;;;;;;;;;;:::o;37739:67::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;37788:10:::1;:8;:10::i;:::-;37739:67::o:0;43428:838::-;43559:4;43580:7;:15;;;;;43591:4;43580:15;43576:247;;;43620:27;43640:6;43620:19;:27::i;:::-;43612:71;;;;;-1:-1:-1;;;43612:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43576:247;;;43706:4;43705:5;:17;;;;;43715:7;43714:8;43705:17;43701:122;;;43747:28;43768:6;43747:20;:28::i;:::-;43739:72;;;;;-1:-1:-1;;;43739:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43846:24;;43837:6;:33;43833:426;;;-1:-1:-1;43894:5:0;43887:12;;43833:426;43979:3;;;43974:19;;;-1:-1:-1;;;43974:19:0;;;;43933:17;;;;-1:-1:-1;;;;;43979:3:0;;43974:17;;:19;;;;;;;;;;;;43979:3;43974:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43974:19:0;;;;;;;;;-1:-1:-1;43974:19:0;-1:-1:-1;44008:14:0;44025:25;43974:19;;44025:14;:25::i;:::-;44008:42;;44078:6;44069;:15;44065:183;;;44112:4;44105:11;;;;;;;44065:183;44184:16;;44173:59;;22594:32;;44173:28;;:6;;:10;:28::i;:::-;:32;;:59::i;:::-;44164:6;:68;44157:75;;;;;43833:426;43428:838;;;;;:::o;39840:125::-;39936:9;;39925:32;;;-1:-1:-1;;;39925:32:0;;;;39898:7;;-1:-1:-1;;;;;39936:9:0;;39925:30;;:32;;;;;;;;;;;;;;39936:9;39925:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39925:32:0;;-1:-1:-1;39840:125:0;:::o;42940:339::-;42999:7;43020:17;43039:18;43066:3;;;;;;;;;-1:-1:-1;;;;;43066:3:0;-1:-1:-1;;;;;43061:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43061:19:0;;;;;;;;;-1:-1:-1;43061:19:0;-1:-1:-1;43095:10:0;-1:-1:-1;;;;;43117:3:0;43095:26;;43091:75;;;-1:-1:-1;43145:9:0;-1:-1:-1;43138:16:0;;43091:75;43180:10;-1:-1:-1;;;;;43202:4:0;43180:27;;43176:77;;;43231:10;-1:-1:-1;43224:17:0;;-1:-1:-1;43224:17:0;43176:77;43270:1;43263:8;;;;42940:339;:::o;50366:231::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;50470:25:::1;:54:::0;;;50540:49:::1;::::0;;;;;;;50556:4:::1;::::0;50540:49:::1;::::0;;;;;::::1;::::0;;::::1;50366:231:::0;:::o;36377:54::-;;;;;;;;;;;;;:::o;50605:227::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;50707:24:::1;:52:::0;;;50775:49:::1;::::0;;;;;;;50791:5:::1;::::0;50775:49:::1;::::0;;;;;::::1;::::0;;::::1;50605:227:::0;:::o;48051:439::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;48145:3:::1;::::0;48180:4:::1;::::0;48200:14:::1;::::0;-1:-1:-1;;;;;48145:3:0;;::::1;::::0;48180:4;;::::1;::::0;-1:-1:-1;;;48200:14:0;::::1;;;48196:287;;;48231:4;-1:-1:-1::0;;;;;48231:26:0::1;;48258:23;:21;:23::i;:::-;48231:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48196:287;;;48333:5;-1:-1:-1::0;;;;;48333:31:0::1;;48365:9;48333:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;48333:42:0;48329:143:::1;;;48414:4;-1:-1:-1::0;;;;;48414:26:0::1;;48441:14;:12;:14::i;:::-;48414:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;48329:143;2184:1;;48051:439:::0;:::o;20918:78::-;20957:4;20981:7;;;20918:78;:::o;35392:33::-;;;-1:-1:-1;;;35392:33:0;;;;;:::o;41095:209::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41175:24:0;::::1;41167:53;;;::::0;;-1:-1:-1;;;41167:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41167:53:0;;;;;;;;;;;;;::::1;;41231:9;:22:::0;;-1:-1:-1;;;;;41231:22:0;::::1;-1:-1:-1::0;;;;;;41231:22:0;;::::1;::::0;::::1;::::0;;;41269:27:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;41095:209:::0;:::o;22332:50::-;22381:1;22332:50;:::o;38081:552::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;38155:23:::1;::::0;-1:-1:-1;;;38155:23:0;::::1;;;38147:79;;;;-1:-1:-1::0;;;38147:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38237:9;:22:::0;;-1:-1:-1;;;;;;38237:22:0;;::::1;::::0;;;38270:3:::1;:16:::0;;;::::1;::::0;;38297:9:::1;:22:::0;;;::::1;::::0;;38330:4:::1;:17:::0;;;::::1;::::0;;38358:14:::1;:27:::0;;;::::1;::::0;;38396:15:::1;:28:::0;;;::::1;::::0;;38435:16:::1;:29:::0;;;;::::1;::::0;;38475:23:::1;:31:::0;;-1:-1:-1;;;;38475:31:0::1;::::0;;38257:1:::1;38537:7;:5;:7::i;:::-;38517:27;;38555:25;:23;:25::i;:::-;38596:29;::::0;;-1:-1:-1;;;;;38596:29:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;2184:1;38081:552::o:0;48498:584::-;48704:15;;-1:-1:-1;;;;;48704:15:0;48690:10;:29;;:63;;-1:-1:-1;48737:16:0;;-1:-1:-1;;;;;48737:16:0;48723:10;:30;48690:63;48668:158;;;;-1:-1:-1;;;48668:158:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48837:9;48849:13;48857:4;48849:7;:13::i;:::-;48837:25;;48878:3;48873:126;;48898:2;-1:-1:-1;;;;;48898:7:0;;48906;48915:2;-1:-1:-1;;;;;48915:9:0;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48915:11:0;48898:37;;;-1:-1:-1;;;;;;48898:37:0;;;;;;;-1:-1:-1;;;;;48898:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48898:37:0;;;;;;;-1:-1:-1;48898:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48873:126;;;48968:2;-1:-1:-1;;;;;48968:10:0;;48979:7;48968:19;;;;;;;;;;;;;-1:-1:-1;;;;;48968:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48873:126;49024:3;;;49019:55;;;-1:-1:-1;;;49019:55:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;49024:3:0;;;;49019:34;;:55;;;;;49024:3;;49019:55;;;;;;;49024:3;;49019:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48498:584;;;;;;:::o;50221:137::-;50298:4;50322:28;50343:6;50322:20;:28::i;24924:37::-;;;:::o;39973:254::-;40023:23;;:::i;:::-;40059:30;;:::i;:::-;40105:9;40100:96;22187:1;40120:11;;40100:96;;;40165:19;;;;:16;:19;;;;;;-1:-1:-1;;;;;40165:19:0;40153:6;40182:1;40153:9;;;;;;;-1:-1:-1;;;;;40153:31:0;;;:9;;;;;;:31;40133:3;;40100:96;;;-1:-1:-1;40213:6:0;-1:-1:-1;39973:254:0;:::o;36132:45::-;;;;;;;;;;;;;;;:::o;37664:67::-;27759:10;27749:21;;;;:9;:21;;;;;;;;27741:48;;;;;-1:-1:-1;;;27741:48:0;;;;;;;;;;;;-1:-1:-1;;;27741:48:0;;;;;;;;;;;;;;;37715:8:::1;:6;:8::i;24848:29::-:0;;;:::o;35518:33::-;;;-1:-1:-1;;;;;35518:33:0;;:::o;28017:203::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28098:18:0;::::1;28090:44;;;::::0;;-1:-1:-1;;;28090:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28090:44:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;28145:15:0;::::1;28163:5;28145:15:::0;;;:9:::1;:15;::::0;;;;;:23;;-1:-1:-1;;28145:23:0::1;::::0;;28184:28;::::1;::::0;28163:5;28184:28:::1;28017:203:::0;:::o;40235:310::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40321:19:0;::::1;40313:44;;;::::0;;-1:-1:-1;;;40313:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40313:44:0;;;;;;;;;;;;;::::1;;22187:1;40376:15:::0;::::1;40368:44;;;::::0;;-1:-1:-1;;;40368:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40368:44:0;;;;;;;;;;;;;::::1;;40423:23;::::0;;;:16:::1;:23;::::0;;;;;;;:31;;-1:-1:-1;;;;;;40423:31:0::1;-1:-1:-1::0;;;;;40423:31:0;::::1;::::0;;::::1;::::0;;;40465:19;;;:12:::1;:19:::0;;;;;;-1:-1:-1;40487:9:0;::::1;40465:31:::0;;40512:25;;;;;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;40235:310:::0;;:::o;1902:79::-;1940:7;1967:6;;;;-1:-1:-1;;;;;1967:6:0;;1902:79::o;41312:161::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41380:18:0;::::1;41372:41;;;::::0;;-1:-1:-1;;;41372:41:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;41372:41:0;;;;;;;;;;;;;::::1;;41424:3;:10:::0;;-1:-1:-1;;;;;41424:10:0;::::1;-1:-1:-1::0;;;;;;41424:10:0;;::::1;::::0;::::1;::::0;;;41450:15:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;41312:161:::0;:::o;22490:45::-;22534:1;22490:45;:::o;47040:1003::-;47162:10;47133:13;47149:24;;;:12;:24;;;;;;47192:9;;;;;:33;;-1:-1:-1;47214:11:0;47205:20;;;47192:33;47184:59;;;;;-1:-1:-1;;;47184:59:0;;;;;;;;;;;;-1:-1:-1;;;47184:59:0;;;;;;;;;;;;;;;47271:3;;47306:4;;-1:-1:-1;;47382:9:0;;;;-1:-1:-1;;;;;47271:3:0;;;;47306:4;47254:9;;22187:1;47406:15;;47402:437;;;47442:8;;47438:196;;47481:5;-1:-1:-1;;;;;47481:23:0;;47505:4;47511:5;47481:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47481:36:0;;-1:-1:-1;47438:196:0;;;47543:8;;47539:95;;47582:5;-1:-1:-1;;;;;47582:23:0;;47606:4;47612:5;47582:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47582:36:0;;-1:-1:-1;47539:95:0;47402:437;;;47670:8;;47666:162;;47709:5;-1:-1:-1;;;;;47709:13:0;;47723:4;47709:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47709:19:0;;-1:-1:-1;47666:162:0;;;47754:8;;47750:78;;47793:5;-1:-1:-1;;;;;47793:13:0;;47807:4;47793:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47793:19:0;;-1:-1:-1;47750:78:0;47899:6;;47849:57;;;-1:-1:-1;;;47849:57:0;;;;;;;;;;;;;;-1:-1:-1;;;;;47899:6:0;;;47849:57;;;;;;:31;;;;;;:57;;;;;47899:6;;47849:57;;;;;;;;47899:6;47849:31;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47931:5;-1:-1:-1;;;;;47931:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47931:20:0;47927:109;;;47982:4;-1:-1:-1;;;;;47982:26:0;;48009:14;:12;:14::i;:::-;47982:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47040:1003;;;;;;;:::o;39451:249::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;39541:29:0;::::1;39533:63;;;::::0;;-1:-1:-1;;;39533:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;39533:63:0;;;;;;;;;;;;;::::1;;39607:14;:32:::0;;-1:-1:-1;;;;;39607:32:0;::::1;-1:-1:-1::0;;;;;;39607:32:0;;::::1;::::0;::::1;::::0;;;39655:37:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;39451:249:::0;:::o;27544:41::-;;;;;;;;;;;;;;;:::o;35671:38::-;;;-1:-1:-1;;;;;35671:38:0;;:::o;36309:53::-;;;;;;;;;;;;-1:-1:-1;;;;;36309:53:0;;:::o;26342:27::-;;;:::o;40553:267::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;40635:25:0;::::1;40627:55;;;::::0;;-1:-1:-1;;;40627:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;40627:55:0;;;;;;;;;;;;;::::1;;40693:10;:24:::0;;-1:-1:-1;;;;;;40693:24:0::1;-1:-1:-1::0;;;;;40693:24:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;40728:25:0;;;:12:::1;:25;::::0;;;;;;;;40756:11;40728:39;;40783:29;;;;;;;::::1;::::0;;;;;;;;::::1;40553:267:::0;:::o;44564:192::-;44630:21;;-1:-1:-1;;;44630:21:0;;;;:50;;;;-1:-1:-1;44670:9:0;44656:24;;;;:13;:24;;;;;;;;44655:25;44630:50;44626:123;;;-1:-1:-1;;;;;44705:19:0;;44715:9;44705:19;44697:40;;;;;-1:-1:-1;;;44697:40:0;;;;;;;;;;;;-1:-1:-1;;;44697:40:0;;;;;;;;;;;;;;;44564:192;:::o;41481:179::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41568:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;;;;;:31;;-1:-1:-1;;41568:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41615:37;;;;;;;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;41481:179:::0;;:::o;39708:124::-;39763:23;;:::i;:::-;39806:18;:16;:18::i;35811:42::-;;;;:::o;36185:60::-;;;;;;;;;;;;-1:-1:-1;;;;;36185:60:0;;:::o;22542:84::-;22594:32;22542:84;:::o;39058:385::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;39177:30:0;::::1;::::0;;::::1;::::0;:65:::1;;-1:-1:-1::0;;;;;;39211:31:0;::::1;::::0;::::1;39177:65;39169:100;;;::::0;;-1:-1:-1;;;39169:100:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;39169:100:0;;;;;;;;;;;;;::::1;;39280:15;:34:::0;;-1:-1:-1;;;;;39280:34:0;;::::1;-1:-1:-1::0;;;;;;39280:34:0;;::::1;::::0;::::1;::::0;;;39325:16:::1;:36:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;39377:58:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;::::1;39058:385:::0;;:::o;35635:28::-;;;-1:-1:-1;;;;;35635:28:0;;:::o;35594:33::-;;;-1:-1:-1;;;;;35594:33:0;;:::o;44274:282::-;27759:10;27749:21;;;;:9;:21;;;;;;;;27741:48;;;;;-1:-1:-1;;;27741:48:0;;;;;;;;;;;;-1:-1:-1;;;27741:48:0;;;;;;;;;;;;;;;44386:31:::1;;:::i;:::-;44431:9;::::0;44420:57:::1;::::0;-1:-1:-1;;;44420:57:0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;44431:9:0;;::::1;::::0;44420:42:::1;::::0;44463:6;;44471:5;;44420:57;;44471:5;44420:57;;;44471:5;44431:9:::1;44420:57;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;44493:55:0::1;::::0;;;;44420:57;;-1:-1:-1;44493:55:0::1;::::0;44525:6;;44420:57;;44542:5;;44493:55:::1;::::0;::::1;44420:57:::0;44493:55;;;44420:57;44493:55:::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;27800:1;44274:282:::0;;:::o;35348:34::-;;;-1:-1:-1;;;;;35348:34:0;;:::o;24969:38::-;;;:::o;49444:237::-;49527:17;49557:9;49569:13;49577:4;49569:7;:13::i;:::-;49557:25;;49605:2;-1:-1:-1;;;;;49605:12:0;;49618:7;49605:21;;;;;;;;;;;;;-1:-1:-1;;;;;49605:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49605:21:0;;-1:-1:-1;49645:13:0;49637:36;;;;;-1:-1:-1;;;49637:36:0;;;;;;;;;;;;-1:-1:-1;;;49637:36:0;;;;;;;;;;;;;;;49444:237;;;;;:::o;22195:43::-;22236:2;22195:43;:::o;24885:29::-;;;:::o;35474:35::-;;;-1:-1:-1;;;35474:35:0;;;;;:::o;50840:228::-;50962:3;;;50957:28;;;-1:-1:-1;;;50957:28:0;;;;50908:16;;50937:17;;-1:-1:-1;;;;;50962:3:0;;50957:26;;:28;;;;;;;;;;;50962:3;50957:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50957:28:0;51014:9;;51003:57;;;-1:-1:-1;;;51003:57:0;;;;;;;;;;50957:28;;-1:-1:-1;;;;;;51014:9:0;;;;51003:46;;:57;;;;;51014:9;;51003:57;;;;;;;;51014:9;51003:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51003:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51003:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50996:64;;;50840:228;:::o;22633:48::-;22680:1;22633:48;:::o;24812:28::-;;;:::o;36096:27::-;;;-1:-1:-1;;;;;36096:27:0;;:::o;27817:192::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27893:18:0;::::1;27885:44;;;::::0;;-1:-1:-1;;;27885:44:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27885:44:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;27940:15:0;::::1;;::::0;;;27958:4:::1;27940:15;::::0;;;;;;;:22;;-1:-1:-1;;27940:22:0::1;::::0;;::::1;::::0;;;27978:23;::::1;::::0;27940:15;27978:23:::1;27817:192:::0;:::o;42108:194::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42182:21:0;::::1;42174:47;;;::::0;;-1:-1:-1;;;42174:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;42174:47:0;;;;;;;;;;;;;::::1;;42232:6;:16:::0;;-1:-1:-1;;;;;42232:16:0;::::1;-1:-1:-1::0;;;;;;42232:16:0;;::::1;::::0;::::1;::::0;;;42264:30:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;42108:194:::0;:::o;46248:495::-;27759:10;27749:21;;;;:9;:21;;;;;;;;27741:48;;;;;-1:-1:-1;;;27741:48:0;;;;;;;;;;;;-1:-1:-1;;;27741:48:0;;;;;;;;;;;;;;;22187:1:::1;46323:15:::0;::::1;;46315:40;;;::::0;;-1:-1:-1;;;46315:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;46315:40:0;;;;;;;;;;;;;::::1;;46371:8;:6;:8::i;:::-;46366:50;;46396:8;:6;:8::i;:::-;46426:14;:21:::0;;-1:-1:-1;;;;46426:21:0::1;-1:-1:-1::0;;;46426:21:0::1;::::0;;22187:1:::1;46464:14:::0;::::1;46460:239;;;46495:32;;:::i;:::-;22594::::0;46542:8;46551:4;46542:14:::1;::::0;::::1;;;;;;;;:42:::0;46610:9:::1;::::0;46599:58:::1;::::0;-1:-1:-1;;;46599:58:0;;-1:-1:-1;;;;;46610:9:0;;::::1;::::0;46599:48:::1;::::0;46648:8;;46599:58:::1;;::::0;46648:8;46599:58;;;46648:8;46610:9:::1;46599:58;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;46672:8:0::1;:15:::0;;;-1:-1:-1;;46460:239:0::1;46716:3;::::0;;46711:24:::1;::::0;;-1:-1:-1;;;46711:24:0;;;;-1:-1:-1;;;;;46716:3:0;;::::1;::::0;46711:22:::1;::::0;:24;;::::1;::::0;46716:3:::1;::::0;46711:24;;;;;;46716:3;;46711:24;::::1;;::::0;::::1;;;;::::0;::::1;22389:94:::0;22446:37;22389:94;:::o;22246:79::-;22296:29;22246:79;:::o;37814:259::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;37899:23:::1;::::0;::::1;-1:-1:-1::0;;;37899:23:0;;::::1;;:33;;::::0;::::1;;;;37891:78;;;::::0;;-1:-1:-1;;;37891:78:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37985:37;::::0;;;::::1;;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;38033:23;:32:::0;;;::::1;;-1:-1:-1::0;;;38033:32:0::1;-1:-1:-1::0;;;;38033:32:0;;::::1;::::0;;;::::1;::::0;;37814:259::o;38641:167::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;38728:38:::1;::::0;;-1:-1:-1;;;;;38728:38:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;38777:12;:23:::0;;-1:-1:-1;;;;;;38777:23:0::1;-1:-1:-1::0;;;;;38777:23:0;;;::::1;::::0;;;::::1;::::0;;38641:167::o;25015:38::-;;;:::o;35762:40::-;;;-1:-1:-1;;;;;35762:40:0;;:::o;38816:234::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;38906:12:::1;::::0;-1:-1:-1;;;;;38906:12:0::1;38898:60;;;::::0;;-1:-1:-1;;;38898:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;38898:60:0;;;;;;;;;;;;;::::1;;38993:12;::::0;38969:37:::1;::::0;-1:-1:-1;;;;;38993:12:0::1;38969:23;:37::i;:::-;-1:-1:-1::0;39017:12:0::1;:25:::0;;-1:-1:-1;;;;;;39017:25:0::1;::::0;;38816:234::o;35432:35::-;;;-1:-1:-1;;;35432:35:0;;;;;:::o;35963:37::-;;;;:::o;614:106::-;702:10;614:106;:::o;44764:657::-;44844:4;;44838:25;;;-1:-1:-1;;;44838:25:0;;;;44810:7;;-1:-1:-1;;;;;44844:4:0;;44838:23;;:25;;;;;;;;;;;;;;44844:4;44838:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44838:25:0;44830:55;;;;;-1:-1:-1;;;44830:55:0;;;;;;;;;;;;-1:-1:-1;;;44830:55:0;;;;;;;;;;;;;;;44896:32;;:::i;:::-;44942:9;;;;;;;;;-1:-1:-1;;;;;44942:9:0;-1:-1:-1;;;;;44931:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44931:33:0;-1:-1:-1;44975:35:0;;:::i;:::-;45026:9;45021:140;22187:1;45041:11;;45021:140;;;45114:19;;;;:16;:19;;;;;;;;;;45107:41;;-1:-1:-1;;;45107:41:0;;;;45091:58;;-1:-1:-1;;;;;45114:19:0;;;;45107:39;;:41;;;;;;;;;;;45114:19;45107:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45107:41:0;45091:8;45100:1;45091:11;;;;;;;;;;;;:15;:58::i;:::-;45074:11;45086:1;45074:14;;;;;;;;;;:75;45054:3;;45021:140;;;-1:-1:-1;45196:10:0;;45189:32;;;-1:-1:-1;;;45189:32:0;;;;45171:15;;-1:-1:-1;;;;;45196:10:0;;45189:30;;:32;;;;;;;;;;;;;;45196:10;45189:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45189:32:0;45260:4;;45254:41;;-1:-1:-1;;;45254:41:0;;45189:32;;-1:-1:-1;45242:54:0;;-1:-1:-1;;;;;45260:4:0;;;;45254:22;;45277:11;;45260:4;;45254:41;;;45277:11;45254:41;;;45277:11;45260:4;45254:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45254:41:0;45242:7;;:11;:54::i;:::-;45232:64;;45307:10;45326:4;;;;;;;;;-1:-1:-1;;;;;45326:4:0;-1:-1:-1;;;;;45320:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45320:29:0;;-1:-1:-1;45369:44:0;22296:29;45369:15;:7;45320:29;45369:11;:15::i;:44::-;45362:51;;;;;;44764:657;:::o;45429:811::-;45541:4;;45484:7;;-1:-1:-1;;;;;45541:4:0;45484:7;;45581:629;22187:1;45601:11;;45581:629;;;45643:8;;45638:1;:13;45634:565;;45672:20;45695:11;45704:1;45695:8;:11::i;:::-;45672:34;;45725:16;45744:13;45755:1;45744:10;:13::i;:::-;45725:32;;45776:12;45798;45776:35;;45830:13;45846:10;-1:-1:-1;;;;;45846:23:0;;45870:1;45846:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45846:26:0;45970:9;;45954:26;;;-1:-1:-1;;;45954:26:0;;-1:-1:-1;;;;;45970:9:0;;;45954:26;;;;;;45846;;-1:-1:-1;45891:14:0;;45908:73;;45954:15;;;;;:26;;;;;45846;;45954;;;;;;;:15;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45954:26:0;45915:19;;;;:16;45954:26;45915:19;;;;;;;;;45908:41;;-1:-1:-1;;;45908:41:0;;;;-1:-1:-1;;;;;45915:19:0;;;;45908:39;;:41;;;;;45954:26;;45908:41;;;;;45915:19;45908:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45908:41:0;;:45;:73::i;:::-;45891:90;-1:-1:-1;46009:53:0;22446:37;46009:17;45891:90;46020:5;46009:10;:17::i;:53::-;46000:62;-1:-1:-1;46090:49:0;46130:8;46090:35;46000:62;22296:29;46090:10;:35::i;:49::-;46081:58;-1:-1:-1;46166:17:0;:5;46081:58;46166:9;:17::i;:::-;46158:25;;45634:565;;;;;;45614:3;;45581:629;;;-1:-1:-1;46227:5:0;-1:-1:-1;;45429:811:0;:::o;26502:170::-;26554:6;26577:5;26573:92;;;-1:-1:-1;26606:4:0;26599:11;;26573:92;-1:-1:-1;26650:3:0;26643:10;;21967:120;21512:7;;;;21504:40;;;;;-1:-1:-1;;;21504:40:0;;;;;;;;;;;;-1:-1:-1;;;21504:40:0;;;;;;;;;;;;;;;22036:5:::1;22026:15:::0;;-1:-1:-1;;22026:15:0::1;::::0;;22057:22:::1;22066:12;:10;:12::i;:::-;22057:22;::::0;;-1:-1:-1;;;;;22057:22:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;21967:120::o:0;49689:258::-;49756:4;49900:39;49911:13;49919:4;49911:7;:13::i;:::-;-1:-1:-1;;;;;49911:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49911:27:0;49900:6;;:10;:39::i;:::-;49826:25;;49793:90;;22594:32;;49793:59;;:14;49801:5;49793:7;:14::i;:::-;-1:-1:-1;;;;;49793:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49793:28:0;;:32;:59::i;:90::-;:146;;;49689:258;-1:-1:-1;;49689:258:0:o;49955:::-;50023:4;50178:13;50186:4;50178:7;:13::i;:::-;-1:-1:-1;;;;;50178:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50178:27:0;50105:24;;50060:101;;22594:32;;50060:70;;:40;50093:6;50060:14;50068:5;50060:7;:14::i;:::-;-1:-1:-1;;;;;50060:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50060:28:0;;:32;:40::i;:::-;:44;;:70::i;3973:181::-;4031:7;4063:5;;;4087:6;;;;4079:46;;;;;-1:-1:-1;;;4079:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4145:1;-1:-1:-1;3973:181:0;;;;;:::o;5327:280::-;5385:7;5439:6;5435:47;;-1:-1:-1;5469:1:0;5462:8;;5435:47;5506:5;;;5510:1;5506;:5;:1;5530:5;;;;;:10;5522:56;;;;-1:-1:-1;;;5522:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6083:132;6141:7;6168:39;6172:1;6175;6168:39;;;;;;;;;;;;;;;;;:3;:39::i;2544:148::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;2651:1:::1;2635:6:::0;;2614:40:::1;::::0;2635:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;2635:6:0::1;::::0;2614:40:::1;::::0;2651:1;;2614:40:::1;2682:1;2665:19:::0;;-1:-1:-1;;;;;;2665:19:0::1;::::0;;2544:148::o;21708:118::-;21236:7;;;;21235:8;21227:37;;;;;-1:-1:-1;;;21227:37:0;;;;;;;;;;;;-1:-1:-1;;;21227:37:0;;;;;;;;;;;;;;;21768:7:::1;:14:::0;;-1:-1:-1;;21768:14:0::1;21778:4;21768:14;::::0;;21798:20:::1;21805:12;:10;:12::i;25365:171::-:0;25416:30;;:::i;:::-;-1:-1:-1;;;;;25471:3:0;25459:15;;;;25497:4;25485:16;;25459:9;25485;;:16;25524:4;25512:16;:9;;;:16;25459:6;25365:171::o;2847:244::-;2124:12;:10;:12::i;:::-;2114:6;;;;;-1:-1:-1;;;;;2114:6:0;;;:22;;;2106:67;;;;;-1:-1:-1;;;2106:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2106:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;2936:22:0;::::1;2928:73;;;;-1:-1:-1::0;;;2928:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3038:6;::::0;;3017:38:::1;::::0;-1:-1:-1;;;;;3017:38:0;;::::1;::::0;3038:6:::1;::::0;;::::1;;::::0;3017:38:::1;::::0;::::1;3066:6;:17:::0;;-1:-1:-1;;;;;3066:17:0;;::::1;;;-1:-1:-1::0;;;;;;3066:17:0;;::::1;::::0;;;::::1;::::0;;2847:244::o;25544:240::-;25600:7;25624:10;25620:157;;-1:-1:-1;25658:3:0;25651:10;;25620:157;25683:5;25692:1;25683:10;25679:98;;;-1:-1:-1;25717:4:0;25710:11;;25679:98;-1:-1:-1;25761:4:0;25754:11;;26002:269;26060:7;26084:10;26080:184;;-1:-1:-1;26118:12:0;26111:19;;26080:184;26152:5;26161:1;26152:10;26148:116;;;-1:-1:-1;26186:13:0;26179:20;;26148:116;-1:-1:-1;26239:13:0;26232:20;;4437:136;4495:7;4522:43;4526:1;4529;4522:43;;;;;;;;;;;;;;;;;:3;:43::i;6711:201::-;6797:7;6832:12;6825:5;6817:28;;;;-1:-1:-1;;;6817:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6856:9;6872:1;6868;:5;;;;;;;6711:201;-1:-1:-1;;;;;6711:201:0:o;4876:192::-;4962:7;4998:12;4990:6;;;;4982:29;;;;-1:-1:-1;;;4982:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5034:5:0;;;4876:192::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://1d5d433f11c5d2a652dabe274dfd55fe9dca28b9888fe79fce527c20a241260e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.