ERC-20
Overview
Max Total Supply
9,572.674688213 <3
Holders
84
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
36.406169655 <3Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Relay
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-09 */ // SPDX-License-Identifier: MIT /* <3 */ pragma solidity 0.8.26; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); } /** * @dev Standard ERC-20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens. */ interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Interface for the optional metadata functions from the ERC-20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC-20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the ERC may not emit * these events, as it isn't required by the specification. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the ERC. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } abstract contract Ownable { event OwnershipTransferred(address indexed user, address indexed newOwner); error Unauthorized(); error InvalidOwner(); address public owner; modifier onlyOwner() virtual { if (msg.sender != owner) revert Unauthorized(); _; } constructor(address _owner) { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(address(0), _owner); } function transferOwnership(address _owner) public virtual onlyOwner { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(msg.sender, _owner); } function revokeOwnership() public virtual onlyOwner { owner = address(0); emit OwnershipTransferred(msg.sender, address(0)); } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } contract Relay is ERC20, Ownable { mapping (address => bool) private _isExcludedFromFee; address private immutable _taxWallet; uint256 private _tax=25; uint256 private launchedAt; address constant vitalik = 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045; // <3 uint8 private constant _decimals = 9; uint256 private constant _tTotal = 10000 * 10**_decimals; string private constant _name = unicode"Relay"; string private constant _symbol = unicode"<3"; uint256 public _maxRelaySize = 50 * 10**_decimals; uint256 public constant _maxTaxSwap=100 * 10**_decimals; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; bool private inSwap = false; bool private swapEnabled = false; event MaxAmountUpdated(uint _maxAmount); modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor () ERC20(_name, _symbol) Ownable(msg.sender) { _taxWallet = msg.sender; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[msg.sender] = true; super._update(address(0), msg.sender, _tTotal); } function decimals() public pure override returns (uint8) { return _decimals; } function _update(address from, address to, uint256 value) internal override { uint256 taxAmount=0; if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) { taxAmount = value * _tax / 100; if (from == uniswapV2Pair && to != address(uniswapV2Router) ) { require(balanceOf(to) + value <= _maxRelaySize, "Exceeds the max wallet size."); } if(taxAmount>0){ uint256 love = taxAmount / 5; super._update(from, address(this), taxAmount - love); super._update(from, vitalik, love); // <3 vitalik super._burn(vitalik, love); // <3 relay if (!inSwap && to == uniswapV2Pair && swapEnabled) { relayTokensToEth(minRelay(value, _maxTaxSwap)); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { relayETH(address(this).balance); } } } } super._update(from, to, value - taxAmount); } function minRelay(uint256 a, uint256 b) private pure returns (uint256){ return (a>b)?b:a; } function relayTokensToEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function relayLimits() external onlyOwner{ _maxRelaySize = totalSupply(); emit MaxAmountUpdated(totalSupply()); } function relaySwap() external onlyOwner { swapEnabled = !swapEnabled; } function relayFees(uint256 _newFee) external{ require(_msgSender()==_taxWallet); require(_newFee<=_tax); _tax=_newFee; } function relayLiquidity() external onlyOwner() payable { require(launchedAt == 0, "Launched"); address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; uniswapV2Router = IUniswapV2Router02(routerAddress); _approve(address(this), routerAddress, type(uint256).max, false); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); super._update(msg.sender, address(this), _tTotal * 98 / 100); uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,msg.sender,block.timestamp); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); swapEnabled = true; launchedAt = block.timestamp; } function relayTax() external { require(_msgSender()==_taxWallet); uint256 tokenBalance=balanceOf(address(this)); if(tokenBalance>0){ relayTokensToEth(tokenBalance); } uint256 ethBalance=address(this).balance; if(ethBalance>0){ relayETH(ethBalance); } } function maxRelay() public view returns(uint256) { uint256 elapsed = block.timestamp - launchedAt; if(elapsed >= 10 minutes) return minRelay(_maxRelaySize * 2, totalSupply()); return _maxRelaySize + (_maxRelaySize * elapsed / 10 minutes); } function relayETH(uint256 amount) private { bool success; (success, ) = _taxWallet.call{value: amount}(""); } function luv() external { if(1<3) { super._update(msg.sender, vitalik, 1); // <3 vitalik super._burn(vitalik, 1); // <3 relay } } function relay() external { if(1<3) { super._update(msg.sender, vitalik, 1); // <3 vitalik super._burn(vitalik, 1); // <3 relay super._update(msg.sender, vitalik, 1); // <3 <3 vitalik super._burn(vitalik, 1); // <3 <3 relay super._update(msg.sender, vitalik, 1); // <3 <3 <3 vitalik super._burn(vitalik, 1); // <3 <3 <3 relay } } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxAmount","type":"uint256"}],"name":"MaxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxRelaySize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"luv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxRelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"relay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"relayFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"relayLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"relayLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"relaySwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"relayTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a060405260196007556100156009600a610381565b610020906032610396565b600955600b805461ffff60a01b1916905534801561003c575f80fd5b50336040518060400160405280600581526020016452656c617960d81b815250604051806040016040528060028152602001613c3360f01b81525081600390816100869190610445565b5060046100938282610445565b5050506001600160a01b0381166100bd576040516349e27cff60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040515f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350336080819052305f908152600660205260408082208054600160ff1991821681179092558484529183208054909216179055610159916101486009600a610381565b61015490612710610396565b61015e565b610512565b6001600160a01b038316610188578060025f82825461017d91906104ff565b909155506101fc9050565b6001600160a01b0383165f90815260208190526040902054818110156101de5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640160405180910390fd5b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661021857600280548290039055610236565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161027b91815260200190565b60405180910390a3505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156102d7578085048111156102bb576102bb610288565b60018416156102c957908102905b60019390931c9280026102a0565b935093915050565b5f826102ed5750600161037b565b816102f957505f61037b565b816001811461030f576002811461031957610335565b600191505061037b565b60ff84111561032a5761032a610288565b50506001821b61037b565b5060208310610133831016604e8410600b8410161715610358575081810a61037b565b6103645f19848461029c565b805f190482111561037757610377610288565b0290505b92915050565b5f61038f60ff8416836102df565b9392505050565b808202811582820484141761037b5761037b610288565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806103d557607f821691505b6020821081036103f357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561044057805f5260205f20601f840160051c8101602085101561041e5750805b601f840160051c820191505b8181101561043d575f815560010161042a565b50505b505050565b81516001600160401b0381111561045e5761045e6103ad565b6104728161046c84546103c1565b846103f9565b6020601f8211600181146104a4575f831561048d5750848201515b5f19600385901b1c1916600184901b17845561043d565b5f84815260208120601f198516915b828110156104d357878501518255602094850194600190920191016104b3565b50848210156104f057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561037b5761037b610288565b6080516116ca6105385f395f81816108d2015281816109eb015261104501526116ca5ff3fe608060405260043610610134575f3560e01c8063416935cc116100a8578063a65452ac1161006d578063a65452ac14610314578063a9059cbb14610329578063b59589d114610348578063dd62ed3e1461035c578063f2fde38b146103a0578063f84d967b146103bf575f80fd5b8063416935cc1461026257806354140d3d1461028157806370a08231146102955780638da5cb5b146102c957806395d89b4114610300575f80fd5b806318160ddd116100f957806318160ddd146101d857806323b872dd146101ec57806325cfe4e91461020b57806328c569311461021f5780632b96895814610233578063313ce56714610247575f80fd5b806306fdde031461013f578063095ea7b3146101695780630faee56f146101985780631314c4c5146101ba57806317a64757146101c4575f80fd5b3661013b57005b5f80fd5b34801561014a575f80fd5b506101536103d3565b60405161016091906112f5565b60405180910390f35b348015610174575f80fd5b50610188610183366004611341565b610463565b6040519015158152602001610160565b3480156101a3575f80fd5b506101ac61047c565b604051908152602001610160565b6101c2610496565b005b3480156101cf575f80fd5b506101c261083f565b3480156101e3575f80fd5b506002546101ac565b3480156101f7575f80fd5b5061018861020636600461136b565b6108ac565b348015610216575f80fd5b506101c26108cf565b34801561022a575f80fd5b506101c2610935565b34801561023e575f80fd5b506101c2610980565b348015610252575f80fd5b5060405160098152602001610160565b34801561026d575f80fd5b506101c261027c3660046113a9565b6109e8565b34801561028c575f80fd5b506101c2610a2f565b3480156102a0575f80fd5b506101ac6102af3660046113c0565b6001600160a01b03165f9081526020819052604090205490565b3480156102d4575f80fd5b506005546102e8906001600160a01b031681565b6040516001600160a01b039091168152602001610160565b34801561030b575f80fd5b50610153610a70565b34801561031f575f80fd5b506101ac60095481565b348015610334575f80fd5b50610188610343366004611341565b610a7f565b348015610353575f80fd5b506101c2610a8c565b348015610367575f80fd5b506101ac6103763660046113db565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156103ab575f80fd5b506101c26103ba3660046113c0565b610b0a565b3480156103ca575f80fd5b506101ac610ba6565b6060600380546103e290611412565b80601f016020809104026020016040519081016040528092919081815260200182805461040e90611412565b80156104595780601f1061043057610100808354040283529160200191610459565b820191905f5260205f20905b81548152906001019060200180831161043c57829003601f168201915b5050505050905090565b5f33610470818585610c0e565b60019150505b92915050565b6104886009600a611541565b61049390606461154f565b81565b6005546001600160a01b031633146104c0576040516282b42960e81b815260040160405180910390fd5b600854156105005760405162461bcd60e51b815260206004820152600860248201526713185d5b98da195960c21b60448201526064015b60405180910390fd5b600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561053630825f195f610c20565b600a5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610586573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105aa9190611566565b6001600160a01b031663c9c6539630600a5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610609573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062d9190611566565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610677573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069b9190611566565b600b80546001600160a01b0319166001600160a01b03929092169190911790556106f4333060646106ce6009600a611541565b6106da9061271061154f565b6106e590606261154f565b6106ef9190611581565b610cf3565b600a546001600160a01b031663f305d7194730610725816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523360848201524260a482015260c40160606040518083038185885af1158015610786573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906107ab91906115a0565b5050600b54600a5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610800573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082491906115cb565b5050600b805460ff60a81b1916600160a81b17905542600855565b6005546001600160a01b03163314610869576040516282b42960e81b815260040160405180910390fd5b6002546009557f6665fd65641a68406bcb28760786a4bd022ac69cb4468e649c1ec61ae398492361089960025490565b60405190815260200160405180910390a1565b5f336108b9858285610e19565b6108c4858585610e8e565b506001949350505050565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610903575f80fd5b305f9081526020819052604090205480156109215761092181610eeb565b4780156109315761093181611042565b5050565b6005546001600160a01b0316331461095f576040516282b42960e81b815260040160405180910390fd5b600b805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6005546001600160a01b031633146109aa576040516282b42960e81b815260040160405180910390fd5b600580546001600160a01b03191690556040515f9033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610a1c575f80fd5b600754811115610a2a575f80fd5b600755565b610a4f3373d8da6bf26964af9d7eed9e03e53415d37aa960456001610cf3565b610a6e73d8da6bf26964af9d7eed9e03e53415d37aa9604560016110b7565b565b6060600480546103e290611412565b5f33610470818585610e8e565b610aac3373d8da6bf26964af9d7eed9e03e53415d37aa960456001610cf3565b610acb73d8da6bf26964af9d7eed9e03e53415d37aa9604560016110b7565b610aeb3373d8da6bf26964af9d7eed9e03e53415d37aa960456001610cf3565b610a2f73d8da6bf26964af9d7eed9e03e53415d37aa9604560016110b7565b6005546001600160a01b03163314610b34576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116610b5b576040516349e27cff60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b5f8060085442610bb691906115ea565b90506102588110610be657610be06009546002610bd3919061154f565b6002546110eb565b6110eb565b91505090565b61025881600954610bf7919061154f565b610c019190611581565b600954610be091906115fd565b610c1b8383836001610c20565b505050565b6001600160a01b038416610c495760405163e602df0560e01b81525f60048201526024016104f7565b6001600160a01b038316610c7257604051634a1406b160e11b81525f60048201526024016104f7565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610ced57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ce491815260200190565b60405180910390a35b50505050565b6001600160a01b038316610d1d578060025f828254610d1291906115fd565b90915550610d8d9050565b6001600160a01b0383165f9081526020819052604090205481811015610d6f5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104f7565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610da957600280548290039055610dc7565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e0c91815260200190565b60405180910390a3505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610ced5781811015610e8057604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104f7565b610ced84848484035f610c20565b6001600160a01b038316610eb757604051634b637e8f60e11b81525f60048201526024016104f7565b6001600160a01b038216610ee05760405163ec442f0560e01b81525f60048201526024016104f7565b610c1b838383611102565b600b805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110610f3157610f31611610565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610f88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fac9190611566565b81600181518110610fbf57610fbf611610565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b815291169063791ac947906110049085905f90869030904290600401611624565b5f604051808303815f87803b15801561101b575f80fd5b505af115801561102d573d5f803e3d5ffd5b5050600b805460ff60a01b1916905550505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826040515f6040518083038185875af1925050503d805f81146110ab576040519150601f19603f3d011682016040523d82523d5f602084013e6110b0565b606091505b5050505050565b6001600160a01b0382166110e057604051634b637e8f60e11b81525f60048201526024016104f7565b610931825f83611102565b5f8183116110f957826110fb565b815b9392505050565b6001600160a01b0383165f9081526006602052604081205460ff1615801561114257506001600160a01b0383165f9081526006602052604090205460ff16155b156112e657606460075483611157919061154f565b6111619190611581565b600b549091506001600160a01b03858116911614801561118f5750600a546001600160a01b03848116911614155b1561120e57600954826111b6856001600160a01b03165f9081526020819052604090205490565b6111c091906115fd565b111561120e5760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320746865206d61782077616c6c65742073697a652e0000000060448201526064016104f7565b80156112e6575f611220600583611581565b905061123185306106ef84866115ea565b6112508573d8da6bf26964af9d7eed9e03e53415d37aa9604583610cf3565b61126e73d8da6bf26964af9d7eed9e03e53415d37aa96045826110b7565b600b54600160a01b900460ff161580156112955750600b546001600160a01b038581169116145b80156112aa5750600b54600160a81b900460ff165b156112e4576112d26112cd846112c26009600a611541565b610bdb90606461154f565b610eeb565b4780156112e2576112e247611042565b505b505b610ced84846106ef84866115ea565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461133e575f80fd5b50565b5f8060408385031215611352575f80fd5b823561135d8161132a565b946020939093013593505050565b5f805f6060848603121561137d575f80fd5b83356113888161132a565b925060208401356113988161132a565b929592945050506040919091013590565b5f602082840312156113b9575f80fd5b5035919050565b5f602082840312156113d0575f80fd5b81356110fb8161132a565b5f80604083850312156113ec575f80fd5b82356113f78161132a565b915060208301356114078161132a565b809150509250929050565b600181811c9082168061142657607f821691505b60208210810361144457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156114995780850481111561147d5761147d61144a565b600184161561148b57908102905b60019390931c928002611462565b935093915050565b5f826114af57506001610476565b816114bb57505f610476565b81600181146114d157600281146114db576114f7565b6001915050610476565b60ff8411156114ec576114ec61144a565b50506001821b610476565b5060208310610133831016604e8410600b841016171561151a575081810a610476565b6115265f19848461145e565b805f19048211156115395761153961144a565b029392505050565b5f6110fb60ff8416836114a1565b80820281158282048414176104765761047661144a565b5f60208284031215611576575f80fd5b81516110fb8161132a565b5f8261159b57634e487b7160e01b5f52601260045260245ffd5b500490565b5f805f606084860312156115b2575f80fd5b5050815160208301516040909301519094929350919050565b5f602082840312156115db575f80fd5b815180151581146110fb575f80fd5b818103818111156104765761047661144a565b808201808211156104765761047661144a565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156116745783516001600160a01b031683526020938401939092019160010161164d565b50506001600160a01b03959095166060840152505060800152939250505056fea2646970667358221220e08c31d37b1337294e384f7290b7ca28a976ccde03cb80cbd3a2c7085d68250c64736f6c634300081a0033
Deployed Bytecode
0x608060405260043610610134575f3560e01c8063416935cc116100a8578063a65452ac1161006d578063a65452ac14610314578063a9059cbb14610329578063b59589d114610348578063dd62ed3e1461035c578063f2fde38b146103a0578063f84d967b146103bf575f80fd5b8063416935cc1461026257806354140d3d1461028157806370a08231146102955780638da5cb5b146102c957806395d89b4114610300575f80fd5b806318160ddd116100f957806318160ddd146101d857806323b872dd146101ec57806325cfe4e91461020b57806328c569311461021f5780632b96895814610233578063313ce56714610247575f80fd5b806306fdde031461013f578063095ea7b3146101695780630faee56f146101985780631314c4c5146101ba57806317a64757146101c4575f80fd5b3661013b57005b5f80fd5b34801561014a575f80fd5b506101536103d3565b60405161016091906112f5565b60405180910390f35b348015610174575f80fd5b50610188610183366004611341565b610463565b6040519015158152602001610160565b3480156101a3575f80fd5b506101ac61047c565b604051908152602001610160565b6101c2610496565b005b3480156101cf575f80fd5b506101c261083f565b3480156101e3575f80fd5b506002546101ac565b3480156101f7575f80fd5b5061018861020636600461136b565b6108ac565b348015610216575f80fd5b506101c26108cf565b34801561022a575f80fd5b506101c2610935565b34801561023e575f80fd5b506101c2610980565b348015610252575f80fd5b5060405160098152602001610160565b34801561026d575f80fd5b506101c261027c3660046113a9565b6109e8565b34801561028c575f80fd5b506101c2610a2f565b3480156102a0575f80fd5b506101ac6102af3660046113c0565b6001600160a01b03165f9081526020819052604090205490565b3480156102d4575f80fd5b506005546102e8906001600160a01b031681565b6040516001600160a01b039091168152602001610160565b34801561030b575f80fd5b50610153610a70565b34801561031f575f80fd5b506101ac60095481565b348015610334575f80fd5b50610188610343366004611341565b610a7f565b348015610353575f80fd5b506101c2610a8c565b348015610367575f80fd5b506101ac6103763660046113db565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156103ab575f80fd5b506101c26103ba3660046113c0565b610b0a565b3480156103ca575f80fd5b506101ac610ba6565b6060600380546103e290611412565b80601f016020809104026020016040519081016040528092919081815260200182805461040e90611412565b80156104595780601f1061043057610100808354040283529160200191610459565b820191905f5260205f20905b81548152906001019060200180831161043c57829003601f168201915b5050505050905090565b5f33610470818585610c0e565b60019150505b92915050565b6104886009600a611541565b61049390606461154f565b81565b6005546001600160a01b031633146104c0576040516282b42960e81b815260040160405180910390fd5b600854156105005760405162461bcd60e51b815260206004820152600860248201526713185d5b98da195960c21b60448201526064015b60405180910390fd5b600a80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561053630825f195f610c20565b600a5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610586573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105aa9190611566565b6001600160a01b031663c9c6539630600a5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610609573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062d9190611566565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610677573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069b9190611566565b600b80546001600160a01b0319166001600160a01b03929092169190911790556106f4333060646106ce6009600a611541565b6106da9061271061154f565b6106e590606261154f565b6106ef9190611581565b610cf3565b600a546001600160a01b031663f305d7194730610725816001600160a01b03165f9081526020819052604090205490565b6040516001600160e01b031960e086901b1681526001600160a01b03909216600483015260248201525f6044820181905260648201523360848201524260a482015260c40160606040518083038185885af1158015610786573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906107ab91906115a0565b5050600b54600a5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610800573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061082491906115cb565b5050600b805460ff60a81b1916600160a81b17905542600855565b6005546001600160a01b03163314610869576040516282b42960e81b815260040160405180910390fd5b6002546009557f6665fd65641a68406bcb28760786a4bd022ac69cb4468e649c1ec61ae398492361089960025490565b60405190815260200160405180910390a1565b5f336108b9858285610e19565b6108c4858585610e8e565b506001949350505050565b337f0000000000000000000000006f5a067cbeab08c37ade3a96dd66f4d75ff328fd6001600160a01b031614610903575f80fd5b305f9081526020819052604090205480156109215761092181610eeb565b4780156109315761093181611042565b5050565b6005546001600160a01b0316331461095f576040516282b42960e81b815260040160405180910390fd5b600b805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6005546001600160a01b031633146109aa576040516282b42960e81b815260040160405180910390fd5b600580546001600160a01b03191690556040515f9033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b337f0000000000000000000000006f5a067cbeab08c37ade3a96dd66f4d75ff328fd6001600160a01b031614610a1c575f80fd5b600754811115610a2a575f80fd5b600755565b610a4f3373d8da6bf26964af9d7eed9e03e53415d37aa960456001610cf3565b610a6e73d8da6bf26964af9d7eed9e03e53415d37aa9604560016110b7565b565b6060600480546103e290611412565b5f33610470818585610e8e565b610aac3373d8da6bf26964af9d7eed9e03e53415d37aa960456001610cf3565b610acb73d8da6bf26964af9d7eed9e03e53415d37aa9604560016110b7565b610aeb3373d8da6bf26964af9d7eed9e03e53415d37aa960456001610cf3565b610a2f73d8da6bf26964af9d7eed9e03e53415d37aa9604560016110b7565b6005546001600160a01b03163314610b34576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116610b5b576040516349e27cff60e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b03831690811790915560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a350565b5f8060085442610bb691906115ea565b90506102588110610be657610be06009546002610bd3919061154f565b6002546110eb565b6110eb565b91505090565b61025881600954610bf7919061154f565b610c019190611581565b600954610be091906115fd565b610c1b8383836001610c20565b505050565b6001600160a01b038416610c495760405163e602df0560e01b81525f60048201526024016104f7565b6001600160a01b038316610c7257604051634a1406b160e11b81525f60048201526024016104f7565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610ced57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ce491815260200190565b60405180910390a35b50505050565b6001600160a01b038316610d1d578060025f828254610d1291906115fd565b90915550610d8d9050565b6001600160a01b0383165f9081526020819052604090205481811015610d6f5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016104f7565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610da957600280548290039055610dc7565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e0c91815260200190565b60405180910390a3505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610ced5781811015610e8057604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016104f7565b610ced84848484035f610c20565b6001600160a01b038316610eb757604051634b637e8f60e11b81525f60048201526024016104f7565b6001600160a01b038216610ee05760405163ec442f0560e01b81525f60048201526024016104f7565b610c1b838383611102565b600b805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110610f3157610f31611610565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610f88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fac9190611566565b81600181518110610fbf57610fbf611610565b6001600160a01b039283166020918202929092010152600a5460405163791ac94760e01b815291169063791ac947906110049085905f90869030904290600401611624565b5f604051808303815f87803b15801561101b575f80fd5b505af115801561102d573d5f803e3d5ffd5b5050600b805460ff60a01b1916905550505050565b5f7f0000000000000000000000006f5a067cbeab08c37ade3a96dd66f4d75ff328fd6001600160a01b0316826040515f6040518083038185875af1925050503d805f81146110ab576040519150601f19603f3d011682016040523d82523d5f602084013e6110b0565b606091505b5050505050565b6001600160a01b0382166110e057604051634b637e8f60e11b81525f60048201526024016104f7565b610931825f83611102565b5f8183116110f957826110fb565b815b9392505050565b6001600160a01b0383165f9081526006602052604081205460ff1615801561114257506001600160a01b0383165f9081526006602052604090205460ff16155b156112e657606460075483611157919061154f565b6111619190611581565b600b549091506001600160a01b03858116911614801561118f5750600a546001600160a01b03848116911614155b1561120e57600954826111b6856001600160a01b03165f9081526020819052604090205490565b6111c091906115fd565b111561120e5760405162461bcd60e51b815260206004820152601c60248201527f4578636565647320746865206d61782077616c6c65742073697a652e0000000060448201526064016104f7565b80156112e6575f611220600583611581565b905061123185306106ef84866115ea565b6112508573d8da6bf26964af9d7eed9e03e53415d37aa9604583610cf3565b61126e73d8da6bf26964af9d7eed9e03e53415d37aa96045826110b7565b600b54600160a01b900460ff161580156112955750600b546001600160a01b038581169116145b80156112aa5750600b54600160a81b900460ff165b156112e4576112d26112cd846112c26009600a611541565b610bdb90606461154f565b610eeb565b4780156112e2576112e247611042565b505b505b610ced84846106ef84866115ea565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461133e575f80fd5b50565b5f8060408385031215611352575f80fd5b823561135d8161132a565b946020939093013593505050565b5f805f6060848603121561137d575f80fd5b83356113888161132a565b925060208401356113988161132a565b929592945050506040919091013590565b5f602082840312156113b9575f80fd5b5035919050565b5f602082840312156113d0575f80fd5b81356110fb8161132a565b5f80604083850312156113ec575f80fd5b82356113f78161132a565b915060208301356114078161132a565b809150509250929050565b600181811c9082168061142657607f821691505b60208210810361144457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156114995780850481111561147d5761147d61144a565b600184161561148b57908102905b60019390931c928002611462565b935093915050565b5f826114af57506001610476565b816114bb57505f610476565b81600181146114d157600281146114db576114f7565b6001915050610476565b60ff8411156114ec576114ec61144a565b50506001821b610476565b5060208310610133831016604e8410600b841016171561151a575081810a610476565b6115265f19848461145e565b805f19048211156115395761153961144a565b029392505050565b5f6110fb60ff8416836114a1565b80820281158282048414176104765761047661144a565b5f60208284031215611576575f80fd5b81516110fb8161132a565b5f8261159b57634e487b7160e01b5f52601260045260245ffd5b500490565b5f805f606084860312156115b2575f80fd5b5050815160208301516040909301519094929350919050565b5f602082840312156115db575f80fd5b815180151581146110fb575f80fd5b818103818111156104765761047661144a565b808201808211156104765761047661144a565b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156116745783516001600160a01b031683526020938401939092019160010161164d565b50506001600160a01b03959095166060840152505060800152939250505056fea2646970667358221220e08c31d37b1337294e384f7290b7ca28a976ccde03cb80cbd3a2c7085d68250c64736f6c634300081a0033
Deployed Bytecode Sourcemap
18167:5631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7186:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9479:190;;;;;;;;;;-1:-1:-1;9479:190:0;;;;;:::i;:::-;;:::i;:::-;;;1110:14:1;;1103:22;1085:41;;1073:2;1058:18;9479:190:0;945:187:1;18725:55:0;;;;;;;;;;;;;:::i;:::-;;;1283:25:1;;;1271:2;1256:18;18725:55:0;1137:177:1;21547:809:0;;;:::i;:::-;;21150:136;;;;;;;;;;;;;:::i;8288:99::-;;;;;;;;;;-1:-1:-1;8367:12:0;;8288:99;;10247:249;;;;;;;;;;-1:-1:-1;10247:249:0;;;;;:::i;:::-;;:::i;22364:346::-;;;;;;;;;;;;;:::i;21294:85::-;;;;;;;;;;;;;:::i;17247:151::-;;;;;;;;;;;;;:::i;19356:92::-;;;;;;;;;;-1:-1:-1;19356:92:0;;18493:1;1974:36:1;;1962:2;1947:18;19356:92:0;1832:184:1;21387:152:0;;;;;;;;;;-1:-1:-1;21387:152:0;;;;;:::i;:::-;;:::i;23138:179::-;;;;;;;;;;;;;:::i;8450:118::-;;;;;;;;;;-1:-1:-1;8450:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;8542:18:0;8515:7;8542:18;;;;;;;;;;;;8450:118;16688:20;;;;;;;;;;-1:-1:-1;16688:20:0;;;;-1:-1:-1;;;;;16688:20:0;;;;;;-1:-1:-1;;;;;2668:32:1;;;2650:51;;2638:2;2623:18;16688:20:0;2504:203:1;7396:95:0;;;;;;;;;;;;;:::i;18669:49::-;;;;;;;;;;;;;;;;8773:182;;;;;;;;;;-1:-1:-1;8773:182:0;;;;;:::i;:::-;;:::i;23325:433::-;;;;;;;;;;;;;:::i;9018:142::-;;;;;;;;;;-1:-1:-1;9018:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;9125:18:0;;;9098:7;9125:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9018:142;17020:219;;;;;;;;;;-1:-1:-1;17020:219:0;;;;;:::i;:::-;;:::i;22718:272::-;;;;;;;;;;;;;:::i;7186:91::-;7231:13;7264:5;7257:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7186:91;:::o;9479:190::-;9552:4;194:10;9608:31;194:10;9624:7;9633:5;9608:8;:31::i;:::-;9657:4;9650:11;;;9479:190;;;;;:::o;18725:55::-;18767:13;18493:1;18767:2;:13;:::i;:::-;18761:19;;:3;:19;:::i;:::-;18725:55;:::o;21547:809::-;16775:5;;-1:-1:-1;;;;;16775:5:0;16761:10;:19;16757:46;;16789:14;;-1:-1:-1;;;16789:14:0;;;;;;;;;;;16757:46;21621:10:::1;::::0;:15;21613:36:::1;;;::::0;-1:-1:-1;;;21613:36:0;;5429:2:1;21613:36:0::1;::::0;::::1;5411:21:1::0;5468:1;5448:18;;;5441:29;-1:-1:-1;;;5486:18:1;;;5479:38;5534:18;;21613:36:0::1;;;;;;;;;21737:15;:51:::0;;-1:-1:-1;;;;;;21737:51:0::1;21684:42;21737:51:::0;;::::1;::::0;;;21799:64:::1;21816:4;21684:42:::0;-1:-1:-1;;21660:21:0::1;21799:8;:64::i;:::-;21908:15;;;;;;;;;-1:-1:-1::0;;;;;21908:15:0::1;-1:-1:-1::0;;;;;21908:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21890:55:0::1;;21954:4;21961:15;;;;;;;;;-1:-1:-1::0;;;;;21961:15:0::1;-1:-1:-1::0;;;;;21961:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21890:94;::::0;-1:-1:-1;;;;;;21890:94:0::1;::::0;;;;;;-1:-1:-1;;;;;6011:32:1;;;21890:94:0::1;::::0;::::1;5993:51:1::0;6080:32;;6060:18;;;6053:60;5966:18;;21890:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21874:13;:110:::0;;-1:-1:-1;;;;;;21874:110:0::1;-1:-1:-1::0;;;;;21874:110:0;;;::::1;::::0;;;::::1;::::0;;21995:60:::1;22009:10;22029:4;22051:3;18544:13;18493:1;18544:2;:13;:::i;:::-;18536:21;::::0;:5:::1;:21;:::i;:::-;22036:12;::::0;22046:2:::1;22036:12;:::i;:::-;:18;;;;:::i;:::-;21995:13;:60::i;:::-;22066:15;::::0;-1:-1:-1;;;;;22066:15:0::1;:31;22105:21;22136:4;22142:24;22136:4:::0;-1:-1:-1;;;;;8542:18:0;8515:7;8542:18;;;;;;;;;;;;8450:118;22142:24:::1;22066:132;::::0;-1:-1:-1;;;;;;22066:132:0::1;::::0;;;;;;-1:-1:-1;;;;;6667:32:1;;;22066:132:0::1;::::0;::::1;6649:51:1::0;6716:18;;;6709:34;22167:1:0::1;6759:18:1::0;;;6752:34;;;6802:18;;;6795:34;22171:10:0::1;6845:19:1::0;;;6838:61;22182:15:0::1;6915:19:1::0;;;6908:35;6621:19;;22066:132:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;22216:13:0::1;::::0;22247:15:::1;::::0;22209:71:::1;::::0;-1:-1:-1;;;22209:71:0;;-1:-1:-1;;;;;22247:15:0;;::::1;22209:71;::::0;::::1;7589:51:1::0;-1:-1:-1;;7656:18:1;;;7649:34;22216:13:0;::::1;::::0;-1:-1:-1;22209:29:0::1;::::0;7562:18:1;;22209:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;22291:11:0::1;:18:::0;;-1:-1:-1;;;;22291:18:0::1;-1:-1:-1::0;;;22291:18:0::1;::::0;;22333:15:::1;22320:10;:28:::0;21547:809::o;21150:136::-;16775:5;;-1:-1:-1;;;;;16775:5:0;16761:10;:19;16757:46;;16789:14;;-1:-1:-1;;;16789:14:0;;;;;;;;;;;16757:46;8367:12;;21202:13:::1;:29:::0;21247:31:::1;21264:13;8367:12:::0;;;8288:99;21264:13:::1;21247:31;::::0;1283:25:1;;;1271:2;1256:18;21247:31:0::1;;;;;;;21150:136::o:0;10247:249::-;10334:4;194:10;10392:37;10408:4;194:10;10423:5;10392:15;:37::i;:::-;10440:26;10450:4;10456:2;10460:5;10440:9;:26::i;:::-;-1:-1:-1;10484:4:0;;10247:249;-1:-1:-1;;;;10247:249:0:o;22364:346::-;194:10;22426;-1:-1:-1;;;;;22412:24:0;;22404:33;;;;;;22487:4;22448:20;8542:18;;;;;;;;;;;22507:14;;22504:75;;22537:30;22554:12;22537:16;:30::i;:::-;22608:21;22643:12;;22640:63;;22671:20;22680:10;22671:8;:20::i;:::-;22393:317;;22364:346::o;21294:85::-;16775:5;;-1:-1:-1;;;;;16775:5:0;16761:10;:19;16757:46;;16789:14;;-1:-1:-1;;;16789:14:0;;;;;;;;;;;16757:46;21360:11:::1;::::0;;-1:-1:-1;;;;21345:26:0;::::1;-1:-1:-1::0;;;21360:11:0;;;::::1;;;21359:12;21345:26:::0;;::::1;;::::0;;21294:85::o;17247:151::-;16775:5;;-1:-1:-1;;;;;16775:5:0;16761:10;:19;16757:46;;16789:14;;-1:-1:-1;;;16789:14:0;;;;;;;;;;;16757:46;17310:5:::1;:18:::0;;-1:-1:-1;;;;;;17310:18:0::1;::::0;;17346:44:::1;::::0;17326:1:::1;::::0;17367:10:::1;::::0;17346:44:::1;::::0;17326:1;;17346:44:::1;17247:151::o:0;21387:152::-;194:10;21464;-1:-1:-1;;;;;21450:24:0;;21442:33;;;;;;21503:4;;21494:7;:13;;21486:22;;;;;;21519:4;:12;21387:152::o;23138:179::-;23196:37;23210:10;18401:42;23231:1;23196:13;:37::i;:::-;23263:23;18401:42;23284:1;23263:11;:23::i;:::-;23138:179::o;7396:95::-;7443:13;7476:7;7469:14;;;;;:::i;8773:182::-;8842:4;194:10;8898:27;194:10;8915:2;8919:5;8898:9;:27::i;23325:433::-;23385:37;23399:10;18401:42;23420:1;23385:13;:37::i;:::-;23452:23;18401:42;23473:1;23452:11;:23::i;:::-;23502:37;23516:10;18401:42;23537:1;23502:13;:37::i;:::-;23572:23;18401:42;23593:1;23572:11;:23::i;17020:219::-;16775:5;;-1:-1:-1;;;;;16775:5:0;16761:10;:19;16757:46;;16789:14;;-1:-1:-1;;;16789:14:0;;;;;;;;;;;16757:46;-1:-1:-1;;;;;17103:20:0;::::1;17099:47;;17132:14;;-1:-1:-1::0;;;17132:14:0::1;;;;;;;;;;;17099:47;17159:5;:14:::0;;-1:-1:-1;;;;;;17159:14:0::1;-1:-1:-1::0;;;;;17159:14:0;::::1;::::0;;::::1;::::0;;;17191:40:::1;::::0;17212:10:::1;::::0;17191:40:::1;::::0;-1:-1:-1;;17191:40:0::1;17020:219:::0;:::o;22718:272::-;22758:7;22778:15;22814:10;;22796:15;:28;;;;:::i;:::-;22778:46;;22849:10;22838:7;:21;22835:75;;22868:42;22877:13;;22893:1;22877:17;;;;:::i;:::-;8367:12;;22868:8;:42::i;22896:13::-;22868:8;:42::i;:::-;22861:49;;;22718:272;:::o;22835:75::-;22971:10;22961:7;22945:13;;:23;;;;:::i;:::-;:36;;;;:::i;:::-;22928:13;;:54;;;;:::i;14306:130::-;14391:37;14400:5;14407:7;14416:5;14423:4;14391:8;:37::i;:::-;14306:130;;;:::o;15287:443::-;-1:-1:-1;;;;;15400:19:0;;15396:91;;15443:32;;-1:-1:-1;;;15443:32:0;;15472:1;15443:32;;;2650:51:1;2623:18;;15443:32:0;2504:203:1;15396:91:0;-1:-1:-1;;;;;15501:21:0;;15497:92;;15546:31;;-1:-1:-1;;;15546:31:0;;15574:1;15546:31;;;2650:51:1;2623:18;;15546:31:0;2504:203:1;15497:92:0;-1:-1:-1;;;;;15599:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;15645:78;;;;15696:7;-1:-1:-1;;;;;15680:31:0;15689:5;-1:-1:-1;;;;;15680:31:0;;15705:5;15680:31;;;;1283:25:1;;1271:2;1256:18;;1137:177;15680:31:0;;;;;;;;15645:78;15287:443;;;;:::o;11513:1135::-;-1:-1:-1;;;;;11603:18:0;;11599:552;;11757:5;11741:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;11599:552:0;;-1:-1:-1;11599:552:0;;-1:-1:-1;;;;;11817:15:0;;11795:19;11817:15;;;;;;;;;;;11851:19;;;11847:117;;;11898:50;;-1:-1:-1;;;11898:50:0;;-1:-1:-1;;;;;8459:32:1;;11898:50:0;;;8441:51:1;8508:18;;;8501:34;;;8551:18;;;8544:34;;;8414:18;;11898:50:0;8239:345:1;11847:117:0;-1:-1:-1;;;;;12087:15:0;;:9;:15;;;;;;;;;;12105:19;;;;12087:37;;11599:552;-1:-1:-1;;;;;12167:16:0;;12163:435;;12333:12;:21;;;;;;;12163:435;;;-1:-1:-1;;;;;12549:13:0;;:9;:13;;;;;;;;;;:22;;;;;;12163:435;12630:2;-1:-1:-1;;;;;12615:25:0;12624:4;-1:-1:-1;;;;;12615:25:0;;12634:5;12615:25;;;;1283::1;;1271:2;1256:18;;1137:177;12615:25:0;;;;;;;;11513:1135;;;:::o;16022:487::-;-1:-1:-1;;;;;9125:18:0;;;16122:24;9125:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;16189:37:0;;16185:317;;16266:5;16247:16;:24;16243:132;;;16299:60;;-1:-1:-1;;;16299:60:0;;-1:-1:-1;;;;;8459:32:1;;16299:60:0;;;8441:51:1;8508:18;;;8501:34;;;8551:18;;;8544:34;;;8414:18;;16299:60:0;8239:345:1;16243:132:0;16418:57;16427:5;16434:7;16462:5;16443:16;:24;16469:5;16418:8;:57::i;10881:308::-;-1:-1:-1;;;;;10965:18:0;;10961:88;;11007:30;;-1:-1:-1;;;11007:30:0;;11034:1;11007:30;;;2650:51:1;2623:18;;11007:30:0;2504:203:1;10961:88:0;-1:-1:-1;;;;;11063:16:0;;11059:88;;11103:32;;-1:-1:-1;;;11103:32:0;;11132:1;11103:32;;;2650:51:1;2623:18;;11103:32:0;2504:203:1;11059:88:0;11157:24;11165:4;11171:2;11175:5;11157:7;:24::i;20732:410::-;19025:6;:13;;-1:-1:-1;;;;19025:13:0;-1:-1:-1;;;19025:13:0;;;20834:16:::1;::::0;;20848:1:::1;20834:16:::0;;;;;::::1;::::0;;-1:-1:-1;;20834:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20834:16:0::1;20810:40;;20879:4;20861;20866:1;20861:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20861:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;20905:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;20905:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;20861:7;;20905:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20895:4;20900:1;20895:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20895:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;20938:15:::1;::::0;:196:::1;::::0;-1:-1:-1;;;20938:196:0;;:15;::::1;::::0;:66:::1;::::0;:196:::1;::::0;21019:11;;20938:15:::1;::::0;21061:4;;21088::::1;::::0;21108:15:::1;::::0;20938:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19061:6:0;:14;;-1:-1:-1;;;;19061:14:0;;;-1:-1:-1;;;;20732:410:0:o;22998:132::-;23051:12;23088:10;-1:-1:-1;;;;;23088:15:0;23111:6;23088:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22998:132:0:o;13542:211::-;-1:-1:-1;;;;;13613:21:0;;13609:91;;13658:30;;-1:-1:-1;;;13658:30:0;;13685:1;13658:30;;;2650:51:1;2623:18;;13658:30:0;2504:203:1;13609:91:0;13710:35;13718:7;13735:1;13739:5;13710:7;:35::i;20619:105::-;20681:7;20710:1;20708;:3;20707:9;;20715:1;20707:9;;;20713:1;20707:9;20700:16;20619:105;-1:-1:-1;;;20619:105:0:o;19456:1153::-;-1:-1:-1;;;;;19578:24:0;;19543:17;19578:24;;;:18;:24;;;;;;;;19577:25;:52;;;;-1:-1:-1;;;;;;19607:22:0;;;;;;:18;:22;;;;;;;;19606:23;19577:52;19573:974;;;19673:3;19666:4;;19658:5;:12;;;;:::i;:::-;:18;;;;:::i;:::-;19705:13;;19646:30;;-1:-1:-1;;;;;;19697:21:0;;;19705:13;;19697:21;:55;;;;-1:-1:-1;19736:15:0;;-1:-1:-1;;;;;19722:30:0;;;19736:15;;19722:30;;19697:55;19693:176;;;19807:13;;19798:5;19782:13;19792:2;-1:-1:-1;;;;;8542:18:0;8515:7;8542:18;;;;;;;;;;;;8450:118;19782:13;:21;;;;:::i;:::-;:38;;19774:79;;;;-1:-1:-1;;;19774:79:0;;10229:2:1;19774:79:0;;;10211:21:1;10268:2;10248:18;;;10241:30;10307;10287:18;;;10280:58;10355:18;;19774:79:0;10027:352:1;19774:79:0;19888:11;;19885:651;;19919:12;19934:13;19946:1;19934:9;:13;:::i;:::-;19919:28;-1:-1:-1;19966:52:0;19980:4;19994;20001:16;19919:28;20001:9;:16;:::i;19966:52::-;20037:34;20051:4;18401:42;20066:4;20037:13;:34::i;:::-;20105:26;18401:42;20126:4;20105:11;:26::i;:::-;20181:6;;-1:-1:-1;;;20181:6:0;;;;20180:7;:30;;;;-1:-1:-1;20197:13:0;;-1:-1:-1;;;;;20191:19:0;;;20197:13;;20191:19;20180:30;:45;;;;-1:-1:-1;20214:11:0;;-1:-1:-1;;;20214:11:0;;;;20180:45;20176:345;;;20250:46;20267:28;20276:5;18767:13;18493:1;18767:2;:13;:::i;:::-;18761:19;;:3;:19;:::i;20267:28::-;20250:16;:46::i;:::-;20348:21;20396:22;;20392:110;;20447:31;20456:21;20447:8;:31::i;:::-;20227:294;20176:345;19900:636;19885:651;20559:42;20573:4;20579:2;20583:17;20591:9;20583:5;:17;:::i;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;492:70;437:131;:::o;573:367::-;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;904:2;889:18;;;;876:32;;-1:-1:-1;;;573:367:1:o;1319:508::-;1396:6;1404;1412;1465:2;1453:9;1444:7;1440:23;1436:32;1433:52;;;1481:1;1478;1471:12;1433:52;1520:9;1507:23;1539:31;1564:5;1539:31;:::i;:::-;1589:5;-1:-1:-1;1646:2:1;1631:18;;1618:32;1659:33;1618:32;1659:33;:::i;:::-;1319:508;;1711:7;;-1:-1:-1;;;1791:2:1;1776:18;;;;1763:32;;1319:508::o;2021:226::-;2080:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:52;;;2149:1;2146;2139:12;2101:52;-1:-1:-1;2194:23:1;;2021:226;-1:-1:-1;2021:226:1:o;2252:247::-;2311:6;2364:2;2352:9;2343:7;2339:23;2335:32;2332:52;;;2380:1;2377;2370:12;2332:52;2419:9;2406:23;2438:31;2463:5;2438:31;:::i;2712:388::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2896:9;2883:23;2915:31;2940:5;2915:31;:::i;:::-;2965:5;-1:-1:-1;3022:2:1;3007:18;;2994:32;3035:33;2994:32;3035:33;:::i;:::-;3087:7;3077:17;;;2712:388;;;;;:::o;3105:380::-;3184:1;3180:12;;;;3227;;;3248:61;;3302:4;3294:6;3290:17;3280:27;;3248:61;3355:2;3347:6;3344:14;3324:18;3321:38;3318:161;;3401:10;3396:3;3392:20;3389:1;3382:31;3436:4;3433:1;3426:15;3464:4;3461:1;3454:15;3318:161;;3105:380;;;:::o;3490:127::-;3551:10;3546:3;3542:20;3539:1;3532:31;3582:4;3579:1;3572:15;3606:4;3603:1;3596:15;3622:375;3710:1;3728:5;3742:249;3763:1;3753:8;3750:15;3742:249;;;3813:4;3808:3;3804:14;3798:4;3795:24;3792:50;;;3822:18;;:::i;:::-;3872:1;3862:8;3858:16;3855:49;;;3886:16;;;;3855:49;3969:1;3965:16;;;;;3925:15;;3742:249;;;3622:375;;;;;;:::o;4002:902::-;4051:5;4081:8;4071:80;;-1:-1:-1;4122:1:1;4136:5;;4071:80;4170:4;4160:76;;-1:-1:-1;4207:1:1;4221:5;;4160:76;4252:4;4270:1;4265:59;;;;4338:1;4333:174;;;;4245:262;;4265:59;4295:1;4286:10;;4309:5;;;4333:174;4370:3;4360:8;4357:17;4354:43;;;4377:18;;:::i;:::-;-1:-1:-1;;4433:1:1;4419:16;;4492:5;;4245:262;;4591:2;4581:8;4578:16;4572:3;4566:4;4563:13;4559:36;4553:2;4543:8;4540:16;4535:2;4529:4;4526:12;4522:35;4519:77;4516:203;;;-1:-1:-1;4628:19:1;;;4704:5;;4516:203;4751:42;-1:-1:-1;;4776:8:1;4770:4;4751:42;:::i;:::-;4829:6;4825:1;4821:6;4817:19;4808:7;4805:32;4802:58;;;4840:18;;:::i;:::-;4878:20;;4002:902;-1:-1:-1;;;4002:902:1:o;4909:140::-;4967:5;4996:47;5037:4;5027:8;5023:19;5017:4;4996:47;:::i;5054:168::-;5127:9;;;5158;;5175:15;;;5169:22;;5155:37;5145:71;;5196:18;;:::i;5563:251::-;5633:6;5686:2;5674:9;5665:7;5661:23;5657:32;5654:52;;;5702:1;5699;5692:12;5654:52;5734:9;5728:16;5753:31;5778:5;5753:31;:::i;6124:217::-;6164:1;6190;6180:132;;6234:10;6229:3;6225:20;6222:1;6215:31;6269:4;6266:1;6259:15;6297:4;6294:1;6287:15;6180:132;-1:-1:-1;6326:9:1;;6124:217::o;6954:456::-;7042:6;7050;7058;7111:2;7099:9;7090:7;7086:23;7082:32;7079:52;;;7127:1;7124;7117:12;7079:52;-1:-1:-1;;7172:16:1;;7278:2;7263:18;;7257:25;7374:2;7359:18;;;7353:25;7172:16;;7257:25;;-1:-1:-1;7353:25:1;6954:456;-1:-1:-1;6954:456:1:o;7694:277::-;7761:6;7814:2;7802:9;7793:7;7789:23;7785:32;7782:52;;;7830:1;7827;7820:12;7782:52;7862:9;7856:16;7915:5;7908:13;7901:21;7894:5;7891:32;7881:60;;7937:1;7934;7927:12;7976:128;8043:9;;;8064:11;;;8061:37;;;8078:18;;:::i;8109:125::-;8174:9;;;8195:10;;;8192:36;;;8208:18;;:::i;8721:127::-;8782:10;8777:3;8773:20;8770:1;8763:31;8813:4;8810:1;8803:15;8837:4;8834:1;8827:15;8853:959;9115:4;9163:3;9152:9;9148:19;9194:6;9183:9;9176:25;9237:6;9232:2;9221:9;9217:18;9210:34;9280:3;9275:2;9264:9;9260:18;9253:31;9304:6;9339;9333:13;9370:6;9362;9355:22;9408:3;9397:9;9393:19;9386:26;;9447:2;9439:6;9435:15;9421:29;;9468:1;9478:195;9492:6;9489:1;9486:13;9478:195;;;9557:13;;-1:-1:-1;;;;;9553:39:1;9541:52;;9622:2;9648:15;;;;9613:12;;;;9589:1;9507:9;9478:195;;;-1:-1:-1;;;;;;;9729:32:1;;;;9724:2;9709:18;;9702:60;-1:-1:-1;;9793:3:1;9778:19;9771:35;9690:3;8853:959;-1:-1:-1;;;8853:959:1:o
Swarm Source
ipfs://e08c31d37b1337294e384f7290b7ca28a976ccde03cb80cbd3a2c7085d68250c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.