ERC-20
Overview
Max Total Supply
6,904,234,007.73640331249308757 PRAGMA
Holders
3,860
Total Transfers
-
Market
Price
$0.00 @ 0.000000 FTM
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Pragma
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-04-14 */ // SPDX-License-Identifier: MIT pragma solidity 0.7.6; library Roles { struct Role { mapping(address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } contract DiscounterRole { using Roles for Roles.Role; event DiscounterAdded(address indexed account); event DiscounterRemoved(address indexed account); Roles.Role private _discounters; constructor() { _addDiscounter(msg.sender); } modifier onlyDiscounter() { require( isDiscounter(msg.sender), "DiscounterRole: caller does not have the Discounter role" ); _; } function isDiscounter(address account) public view returns (bool) { return _discounters.has(account); } function renounceDiscounter() public { _removeDiscounter(msg.sender); } function _addDiscounter(address account) internal { _discounters.add(account); emit DiscounterAdded(account); } function _removeDiscounter(address account) internal { _discounters.remove(account); emit DiscounterRemoved(account); } } contract Ownable { address private _owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _owner = msg.sender; } function owner() external view returns (address) { return _owner; } modifier onlyOwner() { require(isOwner()); _; } function isOwner() public view returns (bool) { return msg.sender == _owner; } function renounceOwnership() external onlyOwner { emit OwnershipRenounced(_owner); _owner = address(0); } function transferOwnership(address newOwner) external onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor( string memory name_, string memory symbol_, uint8 decimals_ ) { _name = name_; _symbol = symbol_; _decimals = decimals_; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } } library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IDEXRouter { function factory() external returns (address); function WETH() external returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface ILiquidityProvider { function sync() external; } contract Pragma is ERC20Detailed, Ownable, DiscounterRole { using SafeMath for uint256; event LogRebase(uint256 indexed epoch, uint256 totalSupply); bool public initialDistributionFinished; mapping(address => bool) allowTransfer; mapping(address => bool) _isFeeExempt; /** * @dev fee discounts mapping for future products implementations */ mapping(address => uint256) _feeDiscount; mapping(address => uint256) _discountEnds; modifier initialDistributionLock() { require( initialDistributionFinished || isOwner() || allowTransfer[msg.sender], "Protocol running in IDO mode" ); _; } modifier validRecipient(address to) { require(to != address(0x0), "Zero address recipient"); _; } uint256 private constant DECIMALS = 18; uint256 private constant MAX_UINT256 = ~uint256(0); uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 4.6 * 10**9 * 10**DECIMALS; uint256 public constant liquidityFee = 5; uint256 public constant treasury = 5; uint256 public constant riskFreeValue = 5; uint256 public constant sellFee = 5; uint256 public constant totalFee = 15; uint256 public constant feeDenominator = 100; address constant DEAD = 0x000000000000000000000000000000000000dEaD; address constant ZERO = 0x0000000000000000000000000000000000000000; address public constant autoLiquidityAddress = 0x13564CE8a42F2D43eE93fBeDc4f4c5398A1E7390; address public constant treasuryAddress = 0x131b78F3961c90C364a7970B98988C219D56d62A; address public constant riskFreeValueAddress = 0x186D5B8C9E6c6265071aAc228B145C32bEc1A0C6; address public constant routerContractAddress = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; uint256 private targetLiquidity = 50; uint256 private targetLiquidityDenominator = 100; ILiquidityProvider public pairContract; IDEXRouter public router; address public liquidityProviderAddress; bool public inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } uint256 private constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY); uint256 private constant gonSwapThreshold = (TOTAL_GONS * 10) / 10000; uint256 private constant MAX_SUPPLY = type(uint256).max; bool public _autoRebase = false; uint256 public startedTrading; //timestamp of start of trading uint256 public _lastRebasedTime; uint256 private rebaseRate = 2229; uint256 private _totalSupply; uint256 private _gonsPerFragment; mapping(address => uint256) private _gonBalances; mapping(address => mapping(address => uint256)) private _allowedFragments; mapping(address => bool) public blacklist; constructor() ERC20Detailed("Pragma", "PRAGMA", uint8(DECIMALS)) { _totalSupply = INITIAL_FRAGMENTS_SUPPLY; _gonBalances[treasuryAddress] = TOTAL_GONS; _gonsPerFragment = TOTAL_GONS.div(_totalSupply); // start contract in "Distribution period" initialDistributionFinished = false; // makes the treasury wallet and the creator wallet (me) FeeExempt _isFeeExempt[treasuryAddress] = true; _isFeeExempt[riskFreeValueAddress] = true; _isFeeExempt[address(this)] = true; //renounce discounter role, only owner will be able to add new ones renounceDiscounter(); //gives the treasury the power to transfer tokens before the IO finishes //this will be necessary to move funds around for the distribution allowTransfer[treasuryAddress] = true; //setup Spooky router router = IDEXRouter(routerContractAddress); // Spooky mainnet 0xF491e7B69E4244ad4002BC14e878a34207E38c29 // Spooky testnet 0xa6ad18c2ac47803e193f75c3677b14bf19b94883 liquidityProviderAddress = IDEXFactory(router.factory()).createPair( router.WETH(), address(this) ); pairContract = ILiquidityProvider(liquidityProviderAddress); _allowedFragments[address(this)][address(router)] = type(uint256).max; _allowedFragments[address(this)][liquidityProviderAddress] = uint256( -1 ); //multisig is the owner on creation, //this will be renounced and give to timelock contract _transferOwnership(treasuryAddress); // mint all $PRAGMA to treasury wallet emit Transfer(address(0x0), treasuryAddress, _totalSupply); } function updateBlacklist(address _user, bool _flag) external onlyOwner { blacklist[_user] = _flag; } function rebase() private { if (inSwap) return; uint256 deltaTime = block.timestamp - _lastRebasedTime; uint256 times = deltaTime.div(15 minutes); uint256 epoch = block.timestamp.sub(startedTrading).div(15 minutes); for (uint8 i = 0; i < times; i++) { _totalSupply = _totalSupply.mul(10**7 + rebaseRate).div(10**7); } _gonsPerFragment = TOTAL_GONS.div(_totalSupply); _lastRebasedTime = _lastRebasedTime.add(times.mul(15 minutes)); pairContract.sync(); emit LogRebase(epoch, _totalSupply); } function totalSupply() external view override returns (uint256) { return _totalSupply; } function transfer(address to, uint256 value) external override validRecipient(to) initialDistributionLock returns (bool) { _transferFrom(msg.sender, to, value); return true; } function allowance(address owner_, address spender) external view override returns (uint256) { return _allowedFragments[owner_][spender]; } function balanceOf(address who) external view override returns (uint256) { return _gonBalances[who].div(_gonsPerFragment); } function _basicTransfer( address from, address to, uint256 amount ) internal returns (bool) { uint256 gonAmount = amount.mul(_gonsPerFragment); _gonBalances[from] = _gonBalances[from].sub(gonAmount); _gonBalances[to] = _gonBalances[to].add(gonAmount); return true; } function _transferFrom( address sender, address recipient, uint256 amount ) internal returns (bool) { require(!blacklist[sender] && !blacklist[recipient], "in_blacklist"); if (inSwap) { return _basicTransfer(sender, recipient, amount); } if (shouldRebase()) { rebase(); } if (shouldSwapBack()) { swapBack(); } uint256 gonAmount = amount.mul(_gonsPerFragment); _gonBalances[sender] = _gonBalances[sender].sub(gonAmount); uint256 gonAmountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, gonAmount) : gonAmount; _gonBalances[recipient] = _gonBalances[recipient].add( gonAmountReceived ); emit Transfer( sender, recipient, gonAmountReceived.div(_gonsPerFragment) ); return true; } function transferFrom( address from, address to, uint256 value ) external override validRecipient(to) returns (bool) { if (_allowedFragments[from][msg.sender] != type(uint256).max) { _allowedFragments[from][msg.sender] = _allowedFragments[from][ msg.sender ].sub(value, "Insufficient Allowance"); } _transferFrom(from, to, value); return true; } function swapBack() private swapping { uint256 dynamicLiquidityFee = isOverLiquified( targetLiquidity, targetLiquidityDenominator ) ? 0 : liquidityFee; uint256 contractTokenBalance = _gonBalances[address(this)].div( _gonsPerFragment ); uint256 amountToLiquify = contractTokenBalance .mul(dynamicLiquidityFee) .div(totalFee) .div(2); uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance.sub(balanceBefore); uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2)); uint256 amountETHLiquidity = amountETH .mul(dynamicLiquidityFee) .div(totalETHFee) .div(2); uint256 amountETHRiskFreeValue = amountETH.mul(riskFreeValue).div( totalETHFee ); uint256 amountETHTreasury = amountETH.mul(treasury).div(totalETHFee); (bool success, ) = payable(treasuryAddress).call{ value: amountETHTreasury, gas: 30000 }(""); (success, ) = payable(riskFreeValueAddress).call{ value: amountETHRiskFreeValue, gas: 30000 }(""); success = false; if (amountToLiquify > 0) { router.addLiquidityETH{value: amountETHLiquidity}( address(this), amountToLiquify, 0, 0, autoLiquidityAddress, block.timestamp ); } } function takeFee( address sender, address recipient, uint256 gonAmount ) internal returns (uint256) { uint256 _totalFee = totalFee; if (recipient == liquidityProviderAddress) { _totalFee = _totalFee.add(sellFee); uint256 deltaFromStart = block.timestamp.sub(startedTrading); if (deltaFromStart <= 1 days) { _totalFee = _totalFee.add(10); // 30% } else if (deltaFromStart > 1 days && deltaFromStart <= 2 days) { _totalFee = _totalFee.add(8); // 28% } else if (deltaFromStart > 2 days && deltaFromStart <= 3 days) { _totalFee = _totalFee.add(6); // 26% } else if (deltaFromStart > 3 days && deltaFromStart <= 4 days) { _totalFee = _totalFee.add(4); // 24% } else if (deltaFromStart > 4 days && deltaFromStart <= 5 days) { _totalFee = _totalFee.add(2); // 22% } if ( _feeDiscount[sender] > 0 && block.timestamp < _discountEnds[sender] ) { _totalFee = _totalFee.sub(_feeDiscount[sender]); } } uint256 feeAmount = gonAmount.mul(_totalFee).div(feeDenominator); _gonBalances[address(this)] = _gonBalances[address(this)].add( feeAmount ); emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment)); return gonAmount.sub(feeAmount); } function decreaseAllowance(address spender, uint256 subtractedValue) external initialDistributionLock returns (bool) { uint256 oldValue = _allowedFragments[msg.sender][spender]; if (subtractedValue >= oldValue) { _allowedFragments[msg.sender][spender] = 0; } else { _allowedFragments[msg.sender][spender] = oldValue.sub( subtractedValue ); } emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } function increaseAllowance(address spender, uint256 addedValue) external initialDistributionLock returns (bool) { _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][ spender ].add(addedValue); emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } function approve(address spender, uint256 value) external override initialDistributionLock returns (bool) { _allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function checkFeeExempt(address _addr) external view returns (bool) { return _isFeeExempt[_addr]; } /** * @dev Finish the IDO and allows trading */ function setInitialDistributionFinished() external onlyOwner { initialDistributionFinished = true; } /** * @dev Start the rebases */ function startRebases() external onlyOwner { _autoRebase = true; _lastRebasedTime = block.timestamp; } function enableTransfer(address _addr) external onlyOwner { allowTransfer[_addr] = true; } function setFeeExempt(address _addr, bool value) external onlyOwner { _isFeeExempt[_addr] = value; } /** * @dev decrease the rebase rate, be very careful to not mistake the rebase rate * the initial rebaseRate is 2229, which is equivalent of 0.02229% per rebase */ function decreaseRebaseRate(uint256 _rebaseRate) external onlyOwner { require( _rebaseRate < rebaseRate, "You can only decrease the rebase rate" ); rebaseRate = _rebaseRate; emit DecreaseRebaseRate(_rebaseRate); } function addDiscounter(address discounter) external onlyOwner { require(discounter != address(0x0), "Zero address for discounter"); _addDiscounter(discounter); } function removeDiscounter(address discounter) external onlyOwner { require(discounter != address(0x0), "Zero address for discounter"); _removeDiscounter(discounter); } /** * @dev The Discounter contract will be able to give a discount * from 0 - 100 (in percentage). The endPeriod is the timestamp that * this discount will stop working. */ function setDiscount( address who, uint256 amount, uint256 endPeriod ) external onlyDiscounter { require(amount < 101, "Cannot give discount of more than 100%"); _feeDiscount[who] = amount; _discountEnds[who] = endPeriod; } function shouldTakeFee(address from, address to) internal view returns (bool) { return (liquidityProviderAddress == from || liquidityProviderAddress == to) && (!_isFeeExempt[from]); } function shouldRebase() internal view returns (bool) { return initialDistributionFinished && _autoRebase && (_totalSupply < MAX_SUPPLY) && msg.sender != address(pairContract) && !inSwap && block.timestamp >= (_lastRebasedTime + 15 minutes); } function shouldSwapBack() internal view returns (bool) { return msg.sender != address(pairContract) && !inSwap && _gonBalances[address(this)] >= gonSwapThreshold; } function getCirculatingSupply() public view returns (uint256) { return (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div( _gonsPerFragment ); } function setTargetLiquidity(uint256 target, uint256 accuracy) external onlyOwner { targetLiquidity = target; targetLiquidityDenominator = accuracy; } function checkSwapThreshold() external view returns (uint256) { return gonSwapThreshold.div(_gonsPerFragment); } function manualSync() external { ILiquidityProvider(liquidityProviderAddress).sync(); } function getLiquidityBacking(uint256 accuracy) public view returns (uint256) { uint256 liquidityBalance = _gonBalances[liquidityProviderAddress].div( _gonsPerFragment ); return accuracy.mul(liquidityBalance.mul(2)).div(getCirculatingSupply()); } function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidityBacking(accuracy) > target; } receive() external payable {} /** * @dev START TRADING!!! */ function startTrading() external onlyOwner returns (bool) { require( initialDistributionFinished == false, "Trading already started" ); initialDistributionFinished = true; _autoRebase = true; _lastRebasedTime = block.timestamp; startedTrading = block.timestamp; return true; } event DecreaseRebaseRate(uint256 indexed rebaseRate); }
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":true,"internalType":"uint256","name":"rebaseRate","type":"uint256"}],"name":"DecreaseRebaseRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"DiscounterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"DiscounterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":[],"name":"_autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastRebasedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"discounter","type":"address"}],"name":"addDiscounter","outputs":[],"stateMutability":"nonpayable","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":[],"name":"autoLiquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rebaseRate","type":"uint256"}],"name":"decreaseRebaseRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"enableTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isDiscounter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityProviderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","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":"pairContract","outputs":[{"internalType":"contract ILiquidityProvider","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"discounter","type":"address"}],"name":"removeDiscounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceDiscounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"riskFreeValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"riskFreeValueAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"routerContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"endPeriod","type":"uint256"}],"name":"setDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startRebases","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startedTrading","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"updateBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260326009556064600a55600d805460ff60a81b191690556108b56010553480156200002e57600080fd5b5060405180604001604052806006815260200165507261676d6160d01b81525060405180604001604052806006815260200165505241474d4160d01b815250601282600090805190602001906200008792919062000775565b5081516200009d90600190602085019062000775565b5060028054336101008102610100600160a81b031960ff90951660ff199093169290921793909316179055620000d69250905062000488565b6b0edd07e3abf24de4f8000000601181905573131b78f3961c90c364a7970b98988c219d56d62a600052601360209081526b03c2def17046386d17ffffff197f669eb083e9dca862f70e1094cbf41eae3e6a0e6c6f4adcb553855c03939d13e98190556200014f92909162001854620004da821b17901c565b6012556004805460ff1990811690915560066020527f2e28d0a804b2476fc9854558c2de9b300e41d88ad3259496155ec3828fab75c08054821660019081179091557fe922502fd500074ead09dac664b0c3765d8b5e8ca7d61fb2ee07b2f909eb8eda8054831682179055306000908152604090208054909216179055620001d662000543565b73131b78f3961c90c364a7970b98988c219d56d62a6000908152600560209081527fac205e262ca868535c294fc73eb8a85749cf2586e0ba9839ac55953242e9d721805460ff19166001179055600c80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917908190556040805163c45a015560e01b815290516001600160a01b03929092169363c45a01559360048084019491939192918390030190829087803b1580156200029057600080fd5b505af1158015620002a5573d6000803e3d6000fd5b505050506040513d6020811015620002bc57600080fd5b5051600c54604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c46489160048083019260209291908290030181600087803b1580156200030d57600080fd5b505af115801562000322573d6000803e3d6000fd5b505050506040513d60208110156200033957600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d6020811015620003b557600080fd5b5051600d80546001600160a01b039283166001600160a01b031991821617808355600b8054909216908416179055306000908152601460209081526040808320600c5486168452909152808220600019908190559254909316815291909120556200043473131b78f3961c90c364a7970b98988c219d56d62a62000550565b601154604080519182525173131b78f3961c90c364a7970b98988c219d56d62a916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a362000821565b620004a3816003620005cb60201b620018bb1790919060201c565b6040516001600160a01b038216907fd2b866487bc39c26e9bff1f08584d821e5d42a09fcffd53422094ae7df752cd290600090a250565b600080821162000531576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816200053b57fe5b049392505050565b6200054e336200064f565b565b6001600160a01b0381166200056457600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b620005d78282620006a1565b156200062a576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6200066a8160036200070a60201b6200193c1790919060201c565b6040516001600160a01b038216907f409c3b602fe045cef5f711a7d262b21aefd657b144c572620b5b6c7ed27dfef990600090a250565b60006001600160a01b038216620006ea5760405162461bcd60e51b8152600401808060200182810382526022815260200180620031556022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b620007168282620006a1565b620007535760405162461bcd60e51b8152600401808060200182810382526021815260200180620031346021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620007ad5760008555620007f8565b82601f10620007c857805160ff1916838001178555620007f8565b82800160010185558215620007f8579182015b82811115620007f8578251825591602001919060010190620007db565b50620008069291506200080a565b5090565b5b808211156200080657600081556001016200080b565b61290380620008316000396000f3fe60806040526004361061031e5760003560e01c8063865c7e6a116101ab578063bf98f1ee116100f7578063d830678611610095578063f2fde38b1161006f578063f2fde38b14610a2d578063f73bc05314610a60578063f887ea4014610a75578063f9f92be414610a8a57610325565b8063d8306786146109aa578063dd62ed3e146109bf578063e75580e8146109fa57610325565b8063d1fce264116100d1578063d1fce26414610905578063d43997901461091a578063d51ed1c81461094d578063d5938aac1461097757610325565b8063bf98f1ee146108b1578063c3dda6a8146108c6578063c5f956af146108f057610325565b806398118cb411610164578063a9059cbb1161013e578063a9059cbb1461080f578063afb9cf6d14610848578063b466360c1461085d578063bdf31c541461089c57610325565b806398118cb4146105365780639a55155614610536578063a457c2d7146107d657610325565b8063865c7e6a1461070c5780638da5cb5b146107215780638ebfc796146107365780638f32d59b146107715780639155e0831461078657806395d89b41146107c157610325565b8063313ce5671161026a57806361d027b3116102235780636fd4d094116101fd5780636fd4d0941461067c57806370a08231146106af578063715018a6146106e2578063753d02a1146106f757610325565b806361d027b314610536578063620ade97146106525780636d351d1a1461066757610325565b8063313ce5671461056057806332b756831461058b57806339509351146105a05780634ca4ca5c146105d95780634d709adf1461060c578063596c003f1461063d57610325565b80631df4ccfc116102d7578063293230b8116102b1578063293230b81461050c5780632b112e49146105215780632b14ca56146105365780632be6937d1461054b57610325565b80631df4ccfc14610484578063201e79911461049957806323b872dd146104c957610325565b806306fdde031461032a578063095ea7b3146103b45780630987e111146104015780631161ae3914610418578063180b0d7e1461044857806318160ddd1461046f57610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610abd565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610379578181015183820152602001610361565b50505050905090810190601f1680156103a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c057600080fd5b506103ed600480360360408110156103d757600080fd5b506001600160a01b038135169060200135610b53565b604080519115158252519081900360200190f35b34801561040d57600080fd5b50610416610c2b565b005b34801561042457600080fd5b506103ed6004803603604081101561043b57600080fd5b5080359060200135610c55565b34801561045457600080fd5b5061045d610c69565b60408051918252519081900360200190f35b34801561047b57600080fd5b5061045d610c6e565b34801561049057600080fd5b5061045d610c74565b3480156104a557600080fd5b50610416600480360360408110156104bc57600080fd5b5080359060200135610c79565b3480156104d557600080fd5b506103ed600480360360608110156104ec57600080fd5b506001600160a01b03813581169160208101359091169060400135610c95565b34801561051857600080fd5b506103ed610db0565b34801561052d57600080fd5b5061045d610e4b565b34801561054257600080fd5b5061045d610ed5565b34801561055757600080fd5b50610416610eda565b34801561056c57600080fd5b50610575610efa565b6040805160ff9092168252519081900360200190f35b34801561059757600080fd5b5061045d610f03565b3480156105ac57600080fd5b506103ed600480360360408110156105c357600080fd5b506001600160a01b038135169060200135610f09565b3480156105e557600080fd5b50610416600480360360208110156105fc57600080fd5b50356001600160a01b031661100c565b34801561061857600080fd5b50610621611084565b604080516001600160a01b039092168252519081900360200190f35b34801561064957600080fd5b50610621611093565b34801561065e57600080fd5b506106216110ab565b34801561067357600080fd5b5061045d6110c3565b34801561068857600080fd5b506103ed6004803603602081101561069f57600080fd5b50356001600160a01b03166110f3565b3480156106bb57600080fd5b5061045d600480360360208110156106d257600080fd5b50356001600160a01b0316611100565b3480156106ee57600080fd5b50610416611128565b34801561070357600080fd5b50610416611188565b34801561071857600080fd5b5061045d6111f2565b34801561072d57600080fd5b506106216111f8565b34801561074257600080fd5b506104166004803603604081101561075957600080fd5b506001600160a01b038135169060200135151561120c565b34801561077d57600080fd5b506103ed611248565b34801561079257600080fd5b50610416600480360360408110156107a957600080fd5b506001600160a01b038135169060200135151561125e565b3480156107cd57600080fd5b5061033f61129a565b3480156107e257600080fd5b506103ed600480360360408110156107f957600080fd5b506001600160a01b0381351690602001356112fa565b34801561081b57600080fd5b506103ed6004803603604081101561083257600080fd5b506001600160a01b038135169060200135611453565b34801561085457600080fd5b506103ed61152d565b34801561086957600080fd5b506104166004803603606081101561088057600080fd5b506001600160a01b03813516906020810135906040013561153d565b3480156108a857600080fd5b506104166115e8565b3480156108bd57600080fd5b506106216115f3565b3480156108d257600080fd5b50610416600480360360208110156108e957600080fd5b5035611602565b3480156108fc57600080fd5b50610621611686565b34801561091157600080fd5b506103ed61169e565b34801561092657600080fd5b506103ed6004803603602081101561093d57600080fd5b50356001600160a01b03166116a7565b34801561095957600080fd5b5061045d6004803603602081101561097057600080fd5b50356116c5565b34801561098357600080fd5b506104166004803603602081101561099a57600080fd5b50356001600160a01b0316611719565b3480156109b657600080fd5b506103ed61174e565b3480156109cb57600080fd5b5061045d600480360360408110156109e257600080fd5b506001600160a01b038135811691602001351661175e565b348015610a0657600080fd5b5061041660048036036020811015610a1d57600080fd5b50356001600160a01b0316611789565b348015610a3957600080fd5b5061041660048036036020811015610a5057600080fd5b50356001600160a01b03166117fe565b348015610a6c57600080fd5b50610621611818565b348015610a8157600080fd5b50610621611830565b348015610a9657600080fd5b506103ed60048036036020811015610aad57600080fd5b50356001600160a01b031661183f565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b495780601f10610b1e57610100808354040283529160200191610b49565b820191906000526020600020905b815481529060010190602001808311610b2c57829003601f168201915b5050505050905090565b60045460009060ff1680610b6a5750610b6a611248565b80610b8457503360009081526005602052604090205460ff165b610bc3576040805162461bcd60e51b815260206004820152601c6024820152600080516020612888833981519152604482015290519081900360640190fd5b3360008181526014602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b610c33611248565b610c3c57600080fd5b600d805460ff60a81b1916600160a81b17905542600f55565b600082610c61836116c5565b119392505050565b606481565b60115490565b600f81565b610c81611248565b610c8a57600080fd5b600991909155600a55565b6000826001600160a01b038116610cec576040805162461bcd60e51b815260206004820152601660248201527516995c9bc81859191c995cdcc81c9958da5c1a595b9d60521b604482015290519081900360640190fd5b6001600160a01b038516600090815260146020908152604080832033845290915290205460001914610d99576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601482528381203382529091529190912054610d749185906119a3565b6001600160a01b03861660009081526014602090815260408083203384529091529020555b610da4858585611a3a565b50600195945050505050565b6000610dba611248565b610dc357600080fd5b60045460ff1615610e1b576040805162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c72656164792073746172746564000000000000000000604482015290519081900360640190fd5b506004805460ff19166001908117909155600d805460ff60a81b1916600160a81b17905542600f819055600e5590565b60125460136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c5461dead60009081527f2264e2d7bacabe6058f5009f42467b9be28015e7760f87409562384c94ac271c549092610ed0929091610eca9190610ec4906b03c2def17046386d17ffffff1990611c16565b90611c16565b90611854565b905090565b600581565b610ee2611248565b610eeb57600080fd5b6004805460ff19166001179055565b60025460ff1690565b600f5481565b60045460009060ff1680610f205750610f20611248565b80610f3a57503360009081526005602052604090205460ff165b610f79576040805162461bcd60e51b815260206004820152601c6024820152600080516020612888833981519152604482015290519081900360640190fd5b3360009081526014602090815260408083206001600160a01b0387168452909152902054610fa79083611c73565b3360008181526014602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b611014611248565b61101d57600080fd5b6001600160a01b038116611078576040805162461bcd60e51b815260206004820152601b60248201527f5a65726f206164647265737320666f7220646973636f756e7465720000000000604482015290519081900360640190fd5b61108181611ccd565b50565b600b546001600160a01b031681565b73186d5b8c9e6c6265071aac228b145c32bec1a0c681565b7313564ce8a42f2d43ee93fbedc4f4c5398a1e739081565b601254600090610ed0907e068db8bac710cb295e9e1b089a027525460aa64c2e8cfc958b9a7715a2339c90611854565b6000610c25600383611d0f565b6012546001600160a01b0382166000908152601360205260408120549091610c259190611854565b611130611248565b61113957600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b600d60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111d857600080fd5b505af11580156111ec573d6000803e3d6000fd5b50505050565b600e5481565b60025461010090046001600160a01b031690565b611214611248565b61121d57600080fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60025461010090046001600160a01b0316331490565b611266611248565b61126f57600080fd5b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b495780601f10610b1e57610100808354040283529160200191610b49565b60045460009060ff16806113115750611311611248565b8061132b57503360009081526005602052604090205460ff165b61136a576040805162461bcd60e51b815260206004820152601c6024820152600080516020612888833981519152604482015290519081900360640190fd5b3360009081526014602090815260408083206001600160a01b03871684529091529020548083106113be573360009081526014602090815260408083206001600160a01b03881684529091528120556113ed565b6113c88184611c16565b3360009081526014602090815260408083206001600160a01b03891684529091529020555b3360008181526014602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000826001600160a01b0381166114aa576040805162461bcd60e51b815260206004820152601660248201527516995c9bc81859191c995cdcc81c9958da5c1a595b9d60521b604482015290519081900360640190fd5b60045460ff16806114be57506114be611248565b806114d857503360009081526005602052604090205460ff165b611517576040805162461bcd60e51b815260206004820152601c6024820152600080516020612888833981519152604482015290519081900360640190fd5b611522338585611a3a565b506001949350505050565b600d54600160a81b900460ff1681565b611546336110f3565b6115815760405162461bcd60e51b81526004018080602001828103825260388152602001806127c76038913960400191505060405180910390fd5b606582106115c05760405162461bcd60e51b81526004018080602001828103825260268152602001806128a86026913960400191505060405180910390fd5b6001600160a01b03909216600090815260076020908152604080832093909355600890522055565b6115f133611d76565b565b600d546001600160a01b031681565b61160a611248565b61161357600080fd5b60105481106116535760405162461bcd60e51b81526004018080602001828103825260258152602001806128636025913960400191505060405180910390fd5b601081905560405181907f981bf9476fb008a72e3f4642c20d4e06351fc5fd545edcf1248a8f42f6dbbf1590600090a250565b73131b78f3961c90c364a7970b98988c219d56d62a81565b60045460ff1681565b6001600160a01b031660009081526006602052604090205460ff1690565b601254600d546001600160a01b0316600090815260136020526040812054909182916116f091611854565b90506117126116fd610e4b565b610eca61170b846002611db8565b8690611db8565b9392505050565b611721611248565b61172a57600080fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b600d54600160a01b900460ff1681565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b611791611248565b61179a57600080fd5b6001600160a01b0381166117f5576040805162461bcd60e51b815260206004820152601b60248201527f5a65726f206164647265737320666f7220646973636f756e7465720000000000604482015290519081900360640190fd5b61108181611d76565b611806611248565b61180f57600080fd5b61108181611e11565b73f491e7b69e4244ad4002bc14e878a34207e38c2981565b600c546001600160a01b031681565b60156020526000908152604090205460ff1681565b60008082116118aa576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816118b357fe5b049392505050565b6118c58282611d0f565b15611917576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6119468282611d0f565b6119815760405162461bcd60e51b81526004018080602001828103825260218152602001806127ff6021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60008184841115611a325760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119f75781810151838201526020016119df565b50505050905090810190601f168015611a245780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03831660009081526015602052604081205460ff16158015611a7c57506001600160a01b03831660009081526015602052604090205460ff16155b611abc576040805162461bcd60e51b815260206004820152600c60248201526b1a5b97d89b1858dadb1a5cdd60a21b604482015290519081900360640190fd5b600d54600160a01b900460ff1615611ae057611ad9848484611e8b565b9050611712565b611ae8611f1d565b15611af557611af5611f8c565b611afd6120eb565b15611b0a57611b0a612150565b6000611b2160125484611db890919063ffffffff16565b6001600160a01b038616600090815260136020526040902054909150611b479082611c16565b6001600160a01b038616600090815260136020526040812091909155611b6d8686612570565b611b775781611b82565b611b828686846125c4565b6001600160a01b038616600090815260136020526040902054909150611ba89082611c73565b6001600160a01b03808716600081815260136020526040902092909255601254908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bf9908590611854565b60408051918252519081900360200190a350600195945050505050565b600082821115611c6d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611712576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b611cd86003826118bb565b6040516001600160a01b038216907fd2b866487bc39c26e9bff1f08584d821e5d42a09fcffd53422094ae7df752cd290600090a250565b60006001600160a01b038216611d565760405162461bcd60e51b81526004018080602001828103825260228152602001806128416022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b611d8160038261193c565b6040516001600160a01b038216907f409c3b602fe045cef5f711a7d262b21aefd657b144c572620b5b6c7ed27dfef990600090a250565b600082611dc757506000610c25565b82820282848281611dd457fe5b04146117125760405162461bcd60e51b81526004018080602001828103825260218152602001806128206021913960400191505060405180910390fd5b6001600160a01b038116611e2457600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080611ea360125484611db890919063ffffffff16565b6001600160a01b038616600090815260136020526040902054909150611ec99082611c16565b6001600160a01b038087166000908152601360205260408082209390935590861681522054611ef89082611c73565b6001600160a01b03851660009081526013602052604090205550600190509392505050565b60045460009060ff168015611f3b5750600d54600160a81b900460ff165b8015611f4a5750600019601154105b8015611f615750600b546001600160a01b03163314155b8015611f775750600d54600160a01b900460ff16155b8015610ed0575050600f546103840142101590565b600d54600160a01b900460ff1615611fa3576115f1565b600f5442036000611fb682610384611854565b90506000611fd5610384610eca600e5442611c1690919063ffffffff16565b905060005b828160ff1610156120135761200862989680610eca6010546298968001601154611db890919063ffffffff16565b601155600101611fda565b5060115461202f906b03c2def17046386d17ffffff1990611854565b60125561204a61204183610384611db8565b600f5490611c73565b600f55600b546040805160016209351760e01b0319815290516001600160a01b039092169163fff6cae99160048082019260009290919082900301818387803b15801561209657600080fd5b505af11580156120aa573d6000803e3d6000fd5b505060115460408051918252518493507f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f292509081900360200190a2505050565b600b546000906001600160a01b031633148015906121135750600d54600160a01b900460ff16155b8015610ed0575050306000908152601360205260409020547e068db8bac710cb295e9e1b089a027525460aa64c2e8cfc958b9a7715a2339c111590565b600d805460ff60a01b1916600160a01b179055600954600a5460009161217591610c55565b612180576005612183565b60005b60125430600090815260136020526040812054929350916121a391611854565b905060006121b96002610eca600f818688611db8565b905060006121c78383611c16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106121fb57fe5b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181600087803b15801561225157600080fd5b505af1158015612265573d6000803e3d6000fd5b505050506040513d602081101561227b57600080fd5b505181518290600190811061228c57fe5b6001600160a01b03928316602091820292909201810191909152600c5460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b8381101561232657818101518382015260200161230e565b505050509050019650505050505050600060405180830381600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b50505050600061237c8247611c1690919063ffffffff16565b9050600061239661238e896002611854565b600f90611c16565b905060006123ab6002610eca8481878e611db8565b905060006123be83610eca866005611db8565b905060006123d184610eca876005611db8565b60405190915060009073131b78f3961c90c364a7970b98988c219d56d62a9061753090849084818181858888f193505050503d806000811461242f576040519150601f19603f3d011682016040523d82523d6000602084013e612434565b606091505b505060405190915073186d5b8c9e6c6265071aac228b145c32bec1a0c6906175309085906000818181858888f193505050503d8060008114612492576040519150601f19603f3d011682016040523d82523d6000602084013e612497565b606091505b5060009250508a15905061255557600c546040805163f305d71960e01b8152306004820152602481018d905260006044820181905260648201527313564ce8a42f2d43ee93fbedc4f4c5398a1e739060848201524260a482015290516001600160a01b039092169163f305d71991879160c480830192606092919082900301818588803b15801561252757600080fd5b505af115801561253b573d6000803e3d6000fd5b50505050506040513d606081101561255257600080fd5b50505b5050600d805460ff60a01b1916905550505050505050505050565b600d546000906001600160a01b038481169116148061259c5750600d546001600160a01b038381169116145b8015611712575050506001600160a01b031660009081526006602052604090205460ff161590565b600d54600090600f906001600160a01b0385811691161415612725576125eb816005611c73565b90506000612604600e5442611c1690919063ffffffff16565b90506201518081116126225761261b82600a611c73565b91506126b9565b620151808111801561263757506202a3008111155b156126475761261b826008611c73565b6202a3008111801561265c57506203f4808111155b1561266c5761261b826006611c73565b6203f480811180156126815750620546008111155b156126915761261b826004611c73565b62054600811180156126a65750620697808111155b156126b9576126b6826002611c73565b91505b6001600160a01b038616600090815260076020526040902054158015906126f757506001600160a01b03861660009081526008602052604090205442105b15612723576001600160a01b038616600090815260076020526040902054612720908390611c16565b91505b505b60006127366064610eca8685611db8565b306000908152601360205260409020549091506127539082611c73565b306000818152601360205260409020919091556012546001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127a1908590611854565b60408051918252519081900360200190a36127bc8482611c16565b969550505050505056fe446973636f756e746572526f6c653a2063616c6c657220646f6573206e6f7420686176652074686520446973636f756e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373596f752063616e206f6e6c792064656372656173652074686520726562617365207261746550726f746f636f6c2072756e6e696e6720696e2049444f206d6f64650000000043616e6e6f74206769766520646973636f756e74206f66206d6f7265207468616e2031303025a26469706673582212202000b1f6fbbc1319c60ce422243a83482771e0d44b21524b557f366d8858d82064736f6c63430007060033526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373
Deployed Bytecode
0x60806040526004361061031e5760003560e01c8063865c7e6a116101ab578063bf98f1ee116100f7578063d830678611610095578063f2fde38b1161006f578063f2fde38b14610a2d578063f73bc05314610a60578063f887ea4014610a75578063f9f92be414610a8a57610325565b8063d8306786146109aa578063dd62ed3e146109bf578063e75580e8146109fa57610325565b8063d1fce264116100d1578063d1fce26414610905578063d43997901461091a578063d51ed1c81461094d578063d5938aac1461097757610325565b8063bf98f1ee146108b1578063c3dda6a8146108c6578063c5f956af146108f057610325565b806398118cb411610164578063a9059cbb1161013e578063a9059cbb1461080f578063afb9cf6d14610848578063b466360c1461085d578063bdf31c541461089c57610325565b806398118cb4146105365780639a55155614610536578063a457c2d7146107d657610325565b8063865c7e6a1461070c5780638da5cb5b146107215780638ebfc796146107365780638f32d59b146107715780639155e0831461078657806395d89b41146107c157610325565b8063313ce5671161026a57806361d027b3116102235780636fd4d094116101fd5780636fd4d0941461067c57806370a08231146106af578063715018a6146106e2578063753d02a1146106f757610325565b806361d027b314610536578063620ade97146106525780636d351d1a1461066757610325565b8063313ce5671461056057806332b756831461058b57806339509351146105a05780634ca4ca5c146105d95780634d709adf1461060c578063596c003f1461063d57610325565b80631df4ccfc116102d7578063293230b8116102b1578063293230b81461050c5780632b112e49146105215780632b14ca56146105365780632be6937d1461054b57610325565b80631df4ccfc14610484578063201e79911461049957806323b872dd146104c957610325565b806306fdde031461032a578063095ea7b3146103b45780630987e111146104015780631161ae3914610418578063180b0d7e1461044857806318160ddd1461046f57610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610abd565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610379578181015183820152602001610361565b50505050905090810190601f1680156103a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c057600080fd5b506103ed600480360360408110156103d757600080fd5b506001600160a01b038135169060200135610b53565b604080519115158252519081900360200190f35b34801561040d57600080fd5b50610416610c2b565b005b34801561042457600080fd5b506103ed6004803603604081101561043b57600080fd5b5080359060200135610c55565b34801561045457600080fd5b5061045d610c69565b60408051918252519081900360200190f35b34801561047b57600080fd5b5061045d610c6e565b34801561049057600080fd5b5061045d610c74565b3480156104a557600080fd5b50610416600480360360408110156104bc57600080fd5b5080359060200135610c79565b3480156104d557600080fd5b506103ed600480360360608110156104ec57600080fd5b506001600160a01b03813581169160208101359091169060400135610c95565b34801561051857600080fd5b506103ed610db0565b34801561052d57600080fd5b5061045d610e4b565b34801561054257600080fd5b5061045d610ed5565b34801561055757600080fd5b50610416610eda565b34801561056c57600080fd5b50610575610efa565b6040805160ff9092168252519081900360200190f35b34801561059757600080fd5b5061045d610f03565b3480156105ac57600080fd5b506103ed600480360360408110156105c357600080fd5b506001600160a01b038135169060200135610f09565b3480156105e557600080fd5b50610416600480360360208110156105fc57600080fd5b50356001600160a01b031661100c565b34801561061857600080fd5b50610621611084565b604080516001600160a01b039092168252519081900360200190f35b34801561064957600080fd5b50610621611093565b34801561065e57600080fd5b506106216110ab565b34801561067357600080fd5b5061045d6110c3565b34801561068857600080fd5b506103ed6004803603602081101561069f57600080fd5b50356001600160a01b03166110f3565b3480156106bb57600080fd5b5061045d600480360360208110156106d257600080fd5b50356001600160a01b0316611100565b3480156106ee57600080fd5b50610416611128565b34801561070357600080fd5b50610416611188565b34801561071857600080fd5b5061045d6111f2565b34801561072d57600080fd5b506106216111f8565b34801561074257600080fd5b506104166004803603604081101561075957600080fd5b506001600160a01b038135169060200135151561120c565b34801561077d57600080fd5b506103ed611248565b34801561079257600080fd5b50610416600480360360408110156107a957600080fd5b506001600160a01b038135169060200135151561125e565b3480156107cd57600080fd5b5061033f61129a565b3480156107e257600080fd5b506103ed600480360360408110156107f957600080fd5b506001600160a01b0381351690602001356112fa565b34801561081b57600080fd5b506103ed6004803603604081101561083257600080fd5b506001600160a01b038135169060200135611453565b34801561085457600080fd5b506103ed61152d565b34801561086957600080fd5b506104166004803603606081101561088057600080fd5b506001600160a01b03813516906020810135906040013561153d565b3480156108a857600080fd5b506104166115e8565b3480156108bd57600080fd5b506106216115f3565b3480156108d257600080fd5b50610416600480360360208110156108e957600080fd5b5035611602565b3480156108fc57600080fd5b50610621611686565b34801561091157600080fd5b506103ed61169e565b34801561092657600080fd5b506103ed6004803603602081101561093d57600080fd5b50356001600160a01b03166116a7565b34801561095957600080fd5b5061045d6004803603602081101561097057600080fd5b50356116c5565b34801561098357600080fd5b506104166004803603602081101561099a57600080fd5b50356001600160a01b0316611719565b3480156109b657600080fd5b506103ed61174e565b3480156109cb57600080fd5b5061045d600480360360408110156109e257600080fd5b506001600160a01b038135811691602001351661175e565b348015610a0657600080fd5b5061041660048036036020811015610a1d57600080fd5b50356001600160a01b0316611789565b348015610a3957600080fd5b5061041660048036036020811015610a5057600080fd5b50356001600160a01b03166117fe565b348015610a6c57600080fd5b50610621611818565b348015610a8157600080fd5b50610621611830565b348015610a9657600080fd5b506103ed60048036036020811015610aad57600080fd5b50356001600160a01b031661183f565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b495780601f10610b1e57610100808354040283529160200191610b49565b820191906000526020600020905b815481529060010190602001808311610b2c57829003601f168201915b5050505050905090565b60045460009060ff1680610b6a5750610b6a611248565b80610b8457503360009081526005602052604090205460ff165b610bc3576040805162461bcd60e51b815260206004820152601c6024820152600080516020612888833981519152604482015290519081900360640190fd5b3360008181526014602090815260408083206001600160a01b03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b610c33611248565b610c3c57600080fd5b600d805460ff60a81b1916600160a81b17905542600f55565b600082610c61836116c5565b119392505050565b606481565b60115490565b600f81565b610c81611248565b610c8a57600080fd5b600991909155600a55565b6000826001600160a01b038116610cec576040805162461bcd60e51b815260206004820152601660248201527516995c9bc81859191c995cdcc81c9958da5c1a595b9d60521b604482015290519081900360640190fd5b6001600160a01b038516600090815260146020908152604080832033845290915290205460001914610d99576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601482528381203382529091529190912054610d749185906119a3565b6001600160a01b03861660009081526014602090815260408083203384529091529020555b610da4858585611a3a565b50600195945050505050565b6000610dba611248565b610dc357600080fd5b60045460ff1615610e1b576040805162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c72656164792073746172746564000000000000000000604482015290519081900360640190fd5b506004805460ff19166001908117909155600d805460ff60a81b1916600160a81b17905542600f819055600e5590565b60125460136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c5461dead60009081527f2264e2d7bacabe6058f5009f42467b9be28015e7760f87409562384c94ac271c549092610ed0929091610eca9190610ec4906b03c2def17046386d17ffffff1990611c16565b90611c16565b90611854565b905090565b600581565b610ee2611248565b610eeb57600080fd5b6004805460ff19166001179055565b60025460ff1690565b600f5481565b60045460009060ff1680610f205750610f20611248565b80610f3a57503360009081526005602052604090205460ff165b610f79576040805162461bcd60e51b815260206004820152601c6024820152600080516020612888833981519152604482015290519081900360640190fd5b3360009081526014602090815260408083206001600160a01b0387168452909152902054610fa79083611c73565b3360008181526014602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b611014611248565b61101d57600080fd5b6001600160a01b038116611078576040805162461bcd60e51b815260206004820152601b60248201527f5a65726f206164647265737320666f7220646973636f756e7465720000000000604482015290519081900360640190fd5b61108181611ccd565b50565b600b546001600160a01b031681565b73186d5b8c9e6c6265071aac228b145c32bec1a0c681565b7313564ce8a42f2d43ee93fbedc4f4c5398a1e739081565b601254600090610ed0907e068db8bac710cb295e9e1b089a027525460aa64c2e8cfc958b9a7715a2339c90611854565b6000610c25600383611d0f565b6012546001600160a01b0382166000908152601360205260408120549091610c259190611854565b611130611248565b61113957600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b600d60009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111d857600080fd5b505af11580156111ec573d6000803e3d6000fd5b50505050565b600e5481565b60025461010090046001600160a01b031690565b611214611248565b61121d57600080fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b60025461010090046001600160a01b0316331490565b611266611248565b61126f57600080fd5b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b495780601f10610b1e57610100808354040283529160200191610b49565b60045460009060ff16806113115750611311611248565b8061132b57503360009081526005602052604090205460ff165b61136a576040805162461bcd60e51b815260206004820152601c6024820152600080516020612888833981519152604482015290519081900360640190fd5b3360009081526014602090815260408083206001600160a01b03871684529091529020548083106113be573360009081526014602090815260408083206001600160a01b03881684529091528120556113ed565b6113c88184611c16565b3360009081526014602090815260408083206001600160a01b03891684529091529020555b3360008181526014602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000826001600160a01b0381166114aa576040805162461bcd60e51b815260206004820152601660248201527516995c9bc81859191c995cdcc81c9958da5c1a595b9d60521b604482015290519081900360640190fd5b60045460ff16806114be57506114be611248565b806114d857503360009081526005602052604090205460ff165b611517576040805162461bcd60e51b815260206004820152601c6024820152600080516020612888833981519152604482015290519081900360640190fd5b611522338585611a3a565b506001949350505050565b600d54600160a81b900460ff1681565b611546336110f3565b6115815760405162461bcd60e51b81526004018080602001828103825260388152602001806127c76038913960400191505060405180910390fd5b606582106115c05760405162461bcd60e51b81526004018080602001828103825260268152602001806128a86026913960400191505060405180910390fd5b6001600160a01b03909216600090815260076020908152604080832093909355600890522055565b6115f133611d76565b565b600d546001600160a01b031681565b61160a611248565b61161357600080fd5b60105481106116535760405162461bcd60e51b81526004018080602001828103825260258152602001806128636025913960400191505060405180910390fd5b601081905560405181907f981bf9476fb008a72e3f4642c20d4e06351fc5fd545edcf1248a8f42f6dbbf1590600090a250565b73131b78f3961c90c364a7970b98988c219d56d62a81565b60045460ff1681565b6001600160a01b031660009081526006602052604090205460ff1690565b601254600d546001600160a01b0316600090815260136020526040812054909182916116f091611854565b90506117126116fd610e4b565b610eca61170b846002611db8565b8690611db8565b9392505050565b611721611248565b61172a57600080fd5b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b600d54600160a01b900460ff1681565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b611791611248565b61179a57600080fd5b6001600160a01b0381166117f5576040805162461bcd60e51b815260206004820152601b60248201527f5a65726f206164647265737320666f7220646973636f756e7465720000000000604482015290519081900360640190fd5b61108181611d76565b611806611248565b61180f57600080fd5b61108181611e11565b73f491e7b69e4244ad4002bc14e878a34207e38c2981565b600c546001600160a01b031681565b60156020526000908152604090205460ff1681565b60008082116118aa576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816118b357fe5b049392505050565b6118c58282611d0f565b15611917576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6119468282611d0f565b6119815760405162461bcd60e51b81526004018080602001828103825260218152602001806127ff6021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b60008184841115611a325760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119f75781810151838201526020016119df565b50505050905090810190601f168015611a245780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b03831660009081526015602052604081205460ff16158015611a7c57506001600160a01b03831660009081526015602052604090205460ff16155b611abc576040805162461bcd60e51b815260206004820152600c60248201526b1a5b97d89b1858dadb1a5cdd60a21b604482015290519081900360640190fd5b600d54600160a01b900460ff1615611ae057611ad9848484611e8b565b9050611712565b611ae8611f1d565b15611af557611af5611f8c565b611afd6120eb565b15611b0a57611b0a612150565b6000611b2160125484611db890919063ffffffff16565b6001600160a01b038616600090815260136020526040902054909150611b479082611c16565b6001600160a01b038616600090815260136020526040812091909155611b6d8686612570565b611b775781611b82565b611b828686846125c4565b6001600160a01b038616600090815260136020526040902054909150611ba89082611c73565b6001600160a01b03808716600081815260136020526040902092909255601254908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bf9908590611854565b60408051918252519081900360200190a350600195945050505050565b600082821115611c6d576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600082820183811015611712576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b611cd86003826118bb565b6040516001600160a01b038216907fd2b866487bc39c26e9bff1f08584d821e5d42a09fcffd53422094ae7df752cd290600090a250565b60006001600160a01b038216611d565760405162461bcd60e51b81526004018080602001828103825260228152602001806128416022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b611d8160038261193c565b6040516001600160a01b038216907f409c3b602fe045cef5f711a7d262b21aefd657b144c572620b5b6c7ed27dfef990600090a250565b600082611dc757506000610c25565b82820282848281611dd457fe5b04146117125760405162461bcd60e51b81526004018080602001828103825260218152602001806128206021913960400191505060405180910390fd5b6001600160a01b038116611e2457600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080611ea360125484611db890919063ffffffff16565b6001600160a01b038616600090815260136020526040902054909150611ec99082611c16565b6001600160a01b038087166000908152601360205260408082209390935590861681522054611ef89082611c73565b6001600160a01b03851660009081526013602052604090205550600190509392505050565b60045460009060ff168015611f3b5750600d54600160a81b900460ff165b8015611f4a5750600019601154105b8015611f615750600b546001600160a01b03163314155b8015611f775750600d54600160a01b900460ff16155b8015610ed0575050600f546103840142101590565b600d54600160a01b900460ff1615611fa3576115f1565b600f5442036000611fb682610384611854565b90506000611fd5610384610eca600e5442611c1690919063ffffffff16565b905060005b828160ff1610156120135761200862989680610eca6010546298968001601154611db890919063ffffffff16565b601155600101611fda565b5060115461202f906b03c2def17046386d17ffffff1990611854565b60125561204a61204183610384611db8565b600f5490611c73565b600f55600b546040805160016209351760e01b0319815290516001600160a01b039092169163fff6cae99160048082019260009290919082900301818387803b15801561209657600080fd5b505af11580156120aa573d6000803e3d6000fd5b505060115460408051918252518493507f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f292509081900360200190a2505050565b600b546000906001600160a01b031633148015906121135750600d54600160a01b900460ff16155b8015610ed0575050306000908152601360205260409020547e068db8bac710cb295e9e1b089a027525460aa64c2e8cfc958b9a7715a2339c111590565b600d805460ff60a01b1916600160a01b179055600954600a5460009161217591610c55565b612180576005612183565b60005b60125430600090815260136020526040812054929350916121a391611854565b905060006121b96002610eca600f818688611db8565b905060006121c78383611c16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106121fb57fe5b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181600087803b15801561225157600080fd5b505af1158015612265573d6000803e3d6000fd5b505050506040513d602081101561227b57600080fd5b505181518290600190811061228c57fe5b6001600160a01b03928316602091820292909201810191909152600c5460405163791ac94760e01b8152600481018681526000602483018190523060648401819052426084850181905260a060448601908152895160a487015289514799979097169763791ac947978c9795968c9690939260c49091019187820191028083838b5b8381101561232657818101518382015260200161230e565b505050509050019650505050505050600060405180830381600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b50505050600061237c8247611c1690919063ffffffff16565b9050600061239661238e896002611854565b600f90611c16565b905060006123ab6002610eca8481878e611db8565b905060006123be83610eca866005611db8565b905060006123d184610eca876005611db8565b60405190915060009073131b78f3961c90c364a7970b98988c219d56d62a9061753090849084818181858888f193505050503d806000811461242f576040519150601f19603f3d011682016040523d82523d6000602084013e612434565b606091505b505060405190915073186d5b8c9e6c6265071aac228b145c32bec1a0c6906175309085906000818181858888f193505050503d8060008114612492576040519150601f19603f3d011682016040523d82523d6000602084013e612497565b606091505b5060009250508a15905061255557600c546040805163f305d71960e01b8152306004820152602481018d905260006044820181905260648201527313564ce8a42f2d43ee93fbedc4f4c5398a1e739060848201524260a482015290516001600160a01b039092169163f305d71991879160c480830192606092919082900301818588803b15801561252757600080fd5b505af115801561253b573d6000803e3d6000fd5b50505050506040513d606081101561255257600080fd5b50505b5050600d805460ff60a01b1916905550505050505050505050565b600d546000906001600160a01b038481169116148061259c5750600d546001600160a01b038381169116145b8015611712575050506001600160a01b031660009081526006602052604090205460ff161590565b600d54600090600f906001600160a01b0385811691161415612725576125eb816005611c73565b90506000612604600e5442611c1690919063ffffffff16565b90506201518081116126225761261b82600a611c73565b91506126b9565b620151808111801561263757506202a3008111155b156126475761261b826008611c73565b6202a3008111801561265c57506203f4808111155b1561266c5761261b826006611c73565b6203f480811180156126815750620546008111155b156126915761261b826004611c73565b62054600811180156126a65750620697808111155b156126b9576126b6826002611c73565b91505b6001600160a01b038616600090815260076020526040902054158015906126f757506001600160a01b03861660009081526008602052604090205442105b15612723576001600160a01b038616600090815260076020526040902054612720908390611c16565b91505b505b60006127366064610eca8685611db8565b306000908152601360205260409020549091506127539082611c73565b306000818152601360205260409020919091556012546001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127a1908590611854565b60408051918252519081900360200190a36127bc8482611c16565b969550505050505056fe446973636f756e746572526f6c653a2063616c6c657220646f6573206e6f7420686176652074686520446973636f756e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373596f752063616e206f6e6c792064656372656173652074686520726562617365207261746550726f746f636f6c2072756e6e696e6720696e2049444f206d6f64650000000043616e6e6f74206769766520646973636f756e74206f66206d6f7265207468616e2031303025a26469706673582212202000b1f6fbbc1319c60ce422243a83482771e0d44b21524b557f366d8858d82064736f6c63430007060033
Deployed Bytecode Sourcemap
14795:17660:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5968:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27518:286;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27518:286:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;28169:125;;;;;;;;;;;;;:::i;:::-;;31744:182;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31744:182:0;;;;;;;:::i;16095:44::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;20282:102;;;;;;;;;;;;;:::i;16051:37::-;;;;;;;;;;;;;:::i;30955:195::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30955:195:0;;;;;;;:::i;22353:463::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22353:463:0;;;;;;;;;;;;;;;;;:::i;32019:372::-;;;;;;;;;;;;;:::i;30732:215::-;;;;;;;;;;;;;:::i;16009:35::-;;;;;;;;;;;;;:::i;27998:114::-;;;;;;;;;;;;;:::i;6154:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17416:31;;;;;;;;;;;;;:::i;27071:439::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27071:439:0;;;;;;;;:::i;29011:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29011:184:0;-1:-1:-1;;;;;29011:184:0;;:::i;16814:38::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;16814:38:0;;;;;;;;;;;;;;16501:98;;;;;;;;;;;;;:::i;16296:::-;;;;;;;;;;;;;:::i;31158:126::-;;;;;;;;;;;;;:::i;1470:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1470:117:0;-1:-1:-1;;;;;1470:117:0;;:::i;20850:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20850:138:0;-1:-1:-1;;;;;20850:138:0;;:::i;2540:128::-;;;;;;;;;;;;;:::i;31292:101::-;;;;;;;;;;;;;:::i;17348:29::-;;;;;;;;;;;;;:::i;2273:81::-;;;;;;;;;;;;;:::i;28414:114::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28414:114:0;;;;;;;;;;:::i;2440:92::-;;;;;;;;;;;;;:::i;19546:114::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19546:114:0;;;;;;;;;;:::i;6059:87::-;;;;;;;;;;;;;:::i;26434:629::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26434:629:0;;;;;;;;:::i;20392:248::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20392:248:0;;;;;;;;:::i;17310:31::-;;;;;;;;;;;;;:::i;29603:287::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29603:287:0;;;;;;;;;;;;;:::i;1595:85::-;;;;;;;;;;;;;:::i;16890:39::-;;;;;;;;;;;;;:::i;28723:280::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28723:280:0;;:::i;16401:93::-;;;;;;;;;;;;;:::i;14963:39::-;;;;;;;;;;;;;:::i;27812:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27812:113:0;-1:-1:-1;;;;;27812:113:0;;:::i;31401:335::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31401:335:0;;:::i;28302:104::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28302:104:0;-1:-1:-1;;;;;28302:104:0;;:::i;16938:18::-;;;;;;;;;;;;;:::i;20648:194::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20648:194:0;;;;;;;;;;:::i;29203:190::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29203:190:0;-1:-1:-1;;;;;29203:190:0;;:::i;2676:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2676:111:0;-1:-1:-1;;;;;2676:111:0;;:::i;16606:99::-;;;;;;;;;;;;;:::i;16859:24::-;;;;;;;;;;;;;:::i;17705:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17705:41:0;-1:-1:-1;;;;;17705:41:0;;:::i;5968:83::-;6038:5;6031:12;;;;;;;;-1:-1:-1;;6031:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6005:13;;6031:12;;6038:5;;6031:12;;6038:5;6031:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5968:83;:::o;27518:286::-;15356:27;;27654:4;;15356:27;;;:57;;;15404:9;:7;:9::i;:::-;15356:103;;;-1:-1:-1;15448:10:0;15434:25;;;;:13;:25;;;;;;;;15356:103;15334:181;;;;;-1:-1:-1;;;15334:181:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15334:181:0;;;;;;;;;;;;;;;27694:10:::1;27676:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27676:38:0;::::1;::::0;;;;;;;;;;:46;;;27738:36;;;;;;;27676:38;;27694:10;27738:36:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;27792:4:0::1;15526:1;27518:286:::0;;;;:::o;28169:125::-;2402:9;:7;:9::i;:::-;2394:18;;;;;;28223:11:::1;:18:::0;;-1:-1:-1;;;;28223:18:0::1;-1:-1:-1::0;;;28223:18:0::1;::::0;;28271:15:::1;28252:16;:34:::0;28169:125::o;31744:182::-;31851:4;31912:6;31880:29;31900:8;31880:19;:29::i;:::-;:38;;31744:182;-1:-1:-1;;;31744:182:0:o;16095:44::-;16136:3;16095:44;:::o;20282:102::-;20364:12;;20282:102;:::o;16051:37::-;16086:2;16051:37;:::o;30955:195::-;2402:9;:7;:9::i;:::-;2394:18;;;;;;31070:15:::1;:24:::0;;;;31105:26:::1;:37:::0;30955:195::o;22353:463::-;22496:4;22483:2;-1:-1:-1;;;;;15598:18:0;;15590:53;;;;;-1:-1:-1;;;15590:53:0;;;;;;;;;;;;-1:-1:-1;;;15590:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22517:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;22541:10:::1;22517:35:::0;;;;;;;;-1:-1:-1;;22517:56:0::1;22513:231;;22628:104;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;22628:104:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;22628:23:0;::::1;-1:-1:-1::0;22628:23:0;;;:17:::1;:23:::0;;;;;22670:10:::1;22628:67:::0;;;;;;;;;;:104:::1;::::0;22700:5;;22628:71:::1;:104::i;:::-;-1:-1:-1::0;;;;;22590:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;22614:10:::1;22590:35:::0;;;;;;;:142;22513:231:::1;22756:30;22770:4;22776:2;22780:5;22756:13;:30::i;:::-;-1:-1:-1::0;22804:4:0::1;::::0;22353:463;-1:-1:-1;;;;;22353:463:0:o;32019:372::-;32071:4;2402:9;:7;:9::i;:::-;2394:18;;;;;;32110:27:::1;::::0;::::1;;:36;32088:109;;;::::0;;-1:-1:-1;;;32088:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;32208:27:0::1;:34:::0;;-1:-1:-1;;32208:34:0::1;32238:4;32208:34:::0;;::::1;::::0;;;32253:11:::1;:18:::0;;-1:-1:-1;;;;32253:18:0::1;-1:-1:-1::0;;;32253:18:0::1;::::0;;32301:15:::1;32282:16;:34:::0;;;32327:14:::1;:32:::0;32019:372;:::o;30732:215::-;30908:16;;30865:12;:18;;;;16172:42;30785:7;30841:18;;;;;30785:7;;30825:114;;30908:16;;30826:58;;30865:18;30826:34;;-1:-1:-1;;17107:54:0;30826:14;:34::i;:::-;:38;;:58::i;:::-;30825:64;;:114::i;:::-;30805:134;;30732:215;:::o;16009:35::-;16043:1;16009:35;:::o;27998:114::-;2402:9;:7;:9::i;:::-;2394:18;;;;;;28070:27:::1;:34:::0;;-1:-1:-1;;28070:34:0::1;28100:4;28070:34;::::0;;27998:114::o;6154:83::-;6220:9;;;;6154:83;:::o;17416:31::-;;;;:::o;27071:439::-;15356:27;;27204:4;;15356:27;;;:57;;;15404:9;:7;:9::i;:::-;15356:103;;;-1:-1:-1;15448:10:0;15434:25;;;;:13;:25;;;;;;;;15356:103;15334:181;;;;;-1:-1:-1;;;15334:181:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15334:181:0;;;;;;;;;;;;;;;27285:10:::1;27267:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27267:62:0;::::1;::::0;;;;;;;;:78:::1;::::0;27334:10;27267:66:::1;:78::i;:::-;27244:10;27226:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;27226:38:0;::::1;::::0;;;;;;;;;;:119;;;27361;;;;;;27226:38;;27361:119:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;27498:4:0::1;27071:439:::0;;;;:::o;29011:184::-;2402:9;:7;:9::i;:::-;2394:18;;;;;;-1:-1:-1;;;;;29092:26:0;::::1;29084:66;;;::::0;;-1:-1:-1;;;29084:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29161:26;29176:10;29161:14;:26::i;:::-;29011:184:::0;:::o;16814:38::-;;;-1:-1:-1;;;;;16814:38:0;;:::o;16501:98::-;16557:42;16501:98;:::o;16296:::-;16352:42;16296:98;:::o;31158:126::-;31259:16;;31211:7;;31238:38;;17214:25;;31238:20;:38::i;1470:117::-;1530:4;1554:25;:12;1571:7;1554:16;:25::i;20850:138::-;20963:16;;-1:-1:-1;;;;;20941:17:0;;20914:7;20941:17;;;:12;:17;;;;;;20914:7;;20941:39;;:17;:21;:39::i;2540:128::-;2402:9;:7;:9::i;:::-;2394:18;;;;;;2623:6:::1;::::0;2604:26:::1;::::0;2623:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;2623:6:0::1;::::0;2604:26:::1;::::0;;;::::1;2641:6;:19:::0;;-1:-1:-1;;;;;;2641:19:0::1;::::0;;2540:128::o;31292:101::-;31353:24;;;;;;;;;-1:-1:-1;;;;;31353:24:0;-1:-1:-1;;;;;31334:49:0;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31292:101::o;17348:29::-;;;;:::o;2273:81::-;2340:6;;;;;-1:-1:-1;;;;;2340:6:0;;2273:81::o;28414:114::-;2402:9;:7;:9::i;:::-;2394:18;;;;;;-1:-1:-1;;;;;28493:19:0;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:27;;-1:-1:-1;;28493:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28414:114::o;2440:92::-;2518:6;;;;;-1:-1:-1;;;;;2518:6:0;2504:10;:20;;2440:92::o;19546:114::-;2402:9;:7;:9::i;:::-;2394:18;;;;;;-1:-1:-1;;;;;19628:16:0;;;::::1;;::::0;;;:9:::1;:16;::::0;;;;:24;;-1:-1:-1;;19628:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19546:114::o;6059:87::-;6131:7;6124:14;;;;;;;;-1:-1:-1;;6124:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6098:13;;6124:14;;6131:7;;6124:14;;6131:7;6124:14;;;;;;;;;;;;;;;;;;;;;;;;26434:629;15356:27;;26572:4;;15356:27;;;:57;;;15404:9;:7;:9::i;:::-;15356:103;;;-1:-1:-1;15448:10:0;15434:25;;;;:13;:25;;;;;;;;15356:103;15334:181;;;;;-1:-1:-1;;;15334:181:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15334:181:0;;;;;;;;;;;;;;;26631:10:::1;26594:16;26613:29:::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;26613:38:0;::::1;::::0;;;;;;;;26666:27;;::::1;26662:237;;26728:10;26751:1;26710:29:::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;26710:38:0;::::1;::::0;;;;;;;:42;26662:237:::1;;;26826:61;:8:::0;26857:15;26826:12:::1;:61::i;:::-;26803:10;26785:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;26785:38:0;::::1;::::0;;;;;;;:102;26662:237:::1;26937:10;26984:29;::::0;;;:17:::1;:29;::::0;;;;;;;-1:-1:-1;;;;;26914:119:0;::::1;26984:38:::0;;;;;;;;;;;26914:119;;;;;;;;;26937:10;26914:119:::1;::::0;;;;;;;;;::::1;-1:-1:-1::0;27051:4:0::1;::::0;26434:629;-1:-1:-1;;;26434:629:0:o;20392:248::-;20552:4;20497:2;-1:-1:-1;;;;;15598:18:0;;15590:53;;;;;-1:-1:-1;;;15590:53:0;;;;;;;;;;;;-1:-1:-1;;;15590:53:0;;;;;;;;;;;;;;;15356:27:::1;::::0;::::1;;::::0;:57:::1;;;15404:9;:7;:9::i;:::-;15356:103;;;-1:-1:-1::0;15448:10:0::1;15434:25;::::0;;;:13:::1;:25;::::0;;;;;::::1;;15356:103;15334:181;;;::::0;;-1:-1:-1;;;15334:181:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;15334:181:0;;;;;;;;;;;;;::::1;;20574:36:::2;20588:10;20600:2;20604:5;20574:13;:36::i;:::-;-1:-1:-1::0;20628:4:0::2;::::0;20392:248;-1:-1:-1;;;;20392:248:0:o;17310:31::-;;;-1:-1:-1;;;17310:31:0;;;;;:::o;29603:287::-;1334:24;1347:10;1334:12;:24::i;:::-;1312:130;;;;-1:-1:-1;;;1312:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29758:3:::1;29749:6;:12;29741:63;;;;-1:-1:-1::0;;;29741:63:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;29815:17:0;;::::1;;::::0;;;:12:::1;:17;::::0;;;;;;;:26;;;;29852:13:::1;:18:::0;;;:30;29603:287::o;1595:85::-;1643:29;1661:10;1643:17;:29::i;:::-;1595:85::o;16890:39::-;;;-1:-1:-1;;;;;16890:39:0;;:::o;28723:280::-;2402:9;:7;:9::i;:::-;2394:18;;;;;;28838:10:::1;;28824:11;:24;28802:111;;;;-1:-1:-1::0;;;28802:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28924:10;:24:::0;;;28964:31:::1;::::0;28937:11;;28964:31:::1;::::0;;;::::1;28723:280:::0;:::o;16401:93::-;16452:42;16401:93;:::o;14963:39::-;;;;;;:::o;27812:113::-;-1:-1:-1;;;;;27898:19:0;27874:4;27898:19;;;:12;:19;;;;;;;;;27812:113::o;31401:335::-;31605:16;;31561:24;;-1:-1:-1;;;;;31561:24:0;31496:7;31548:38;;;:12;:38;;;;;;31496:7;;;;31548:84;;:42;:84::i;:::-;31521:111;;31663:65;31705:22;:20;:22::i;:::-;31663:37;31676:23;:16;31697:1;31676:20;:23::i;:::-;31663:8;;:12;:37::i;:65::-;31643:85;31401:335;-1:-1:-1;;;31401:335:0:o;28302:104::-;2402:9;:7;:9::i;:::-;2394:18;;;;;;-1:-1:-1;;;;;28371:20:0::1;;::::0;;;:13:::1;:20;::::0;;;;:27;;-1:-1:-1;;28371:27:0::1;28394:4;28371:27;::::0;;28302:104::o;16938:18::-;;;-1:-1:-1;;;16938:18:0;;;;;:::o;20648:194::-;-1:-1:-1;;;;;20800:25:0;;;20768:7;20800:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;20648:194::o;29203:190::-;2402:9;:7;:9::i;:::-;2394:18;;;;;;-1:-1:-1;;;;;29287:26:0;::::1;29279:66;;;::::0;;-1:-1:-1;;;29279:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29356:29;29374:10;29356:17;:29::i;2676:111::-:0;2402:9;:7;:9::i;:::-;2394:18;;;;;;2751:28:::1;2770:8;2751:18;:28::i;16606:99::-:0;16663:42;16606:99;:::o;16859:24::-;;;-1:-1:-1;;;;;16859:24:0;;:::o;17705:41::-;;;;;;;;;;;;;;;:::o;9946:153::-;10004:7;10036:1;10032;:5;10024:44;;;;;-1:-1:-1;;;10024:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10090:1;10086;:5;;;;;;;9946:153;-1:-1:-1;;;9946:153:0:o;216:178::-;294:18;298:4;304:7;294:3;:18::i;:::-;293:19;285:63;;;;;-1:-1:-1;;;285:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;359:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;359:27:0;382:4;359:27;;;216:178::o;474:183::-;554:18;558:4;564:7;554:3;:18::i;:::-;546:64;;;;-1:-1:-1;;;546:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;621:20:0;644:5;621:20;;;;;;;;;;;:28;;-1:-1:-1;;621:28:0;;;474:183::o;11196:166::-;11282:7;11318:12;11310:6;;;;11302:29;;;;-1:-1:-1;;;11302:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11349:5:0;;;11196:166::o;21343:1002::-;-1:-1:-1;;;;;21495:17:0;;21469:4;21495:17;;;:9;:17;;;;;;;;21494:18;:43;;;;-1:-1:-1;;;;;;21517:20:0;;;;;;:9;:20;;;;;;;;21516:21;21494:43;21486:68;;;;;-1:-1:-1;;;21486:68:0;;;;;;;;;;;;-1:-1:-1;;;21486:68:0;;;;;;;;;;;;;;;21569:6;;-1:-1:-1;;;21569:6:0;;;;21565:87;;;21599:41;21614:6;21622:9;21633:6;21599:14;:41::i;:::-;21592:48;;;;21565:87;21668:14;:12;:14::i;:::-;21664:55;;;21699:8;:6;:8::i;:::-;21735:16;:14;:16::i;:::-;21731:59;;;21768:10;:8;:10::i;:::-;21802:17;21822:28;21833:16;;21822:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;21884:20:0;;;;;;:12;:20;;;;;;21802:48;;-1:-1:-1;21884:35:0;;21802:48;21884:24;:35::i;:::-;-1:-1:-1;;;;;21861:20:0;;;;;;:12;:20;;;;;:58;;;;21960:32;21874:6;21982:9;21960:13;:32::i;:::-;:110;;22061:9;21960:110;;;22008:37;22016:6;22024:9;22035;22008:7;:37::i;:::-;-1:-1:-1;;;;;22107:23:0;;;;;;:12;:23;;;;;;21932:138;;-1:-1:-1;22107:70:0;;21932:138;22107:27;:70::i;:::-;-1:-1:-1;;;;;22081:23:0;;;;;;;:12;:23;;;;;:96;;;;22285:16;;22195:118;;;;;;22263:39;;:17;;:21;:39::i;:::-;22195:118;;;;;;;;;;;;;;;-1:-1:-1;22333:4:0;;21343:1002;-1:-1:-1;;;;;21343:1002:0:o;8831:158::-;8889:7;8922:1;8917;:6;;8909:49;;;;;-1:-1:-1;;;8909:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8976:5:0;;;8831:158::o;8369:179::-;8427:7;8459:5;;;8483:6;;;;8475:46;;;;;-1:-1:-1;;;8475:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1688:134;1749:25;:12;1766:7;1749:16;:25::i;:::-;1790:24;;-1:-1:-1;;;;;1790:24:0;;;;;;;;1688:134;:::o;752:235::-;851:4;-1:-1:-1;;;;;881:21:0;;873:68;;;;-1:-1:-1;;;873:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;959:20:0;:11;:20;;;;;;;;;;;;;;;752:235::o;1830:142::-;1894:28;:12;1914:7;1894:19;:28::i;:::-;1938:26;;-1:-1:-1;;;;;1938:26:0;;;;;;;;1830:142;:::o;9248:220::-;9306:7;9330:6;9326:20;;-1:-1:-1;9345:1:0;9338:8;;9326:20;9369:5;;;9373:1;9369;:5;:1;9393:5;;;;;:10;9385:56;;;;-1:-1:-1;;;9385:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2795:187;-1:-1:-1;;;;;2869:22:0;;2861:31;;;;;;2929:6;;2908:38;;-1:-1:-1;;;;;2908:38:0;;;;2929:6;;;;;2908:38;;;;;2957:6;:17;;-1:-1:-1;;;;;2957:17:0;;;;;-1:-1:-1;;;;;;2957:17:0;;;;;;;;;2795:187::o;20996:339::-;21114:4;21131:17;21151:28;21162:16;;21151:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;21211:18:0;;;;;;:12;:18;;;;;;21131:48;;-1:-1:-1;21211:33:0;;21131:48;21211:22;:33::i;:::-;-1:-1:-1;;;;;21190:18:0;;;;;;;:12;:18;;;;;;:54;;;;21274:16;;;;;;;:31;;21295:9;21274:20;:31::i;:::-;-1:-1:-1;;;;;21255:16:0;;;;;;:12;:16;;;;;:50;-1:-1:-1;21323:4:0;;-1:-1:-1;20996:339:0;;;;;:::o;30165:334::-;30249:27;;30212:4;;30249:27;;:55;;;;-1:-1:-1;30293:11:0;;-1:-1:-1;;;30293:11:0;;;;30249:55;:99;;;;;-1:-1:-1;;30322:12:0;;:25;30249:99;:151;;;;-1:-1:-1;30387:12:0;;-1:-1:-1;;;;;30387:12:0;30365:10;:35;;30249:151;:175;;;;-1:-1:-1;30418:6:0;;-1:-1:-1;;;30418:6:0;;;;30417:7;30249:175;:242;;;;-1:-1:-1;;30461:16:0;;30480:10;30461:29;30441:15;:50;;;30165:334::o;19668:606::-;19709:6;;-1:-1:-1;;;19709:6:0;;;;19705:19;;;19717:7;;19705:19;19774:16;;19756:15;:34;19736:17;19817:25;19756:34;19831:10;19817:13;:25::i;:::-;19801:41;;19853:13;19869:51;19909:10;19869:35;19889:14;;19869:15;:19;;:35;;;;:::i;:51::-;19853:67;;19938:7;19933:123;19955:5;19951:1;:9;;;19933:123;;;19997:47;20038:5;19997:36;20022:10;;20014:5;:18;19997:12;;:16;;:36;;;;:::i;:47::-;19982:12;:62;19962:3;;19933:123;;;-1:-1:-1;20102:12:0;;20087:28;;-1:-1:-1;;17107:54:0;20087:14;:28::i;:::-;20068:16;:47;20145:43;20166:21;:5;20176:10;20166:9;:21::i;:::-;20145:16;;;:20;:43::i;:::-;20126:16;:62;20199:12;;:19;;;-1:-1:-1;;;;;;20199:19:0;;;;-1:-1:-1;;;;;20199:12:0;;;;:17;;:19;;;;;:12;;:19;;;;;;;;:12;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20253:12:0;;20236:30;;;;;;;20246:5;;-1:-1:-1;20236:30:0;;-1:-1:-1;20236:30:0;;;;;;;;19668:606;;;:::o;30507:217::-;30615:12;;30556:4;;-1:-1:-1;;;;;30615:12:0;30593:10;:35;;;;:59;;-1:-1:-1;30646:6:0;;-1:-1:-1;;;30646:6:0;;;;30645:7;30593:59;:123;;;;-1:-1:-1;;30690:4:0;30669:27;;;;:12;:27;;;;;;17214:25;-1:-1:-1;30669:47:0;;30507:217::o;22824:2043::-;16994:6;:13;;-1:-1:-1;;;;16994:13:0;-1:-1:-1;;;16994:13:0;;;22932:15:::1;::::0;22962:26:::1;::::0;16994:13;;22902:97:::1;::::0;:15:::1;:97::i;:::-;:142;;15910:1;22902:142;;;23015:1;22902:142;23132:16;::::0;23107:4:::1;23055:28;23086:27:::0;;;:12:::1;:27;::::0;;;;;22872:172;;-1:-1:-1;23055:28:0;23086:73:::1;::::0;:31:::1;:73::i;:::-;23055:104:::0;-1:-1:-1;23170:23:0::1;23196:108;23302:1;23196:87;16086:2;23196:87:::0;23055:104;23235:19;23196:38:::1;:59::i;:108::-;23170:134:::0;-1:-1:-1;23315:20:0::1;23338:41;:20:::0;23170:134;23338:24:::1;:41::i;:::-;23416:16;::::0;;23430:1:::1;23416:16:::0;;;;;::::1;::::0;;23315:64;;-1:-1:-1;23392:21:0::1;::::0;23416:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23416:16:0::1;23392:40;;23461:4;23443;23448:1;23443:7;;;;;;;;-1:-1:-1::0;;;;;23443:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23487:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;23487:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;23443:7;;23487:13;;;;;:6:::1;::::0;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23487:13:0;23477:7;;:4;;23482:1:::1;::::0;23477:7;::::1;;;;;-1:-1:-1::0;;;;;23477:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23571:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;23571:188:0;;::::1;::::0;::::1;::::0;;;23513:21:::1;23571:188:::0;;;;;;23713:4:::1;23571:188:::0;;;;;;23733:15:::1;23571:188:::0;;;;;;;;;;;;;;;;;;;;;23537:21:::1;::::0;23571:6;;;::::1;::::0;:57:::1;::::0;23643:12;;23513:21;;23686:4;;23571:188;;;;;;;;;;::::1;::::0;::::1;::::0;;;23513:21;23571:188:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23772:17;23792:40;23818:13;23792:21;:25;;:40;;;;:::i;:::-;23772:60:::0;-1:-1:-1;23845:19:0::1;23867:40;23880:26;:19:::0;23904:1:::1;23880:23;:26::i;:::-;16086:2;::::0;23867:12:::1;:40::i;:::-;23845:62:::0;-1:-1:-1;23920:26:0::1;23949:100;24047:1;23949:79;23845:62:::0;23949:79;:9;23977:19;23949:27:::1;:48::i;:100::-;23920:129:::0;-1:-1:-1;24060:30:0::1;24093:69;24140:11:::0;24093:28:::1;:9:::0;16001:1:::1;24093:13;:28::i;:69::-;24060:102:::0;-1:-1:-1;24173:25:0::1;24201:40;24229:11:::0;24201:23:::1;:9:::0;15953:1:::1;24201:13;:23::i;:40::-;24273:108;::::0;24173:68;;-1:-1:-1;24255:12:0::1;::::0;16452:42:::1;::::0;24361:5:::1;::::0;24173:68;;24255:12;24273:108;24255:12;24273:108;24173:68;16452:42;24361:5;24273:108:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;24406:118:0::1;::::0;24254:127;;-1:-1:-1;16557:42:0::1;::::0;24504:5:::1;::::0;24462:22;;24406:118:::1;::::0;;;24462:22;16557:42;24504:5;24406:118:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;24547:5:0::1;::::0;-1:-1:-1;;24569:19:0;;;-1:-1:-1;24565:295:0::1;;24605:6;::::0;:243:::1;::::0;;-1:-1:-1;;;24605:243:0;;24681:4:::1;24605:243;::::0;::::1;::::0;;;;;;;:6:::1;:243:::0;;;;;;;;;;16352:42:::1;24605:243:::0;;;;24818:15:::1;24605:243:::0;;;;;;-1:-1:-1;;;;;24605:6:0;;::::1;::::0;:22:::1;::::0;24635:18;;24605:243;;;;;::::1;::::0;;;;;;;;24635:18;24605:6;:243;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;24565:295:0::1;-1:-1:-1::0;;17030:6:0;:14;;-1:-1:-1;;;;17030:14:0;;;-1:-1:-1;;;;;;;;;;22824:2043:0:o;29898:259::-;30040:24;;29997:4;;-1:-1:-1;;;;;30040:32:0;;;:24;;:32;;:83;;-1:-1:-1;30093:24:0;;-1:-1:-1;;;;;30093:30:0;;;:24;;:30;30040:83;30039:110;;;;-1:-1:-1;;;;;;;;30130:18:0;;;;;:12;:18;;;;;;;;30129:19;;29898:259::o;24875:1551::-;25076:24;;24998:7;;16086:2;;-1:-1:-1;;;;;25063:37:0;;;25076:24;;25063:37;25059:1048;;;25129:22;:9;16043:1;25129:13;:22::i;:::-;25117:34;;25168:22;25193:35;25213:14;;25193:15;:19;;:35;;;;:::i;:::-;25168:60;;25265:6;25247:14;:24;25243:633;;25304:17;:9;25318:2;25304:13;:17::i;:::-;25292:29;;25243:633;;;25371:6;25354:14;:23;:51;;;;;25399:6;25381:14;:24;;25354:51;25350:526;;;25438:16;:9;25452:1;25438:13;:16::i;25350:526::-;25504:6;25487:14;:23;:51;;;;;25532:6;25514:14;:24;;25487:51;25483:393;;;25571:16;:9;25585:1;25571:13;:16::i;25483:393::-;25637:6;25620:14;:23;:51;;;;;25665:6;25647:14;:24;;25620:51;25616:260;;;25704:16;:9;25718:1;25704:13;:16::i;25616:260::-;25770:6;25753:14;:23;:51;;;;;25798:6;25780:14;:24;;25753:51;25749:127;;;25837:16;:9;25851:1;25837:13;:16::i;:::-;25825:28;;25749:127;-1:-1:-1;;;;;25914:20:0;;25937:1;25914:20;;;:12;:20;;;;;;:24;;;;:84;;-1:-1:-1;;;;;;25977:21:0;;;;;;:13;:21;;;;;;25959:15;:39;25914:84;25892:204;;;-1:-1:-1;;;;;26059:20:0;;;;;;:12;:20;;;;;;26045:35;;:9;;:13;:35::i;:::-;26033:47;;25892:204;25059:1048;;26119:17;26139:44;16136:3;26139:24;:9;26153;26139:13;:24::i;:44::-;26247:4;26226:27;;;;:12;:27;;;;;;26119:64;;-1:-1:-1;26226:66:0;;26119:64;26226:31;:66::i;:::-;26217:4;26196:27;;;;:12;:27;;;;;:96;;;;26356:16;;-1:-1:-1;;;;;26310:64:0;;;;;26342:31;;:9;;:13;:31::i;:::-;26310:64;;;;;;;;;;;;;;;26394:24;:9;26408;26394:13;:24::i;:::-;26387:31;24875:1551;-1:-1:-1;;;;;;24875:1551:0:o
Swarm Source
ipfs://2000b1f6fbbc1319c60ce422243a83482771e0d44b21524b557f366d8858d820
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.