ERC-20
MEME
Overview
Max Total Supply
420,690,000 Wolf
Holders
4,356 ( 0.069%)
Market
Price
$0.01 @ 0.000003 ETH (-2.34%)
Onchain Market Cap
$3,649,519.41
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000136508846 WolfValue
$0.00 ( ~0 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | Uniswap V2 (Ethereum) | 0X9C7D4FB43919DEF524C1A9D92FE836169EAF0615-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2 | $0.0087 0.0000025 Eth | $17,899.30 1,983,676.077 0X9C7D4FB43919DEF524C1A9D92FE836169EAF0615 | 100.0000% |
Contract Source Code Verified (Exact Match)
Contract Name:
LandWolf
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-08 */ // SPDX-License-Identifier: Unlicensed /*Pepe's Best Fren web-https://wolfland.io/ x-https://twitter.com/landwolferc20/ tg-https://t.me/landwolf_token */ pragma solidity ^0.8.14; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract Ownable is Context { address private _owner; address private _previousOwner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); } contract LandWolf is Context, IERC20, Ownable { using SafeMath for uint256; string private constant _name = "Landwolf"; string private constant _symbol = "Wolf"; uint8 private constant _decimals = 18; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 420690000*10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 private _redisFeeOnBuy = 0; uint256 private _taxFeeOnBuy = 0; uint256 private _redisFeeOnSell = 0; uint256 private _taxFeeOnSell = 0; //Original Fee uint256 private _redisFee = _redisFeeOnSell; uint256 private _taxFee = _taxFeeOnSell; uint256 private _previousredisFee = _redisFee; uint256 private _previoustaxFee = _taxFee; mapping(address => bool) public bots; mapping(address => uint256) public _buyMap; mapping(address => bool) private botGuard; address payable private _developmentAddress = payable(0xaE859c9A2DE7FD2265293adEB45b01e8CF693a7B); address payable private _marketingAddress = payable(0xaE859c9A2DE7FD2265293adEB45b01e8CF693a7B); IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private tradingOpen; bool private inSwap = false; bool private swapEnabled = true; uint256 public _maxTxAmount = 4206900 * 10**18; uint256 public _maxWalletSize = 4206900 * 10**18; uint256 public _swapTokensAtAmount = 420690 * 10**18; event MaxTxAmountUpdated(uint256 _maxTxAmount); modifier lockTheSwap() { inSwap = true; _; inSwap = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_developmentAddress] = true; _isExcludedFromFee[_marketingAddress] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function tokenFromReflection(uint256 rAmount) private view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function removeAllFee() private { if (_redisFee == 0 && _taxFee == 0) return; _previousredisFee = _redisFee; _previoustaxFee = _taxFee; _redisFee = 0; _taxFee = 0; } function restoreAllFee() private { _redisFee = _previousredisFee; _taxFee = _previoustaxFee; } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); bool allowTransfer = false; if ( from != owner() && to != owner() && !botGuard[from] && !botGuard[to] ) { // Trade start check if (tradingOpen || botGuard[from]) { allowTransfer = true; } else { revert( "TOKEN: This account cannot send tokens until trading is enabled" ); } require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit"); require( !bots[from] && !bots[to], "TOKEN: Your account is blacklisted!" ); if (to != uniswapV2Pair) { require( balanceOf(to) + amount <= _maxWalletSize, "TOKEN: Balance exceeds wallet size!" ); } } else { // Apply max wallet size check for BotGuard addresses excluding uniswapV2Pair if (to != uniswapV2Pair) { require( balanceOf(to) + amount <= _maxWalletSize, "TOKEN: Balance exceeds wallet size!" ); } allowTransfer = true; } if (allowTransfer) { bool takeFee = true; // Transfer Tokens if ( (_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair) ) { takeFee = false; } else { // Set Fee for Buys if (from == uniswapV2Pair && to != address(uniswapV2Router)) { _redisFee = _redisFeeOnBuy; _taxFee = _taxFeeOnBuy; } // Set Fee for Sells if (to == uniswapV2Pair && from != address(uniswapV2Router)) { _redisFee = _redisFeeOnSell; _taxFee = _taxFeeOnSell; } } _tokenTransfer(from, to, amount, takeFee); } } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function sendETHToFee(uint256 amount) private { _marketingAddress.transfer(amount); } function setTrading(bool _tradingOpen) public onlyOwner { tradingOpen = _tradingOpen; } function manualswap() external { require( _msgSender() == _developmentAddress || _msgSender() == _marketingAddress ); uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualsend() external { require( _msgSender() == _developmentAddress || _msgSender() == _marketingAddress ); uint256 contractETHBalance = address(this).balance; sendETHToFee(contractETHBalance); } function blockBots(address[] memory bots_) public onlyOwner { for (uint256 i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } function unblockBot(address notbot) public onlyOwner { bots[notbot] = false; } function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!takeFee) removeAllFee(); _transferStandard(sender, recipient, amount); if (!takeFee) restoreAllFee(); } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeTeam(tTeam); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _takeTeam(uint256 tTeam) private { uint256 currentRate = _getRate(); uint256 rTeam = tTeam.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rTeam); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } receive() external payable {} function _getValues(uint256 tAmount) private view returns ( uint256, uint256, uint256, uint256, uint256, uint256 ) { (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues( tAmount, _redisFee, _taxFee ); uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues( tAmount, tFee, tTeam, currentRate ); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam); } function _getTValues( uint256 tAmount, uint256 redisFee, uint256 taxFee ) private pure returns ( uint256, uint256, uint256 ) { uint256 tFee = tAmount.mul(redisFee).div(100); uint256 tTeam = tAmount.mul(taxFee).div(100); uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam); return (tTransferAmount, tFee, tTeam); } function _getRValues( uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate ) private pure returns ( uint256, uint256, uint256 ) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTeam = tTeam.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function setFee( uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell ) public onlyOwner { _redisFeeOnBuy = redisFeeOnBuy; _redisFeeOnSell = redisFeeOnSell; _taxFeeOnBuy = taxFeeOnBuy; _taxFeeOnSell = taxFeeOnSell; } //Set minimum tokens required to swap. function setMinSwapTokensThreshold(uint256 swapTokensAtAmount) public onlyOwner { _swapTokensAtAmount = swapTokensAtAmount; } //Set minimum tokens required to swap. function toggleSwap(bool _swapEnabled) public onlyOwner { swapEnabled = _swapEnabled; } //Set maximum transaction function setMaxTxnAmount(uint256 maxTxAmount) public onlyOwner { _maxTxAmount = maxTxAmount; } function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner { _maxWalletSize = maxWalletSize; } function excludeMultipleAccountsFromFees( address[] calldata accounts, bool excluded ) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFee[accounts[i]] = excluded; } } function invokeBotGuard(address[] calldata accounts) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { botGuard[accounts[i]] = true; } } function removeBotGuard(address[] calldata accounts) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { delete botGuard[accounts[i]]; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"internalType":"address","name":"","type":"address"}],"name":"_buyMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","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":"amount","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":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"invokeBotGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"removeBotGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"unblockBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526200001d6b015bfc9298de952e2f4000005f1962000360565b6200002a905f1962000380565b6006555f60088190556009819055600a819055600b819055600c819055600d819055600e819055600f55601380546001600160a01b031990811673ae859c9a2de7fd2265293adeb45b01e8cf693a7b9081179092556014805490911690911790556016805461ffff60a81b1916600160b01b1790556a037ad881875888245000006017819055601855695915a68d88da6a080000601955348015620000cd575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600654335f9081526002602090815260409182902092909255601580546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b815291519092839263c45a015592600480830193928290030181865afa15801562000187573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001ad9190620003a6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200021f9190620003a6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200026a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002909190620003a6565b601680546001600160a01b0319166001600160a01b039283161790555f80548216815260056020526040808220805460ff1990811660019081179092553084528284208054821683179055601354851684528284208054821683179055601454909416835291208054909216179055336001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b015bfc9298de952e2f4000006040516200035191815260200190565b60405180910390a350620003d5565b5f826200037b57634e487b7160e01b5f52601260045260245ffd5b500690565b81810381811115620003a057634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215620003b7575f80fd5b81516001600160a01b0381168114620003ce575f80fd5b9392505050565b611ec680620003e35f395ff3fe6080604052600436106101dd575f3560e01c80637d1db4a5116100fd578063a9059cbb11610092578063c492f04611610062578063c492f04614610584578063dd62ed3e146105a3578063ea1644d5146105e7578063f2fde38b14610606575f80fd5b8063a9059cbb14610504578063bfd7928414610523578063c17a142314610551578063c3c8cd8014610570575f80fd5b80638f9a55c0116100cd5780638f9a55c01461048557806395d89b411461049a57806398a5c315146104c6578063a2a957bb146104e5575f80fd5b80637d1db4a51461040a5780637f2feddc1461041f5780638da5cb5b1461044a5780638f70ccf714610466575f80fd5b8063313ce567116101735780636fc3eaec116101435780636fc3eaec146103a457806370a08231146103b8578063715018a6146103d757806374010ece146103eb575f80fd5b8063313ce5671461032c57806349bd5a5e146103475780636b999053146103665780636d8aa8f814610385575f80fd5b806318160ddd116101ae57806318160ddd146102b157806323b872dd146102d9578063265d57c6146102f85780632fd689e314610317575f80fd5b8062b8cf2a146101e857806306fdde0314610209578063095ea7b31461024b5780631694505e1461027a575f80fd5b366101e457005b5f80fd5b3480156101f3575f80fd5b506102076102023660046119d5565b610625565b005b348015610214575f80fd5b506040805180820190915260088152672630b7323bb7b63360c11b60208201525b6040516102429190611a95565b60405180910390f35b348015610256575f80fd5b5061026a610265366004611ae1565b6106b6565b6040519015158152602001610242565b348015610285575f80fd5b50601554610299906001600160a01b031681565b6040516001600160a01b039091168152602001610242565b3480156102bc575f80fd5b506b015bfc9298de952e2f4000005b604051908152602001610242565b3480156102e4575f80fd5b5061026a6102f3366004611b0b565b6106cc565b348015610303575f80fd5b50610207610312366004611b91565b610733565b348015610322575f80fd5b506102cb60195481565b348015610337575f80fd5b5060405160128152602001610242565b348015610352575f80fd5b50601654610299906001600160a01b031681565b348015610371575f80fd5b50610207610380366004611bd0565b6107bd565b348015610390575f80fd5b5061020761039f366004611bfa565b610806565b3480156103af575f80fd5b5061020761084d565b3480156103c3575f80fd5b506102cb6103d2366004611bd0565b610897565b3480156103e2575f80fd5b506102076108b8565b3480156103f6575f80fd5b50610207610405366004611c13565b610929565b348015610415575f80fd5b506102cb60175481565b34801561042a575f80fd5b506102cb610439366004611bd0565b60116020525f908152604090205481565b348015610455575f80fd5b505f546001600160a01b0316610299565b348015610471575f80fd5b50610207610480366004611bfa565b610957565b348015610490575f80fd5b506102cb60185481565b3480156104a5575f80fd5b506040805180820190915260048152632bb7b63360e11b6020820152610235565b3480156104d1575f80fd5b506102076104e0366004611c13565b61099e565b3480156104f0575f80fd5b506102076104ff366004611c2a565b6109cc565b34801561050f575f80fd5b5061026a61051e366004611ae1565b610a09565b34801561052e575f80fd5b5061026a61053d366004611bd0565b60106020525f908152604090205460ff1681565b34801561055c575f80fd5b5061020761056b366004611b91565b610a15565b34801561057b575f80fd5b50610207610aa3565b34801561058f575f80fd5b5061020761059e366004611c59565b610af5565b3480156105ae575f80fd5b506102cb6105bd366004611ca9565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156105f2575f80fd5b50610207610601366004611c13565b610b88565b348015610611575f80fd5b50610207610620366004611bd0565b610bb6565b5f546001600160a01b031633146106575760405162461bcd60e51b815260040161064e90611ce0565b60405180910390fd5b5f5b81518110156106b257600160105f84848151811061067957610679611d15565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610659565b5050565b5f6106c2338484610c9d565b5060015b92915050565b5f6106d8848484610dc0565b610729843361072485604051806060016040528060288152602001611e69602891396001600160a01b038a165f90815260046020908152604080832033845290915290205491906112a1565b610c9d565b5060019392505050565b5f546001600160a01b0316331461075c5760405162461bcd60e51b815260040161064e90611ce0565b5f5b818110156107b85760125f84848481811061077b5761077b611d15565b90506020020160208101906107909190611bd0565b6001600160a01b0316815260208101919091526040015f20805460ff1916905560010161075e565b505050565b5f546001600160a01b031633146107e65760405162461bcd60e51b815260040161064e90611ce0565b6001600160a01b03165f908152601060205260409020805460ff19169055565b5f546001600160a01b0316331461082f5760405162461bcd60e51b815260040161064e90611ce0565b60168054911515600160b01b0260ff60b01b19909216919091179055565b6013546001600160a01b0316336001600160a01b0316148061088257506014546001600160a01b0316336001600160a01b0316145b61088a575f80fd5b47610894816112d9565b50565b6001600160a01b0381165f908152600260205260408120546106c690611310565b5f546001600160a01b031633146108e15760405162461bcd60e51b815260040161064e90611ce0565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109525760405162461bcd60e51b815260040161064e90611ce0565b601755565b5f546001600160a01b031633146109805760405162461bcd60e51b815260040161064e90611ce0565b60168054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b031633146109c75760405162461bcd60e51b815260040161064e90611ce0565b601955565b5f546001600160a01b031633146109f55760405162461bcd60e51b815260040161064e90611ce0565b600893909355600a91909155600955600b55565b5f6106c2338484610dc0565b5f546001600160a01b03163314610a3e5760405162461bcd60e51b815260040161064e90611ce0565b5f5b818110156107b857600160125f858585818110610a5f57610a5f611d15565b9050602002016020810190610a749190611bd0565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610a40565b6013546001600160a01b0316336001600160a01b03161480610ad857506014546001600160a01b0316336001600160a01b0316145b610ae0575f80fd5b5f610aea30610897565b905061089481611392565b5f546001600160a01b03163314610b1e5760405162461bcd60e51b815260040161064e90611ce0565b5f5b82811015610b82578160055f868685818110610b3e57610b3e611d15565b9050602002016020810190610b539190611bd0565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610b20565b50505050565b5f546001600160a01b03163314610bb15760405162461bcd60e51b815260040161064e90611ce0565b601855565b5f546001600160a01b03163314610bdf5760405162461bcd60e51b815260040161064e90611ce0565b6001600160a01b038116610c445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161064e565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610cff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161064e565b6001600160a01b038216610d605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161064e565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e245760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161064e565b6001600160a01b038216610e865760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161064e565b5f8111610ee75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161064e565b5f80546001600160a01b03858116911614801590610f1257505f546001600160a01b03848116911614155b8015610f3657506001600160a01b0384165f9081526012602052604090205460ff16155b8015610f5a57506001600160a01b0383165f9081526012602052604090205460ff16155b1561114257601654600160a01b900460ff1680610f8e57506001600160a01b0384165f9081526012602052604090205460ff165b15610f9b57506001611009565b60405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606482015260840161064e565b60175482111561105b5760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000604482015260640161064e565b6001600160a01b0384165f9081526010602052604090205460ff1615801561109b57506001600160a01b0383165f9081526010602052604090205460ff16155b6110f35760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460448201526265642160e81b606482015260840161064e565b6016546001600160a01b0384811691161461113d576018548261111585610897565b61111f9190611d3d565b111561113d5760405162461bcd60e51b815260040161064e90611d50565b611190565b6016546001600160a01b0384811691161461118c576018548261116485610897565b61116e9190611d3d565b111561118c5760405162461bcd60e51b815260040161064e90611d50565b5060015b8015610b82576001600160a01b0384165f9081526005602052604090205460019060ff16806111d657506001600160a01b0384165f9081526005602052604090205460ff165b8061120857506016546001600160a01b0386811691161480159061120857506016546001600160a01b03858116911614155b1561121457505f61128e565b6016546001600160a01b03868116911614801561123f57506015546001600160a01b03858116911614155b1561125157600854600c55600954600d555b6016546001600160a01b03858116911614801561127c57506015546001600160a01b03868116911614155b1561128e57600a54600c55600b54600d555b61129a85858584611502565b5050505050565b5f81848411156112c45760405162461bcd60e51b815260040161064e9190611a95565b505f6112d08486611d93565b95945050505050565b6014546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156106b2573d5f803e3d5ffd5b5f6006548211156113765760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161064e565b5f61137f611530565b905061138b8382611551565b9392505050565b6016805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106113d8576113d8611d15565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561142f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114539190611da6565b8160018151811061146657611466611d15565b6001600160a01b03928316602091820292909201015260155461148c9130911684610c9d565b60155460405163791ac94760e01b81526001600160a01b039091169063791ac947906114c49085905f90869030904290600401611dc1565b5f604051808303815f87803b1580156114db575f80fd5b505af11580156114ed573d5f803e3d5ffd5b50506016805460ff60a81b1916905550505050565b8061150f5761150f611592565b61151a8484846115bf565b80610b8257610b82600e54600c55600f54600d55565b5f805f61153b6116b0565b909250905061154a8282611551565b9250505090565b5f61138b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116f7565b600c541580156115a25750600d54155b156115a957565b600c8054600e55600d8054600f555f9182905555565b5f805f805f806115ce87611723565b6001600160a01b038f165f90815260026020526040902054959b509399509197509550935091506115ff9087611778565b6001600160a01b03808b165f9081526002602052604080822093909355908a168152205461162d90866117b9565b6001600160a01b0389165f9081526002602052604090205561164e81611817565b611658848361185d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161169d91815260200190565b60405180910390a3505050505050505050565b6006545f9081906b015bfc9298de952e2f4000006116ce8282611551565b8210156116ee575050600654926b015bfc9298de952e2f40000092509050565b90939092509050565b5f81836117175760405162461bcd60e51b815260040161064e9190611a95565b505f6112d08486611e32565b5f805f805f805f805f61173b8a600c54600d54611881565b9250925092505f61174a611530565b90505f805f61175b8e8787876118d3565b919e509c509a509598509396509194505050505091939550919395565b5f61138b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112a1565b5f806117c58385611d3d565b90508381101561138b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161064e565b5f611820611530565b90505f61182d838361191f565b305f9081526002602052604090205490915061184990826117b9565b305f90815260026020526040902055505050565b60065461186a9083611778565b60065560075461187a90826117b9565b6007555050565b5f80808061189a6064611894898961191f565b90611551565b90505f6118ac60646118948a8961191f565b90505f6118c3826118bd8b86611778565b90611778565b9992985090965090945050505050565b5f8080806118e1888661191f565b90505f6118ee888761191f565b90505f6118fb888861191f565b90505f61190c826118bd8686611778565b939b939a50919850919650505050505050565b5f825f0361192e57505f6106c6565b5f6119398385611e51565b9050826119468583611e32565b1461138b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161064e565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b0381168114610894575f80fd5b80356119d0816119b1565b919050565b5f60208083850312156119e6575f80fd5b823567ffffffffffffffff808211156119fd575f80fd5b818501915085601f830112611a10575f80fd5b813581811115611a2257611a2261199d565b8060051b604051601f19603f83011681018181108582111715611a4757611a4761199d565b604052918252848201925083810185019188831115611a64575f80fd5b938501935b82851015611a8957611a7a856119c5565b84529385019392850192611a69565b98975050505050505050565b5f602080835283518060208501525f5b81811015611ac157858101830151858201604001528201611aa5565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215611af2575f80fd5b8235611afd816119b1565b946020939093013593505050565b5f805f60608486031215611b1d575f80fd5b8335611b28816119b1565b92506020840135611b38816119b1565b929592945050506040919091013590565b5f8083601f840112611b59575f80fd5b50813567ffffffffffffffff811115611b70575f80fd5b6020830191508360208260051b8501011115611b8a575f80fd5b9250929050565b5f8060208385031215611ba2575f80fd5b823567ffffffffffffffff811115611bb8575f80fd5b611bc485828601611b49565b90969095509350505050565b5f60208284031215611be0575f80fd5b813561138b816119b1565b803580151581146119d0575f80fd5b5f60208284031215611c0a575f80fd5b61138b82611beb565b5f60208284031215611c23575f80fd5b5035919050565b5f805f8060808587031215611c3d575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f60408486031215611c6b575f80fd5b833567ffffffffffffffff811115611c81575f80fd5b611c8d86828701611b49565b9094509250611ca0905060208501611beb565b90509250925092565b5f8060408385031215611cba575f80fd5b8235611cc5816119b1565b91506020830135611cd5816119b1565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106c6576106c6611d29565b60208082526023908201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696040820152627a652160e81b606082015260800190565b818103818111156106c6576106c6611d29565b5f60208284031215611db6575f80fd5b815161138b816119b1565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015611e115784516001600160a01b031683529383019391830191600101611dec565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82611e4c57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176106c6576106c6611d2956fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203e7588292f91861a1edb98123d7194f8141fee8b470b200739785df38342f9a764736f6c63430008180033
Deployed Bytecode
0x6080604052600436106101dd575f3560e01c80637d1db4a5116100fd578063a9059cbb11610092578063c492f04611610062578063c492f04614610584578063dd62ed3e146105a3578063ea1644d5146105e7578063f2fde38b14610606575f80fd5b8063a9059cbb14610504578063bfd7928414610523578063c17a142314610551578063c3c8cd8014610570575f80fd5b80638f9a55c0116100cd5780638f9a55c01461048557806395d89b411461049a57806398a5c315146104c6578063a2a957bb146104e5575f80fd5b80637d1db4a51461040a5780637f2feddc1461041f5780638da5cb5b1461044a5780638f70ccf714610466575f80fd5b8063313ce567116101735780636fc3eaec116101435780636fc3eaec146103a457806370a08231146103b8578063715018a6146103d757806374010ece146103eb575f80fd5b8063313ce5671461032c57806349bd5a5e146103475780636b999053146103665780636d8aa8f814610385575f80fd5b806318160ddd116101ae57806318160ddd146102b157806323b872dd146102d9578063265d57c6146102f85780632fd689e314610317575f80fd5b8062b8cf2a146101e857806306fdde0314610209578063095ea7b31461024b5780631694505e1461027a575f80fd5b366101e457005b5f80fd5b3480156101f3575f80fd5b506102076102023660046119d5565b610625565b005b348015610214575f80fd5b506040805180820190915260088152672630b7323bb7b63360c11b60208201525b6040516102429190611a95565b60405180910390f35b348015610256575f80fd5b5061026a610265366004611ae1565b6106b6565b6040519015158152602001610242565b348015610285575f80fd5b50601554610299906001600160a01b031681565b6040516001600160a01b039091168152602001610242565b3480156102bc575f80fd5b506b015bfc9298de952e2f4000005b604051908152602001610242565b3480156102e4575f80fd5b5061026a6102f3366004611b0b565b6106cc565b348015610303575f80fd5b50610207610312366004611b91565b610733565b348015610322575f80fd5b506102cb60195481565b348015610337575f80fd5b5060405160128152602001610242565b348015610352575f80fd5b50601654610299906001600160a01b031681565b348015610371575f80fd5b50610207610380366004611bd0565b6107bd565b348015610390575f80fd5b5061020761039f366004611bfa565b610806565b3480156103af575f80fd5b5061020761084d565b3480156103c3575f80fd5b506102cb6103d2366004611bd0565b610897565b3480156103e2575f80fd5b506102076108b8565b3480156103f6575f80fd5b50610207610405366004611c13565b610929565b348015610415575f80fd5b506102cb60175481565b34801561042a575f80fd5b506102cb610439366004611bd0565b60116020525f908152604090205481565b348015610455575f80fd5b505f546001600160a01b0316610299565b348015610471575f80fd5b50610207610480366004611bfa565b610957565b348015610490575f80fd5b506102cb60185481565b3480156104a5575f80fd5b506040805180820190915260048152632bb7b63360e11b6020820152610235565b3480156104d1575f80fd5b506102076104e0366004611c13565b61099e565b3480156104f0575f80fd5b506102076104ff366004611c2a565b6109cc565b34801561050f575f80fd5b5061026a61051e366004611ae1565b610a09565b34801561052e575f80fd5b5061026a61053d366004611bd0565b60106020525f908152604090205460ff1681565b34801561055c575f80fd5b5061020761056b366004611b91565b610a15565b34801561057b575f80fd5b50610207610aa3565b34801561058f575f80fd5b5061020761059e366004611c59565b610af5565b3480156105ae575f80fd5b506102cb6105bd366004611ca9565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156105f2575f80fd5b50610207610601366004611c13565b610b88565b348015610611575f80fd5b50610207610620366004611bd0565b610bb6565b5f546001600160a01b031633146106575760405162461bcd60e51b815260040161064e90611ce0565b60405180910390fd5b5f5b81518110156106b257600160105f84848151811061067957610679611d15565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610659565b5050565b5f6106c2338484610c9d565b5060015b92915050565b5f6106d8848484610dc0565b610729843361072485604051806060016040528060288152602001611e69602891396001600160a01b038a165f90815260046020908152604080832033845290915290205491906112a1565b610c9d565b5060019392505050565b5f546001600160a01b0316331461075c5760405162461bcd60e51b815260040161064e90611ce0565b5f5b818110156107b85760125f84848481811061077b5761077b611d15565b90506020020160208101906107909190611bd0565b6001600160a01b0316815260208101919091526040015f20805460ff1916905560010161075e565b505050565b5f546001600160a01b031633146107e65760405162461bcd60e51b815260040161064e90611ce0565b6001600160a01b03165f908152601060205260409020805460ff19169055565b5f546001600160a01b0316331461082f5760405162461bcd60e51b815260040161064e90611ce0565b60168054911515600160b01b0260ff60b01b19909216919091179055565b6013546001600160a01b0316336001600160a01b0316148061088257506014546001600160a01b0316336001600160a01b0316145b61088a575f80fd5b47610894816112d9565b50565b6001600160a01b0381165f908152600260205260408120546106c690611310565b5f546001600160a01b031633146108e15760405162461bcd60e51b815260040161064e90611ce0565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146109525760405162461bcd60e51b815260040161064e90611ce0565b601755565b5f546001600160a01b031633146109805760405162461bcd60e51b815260040161064e90611ce0565b60168054911515600160a01b0260ff60a01b19909216919091179055565b5f546001600160a01b031633146109c75760405162461bcd60e51b815260040161064e90611ce0565b601955565b5f546001600160a01b031633146109f55760405162461bcd60e51b815260040161064e90611ce0565b600893909355600a91909155600955600b55565b5f6106c2338484610dc0565b5f546001600160a01b03163314610a3e5760405162461bcd60e51b815260040161064e90611ce0565b5f5b818110156107b857600160125f858585818110610a5f57610a5f611d15565b9050602002016020810190610a749190611bd0565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610a40565b6013546001600160a01b0316336001600160a01b03161480610ad857506014546001600160a01b0316336001600160a01b0316145b610ae0575f80fd5b5f610aea30610897565b905061089481611392565b5f546001600160a01b03163314610b1e5760405162461bcd60e51b815260040161064e90611ce0565b5f5b82811015610b82578160055f868685818110610b3e57610b3e611d15565b9050602002016020810190610b539190611bd0565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610b20565b50505050565b5f546001600160a01b03163314610bb15760405162461bcd60e51b815260040161064e90611ce0565b601855565b5f546001600160a01b03163314610bdf5760405162461bcd60e51b815260040161064e90611ce0565b6001600160a01b038116610c445760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161064e565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610cff5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161064e565b6001600160a01b038216610d605760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161064e565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e245760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161064e565b6001600160a01b038216610e865760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161064e565b5f8111610ee75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161064e565b5f80546001600160a01b03858116911614801590610f1257505f546001600160a01b03848116911614155b8015610f3657506001600160a01b0384165f9081526012602052604090205460ff16155b8015610f5a57506001600160a01b0383165f9081526012602052604090205460ff16155b1561114257601654600160a01b900460ff1680610f8e57506001600160a01b0384165f9081526012602052604090205460ff165b15610f9b57506001611009565b60405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606482015260840161064e565b60175482111561105b5760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000604482015260640161064e565b6001600160a01b0384165f9081526010602052604090205460ff1615801561109b57506001600160a01b0383165f9081526010602052604090205460ff16155b6110f35760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460448201526265642160e81b606482015260840161064e565b6016546001600160a01b0384811691161461113d576018548261111585610897565b61111f9190611d3d565b111561113d5760405162461bcd60e51b815260040161064e90611d50565b611190565b6016546001600160a01b0384811691161461118c576018548261116485610897565b61116e9190611d3d565b111561118c5760405162461bcd60e51b815260040161064e90611d50565b5060015b8015610b82576001600160a01b0384165f9081526005602052604090205460019060ff16806111d657506001600160a01b0384165f9081526005602052604090205460ff165b8061120857506016546001600160a01b0386811691161480159061120857506016546001600160a01b03858116911614155b1561121457505f61128e565b6016546001600160a01b03868116911614801561123f57506015546001600160a01b03858116911614155b1561125157600854600c55600954600d555b6016546001600160a01b03858116911614801561127c57506015546001600160a01b03868116911614155b1561128e57600a54600c55600b54600d555b61129a85858584611502565b5050505050565b5f81848411156112c45760405162461bcd60e51b815260040161064e9190611a95565b505f6112d08486611d93565b95945050505050565b6014546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156106b2573d5f803e3d5ffd5b5f6006548211156113765760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161064e565b5f61137f611530565b905061138b8382611551565b9392505050565b6016805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106113d8576113d8611d15565b6001600160a01b03928316602091820292909201810191909152601554604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561142f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114539190611da6565b8160018151811061146657611466611d15565b6001600160a01b03928316602091820292909201015260155461148c9130911684610c9d565b60155460405163791ac94760e01b81526001600160a01b039091169063791ac947906114c49085905f90869030904290600401611dc1565b5f604051808303815f87803b1580156114db575f80fd5b505af11580156114ed573d5f803e3d5ffd5b50506016805460ff60a81b1916905550505050565b8061150f5761150f611592565b61151a8484846115bf565b80610b8257610b82600e54600c55600f54600d55565b5f805f61153b6116b0565b909250905061154a8282611551565b9250505090565b5f61138b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506116f7565b600c541580156115a25750600d54155b156115a957565b600c8054600e55600d8054600f555f9182905555565b5f805f805f806115ce87611723565b6001600160a01b038f165f90815260026020526040902054959b509399509197509550935091506115ff9087611778565b6001600160a01b03808b165f9081526002602052604080822093909355908a168152205461162d90866117b9565b6001600160a01b0389165f9081526002602052604090205561164e81611817565b611658848361185d565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161169d91815260200190565b60405180910390a3505050505050505050565b6006545f9081906b015bfc9298de952e2f4000006116ce8282611551565b8210156116ee575050600654926b015bfc9298de952e2f40000092509050565b90939092509050565b5f81836117175760405162461bcd60e51b815260040161064e9190611a95565b505f6112d08486611e32565b5f805f805f805f805f61173b8a600c54600d54611881565b9250925092505f61174a611530565b90505f805f61175b8e8787876118d3565b919e509c509a509598509396509194505050505091939550919395565b5f61138b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112a1565b5f806117c58385611d3d565b90508381101561138b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161064e565b5f611820611530565b90505f61182d838361191f565b305f9081526002602052604090205490915061184990826117b9565b305f90815260026020526040902055505050565b60065461186a9083611778565b60065560075461187a90826117b9565b6007555050565b5f80808061189a6064611894898961191f565b90611551565b90505f6118ac60646118948a8961191f565b90505f6118c3826118bd8b86611778565b90611778565b9992985090965090945050505050565b5f8080806118e1888661191f565b90505f6118ee888761191f565b90505f6118fb888861191f565b90505f61190c826118bd8686611778565b939b939a50919850919650505050505050565b5f825f0361192e57505f6106c6565b5f6119398385611e51565b9050826119468583611e32565b1461138b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161064e565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b0381168114610894575f80fd5b80356119d0816119b1565b919050565b5f60208083850312156119e6575f80fd5b823567ffffffffffffffff808211156119fd575f80fd5b818501915085601f830112611a10575f80fd5b813581811115611a2257611a2261199d565b8060051b604051601f19603f83011681018181108582111715611a4757611a4761199d565b604052918252848201925083810185019188831115611a64575f80fd5b938501935b82851015611a8957611a7a856119c5565b84529385019392850192611a69565b98975050505050505050565b5f602080835283518060208501525f5b81811015611ac157858101830151858201604001528201611aa5565b505f604082860101526040601f19601f8301168501019250505092915050565b5f8060408385031215611af2575f80fd5b8235611afd816119b1565b946020939093013593505050565b5f805f60608486031215611b1d575f80fd5b8335611b28816119b1565b92506020840135611b38816119b1565b929592945050506040919091013590565b5f8083601f840112611b59575f80fd5b50813567ffffffffffffffff811115611b70575f80fd5b6020830191508360208260051b8501011115611b8a575f80fd5b9250929050565b5f8060208385031215611ba2575f80fd5b823567ffffffffffffffff811115611bb8575f80fd5b611bc485828601611b49565b90969095509350505050565b5f60208284031215611be0575f80fd5b813561138b816119b1565b803580151581146119d0575f80fd5b5f60208284031215611c0a575f80fd5b61138b82611beb565b5f60208284031215611c23575f80fd5b5035919050565b5f805f8060808587031215611c3d575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f60408486031215611c6b575f80fd5b833567ffffffffffffffff811115611c81575f80fd5b611c8d86828701611b49565b9094509250611ca0905060208501611beb565b90509250925092565b5f8060408385031215611cba575f80fd5b8235611cc5816119b1565b91506020830135611cd5816119b1565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106c6576106c6611d29565b60208082526023908201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696040820152627a652160e81b606082015260800190565b818103818111156106c6576106c6611d29565b5f60208284031215611db6575f80fd5b815161138b816119b1565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015611e115784516001600160a01b031683529383019391830191600101611dec565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82611e4c57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176106c6576106c6611d2956fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203e7588292f91861a1edb98123d7194f8141fee8b470b200739785df38342f9a764736f6c63430008180033
Deployed Bytecode Sourcemap
4269:14389:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13260:169;;;;;;;;;;-1:-1:-1;13260:169:0;;;;;:::i;:::-;;:::i;:::-;;6858:83;;;;;;;;;;-1:-1:-1;6928:5:0;;;;;;;;;;;;-1:-1:-1;;;6928:5:0;;;;6858:83;;;;;;;:::i;:::-;;;;;;;;7783:193;;;;;;;;;;-1:-1:-1;7783:193:0;;;;;:::i;:::-;;:::i;:::-;;;2585:14:1;;2578:22;2560:41;;2548:2;2533:18;7783:193:0;2420:187:1;5681:41:0;;;;;;;;;;-1:-1:-1;5681:41:0;;;;-1:-1:-1;;;;;5681:41:0;;;;;;-1:-1:-1;;;;;2802:32:1;;;2784:51;;2772:2;2757:18;5681:41:0;2612:229:1;7135:95:0;;;;;;;;;;-1:-1:-1;4819:16:0;7135:95;;;2992:25:1;;;2980:2;2965:18;7135:95:0;2846:177:1;7984:446:0;;;;;;;;;;-1:-1:-1;7984:446:0;;;;;:::i;:::-;;:::i;18466:189::-;;;;;;;;;;-1:-1:-1;18466:189:0;;;;;:::i;:::-;;:::i;5979:52::-;;;;;;;;;;;;;;;;7044:83;;;;;;;;;;-1:-1:-1;7044:83:0;;4488:2;4445:36:1;;4433:2;4418:18;7044:83:0;4303:184:1;5729:28:0;;;;;;;;;;-1:-1:-1;5729:28:0;;;;-1:-1:-1;;;;;5729:28:0;;;13437:92;;;;;;;;;;-1:-1:-1;13437:92:0;;;;;:::i;:::-;;:::i;17622:101::-;;;;;;;;;;-1:-1:-1;17622:101:0;;;;;:::i;:::-;;:::i;12976:276::-;;;;;;;;;;;;;:::i;7238:138::-;;;;;;;;;;-1:-1:-1;7238:138:0;;;;;:::i;:::-;;:::i;1721:148::-;;;;;;;;;;;;;:::i;17762:108::-;;;;;;;;;;-1:-1:-1;17762:108:0;;;;;:::i;:::-;;:::i;5871:46::-;;;;;;;;;;;;;;;;5358:42;;;;;;;;;;-1:-1:-1;5358:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;1507:79;;;;;;;;;;-1:-1:-1;1545:7:0;1572:6;-1:-1:-1;;;;;1572:6:0;1507:79;;12582:101;;;;;;;;;;-1:-1:-1;12582:101:0;;;;;:::i;:::-;;:::i;5924:48::-;;;;;;;;;;;;;;;;6949:87;;;;;;;;;;-1:-1:-1;7021:7:0;;;;;;;;;;;;-1:-1:-1;;;7021:7:0;;;;6949:87;;17408:162;;;;;;;;;;-1:-1:-1;17408:162:0;;;;;:::i;:::-;;:::i;17022:334::-;;;;;;;;;;-1:-1:-1;17022:334:0;;;;;:::i;:::-;;:::i;7384:199::-;;;;;;;;;;-1:-1:-1;7384:199:0;;;;;:::i;:::-;;:::i;5315:36::-;;;;;;;;;;-1:-1:-1;5315:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18269:189;;;;;;;;;;-1:-1:-1;18269:189:0;;;;;:::i;:::-;;:::i;12691:277::-;;;;;;;;;;;;;:::i;18001:260::-;;;;;;;;;;-1:-1:-1;18001:260:0;;;;;:::i;:::-;;:::i;7591:184::-;;;;;;;;;;-1:-1:-1;7591:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;7740:18:0;;;7708:7;7740:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7591:184;17878:115;;;;;;;;;;-1:-1:-1;17878:115:0;;;;;:::i;:::-;;:::i;1877:281::-;;;;;;;;;;-1:-1:-1;1877:281:0;;;;;:::i;:::-;;:::i;13260:169::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;;;;;;;;;13336:9:::1;13331:91;13355:5;:12;13351:1;:16;13331:91;;;13406:4;13389;:14;13394:5;13400:1;13394:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;13389:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;13389:14:0;:21;;-1:-1:-1;;13389:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;13369:3:0::1;13331:91;;;;13260:169:::0;:::o;7783:193::-;7885:4;7907:39;301:10;7930:7;7939:6;7907:8;:39::i;:::-;-1:-1:-1;7964:4:0;7783:193;;;;;:::o;7984:446::-;8116:4;8133:36;8143:6;8151:9;8162:6;8133:9;:36::i;:::-;8180:220;8203:6;301:10;8251:138;8307:6;8251:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8251:19:0;;;;;;:11;:19;;;;;;;;301:10;8251:33;;;;;;;;;;:37;:138::i;:::-;8180:8;:220::i;:::-;-1:-1:-1;8418:4:0;7984:446;;;;;:::o;18466:189::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;18552:9:::1;18547:101;18567:19:::0;;::::1;18547:101;;;18615:8;:21;18624:8;;18633:1;18624:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18615:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18615:21:0;18608:28;;-1:-1:-1;;18608:28:0::1;::::0;;;18588:3:::1;18547:101;;;;18466:189:::0;;:::o;13437:92::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13501:12:0::1;13516:5;13501:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;13501:20:0::1;::::0;;13437:92::o;17622:101::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;17689:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;17689:26:0::1;-1:-1:-1::0;;;;17689:26:0;;::::1;::::0;;;::::1;::::0;;17622:101::o;12976:276::-;13056:19;;-1:-1:-1;;;;;13056:19:0;301:10;-1:-1:-1;;;;;13040:35:0;;:89;;;-1:-1:-1;13112:17:0;;-1:-1:-1;;;;;13112:17:0;301:10;-1:-1:-1;;;;;13096:33:0;;13040:89;13018:122;;;;;;13180:21;13212:32;13180:21;13212:12;:32::i;:::-;13007:245;12976:276::o;7238:138::-;-1:-1:-1;;;;;7351:16:0;;7304:7;7351:16;;;:7;:16;;;;;;7331:37;;:19;:37::i;1721:148::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;1828:1:::1;1812:6:::0;;1791:40:::1;::::0;-1:-1:-1;;;;;1812:6:0;;::::1;::::0;1791:40:::1;::::0;1828:1;;1791:40:::1;1859:1;1842:19:::0;;-1:-1:-1;;;;;;1842:19:0::1;::::0;;1721:148::o;17762:108::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;17836:12:::1;:26:::0;17762:108::o;12582:101::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;12649:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;12649:26:0::1;-1:-1:-1::0;;;;12649:26:0;;::::1;::::0;;;::::1;::::0;;12582:101::o;17408:162::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;17522:19:::1;:40:::0;17408:162::o;17022:334::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;17199:14:::1;:30:::0;;;;17240:15:::1;:32:::0;;;;17283:12:::1;:26:::0;17320:13:::1;:28:::0;17022:334::o;7384:199::-;7489:4;7511:42;301:10;7535:9;7546:6;7511:9;:42::i;18269:189::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;18355:9:::1;18350:101;18370:19:::0;;::::1;18350:101;;;18435:4;18411:8;:21;18420:8;;18429:1;18420:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18411:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18411:21:0;:28;;-1:-1:-1;;18411:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;18391:3:0::1;18350:101;;12691:277:::0;12771:19;;-1:-1:-1;;;;;12771:19:0;301:10;-1:-1:-1;;;;;12755:35:0;;:89;;;-1:-1:-1;12827:17:0;;-1:-1:-1;;;;;12827:17:0;301:10;-1:-1:-1;;;;;12811:33:0;;12755:89;12733:122;;;;;;12866:23;12892:24;12910:4;12892:9;:24::i;:::-;12866:50;;12927:33;12944:15;12927:16;:33::i;18001:260::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;18144:9:::1;18139:115;18159:19:::0;;::::1;18139:115;;;18234:8;18200:18;:31;18219:8;;18228:1;18219:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18200:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18200:31:0;:42;;-1:-1:-1;;18200:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;18180:3:0::1;18139:115;;;;18001:260:::0;;;:::o;17878:115::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;17955:14:::1;:30:::0;17878:115::o;1877:281::-;1634:6;;-1:-1:-1;;;;;1634:6:0;301:10;1634:22;1626:67;;;;-1:-1:-1;;;1626:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1980:22:0;::::1;1958:110;;;::::0;-1:-1:-1;;;1958:110:0;;7475:2:1;1958:110:0::1;::::0;::::1;7457:21:1::0;7514:2;7494:18;;;7487:30;7553:34;7533:18;;;7526:62;-1:-1:-1;;;7604:18:1;;;7597:36;7650:19;;1958:110:0::1;7273:402:1::0;1958:110:0::1;2105:6;::::0;;2084:38:::1;::::0;-1:-1:-1;;;;;2084:38:0;;::::1;::::0;2105:6;::::1;::::0;2084:38:::1;::::0;::::1;2133:6;:17:::0;;-1:-1:-1;;;;;;2133:17:0::1;-1:-1:-1::0;;;;;2133:17:0;;;::::1;::::0;;;::::1;::::0;;1877:281::o;9121:369::-;-1:-1:-1;;;;;9248:19:0;;9240:68;;;;-1:-1:-1;;;9240:68:0;;7882:2:1;9240:68:0;;;7864:21:1;7921:2;7901:18;;;7894:30;7960:34;7940:18;;;7933:62;-1:-1:-1;;;8011:18:1;;;8004:34;8055:19;;9240:68:0;7680:400:1;9240:68:0;-1:-1:-1;;;;;9327:21:0;;9319:68;;;;-1:-1:-1;;;9319:68:0;;8287:2:1;9319:68:0;;;8269:21:1;8326:2;8306:18;;;8299:30;8365:34;8345:18;;;8338:62;-1:-1:-1;;;8416:18:1;;;8409:32;8458:19;;9319:68:0;8085:398:1;9319:68:0;-1:-1:-1;;;;;9398:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9450:32;;2992:25:1;;;9450:32:0;;2965:18:1;9450:32:0;;;;;;;9121:369;;;:::o;9498:2478::-;-1:-1:-1;;;;;9620:18:0;;9612:68;;;;-1:-1:-1;;;9612:68:0;;8690:2:1;9612:68:0;;;8672:21:1;8729:2;8709:18;;;8702:30;8768:34;8748:18;;;8741:62;-1:-1:-1;;;8819:18:1;;;8812:35;8864:19;;9612:68:0;8488:401:1;9612:68:0;-1:-1:-1;;;;;9699:16:0;;9691:64;;;;-1:-1:-1;;;9691:64:0;;9096:2:1;9691:64:0;;;9078:21:1;9135:2;9115:18;;;9108:30;9174:34;9154:18;;;9147:62;-1:-1:-1;;;9225:18:1;;;9218:33;9268:19;;9691:64:0;8894:399:1;9691:64:0;9783:1;9774:6;:10;9766:64;;;;-1:-1:-1;;;9766:64:0;;9500:2:1;9766:64:0;;;9482:21:1;9539:2;9519:18;;;9512:30;9578:34;9558:18;;;9551:62;-1:-1:-1;;;9629:18:1;;;9622:39;9678:19;;9766:64:0;9298:405:1;9766:64:0;9843:18;1572:6;;-1:-1:-1;;;;;9900:15:0;;;1572:6;;9900:15;;;;:32;;-1:-1:-1;1545:7:0;1572:6;-1:-1:-1;;;;;9919:13:0;;;1572:6;;9919:13;;9900:32;:51;;;;-1:-1:-1;;;;;;9937:14:0;;;;;;:8;:14;;;;;;;;9936:15;9900:51;:68;;;;-1:-1:-1;;;;;;9956:12:0;;;;;;:8;:12;;;;;;;;9955:13;9900:68;9882:1210;;;10033:11;;-1:-1:-1;;;10033:11:0;;;;;:29;;-1:-1:-1;;;;;;10048:14:0;;;;;;:8;:14;;;;;;;;10033:29;10029:244;;;-1:-1:-1;10099:4:0;10029:244;;;10144:113;;-1:-1:-1;;;10144:113:0;;9910:2:1;10144:113:0;;;9892:21:1;9949:2;9929:18;;;9922:30;9988:34;9968:18;;;9961:62;10059:33;10039:18;;;10032:61;10110:19;;10144:113:0;9708:427:1;10029:244:0;10307:12;;10297:6;:22;;10289:63;;;;-1:-1:-1;;;10289:63:0;;10342:2:1;10289:63:0;;;10324:21:1;10381:2;10361:18;;;10354:30;10420;10400:18;;;10393:58;10468:18;;10289:63:0;10140:352:1;10289:63:0;-1:-1:-1;;;;;10394:10:0;;;;;;:4;:10;;;;;;;;10393:11;:24;;;;-1:-1:-1;;;;;;10409:8:0;;;;;;:4;:8;;;;;;;;10408:9;10393:24;10367:121;;;;-1:-1:-1;;;10367:121:0;;10699:2:1;10367:121:0;;;10681:21:1;10738:2;10718:18;;;10711:30;10777:34;10757:18;;;10750:62;-1:-1:-1;;;10828:18:1;;;10821:33;10871:19;;10367:121:0;10497:399:1;10367:121:0;10515:13;;-1:-1:-1;;;;;10509:19:0;;;10515:13;;10509:19;10505:209;;10605:14;;10595:6;10579:13;10589:2;10579:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;10549:149;;;;-1:-1:-1;;;10549:149:0;;;;;;;:::i;:::-;9882:1210;;;10847:13;;-1:-1:-1;;;;;10841:19:0;;;10847:13;;10841:19;10837:209;;10937:14;;10927:6;10911:13;10921:2;10911:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;10881:149;;;;-1:-1:-1;;;10881:149:0;;;;;;;:::i;:::-;-1:-1:-1;11076:4:0;9882:1210;11108:13;11104:865;;;-1:-1:-1;;;;;11229:24:0;;11138:12;11229:24;;;:18;:24;;;;;;11153:4;;11229:24;;;:50;;-1:-1:-1;;;;;;11257:22:0;;;;;;:18;:22;;;;;;;;11229:50;11228:119;;;-1:-1:-1;11310:13:0;;-1:-1:-1;;;;;11302:21:0;;;11310:13;;11302:21;;;;:44;;-1:-1:-1;11333:13:0;;-1:-1:-1;;;;;11327:19:0;;;11333:13;;11327:19;;11302:44;11206:694;;;-1:-1:-1;11392:5:0;11206:694;;;11487:13;;-1:-1:-1;;;;;11479:21:0;;;11487:13;;11479:21;:55;;;;-1:-1:-1;11518:15:0;;-1:-1:-1;;;;;11504:30:0;;;11518:15;;11504:30;;11479:55;11475:175;;;11571:14;;11559:9;:26;11618:12;;11608:7;:22;11475:175;11718:13;;-1:-1:-1;;;;;11712:19:0;;;11718:13;;11712:19;:55;;;;-1:-1:-1;11751:15:0;;-1:-1:-1;;;;;11735:32:0;;;11751:15;;11735:32;;11712:55;11708:177;;;11804:15;;11792:9;:27;11852:13;;11842:7;:23;11708:177;11916:41;11931:4;11937:2;11941:6;11949:7;11916:14;:41::i;:::-;11123:846;9601:2375;9498:2478;;;:::o;2520:224::-;2640:7;2676:12;2668:6;;;;2660:29;;;;-1:-1:-1;;;2660:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2700:9:0;2712:5;2716:1;2712;:5;:::i;:::-;2700:17;2520:224;-1:-1:-1;;;;;2520:224:0:o;12475:99::-;12532:17;;:34;;-1:-1:-1;;;;;12532:17:0;;;;:34;;;;;12559:6;;12532:17;:34;:17;:34;12559:6;12532:17;:34;;;;;;;;;;;;;;;;;;;8438:323;8533:7;8591;;8580;:18;;8558:110;;;;-1:-1:-1;;;8558:110:0;;11902:2:1;8558:110:0;;;11884:21:1;11941:2;11921:18;;;11914:30;11980:34;11960:18;;;11953:62;-1:-1:-1;;;12031:18:1;;;12024:40;12081:19;;8558:110:0;11700:406:1;8558:110:0;8679:19;8701:10;:8;:10::i;:::-;8679:32;-1:-1:-1;8729:24:0;:7;8679:32;8729:11;:24::i;:::-;8722:31;8438:323;-1:-1:-1;;;8438:323:0:o;11984:483::-;6127:6;:13;;-1:-1:-1;;;;6127:13:0;-1:-1:-1;;;6127:13:0;;;12086:16:::1;::::0;;12100:1:::1;12086:16:::0;;;;;::::1;::::0;;-1:-1:-1;;12086:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;12086:16:0::1;12062:40;;12131:4;12113;12118:1;12113:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12113:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;12157:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;12157:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;12113:7;;12157:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12147:4;12152:1;12147:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12147:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;12222:15:::1;::::0;12190:62:::1;::::0;12207:4:::1;::::0;12222:15:::1;12240:11:::0;12190:8:::1;:62::i;:::-;12263:15;::::0;:196:::1;::::0;-1:-1:-1;;;12263:196:0;;-1:-1:-1;;;;;12263:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;12344:11;;12263:15:::1;::::0;12386:4;;12413::::1;::::0;12433:15:::1;::::0;12263:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;6163:6:0;:14;;-1:-1:-1;;;;6163:14:0;;;-1:-1:-1;;;;11984:483:0:o;13537:282::-;13693:7;13688:28;;13702:14;:12;:14::i;:::-;13727:44;13745:6;13753:9;13764:6;13727:17;:44::i;:::-;13787:7;13782:29;;13796:15;9052:17;;9040:9;:29;9090:15;;9080:7;:25;8996:117;16585:164;16627:7;16648:15;16665;16684:19;:17;:19::i;:::-;16647:56;;-1:-1:-1;16647:56:0;-1:-1:-1;16721:20:0;16647:56;;16721:11;:20::i;:::-;16714:27;;;;16585:164;:::o;3006:132::-;3064:7;3091:39;3095:1;3098;3091:39;;;;;;;;;;;;;;;;;:3;:39::i;8769:219::-;8816:9;;:14;:30;;;;-1:-1:-1;8834:7:0;;:12;8816:30;8812:43;;;8769:219::o;8812:43::-;8887:9;;;8867:17;:29;8925:7;;;8907:15;:25;-1:-1:-1;8945:13:0;;;;8969:11;8769:219::o;13827:610::-;13974:15;14004:23;14042:12;14069:23;14107:12;14134:13;14161:19;14172:7;14161:10;:19::i;:::-;-1:-1:-1;;;;;14209:15:0;;;;;;:7;:15;;;;;;13959:221;;-1:-1:-1;13959:221:0;;-1:-1:-1;13959:221:0;;-1:-1:-1;13959:221:0;-1:-1:-1;13959:221:0;-1:-1:-1;13959:221:0;-1:-1:-1;14209:28:0;;13959:221;14209:19;:28::i;:::-;-1:-1:-1;;;;;14191:15:0;;;;;;;:7;:15;;;;;;:46;;;;14269:18;;;;;;;:39;;14292:15;14269:22;:39::i;:::-;-1:-1:-1;;;;;14248:18:0;;;;;;:7;:18;;;;;:60;14319:16;14329:5;14319:9;:16::i;:::-;14346:23;14358:4;14364;14346:11;:23::i;:::-;14402:9;-1:-1:-1;;;;;14385:44:0;14394:6;-1:-1:-1;;;;;14385:44:0;;14413:15;14385:44;;;;2992:25:1;;2980:2;2965:18;;2846:177;14385:44:0;;;;;;;;13948:489;;;;;;13827:610;;;:::o;16757:257::-;16855:7;;16808;;;;4819:16;16923:20;16855:7;4819:16;16923:11;:20::i;:::-;16913:7;:30;16909:61;;;-1:-1:-1;;16953:7:0;;;4819:16;;-1:-1:-1;16757:257:0;-1:-1:-1;16757:257:0:o;16909:61::-;16989:7;;16998;;-1:-1:-1;16757:257:0;-1:-1:-1;16757:257:0:o;3146:223::-;3266:7;3301:12;3294:5;3286:28;;;;-1:-1:-1;;;3286:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3325:9:0;3337:5;3341:1;3337;:5;:::i;14856:702::-;14956:7;14978;15000;15022;15044;15066;15102:23;15127:12;15141:13;15158:90;15184:7;15206:9;;15230:7;;15158:11;:90::i;:::-;15101:147;;;;;;15259:19;15281:10;:8;:10::i;:::-;15259:32;;15303:15;15320:23;15345:12;15361:109;15387:7;15409:4;15428:5;15448:11;15361;:109::i;:::-;15302:168;;-1:-1:-1;15302:168:0;-1:-1:-1;15302:168:0;-1:-1:-1;15521:15:0;;-1:-1:-1;15538:4:0;;-1:-1:-1;15544:5:0;;-1:-1:-1;;;;;14856:702:0;;;;;;;:::o;2376:136::-;2434:7;2461:43;2465:1;2468;2461:43;;;;;;;;;;;;;;;;;:3;:43::i;2189:179::-;2247:7;;2279:5;2283:1;2279;:5;:::i;:::-;2267:17;;2308:1;2303;:6;;2295:46;;;;-1:-1:-1;;;2295:46:0;;13776:2:1;2295:46:0;;;13758:21:1;13815:2;13795:18;;;13788:30;13854:29;13834:18;;;13827:57;13901:18;;2295:46:0;13574:351:1;14445:211:0;14498:19;14520:10;:8;:10::i;:::-;14498:32;-1:-1:-1;14541:13:0;14557:22;:5;14498:32;14557:9;:22::i;:::-;14631:4;14615:22;;;;:7;:22;;;;;;14541:38;;-1:-1:-1;14615:33:0;;14541:38;14615:26;:33::i;:::-;14606:4;14590:22;;;;:7;:22;;;;;:58;-1:-1:-1;;;14445:211:0:o;14664:147::-;14742:7;;:17;;14754:4;14742:11;:17::i;:::-;14732:7;:27;14783:10;;:20;;14798:4;14783:14;:20::i;:::-;14770:10;:33;-1:-1:-1;;14664:147:0:o;15566:469::-;15735:7;;;;15829:30;15855:3;15829:21;:7;15841:8;15829:11;:21::i;:::-;:25;;:30::i;:::-;15814:45;-1:-1:-1;15870:13:0;15886:28;15910:3;15886:19;:7;15898:6;15886:11;:19::i;:28::-;15870:44;-1:-1:-1;15925:23:0;15951:28;15870:44;15951:17;:7;15963:4;15951:11;:17::i;:::-;:21;;:28::i;:::-;15925:54;16015:4;;-1:-1:-1;16021:5:0;;-1:-1:-1;15566:469:0;;-1:-1:-1;;;;;15566:469:0:o;16043:534::-;16237:7;;;;16334:24;:7;16346:11;16334;:24::i;:::-;16316:42;-1:-1:-1;16369:12:0;16384:21;:4;16393:11;16384:8;:21::i;:::-;16369:36;-1:-1:-1;16416:13:0;16432:22;:5;16442:11;16432:9;:22::i;:::-;16416:38;-1:-1:-1;16465:23:0;16491:28;16416:38;16491:17;:7;16503:4;16491:11;:17::i;:28::-;16538:7;;;;-1:-1:-1;16564:4:0;;-1:-1:-1;16043:534:0;;-1:-1:-1;;;;;;;16043:534:0:o;2752:246::-;2810:7;2834:1;2839;2834:6;2830:47;;-1:-1:-1;2864:1:0;2857:8;;2830:47;2887:9;2899:5;2903:1;2899;:5;:::i;:::-;2887:17;-1:-1:-1;2932:1:0;2923:5;2927:1;2887:17;2923:5;:::i;:::-;:10;2915:56;;;;-1:-1:-1;;;2915:56:0;;14305:2:1;2915:56:0;;;14287:21:1;14344:2;14324:18;;;14317:30;14383:34;14363:18;;;14356:62;-1:-1:-1;;;14434:18:1;;;14427:31;14475:19;;2915:56:0;14103:397:1;14:127;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:131;-1:-1:-1;;;;;221:31:1;;211:42;;201:70;;267:1;264;257:12;282:134;350:20;;379:31;350:20;379:31;:::i;:::-;282:134;;;:::o;421:1121::-;505:6;536:2;579;567:9;558:7;554:23;550:32;547:52;;;595:1;592;585:12;547:52;635:9;622:23;664:18;705:2;697:6;694:14;691:34;;;721:1;718;711:12;691:34;759:6;748:9;744:22;734:32;;804:7;797:4;793:2;789:13;785:27;775:55;;826:1;823;816:12;775:55;862:2;849:16;884:2;880;877:10;874:36;;;890:18;;:::i;:::-;936:2;933:1;929:10;968:2;962:9;1031:2;1027:7;1022:2;1018;1014:11;1010:25;1002:6;998:38;1086:6;1074:10;1071:22;1066:2;1054:10;1051:18;1048:46;1045:72;;;1097:18;;:::i;:::-;1133:2;1126:22;1183:18;;;1217:15;;;;-1:-1:-1;1259:11:1;;;1255:20;;;1287:19;;;1284:39;;;1319:1;1316;1309:12;1284:39;1343:11;;;;1363:148;1379:6;1374:3;1371:15;1363:148;;;1445:23;1464:3;1445:23;:::i;:::-;1433:36;;1396:12;;;;1489;;;;1363:148;;;1530:6;421:1121;-1:-1:-1;;;;;;;;421:1121:1:o;1547:548::-;1659:4;1688:2;1717;1706:9;1699:21;1749:6;1743:13;1792:6;1787:2;1776:9;1772:18;1765:34;1817:1;1827:140;1841:6;1838:1;1835:13;1827:140;;;1936:14;;;1932:23;;1926:30;1902:17;;;1921:2;1898:26;1891:66;1856:10;;1827:140;;;1831:3;2016:1;2011:2;2002:6;1991:9;1987:22;1983:31;1976:42;2086:2;2079;2075:7;2070:2;2062:6;2058:15;2054:29;2043:9;2039:45;2035:54;2027:62;;;;1547:548;;;;:::o;2100:315::-;2168:6;2176;2229:2;2217:9;2208:7;2204:23;2200:32;2197:52;;;2245:1;2242;2235:12;2197:52;2284:9;2271:23;2303:31;2328:5;2303:31;:::i;:::-;2353:5;2405:2;2390:18;;;;2377:32;;-1:-1:-1;;;2100:315:1:o;3028:456::-;3105:6;3113;3121;3174:2;3162:9;3153:7;3149:23;3145:32;3142:52;;;3190:1;3187;3180:12;3142:52;3229:9;3216:23;3248:31;3273:5;3248:31;:::i;:::-;3298:5;-1:-1:-1;3355:2:1;3340:18;;3327:32;3368:33;3327:32;3368:33;:::i;:::-;3028:456;;3420:7;;-1:-1:-1;;;3474:2:1;3459:18;;;;3446:32;;3028:456::o;3489:367::-;3552:8;3562:6;3616:3;3609:4;3601:6;3597:17;3593:27;3583:55;;3634:1;3631;3624:12;3583:55;-1:-1:-1;3657:20:1;;3700:18;3689:30;;3686:50;;;3732:1;3729;3722:12;3686:50;3769:4;3761:6;3757:17;3745:29;;3829:3;3822:4;3812:6;3809:1;3805:14;3797:6;3793:27;3789:38;3786:47;3783:67;;;3846:1;3843;3836:12;3783:67;3489:367;;;;;:::o;3861:437::-;3947:6;3955;4008:2;3996:9;3987:7;3983:23;3979:32;3976:52;;;4024:1;4021;4014:12;3976:52;4064:9;4051:23;4097:18;4089:6;4086:30;4083:50;;;4129:1;4126;4119:12;4083:50;4168:70;4230:7;4221:6;4210:9;4206:22;4168:70;:::i;:::-;4257:8;;4142:96;;-1:-1:-1;3861:437:1;-1:-1:-1;;;;3861:437:1:o;4700:247::-;4759:6;4812:2;4800:9;4791:7;4787:23;4783:32;4780:52;;;4828:1;4825;4818:12;4780:52;4867:9;4854:23;4886:31;4911:5;4886:31;:::i;4952:160::-;5017:20;;5073:13;;5066:21;5056:32;;5046:60;;5102:1;5099;5092:12;5117:180;5173:6;5226:2;5214:9;5205:7;5201:23;5197:32;5194:52;;;5242:1;5239;5232:12;5194:52;5265:26;5281:9;5265:26;:::i;5302:180::-;5361:6;5414:2;5402:9;5393:7;5389:23;5385:32;5382:52;;;5430:1;5427;5420:12;5382:52;-1:-1:-1;5453:23:1;;5302:180;-1:-1:-1;5302:180:1:o;5487:385::-;5573:6;5581;5589;5597;5650:3;5638:9;5629:7;5625:23;5621:33;5618:53;;;5667:1;5664;5657:12;5618:53;-1:-1:-1;;5690:23:1;;;5760:2;5745:18;;5732:32;;-1:-1:-1;5811:2:1;5796:18;;5783:32;;5862:2;5847:18;5834:32;;-1:-1:-1;5487:385:1;-1:-1:-1;5487:385:1:o;5877:505::-;5969:6;5977;5985;6038:2;6026:9;6017:7;6013:23;6009:32;6006:52;;;6054:1;6051;6044:12;6006:52;6094:9;6081:23;6127:18;6119:6;6116:30;6113:50;;;6159:1;6156;6149:12;6113:50;6198:70;6260:7;6251:6;6240:9;6236:22;6198:70;:::i;:::-;6287:8;;-1:-1:-1;6172:96:1;-1:-1:-1;6341:35:1;;-1:-1:-1;6372:2:1;6357:18;;6341:35;:::i;:::-;6331:45;;5877:505;;;;;:::o;6387:388::-;6455:6;6463;6516:2;6504:9;6495:7;6491:23;6487:32;6484:52;;;6532:1;6529;6522:12;6484:52;6571:9;6558:23;6590:31;6615:5;6590:31;:::i;:::-;6640:5;-1:-1:-1;6697:2:1;6682:18;;6669:32;6710:33;6669:32;6710:33;:::i;:::-;6762:7;6752:17;;;6387:388;;;;;:::o;6780:356::-;6982:2;6964:21;;;7001:18;;;6994:30;7060:34;7055:2;7040:18;;7033:62;7127:2;7112:18;;6780:356::o;7141:127::-;7202:10;7197:3;7193:20;7190:1;7183:31;7233:4;7230:1;7223:15;7257:4;7254:1;7247:15;10901:127;10962:10;10957:3;10953:20;10950:1;10943:31;10993:4;10990:1;10983:15;11017:4;11014:1;11007:15;11033:125;11098:9;;;11119:10;;;11116:36;;;11132:18;;:::i;11163:399::-;11365:2;11347:21;;;11404:2;11384:18;;;11377:30;11443:34;11438:2;11423:18;;11416:62;-1:-1:-1;;;11509:2:1;11494:18;;11487:33;11552:3;11537:19;;11163:399::o;11567:128::-;11634:9;;;11655:11;;;11652:37;;;11669:18;;:::i;12111:251::-;12181:6;12234:2;12222:9;12213:7;12209:23;12205:32;12202:52;;;12250:1;12247;12240:12;12202:52;12282:9;12276:16;12301:31;12326:5;12301:31;:::i;12367:980::-;12629:4;12677:3;12666:9;12662:19;12708:6;12697:9;12690:25;12734:2;12772:6;12767:2;12756:9;12752:18;12745:34;12815:3;12810:2;12799:9;12795:18;12788:31;12839:6;12874;12868:13;12905:6;12897;12890:22;12943:3;12932:9;12928:19;12921:26;;12982:2;12974:6;12970:15;12956:29;;13003:1;13013:195;13027:6;13024:1;13021:13;13013:195;;;13092:13;;-1:-1:-1;;;;;13088:39:1;13076:52;;13183:15;;;;13148:12;;;;13124:1;13042:9;13013:195;;;-1:-1:-1;;;;;;;13264:32:1;;;;13259:2;13244:18;;13237:60;-1:-1:-1;;;13328:3:1;13313:19;13306:35;13225:3;12367:980;-1:-1:-1;;;12367:980:1:o;13352:217::-;13392:1;13418;13408:132;;13462:10;13457:3;13453:20;13450:1;13443:31;13497:4;13494:1;13487:15;13525:4;13522:1;13515:15;13408:132;-1:-1:-1;13554:9:1;;13352:217::o;13930:168::-;14003:9;;;14034;;14051:15;;;14045:22;;14031:37;14021:71;;14072:18;;:::i
Swarm Source
ipfs://3e7588292f91861a1edb98123d7194f8141fee8b470b200739785df38342f9a7
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.