Source Code
Overview
S Balance
More Info
ContractCreator
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x198fB3Ec...aB28A9e55 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
StableAndVariableTokensHelper
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 2000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;pragma experimental ABIEncoderV2;import {StableDebtToken} from '../protocol/tokenization/StableDebtToken.sol';import {VariableDebtToken} from '../protocol/tokenization/VariableDebtToken.sol';import {LendingRateOracle} from '../mocks/oracle/LendingRateOracle.sol';import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol';contract StableAndVariableTokensHelper is Ownable {address payable private pool;address private addressesProvider;event deployedContracts(address stableToken, address variableToken);constructor(address payable _pool, address _addressesProvider) {pool = _pool;addressesProvider = _addressesProvider;}function initDeployment(address[] calldata tokens, string[] calldata symbols) external onlyOwner {require(tokens.length == symbols.length, 'Arrays not same length');require(pool != address(0), 'Pool can not be zero address');for (uint256 i = 0; i < tokens.length; i++) {emit deployedContracts(address(new StableDebtToken()), address(new VariableDebtToken()));}}
1234567891011121314151617181920212223// SPDX-License-Identifier: MITpragma solidity 0.7.6;/** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with GSN meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address payable) {return msg.sender;}function _msgData() internal view virtual returns (bytes memory) {this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691return msg.data;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;/*** @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);
123456789101112// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {IERC20} from './IERC20.sol';interface IERC20Detailed is IERC20 {function name() external view returns (string memory);function symbol() external view returns (string memory);function decimals() external view returns (uint8);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.7.6;import './Context.sol';/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. This* can later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/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.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;/*** @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.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;pragma experimental ABIEncoderV2;interface IAaveIncentivesController {event RewardsAccrued(address indexed user, uint256 amount);event RewardsClaimed(address indexed user, address indexed to, uint256 amount);event RewardsClaimed(address indexed user,address indexed to,address indexed claimer,uint256 amount);event ClaimerSet(address indexed user, address indexed claimer);/** @dev Returns the configuration of the distribution for a certain asset* @param asset The address of the reference asset of the distribution* @return The asset index, the emission per second and the last updated timestamp**/function getAssetData(address asset)externalview
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;interface ICreditDelegationToken {event BorrowAllowanceDelegated(address indexed fromUser,address indexed toUser,address asset,uint256 amount);/*** @dev delegates borrowing power to a user on the specific debt token* @param delegatee the address receiving the delegated borrowing power* @param amount the maximum amount being delegated. Delegation will still* respect the liquidation constraints (even if delegated, a delegatee cannot* force a delegator HF to go below 1)**/function approveDelegation(address delegatee, uint256 amount) external;/*** @dev returns the borrow allowance of the user* @param fromUser The user to giving allowance* @param toUser The user to give allowance to* @return the current allowance of toUser**/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {ILendingPool} from './ILendingPool.sol';import {IAaveIncentivesController} from './IAaveIncentivesController.sol';/*** @title IInitializableDebtToken* @notice Interface for the initialize function common between debt tokens* @author Aave**/interface IInitializableDebtToken {/*** @dev Emitted when a debt token is initialized* @param underlyingAsset The address of the underlying asset* @param pool The address of the associated lending pool* @param incentivesController The address of the incentives controller for this aToken* @param debtTokenDecimals the decimals of the debt token* @param debtTokenName the name of the debt token* @param debtTokenSymbol the symbol of the debt token* @param params A set of encoded parameters for additional initialization**/event Initialized(address indexed underlyingAsset,address indexed pool,address incentivesController,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;pragma experimental ABIEncoderV2;import {ILendingPoolAddressesProvider} from './ILendingPoolAddressesProvider.sol';import {DataTypes} from '../protocol/libraries/types/DataTypes.sol';interface ILendingPool {/*** @dev Emitted on deposit()* @param reserve The address of the underlying asset of the reserve* @param user The address initiating the deposit* @param onBehalfOf The beneficiary of the deposit, receiving the aTokens* @param amount The amount deposited* @param referral The referral code used**/event Deposit(address indexed reserve,address user,address indexed onBehalfOf,uint256 amount,uint16 indexed referral);/*** @dev Emitted on withdraw()
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;/*** @title LendingPoolAddressesProvider contract* @dev Main registry of addresses part of or connected to the protocol, including permissioned roles* - Acting also as factory of proxies and admin of those, so with right to change its implementations* - Owned by the Aave Governance* @author Aave**/interface ILendingPoolAddressesProvider {event MarketIdSet(string newMarketId);event LendingPoolUpdated(address indexed newAddress);event ConfigurationAdminUpdated(address indexed newAddress);event EmergencyAdminUpdated(address indexed newAddress);event LendingPoolConfiguratorUpdated(address indexed newAddress);event LendingPoolCollateralManagerUpdated(address indexed newAddress);event PriceOracleUpdated(address indexed newAddress);event LendingRateOracleUpdated(address indexed newAddress);event ProxyCreated(bytes32 id, address indexed newAddress);event AddressSet(bytes32 id, address indexed newAddress, bool hasProxy);function getMarketId() external view returns (string memory);function setMarketId(string calldata marketId) external;
12345678910111213141516171819// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;/*** @title ILendingRateOracle interface* @notice Interface for the Aave borrow rate oracle. Provides the average market borrow rate to be used as a base for the stable borrow ratecalculations**/interface ILendingRateOracle {/**@dev returns the market borrow rate in ray**/function getMarketBorrowRate(address asset) external view returns (uint256);/**@dev sets the market borrow rate. Rate value must be in ray**/function setMarketBorrowRate(address asset, uint256 rate) external;}
1234567891011121314151617// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;/************@title IPriceOracle interface@notice Interface for the Aave price oracle.*/interface IPriceOracle {/***********@dev returns the asset price in ETH*/function getAssetPrice(address asset) external view returns (uint256);/***********@dev sets the asset price, in wei*/function setAssetPrice(address asset, uint256 price) external;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;interface IScaledBalanceToken {/*** @dev Returns the scaled balance of the user. The scaled balance is the sum of all the* updated stored balance divided by the reserve's liquidity index at the moment of the update* @param user The user whose balance is calculated* @return The scaled balance of the user**/function scaledBalanceOf(address user) external view returns (uint256);/*** @dev Returns the scaled balance of the user and the scaled total supply.* @param user The address of the user* @return The scaled balance of the user* @return The scaled balance and the scaled total supply**/function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256);/*** @dev Returns the scaled total supply of the variable debt token. Represents sum(debt/index)* @return The scaled total supply**/function scaledTotalSupply() external view returns (uint256);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {IInitializableDebtToken} from './IInitializableDebtToken.sol';import {IAaveIncentivesController} from './IAaveIncentivesController.sol';/*** @title IStableDebtToken* @notice Defines the interface for the stable debt token* @dev It does not inherit from IERC20 to save in code size* @author Aave**/interface IStableDebtToken is IInitializableDebtToken {/*** @dev Emitted when new stable debt is minted* @param user The address of the user who triggered the minting* @param onBehalfOf The recipient of stable debt tokens* @param amount The amount minted* @param currentBalance The current balance of the user* @param balanceIncrease The increase in balance since the last action of the user* @param newRate The rate of the debt after the minting* @param avgStableRate The new average stable rate after the minting* @param newTotalSupply The new total supply of the stable debt token after the action**/event Mint(
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {IScaledBalanceToken} from './IScaledBalanceToken.sol';import {IInitializableDebtToken} from './IInitializableDebtToken.sol';import {IAaveIncentivesController} from './IAaveIncentivesController.sol';/*** @title IVariableDebtToken* @author Aave* @notice Defines the basic interface for a variable debt token.**/interface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken {/*** @dev Emitted after the mint action* @param from The address performing the mint* @param onBehalfOf The address of the user on which behalf minting has been performed* @param value The amount to be minted* @param index The last index of the reserve**/event Mint(address indexed from, address indexed onBehalfOf, uint256 value, uint256 index);/*** @dev Mints debt token to the `onBehalfOf` address* @param user The address receiving the borrowed underlying, being the delegatee in case* of credit delegate, or same as `onBehalfOf` otherwise
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {ILendingRateOracle} from '../../interfaces/ILendingRateOracle.sol';import {Ownable} from '../../dependencies/openzeppelin/contracts/Ownable.sol';contract LendingRateOracle is ILendingRateOracle, Ownable {mapping(address => uint256) borrowRates;mapping(address => uint256) liquidityRates;function getMarketBorrowRate(address _asset) external view override returns (uint256) {return borrowRates[_asset];}function setMarketBorrowRate(address _asset, uint256 _rate) external override onlyOwner {borrowRates[_asset] = _rate;}function getMarketLiquidityRate(address _asset) external view returns (uint256) {return liquidityRates[_asset];}function setMarketLiquidityRate(address _asset, uint256 _rate) external onlyOwner {liquidityRates[_asset] = _rate;}}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;/*** @title VersionedInitializable** @dev Helper contract to implement initializer functions. To use it, replace* the constructor with a function that has the `initializer` modifier.* WARNING: Unlike constructors, initializer functions must be manually* invoked. This applies both to deploying an Initializable contract, as well* as extending an Initializable contract via inheritance.* WARNING: When used with inheritance, manual care must be taken to not invoke* a parent initializer twice, or ensure that all initializers are idempotent,* because this is not dealt with automatically as with constructors.** @author Aave, inspired by the OpenZeppelin Initializable contract*/abstract contract VersionedInitializable {/*** @dev Indicates that the contract has been initialized.*/uint256 private lastInitializedRevision = 0;/*** @dev Indicates that the contract is in the process of being initialized.*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;/*** @title Errors library* @author Aave* @notice Defines the error messages emitted by the different contracts of the Aave protocol* @dev Error messages prefix glossary:* - VL = ValidationLogic* - MATH = Math libraries* - CT = Common errors between tokens (AToken, VariableDebtToken and StableDebtToken)* - AT = AToken* - SDT = StableDebtToken* - VDT = VariableDebtToken* - LP = LendingPool* - LPAPR = LendingPoolAddressesProviderRegistry* - LPC = LendingPoolConfiguration* - RL = ReserveLogic* - LPCM = LendingPoolCollateralManager* - P = Pausable*/library Errors {//common errorsstring public constant CALLER_NOT_POOL_ADMIN = '33'; // 'The caller must be the pool admin'string public constant BORROW_ALLOWANCE_NOT_ENOUGH = '59'; // User borrows on behalf, but allowance are too small
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {SafeMath} from '../../../dependencies/openzeppelin/contracts/SafeMath.sol';import {WadRayMath} from './WadRayMath.sol';library MathUtils {using SafeMath for uint256;using WadRayMath for uint256;/// @dev Ignoring leap yearsuint256 internal constant SECONDS_PER_YEAR = 365 days;/*** @dev Function to calculate the interest accumulated using a linear interest rate formula* @param rate The interest rate, in ray* @param lastUpdateTimestamp The timestamp of the last update of the interest* @return The interest rate linearly accumulated during the timeDelta, in ray**/function calculateLinearInterest(uint256 rate, uint40 lastUpdateTimestamp)internalviewreturns (uint256){//solium-disable-next-line
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {Errors} from '../helpers/Errors.sol';/*** @title WadRayMath library* @author Aave* @dev Provides mul and div function for wads (decimal numbers with 18 digits precision) and rays (decimals with 27 digits)**/library WadRayMath {uint256 internal constant WAD = 1e18;uint256 internal constant halfWAD = WAD / 2;uint256 internal constant RAY = 1e27;uint256 internal constant halfRAY = RAY / 2;uint256 internal constant WAD_RAY_RATIO = 1e9;/*** @return One ray, 1e27**/function ray() internal pure returns (uint256) {return RAY;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;library DataTypes {// refer to the whitepaper, section 1.1 basic concepts for a formal description of these properties.struct ReserveData {//stores the reserve configurationReserveConfigurationMap configuration;//the liquidity index. Expressed in rayuint128 liquidityIndex;//variable borrow index. Expressed in rayuint128 variableBorrowIndex;//the current supply rate. Expressed in rayuint128 currentLiquidityRate;//the current variable borrow rate. Expressed in rayuint128 currentVariableBorrowRate;//the current stable borrow rate. Expressed in rayuint128 currentStableBorrowRate;uint40 lastUpdateTimestamp;//tokens addressesaddress aTokenAddress;address stableDebtTokenAddress;address variableDebtTokenAddress;//address of the interest rate strategyaddress interestRateStrategyAddress;//the id of the reserve. Represents the position in the list of the active reserves
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {ILendingPool} from '../../../interfaces/ILendingPool.sol';import {ICreditDelegationToken} from '../../../interfaces/ICreditDelegationToken.sol';import {VersionedInitializable} from '../../libraries/aave-upgradeability/VersionedInitializable.sol';import {IncentivizedERC20} from '../IncentivizedERC20.sol';import {Errors} from '../../libraries/helpers/Errors.sol';import {SafeMath} from '../../../dependencies/openzeppelin/contracts/SafeMath.sol';/*** @title DebtTokenBase* @notice Base contract for different types of debt tokens, like StableDebtToken or VariableDebtToken* @author Aave*/abstract contract DebtTokenBase isIncentivizedERC20('DEBTTOKEN_IMPL', 'DEBTTOKEN_IMPL', 0),VersionedInitializable,ICreditDelegationToken{using SafeMath for uint256;mapping(address => mapping(address => uint256)) internal _borrowAllowances;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {Context} from '../../dependencies/openzeppelin/contracts/Context.sol';import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol';import {IERC20Detailed} from '../../dependencies/openzeppelin/contracts/IERC20Detailed.sol';import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';import {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';import {ILendingPoolAddressesProvider} from '../../interfaces/ILendingPoolAddressesProvider.sol';import {IPriceOracle} from '../../interfaces/IPriceOracle.sol';import {ILendingPool} from '../../interfaces/ILendingPool.sol';/*** @title ERC20* @notice Basic ERC20 implementation* @author Aave, inspired by the Openzeppelin ERC20 implementation**/abstract contract IncentivizedERC20 is Context, IERC20, IERC20Detailed {using SafeMath for uint256;mapping(address => uint256) internal _balances;mapping(address => mapping(address => uint256)) private _allowances;uint256 internal _totalSupply;string private _name;string private _symbol;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {DebtTokenBase} from './base/DebtTokenBase.sol';import {MathUtils} from '../libraries/math/MathUtils.sol';import {WadRayMath} from '../libraries/math/WadRayMath.sol';import {IStableDebtToken} from '../../interfaces/IStableDebtToken.sol';import {ILendingPool} from '../../interfaces/ILendingPool.sol';import {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';import {Errors} from '../libraries/helpers/Errors.sol';import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';/*** @title StableDebtToken* @notice Implements a stable debt token to track the borrowing positions of users* at stable rate mode* @author Aave**/contract StableDebtToken is IStableDebtToken, DebtTokenBase {using WadRayMath for uint256;using SafeMath for uint256;uint256 public constant DEBT_TOKEN_REVISION = 0x1;uint256 internal _avgStableRate;mapping(address => uint40) internal _timestamps;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: agpl-3.0pragma solidity 0.7.6;import {IVariableDebtToken} from '../../interfaces/IVariableDebtToken.sol';import {WadRayMath} from '../libraries/math/WadRayMath.sol';import {Errors} from '../libraries/helpers/Errors.sol';import {DebtTokenBase} from './base/DebtTokenBase.sol';import {ILendingPool} from '../../interfaces/ILendingPool.sol';import {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol';import {SafeMath} from '../../dependencies/openzeppelin/contracts/SafeMath.sol';/*** @title VariableDebtToken* @notice Implements a variable debt token to track the borrowing positions of users* at variable rate mode* @author Aave**/contract VariableDebtToken is DebtTokenBase, IVariableDebtToken {using WadRayMath for uint256;using SafeMath for uint256;uint256 public constant DEBT_TOKEN_REVISION = 0x1;IAaveIncentivesController internal _incentivesController;/**
12345678910111213141516171819202122{"optimizer": {"enabled": true,"runs": 2000},"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","devdoc","userdoc","metadata","abi"]}},"metadata": {"useLiteralContent": true},"libraries": {}}
Contract ABI
API[{"inputs":[{"internalType":"address payable","name":"_pool","type":"address"},{"internalType":"address","name":"_addressesProvider","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"stableToken","type":"address"},{"indexed":false,"internalType":"address","name":"variableToken","type":"address"}],"name":"deployedContracts","type":"event"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"string[]","name":"symbols","type":"string[]"}],"name":"initDeployment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"rates","type":"uint256[]"},{"internalType":"address","name":"oracle","type":"address"}],"name":"setOracleBorrowRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oracle","type":"address"},{"internalType":"address","name":"admin","type":"address"}],"name":"setOracleOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100725760003560e01c80638da5cb5b116100505780638da5cb5b146100a7578063c2d30321146100c5578063f2fde38b146100d857610072565b806354fe1c9414610077578063563b1cb31461008c578063715018a61461009f575b600080fd5b61008a610085366004610801565b6100eb565b005b61008a61009a3660046107c9565b610248565b61008a6103f4565b6100af6104c0565b6040516100bc91906108eb565b60405180910390f35b61008a6100d336600461086a565b6104cf565b61008a6100e636600461078a565b610601565b6100f3610723565b6000546001600160a01b03908116911614610155576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b82811461017d5760405162461bcd60e51b8152600401610174906109d7565b60405180910390fd5b6001546001600160a01b03166101a55760405162461bcd60e51b815260040161017490610932565b60005b83811015610241577f1c1768aab1796270c7034dc781c2951065e6afb7a946269746521002443b8ea46040516101dd90610727565b604051809103906000f0801580156101f9573d6000803e3d6000fd5b5060405161020690610734565b604051809103906000f080158015610222573d6000803e3d6000fd5b506040516102319291906108ff565b60405180910390a16001016101a8565b5050505050565b610250610723565b6000546001600160a01b039081169116146102b2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166102d85760405162461bcd60e51b8152600401610174906109a0565b306001600160a01b0316826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561031b57600080fd5b505afa15801561032f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035391906107ad565b6001600160a01b0316146103795760405162461bcd60e51b815260040161017490610969565b6040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063f2fde38b906103be9084906004016108eb565b600060405180830381600087803b1580156103d857600080fd5b505af11580156103ec573d6000803e3d6000fd5b505050505050565b6103fc610723565b6000546001600160a01b0390811691161461045e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b6000546001600160a01b031690565b6104d7610723565b6000546001600160a01b03908116911614610539576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b8382146105585760405162461bcd60e51b8152600401610174906109d7565b60005b848110156103ec57816001600160a01b03166372eb293d87878481811061057e57fe5b9050602002016020810190610593919061078a565b86868581811061059f57fe5b905060200201356040518363ffffffff1660e01b81526004016105c3929190610919565b600060405180830381600087803b1580156105dd57600080fd5b505af11580156105f1573d6000803e3d6000fd5b50506001909201915061055b9050565b610609610723565b6000546001600160a01b0390811691161461066b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166106b05760405162461bcd60e51b815260040180806020018281038252602681526020018061487e6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3390565b61218980610a2783390190565b611cce80612bb083390190565b60008083601f840112610752578182fd5b50813567ffffffffffffffff811115610769578182fd5b602083019150836020808302850101111561078357600080fd5b9250929050565b60006020828403121561079b578081fd5b81356107a681610a0e565b9392505050565b6000602082840312156107be578081fd5b81516107a681610a0e565b600080604083850312156107db578081fd5b82356107e681610a0e565b915060208301356107f681610a0e565b809150509250929050565b60008060008060408587031215610816578182fd5b843567ffffffffffffffff8082111561082d578384fd5b61083988838901610741565b90965094506020870135915080821115610851578384fd5b5061085e87828801610741565b95989497509550505050565b600080600080600060608688031215610881578081fd5b853567ffffffffffffffff80821115610898578283fd5b6108a489838a01610741565b909750955060208801359150808211156108bc578283fd5b506108c988828901610741565b90945092505060408601356108dd81610a0e565b809150509295509295909350565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6020808252601c908201527f506f6f6c2063616e206e6f74206265207a65726f206164647265737300000000604082015260600190565b60208082526013908201527f68656c706572206973206e6f74206f776e657200000000000000000000000000604082015260600190565b60208082526015908201527f6f776e65722063616e206e6f74206265207a65726f0000000000000000000000604082015260600190565b60208082526016908201527f417272617973206e6f742073616d65206c656e67746800000000000000000000604082015260600190565b6001600160a01b0381168114610a2357600080fd5b5056fe608060405260006007553480156200001657600080fd5b50604080518082018252600e8082526d111150951513d2d15397d253541360921b60208084018281528551808701909652928552840152815191929160009162000064916003919062000098565b5081516200007a90600490602085019062000098565b506005805460ff191660ff9290921691909117905550620001449050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620000d057600085556200011b565b82601f10620000eb57805160ff19168380011785556200011b565b828001600101855582156200011b579182015b828111156200011b578251825591602001919060010190620000fe565b50620001299291506200012d565b5090565b5b808211156200012957600081556001016200012e565b61203580620001546000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80639dc29fac116100f9578063c222ec8a11610097578063e54f088011610071578063e54f0880146106f4578063e7484890146106fc578063e78c9b3b14610704578063f731e9be1461072a576101c4565b8063c222ec8a146104f7578063c634dfaa146106a0578063dd62ed3e146106c6576101c4565b8063b16a19de116100d3578063b16a19de1461047f578063b3f1c93d14610487578063b9a7b622146104c3578063c04a8a10146104cb576101c4565b80639dc29fac14610425578063a457c2d7146102f4578063a9059cbb14610453576101c4565b806370a0823111610166578063797743381161014057806379774338146103a057806379ce6b8c146103d557806390f6fcf21461041557806395d89b411461041d576101c4565b806370a082311461034e5780637535d2461461037457806375d2641314610398576101c4565b806323b872dd116101a257806323b872dd146102a0578063313ce567146102d657806339509351146102f45780636bd76d2414610320576101c4565b806306fdde03146101c9578063095ea7b31461024657806318160ddd14610286575b600080fd5b6101d161074b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102726004803603604081101561025c57600080fd5b506001600160a01b0381351690602001356107e1565b604080519115158252519081900360200190f35b61028e610830565b60408051918252519081900360200190f35b610272600480360360608110156102b657600080fd5b506001600160a01b03813581169160208101359091169060400135610842565b6102de610891565b6040805160ff9092168252519081900360200190f35b6102726004803603604081101561030a57600080fd5b506001600160a01b03813516906020013561089a565b61028e6004803603604081101561033657600080fd5b506001600160a01b03813581169160200135166108e9565b61028e6004803603602081101561036457600080fd5b50356001600160a01b0316610916565b61037c610990565b604080516001600160a01b039092168252519081900360200190f35b61037c6109a4565b6103a86109ae565b6040805194855260208501939093528383019190915264ffffffffff166060830152519081900360800190f35b6103fb600480360360208110156103eb57600080fd5b50356001600160a01b03166109e4565b6040805164ffffffffff9092168252519081900360200190f35b61028e610a06565b6101d1610a0c565b6104516004803603604081101561043b57600080fd5b506001600160a01b038135169060200135610a6d565b005b6102726004803603604081101561046957600080fd5b506001600160a01b038135169060200135610842565b61037c610dee565b6102726004803603608081101561049d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610dfd565b61028e61118b565b610451600480360360408110156104e157600080fd5b506001600160a01b038135169060200135611190565b610451600480360360e081101561050d57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160ff606083013516919081019060a08101608082013564010000000081111561055357600080fd5b82018360208201111561056557600080fd5b8035906020019184600183028401116401000000008311171561058757600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156105da57600080fd5b8201836020820111156105ec57600080fd5b8035906020019184600183028401116401000000008311171561060e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561066157600080fd5b82018360208201111561067357600080fd5b8035906020019184600183028401116401000000008311171561069557600080fd5b50909250905061122c565b61028e600480360360208110156106b657600080fd5b50356001600160a01b03166114dd565b61028e600480360360408110156106dc57600080fd5b506001600160a01b038135811691602001351661089a565b61028e6114e8565b6103fb61168c565b61028e6004803603602081101561071a57600080fd5b50356001600160a01b0316611699565b6107326116b4565b6040805192835260208301919091528051918290030190f35b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d75780601f106107ac576101008083540402835291602001916107d7565b820191906000526020600020905b8154815290600101906020018083116107ba57829003601f168201915b5050505050905090565b6040805162461bcd60e51b815260206004820152601660248201527f415050524f56414c5f4e4f545f535550504f52544544000000000000000000006044820152905160009181900360640190fd5b600061083d603c546116cd565b905090565b6040805162461bcd60e51b815260206004820152601660248201527f5452414e534645525f4e4f545f535550504f52544544000000000000000000006044820152905160009181900360640190fd5b60055460ff1690565b6040805162461bcd60e51b815260206004820152601760248201527f414c4c4f57414e43455f4e4f545f535550504f525445440000000000000000006044820152905160009181900360640190fd5b6001600160a01b038083166000908152603b60209081526040808320938516835292905220545b92915050565b60008061092283611715565b6001600160a01b0384166000908152603e60205260409020549091508161094e5760009250505061098b565b6001600160a01b0384166000908152603d602052604081205461097990839064ffffffffff16611730565b90506109858382611744565b93505050505b919050565b60055461010090046001600160a01b031690565b600061083d611815565b6000806000806000603c5490506109c361182d565b6109cc826116cd565b603f54919790965091945064ffffffffff1692509050565b6001600160a01b03166000908152603d602052604090205464ffffffffff1690565b603c5490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107d75780601f106107ac576101008083540402835291602001916107d7565b610a75610990565b6001600160a01b0316610a86611833565b6001600160a01b0316146040518060400160405280600281526020017f323900000000000000000000000000000000000000000000000000000000000081525090610b4f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b14578181015183820152602001610afc565b50505050905090810190601f168015610b415780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600080610b5c84611837565b92509250506000610b6b610830565b6001600160a01b0386166000908152603e6020526040812054919250908190868411610ba0576000603c819055600255610c22565b610baa8488611890565b600281905591506000610bc8610bbf866118d2565b603c5490611744565b90506000610bdf610bd88a6118d2565b8490611744565b9050818110610bfb5760006002819055603c8190559450610c1f565b610c17610c07856118d2565b610c118484611890565b90611950565b603c81905594505b50505b85871415610c60576001600160a01b0388166000908152603e60209081526040808320839055603d9091529020805464ffffffffff19169055610c8e565b6001600160a01b0388166000908152603d60205260409020805464ffffffffff19164264ffffffffff161790555b603f805464ffffffffff19164264ffffffffff1617905586851115610d2e576000610cb98689611890565b9050610cc6898287611a72565b6040805182815260208101899052808201889052606081018490526080810186905260a0810185905290516001600160a01b038b169182917fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9181900360c00190a350610da3565b6000610d3a8887611890565b9050610d47898287611b62565b6040805182815260208101899052808201889052606081018690526080810185905290516001600160a01b038b16917f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e8919081900360a00190a2505b6040805188815290516000916001600160a01b038b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050505050505050565b6006546001600160a01b031690565b6000610e07610990565b6001600160a01b0316610e18611833565b6001600160a01b0316146040518060400160405280600281526020017f323900000000000000000000000000000000000000000000000000000000000081525090610ea45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b14578181015183820152602001610afc565b50610ead611ee0565b846001600160a01b0316866001600160a01b031614610ed157610ed1858786611bbf565b600080610edd87611837565b9250925050610eea610830565b808452603c546080850152610eff9087611ca2565b60028190556020840152610f12866118d2565b6040840152610f70610f2c610f278489611ca2565b6118d2565b6040850151610c1190610f3f9089611744565b610f6a610f4b876118d2565b6001600160a01b038d166000908152603e602052604090205490611744565b90611ca2565b6060840181905260408051808201909152600281527f37390000000000000000000000000000000000000000000000000000000000006020820152906fffffffffffffffffffffffffffffffff101561100a5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b14578181015183820152602001610afc565b5060608301516001600160a01b0388166000908152603e6020908152604080832093909355603d8152919020805464ffffffffff421664ffffffffff199182168117909255603f805490911690911790558301516110a09061106b906118d2565b610c1161108586604001518961174490919063ffffffff16565b610f6a61109588600001516118d2565b608089015190611744565b603c81905560808401526110bf876110b88884611ca2565b8551611a72565b6040805187815290516001600160a01b038916916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3866001600160a01b0316886001600160a01b03167fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f888585886060015189608001518a6020015160405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a350159695505050505050565b600181565b80603b600061119d611833565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120919091556111d5611833565b6001600160a01b03167fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1611207610dee565b604080516001600160a01b039092168252602082018690528051918290030190a35050565b6000611236611cfc565b60085490915060ff168061124d575061124d611d01565b80611259575060075481115b6112945760405162461bcd60e51b815260040180806020018281038252602e815260200180611fd2602e913960400191505060405180910390fd5b60085460ff161580156112b4576008805460ff1916600117905560078290555b6112bd86611d07565b6112c685611d1e565b6112cf87611d31565b89600560016101000a8154816001600160a01b0302191690836001600160a01b0316021790555088600660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087603f60056101000a8154816001600160a01b0302191690836001600160a01b03160217905550896001600160a01b0316896001600160a01b03167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a60405180876001600160a01b031681526020018660ff168152602001806020018060200180602001848103845288818151815260200191508051906020019080838360005b838110156113dc5781810151838201526020016113c4565b50505050905090810190601f1680156114095780820380516001836020036101000a031916815260200191505b50848103835287518152875160209182019189019080838360005b8381101561143c578181015183820152602001611424565b50505050905090810190601f1680156114695780820380516001836020036101000a031916815260200191505b508481038252858152602001868680828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039b50909950505050505050505050a380156114d1576008805460ff191690555b50505050505050505050565b600061091082611715565b600080600560019054906101000a90046001600160a01b03166001600160a01b031663fe65acfe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153957600080fd5b505afa15801561154d573d6000803e3d6000fd5b505050506040513d602081101561156357600080fd5b5051604080517ffca513a800000000000000000000000000000000000000000000000000000000815290519192506000916001600160a01b0384169163fca513a8916004808301926020929190829003018186803b1580156115c457600080fd5b505afa1580156115d8573d6000803e3d6000fd5b505050506040513d60208110156115ee57600080fd5b5051600654604080517fb3596f070000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015290519293509083169163b3596f0791602480820192602092909190829003018186803b15801561165957600080fd5b505afa15801561166d573d6000803e3d6000fd5b505050506040513d602081101561168357600080fd5b50519250505090565b603f5464ffffffffff1690565b6001600160a01b03166000908152603e602052604090205490565b603c5460009081906116c5816116cd565b925090509091565b6000806116d861182d565b9050806116e957600091505061098b565b603f5460009061170190859064ffffffffff16611730565b905061170d8282611744565b949350505050565b6001600160a01b031660009081526020819052604090205490565b600061173d838342611d47565b9392505050565b6000821580611751575081155b1561175e57506000610910565b817ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8161178757fe5b0483111560405180604001604052806002815260200161068760f31b815250906117f25760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b14578181015183820152602001610afc565b50506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b603f546501000000000090046001600160a01b031690565b60025490565b3390565b60008060008061184685611715565b90508061185e57600080600093509350935050611889565b60006118738261186d88610916565b90611890565b9050816118808183611ca2565b90955093509150505b9193909250565b600061173d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e1d565b6000633b9aca0082810290839082041460405180604001604052806002815260200161068760f31b815250906119495760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b14578181015183820152602001610afc565b5092915050565b60408051808201909152600281527f35300000000000000000000000000000000000000000000000000000000000006020820152600090826119d35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b14578181015183820152602001610afc565b5060408051808201909152600280825261068760f31b60208301528304906b033b2e3c9fd0803ce8000000821904851115611a4f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b14578181015183820152602001610afc565b5082816b033b2e3c9fd0803ce800000086020181611a6957fe5b04949350505050565b6001600160a01b038316600090815260208190526040902054611a958184611ca2565b6001600160a01b03808616600090815260208190526040902091909155603f546501000000000090041615611b5c57603f54604080517f31873e2e0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301526024820185905260448201869052915165010000000000909304909116916331873e2e9160648082019260009290919082900301818387803b158015611b4357600080fd5b505af1158015611b57573d6000803e3d6000fd5b505050505b50505050565b6001600160a01b03831660009081526020818152604091829020548251808401909352600283527f38300000000000000000000000000000000000000000000000000000000000009183019190915290611a959082908590611e1d565b604080518082018252600281527f35390000000000000000000000000000000000000000000000000000000000006020808301919091526001600160a01b038087166000908152603b83528481209187168152915291822054611c23918490611e1d565b6001600160a01b038086166000818152603b60209081526040808320948916808452949091529020839055919250907fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1611c7b610dee565b604080516001600160a01b039092168252602082018690528051918290030190a350505050565b60008282018381101561173d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600190565b303b1590565b8051611d1a906003906020840190611f0f565b5050565b8051611d1a906004906020840190611f0f565b6005805460ff191660ff92909216919091179055565b600080611d5b8364ffffffffff8616611890565b905080611d7257611d6a611e77565b91505061173d565b6000198101600060028311611d88576000611d8d565b600283035b90506301e1338087046000611da28280611744565b90506000611db08284611744565b905060006002611dca84611dc48a8a611e87565b90611e87565b81611dd157fe5b04905060006006611de884611dc489818d8d611e87565b81611def57fe5b049050611e0d81610f6a8481611e058a8e611e87565b610f6a611e77565b9c9b505050505050505050505050565b60008184841115611e6f5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b14578181015183820152602001610afc565b505050900390565b6b033b2e3c9fd0803ce800000090565b600082611e9657506000610910565b82820282848281611ea357fe5b041461173d5760405162461bcd60e51b8152600401808060200182810382526021815260200180611fb16021913960400191505060405180910390fd5b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611f455760008555611f8b565b82601f10611f5e57805160ff1916838001178555611f8b565b82800160010185558215611f8b579182015b82811115611f8b578251825591602001919060010190611f70565b50611f97929150611f9b565b5090565b5b80821115611f975760008155600101611f9c56fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a2646970667358221220107cec5b29ae043fe3200d287a765a874c6800fa4b9d66d0ef36e7f4f620f0bb64736f6c63430007060033608060405260006007553480156200001657600080fd5b50604080518082018252600e8082526d111150951513d2d15397d253541360921b60208084018281528551808701909652928552840152815191929160009162000064916003919062000098565b5081516200007a90600490602085019062000098565b506005805460ff191660ff9290921691909117905550620001449050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620000d057600085556200011b565b82601f10620000eb57805160ff19168380011785556200011b565b828001600101855582156200011b579182015b828111156200011b578251825591602001919060010190620000fe565b50620001299291506200012d565b5090565b5b808211156200012957600081556001016200012e565b611b7a80620001546000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806395d89b41116100e3578063b9a7b6221161008c578063dd62ed3e11610066578063dd62ed3e14610638578063e54f088014610666578063f5298aca1461066e57610198565b8063b9a7b62214610459578063c04a8a1014610461578063c222ec8a1461048f57610198565b8063b16a19de116100bd578063b16a19de1461040d578063b1bf962d14610415578063b3f1c93d1461041d57610198565b806395d89b41146103d9578063a457c2d71461032d578063a9059cbb146103e157610198565b8063313ce5671161014557806370a082311161011f57806370a08231146103875780637535d246146103ad57806375d26413146103d157610198565b8063313ce5671461030f578063395093511461032d5780636bd76d241461035957610198565b806318160ddd1161017657806318160ddd146102995780631da24f3e146102b357806323b872dd146102d957610198565b806306fdde031461019d578063095ea7b31461021a5780630afbcdc91461025a575b600080fd5b6101a56106a0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101df5781810151838201526020016101c7565b50505050905090810190601f16801561020c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102466004803603604081101561023057600080fd5b506001600160a01b038135169060200135610736565b604080519115158252519081900360200190f35b6102806004803603602081101561027057600080fd5b50356001600160a01b0316610785565b6040805192835260208301919091528051918290030190f35b6102a16107a2565b60408051918252519081900360200190f35b6102a1600480360360208110156102c957600080fd5b50356001600160a01b0316610854565b610246600480360360608110156102ef57600080fd5b506001600160a01b03813581169160208101359091169060400135610867565b6103176108b6565b6040805160ff9092168252519081900360200190f35b6102466004803603604081101561034357600080fd5b506001600160a01b0381351690602001356108bf565b6102a16004803603604081101561036f57600080fd5b506001600160a01b038135811691602001351661090e565b6102a16004803603602081101561039d57600080fd5b50356001600160a01b031661093b565b6103b5610a04565b604080516001600160a01b039092168252519081900360200190f35b6103b5610a18565b6101a5610a22565b610246600480360360408110156103f757600080fd5b506001600160a01b038135169060200135610867565b6103b5610a83565b6102a1610a92565b6102466004803603608081101561043357600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610a9c565b6102a1610ceb565b61048d6004803603604081101561047757600080fd5b506001600160a01b038135169060200135610cf0565b005b61048d600480360360e08110156104a557600080fd5b6001600160a01b038235811692602081013582169260408201359092169160ff606083013516919081019060a0810160808201356401000000008111156104eb57600080fd5b8201836020820111156104fd57600080fd5b8035906020019184600183028401116401000000008311171561051f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561057257600080fd5b82018360208201111561058457600080fd5b803590602001918460018302840111640100000000831117156105a657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156105f957600080fd5b82018360208201111561060b57600080fd5b8035906020019184600183028401116401000000008311171561062d57600080fd5b509092509050610d8c565b6102a16004803603604081101561064e57600080fd5b506001600160a01b03813581169160200135166108bf565b6102a161103d565b61048d6004803603606081101561068457600080fd5b506001600160a01b0381351690602081013590604001356111e1565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561072c5780601f106107015761010080835404028352916020019161072c565b820191906000526020600020905b81548152906001019060200180831161070f57829003601f168201915b5050505050905090565b6040805162461bcd60e51b815260206004820152601660248201527f415050524f56414c5f4e4f545f535550504f52544544000000000000000000006044820152905160009181900360640190fd5b600080610791836113ab565b6107996113c6565b91509150915091565b600554600654604080517f386497fd0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152905160009361084f93610100909104169163386497fd916024808301926020929190829003018186803b15801561081557600080fd5b505afa158015610829573d6000803e3d6000fd5b505050506040513d602081101561083f57600080fd5b50516108496113c6565b906113cc565b905090565b600061085f826113ab565b90505b919050565b6040805162461bcd60e51b815260206004820152601660248201527f5452414e534645525f4e4f545f535550504f52544544000000000000000000006044820152905160009181900360640190fd5b60055460ff1690565b6040805162461bcd60e51b815260206004820152601760248201527f414c4c4f57414e43455f4e4f545f535550504f525445440000000000000000006044820152905160009181900360640190fd5b6001600160a01b038083166000908152603b60209081526040808320938516835292905220545b92915050565b600080610947836113ab565b905080610958576000915050610862565b600554600654604080517f386497fd0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015290516109fd9361010090049092169163386497fd91602480820192602092909190829003018186803b1580156109ca57600080fd5b505afa1580156109de573d6000803e3d6000fd5b505050506040513d60208110156109f457600080fd5b505182906113cc565b9392505050565b60055461010090046001600160a01b031690565b600061084f6114b8565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561072c5780601f106107015761010080835404028352916020019161072c565b6006546001600160a01b031690565b600061084f6113c6565b6000610aa6610a04565b6001600160a01b0316610ab76114c7565b6001600160a01b0316146040518060400160405280600281526020017f323900000000000000000000000000000000000000000000000000000000000081525090610b805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b45578181015183820152602001610b2d565b50505050905090810190601f168015610b725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50836001600160a01b0316856001600160a01b031614610ba557610ba58486856114cb565b6000610bb0856113ab565b90506000610bbe85856115ae565b60408051808201909152600281527f3536000000000000000000000000000000000000000000000000000000000000602082015290915081610c415760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b45578181015183820152602001610b2d565b50610c4c86826116eb565b6040805186815290516001600160a01b038816916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3856001600160a01b0316876001600160a01b03167f2f00e3cdd69a77be7ed215ec7b2a36784dd158f921fca79ac29deffa353fe6ee8787604051808381526020018281526020019250505060405180910390a3501595945050505050565b600181565b80603b6000610cfd6114c7565b6001600160a01b0390811682526020808301939093526040918201600090812091871680825291909352912091909155610d356114c7565b6001600160a01b03167fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1610d67610a83565b604080516001600160a01b039092168252602082018690528051918290030190a35050565b6000610d96611847565b60085490915060ff1680610dad5750610dad61184c565b80610db9575060075481115b610df45760405162461bcd60e51b815260040180806020018281038252602e815260200180611af6602e913960400191505060405180910390fd5b60085460ff16158015610e14576008805460ff1916600117905560078290555b610e1d86611852565b610e2685611869565b610e2f8761187c565b89600560016101000a8154816001600160a01b0302191690836001600160a01b0316021790555088600660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555087603c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550896001600160a01b0316896001600160a01b03167f40251fbfb6656cfa65a00d7879029fec1fad21d28fdcff2f4f68f52795b74f2c8a8a8a8a8a8a60405180876001600160a01b031681526020018660ff168152602001806020018060200180602001848103845288818151815260200191508051906020019080838360005b83811015610f3c578181015183820152602001610f24565b50505050905090810190601f168015610f695780820380516001836020036101000a031916815260200191505b50848103835287518152875160209182019189019080838360005b83811015610f9c578181015183820152602001610f84565b50505050905090810190601f168015610fc95780820380516001836020036101000a031916815260200191505b508481038252858152602001868680828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039b50909950505050505050505050a38015611031576008805460ff191690555b50505050505050505050565b600080600560019054906101000a90046001600160a01b03166001600160a01b031663fe65acfe6040518163ffffffff1660e01b815260040160206040518083038186803b15801561108e57600080fd5b505afa1580156110a2573d6000803e3d6000fd5b505050506040513d60208110156110b857600080fd5b5051604080517ffca513a800000000000000000000000000000000000000000000000000000000815290519192506000916001600160a01b0384169163fca513a8916004808301926020929190829003018186803b15801561111957600080fd5b505afa15801561112d573d6000803e3d6000fd5b505050506040513d602081101561114357600080fd5b5051600654604080517fb3596f070000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015290519293509083169163b3596f0791602480820192602092909190829003018186803b1580156111ae57600080fd5b505afa1580156111c2573d6000803e3d6000fd5b505050506040513d60208110156111d857600080fd5b50519250505090565b6111e9610a04565b6001600160a01b03166111fa6114c7565b6001600160a01b0316146040518060400160405280600281526020017f3239000000000000000000000000000000000000000000000000000000000000815250906112865760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b45578181015183820152602001610b2d565b50600061129383836115ae565b60408051808201909152600281527f35380000000000000000000000000000000000000000000000000000000000006020820152909150816113165760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b45578181015183820152602001610b2d565b506113218482611892565b6040805184815290516000916001600160a01b038716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3604080518481526020810184905281516001600160a01b038716927f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a928290030190a250505050565b6001600160a01b031660009081526020819052604090205490565b60025490565b60008215806113d9575081155b156113e657506000610935565b817ffffffffffffffffffffffffffffffffffffffffffe6268e1b017bfe18bffffff8161140f57fe5b048311156040518060400160405280600281526020017f3438000000000000000000000000000000000000000000000000000000000000815250906114955760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b45578181015183820152602001610b2d565b50506b033b2e3c9fd0803ce800000091026b019d971e4fe8401e74000000010490565b603c546001600160a01b031690565b3390565b604080518082018252600281527f35390000000000000000000000000000000000000000000000000000000000006020808301919091526001600160a01b038087166000908152603b8352848120918716815291529182205461152f918490611937565b6001600160a01b038086166000818152603b60209081526040808320948916808452949091529020839055919250907fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1611587610a83565b604080516001600160a01b039092168252602082018690528051918290030190a350505050565b60408051808201909152600281527f35300000000000000000000000000000000000000000000000000000000000006020820152600090826116315760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b45578181015183820152602001610b2d565b506040805180820190915260028082527f343800000000000000000000000000000000000000000000000000000000000060208301528304906b033b2e3c9fd0803ce80000008219048511156116c85760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b45578181015183820152602001610b2d565b5082816b033b2e3c9fd0803ce8000000860201816116e257fe5b04949350505050565b6001600160a01b038216611746576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61175260008383611991565b6002546000906117629083611996565b60028190556001600160a01b0384166000908152602081905260408120549192509061178e9084611996565b6001600160a01b03851660009081526020819052604081208290559091506117b46114b8565b6001600160a01b031614611841576117ca6114b8565b6001600160a01b03166331873e2e8583856040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050600060405180830381600087803b15801561182857600080fd5b505af115801561183c573d6000803e3d6000fd5b505050505b50505050565b600190565b303b1590565b8051611865906003906020840190611a32565b5050565b8051611865906004906020840190611a32565b6005805460ff191660ff92909216919091179055565b6001600160a01b0382166118d75760405162461bcd60e51b8152600401808060200182810382526021815260200180611b246021913960400191505060405180910390fd5b6118e382600083611991565b6002546000906118f390836119f0565b905080600281905550600061178e83604051806060016040528060228152602001611ad4602291396001600160a01b03871660009081526020819052604090205491905b600081848411156119895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610b45578181015183820152602001610b2d565b505050900390565b505050565b6000828201838110156109fd576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006109fd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611937565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611a685760008555611aae565b82601f10611a8157805160ff1916838001178555611aae565b82800160010185558215611aae579182015b82811115611aae578251825591602001919060010190611a93565b50611aba929150611abe565b5090565b5b80821115611aba5760008155600101611abf56fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f2061646472657373a26469706673582212206d2c8a05224c77c053ea4fb944710858ded2f4c6da09abae7252c150dae7ad3d64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220ed5c48e4e9eb368049b2c2fa7b0931aef9023290fbcdb2dd5091465e87e19d8464736f6c63430007060033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.