ETH Price: $3,392.78 (-1.26%)
Gas: 2 Gwei

Contract

0x7a435C22a8045B5Dc7D862628e1c4672D7a380f0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value

There are no matching entries

Please try again later

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To Value
182605432023-10-02 4:45:35271 days ago1696221935  Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-02
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

interface Callable {
	function tokenCallback(address _from, uint256 _tokens, bytes calldata _data) external returns (bool);
}

interface Router {
	struct ExactInputSingleParams {
		address tokenIn;
		address tokenOut;
		uint24 fee;
		address recipient;
		uint256 amountIn;
		uint256 amountOutMinimum;
		uint160 sqrtPriceLimitX96;
	}
	function factory() external view returns (address);
	function positionManager() external view returns (address);
	function WETH9() external view returns (address);
	function exactInputSingle(ExactInputSingleParams calldata) external payable returns (uint256);
}

interface Factory {
	function createPool(address _tokenA, address _tokenB, uint24 _fee) external returns (address);
}

interface Pool {
	function initialize(uint160 _sqrtPriceX96) external;
}

interface PositionManager {
	struct MintParams {
		address token0;
		address token1;
		uint24 fee;
		int24 tickLower;
		int24 tickUpper;
		uint256 amount0Desired;
		uint256 amount1Desired;
		uint256 amount0Min;
		uint256 amount1Min;
		address recipient;
		uint256 deadline;
	}
	struct CollectParams {
		uint256 tokenId;
		address recipient;
		uint128 amount0Max;
		uint128 amount1Max;
	}
	function mint(MintParams calldata) external payable returns (uint256 tokenId, uint128 liquidity, uint256 amount0, uint256 amount1);
	function collect(CollectParams calldata) external payable returns (uint256 amount0, uint256 amount1);
}

interface ERC20 {
	function balanceOf(address) external view returns (uint256);
	function transfer(address, uint256) external returns (bool);
}

interface WETH is ERC20 {
	function withdraw(uint256) external;
}


contract Team {

	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);

	struct Share {
		address payable user;
		uint256 shares;
	}
	Share[] public shares;
	uint256 public totalShares;
	ERC20 public token;


	function initialize(address _creator) external {
		require(totalShares == 0);
		token = ERC20(msg.sender);
		_addShare(_creator, 3);
		_addShare(0xe6c791FBd46dB3f4EdA5f7Bb76474F4FA530733E, 2);
		_addShare(0xc28C9da0F8a500DFfC16Ff09a3DD1Cc4c530D346, 1);
	}

	receive() external payable {}

	function withdrawETH() public {
		uint256 _balance = address(this).balance;
		if (_balance > 0) {
			for (uint256 i = 0; i < shares.length; i++) {
				Share memory _share = shares[i];
				!_share.user.send(_balance * _share.shares / totalShares);
			}
		}
	}

	function withdrawToken(ERC20 _token) public {
		WETH _weth = WETH(ROUTER.WETH9());
		if (address(_token) == address(_weth)) {
			_weth.withdraw(_weth.balanceOf(address(this)));
			withdrawETH();
		} else {
			uint256 _balance = _token.balanceOf(address(this));
			if (_balance > 0) {
				for (uint256 i = 0; i < shares.length; i++) {
					Share memory _share = shares[i];
					_token.transfer(_share.user, _balance * _share.shares / totalShares);
				}
			}
		}
	}

	function withdrawWETH() public {
		withdrawToken(ERC20(ROUTER.WETH9()));
	}

	function withdrawFees() external {
		withdrawWETH();
		withdrawToken(token);
	}


	function _addShare(address _user, uint256 _shares) internal {
		shares.push(Share(payable(_user), _shares));
		totalShares += _shares;
	}
}


contract Token {

	uint256 constant private UINT_MAX = type(uint256).max;
	uint128 constant private UINT128_MAX = type(uint128).max;
	uint256 constant private MAX_NAME_LENGTH = 32;
	uint256 constant private MIN_SUPPLY = 1e16; // 0.01 tokens
	uint256 constant private MAX_SUPPLY = 1e33; // 1 quadrillion tokens
	uint256 constant private PERCENT_PRECISION = 1000; // 1 = 0.1%
	Router constant private ROUTER = Router(0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45);

	int24 constant internal MIN_TICK = -887272;
	int24 constant internal MAX_TICK = -MIN_TICK;
	uint160 constant internal MIN_SQRT_RATIO = 4295128739;
	uint160 constant internal MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;

	string public name;
	string public symbol;
	uint8 constant public decimals = 18;

	string constant public source = "Created with Bossman's Bakery (bakery.mullet.capital)!";


	struct User {
		uint256 balance;
		mapping(address => uint256) allowance;
	}

	struct Info {
		bool locked;
		Team team;
		address pool;
		address creator;
		uint256 totalSupply;
		uint256 initialMarketCap;
		uint256 upperMarketCap;
		uint256 concentratedPercent;
		uint256 creatorFee;
		mapping(address => User) users;
		uint256 lowerPositionId;
		uint256 upperPositionId;
	}
	Info private info;


	event Transfer(address indexed from, address indexed to, uint256 tokens);
	event Approval(address indexed owner, address indexed spender, uint256 tokens);

	
	function lock() external {
		require(!info.locked);
		require(totalSupply() == 0);
		info.locked = true;
	}
	
	function initialize(address _creator, string memory _name, string memory _symbol, uint256 _totalSupply, uint256 _initialMarketCap, uint256 _upperMarketCap, uint256 _concentratedPercent, uint256 _creatorFee) external payable {
		require(!info.locked);
		require(totalSupply() == 0);
		require(bytes(_name).length > 0 && bytes(_name).length <= MAX_NAME_LENGTH);
		require(bytes(_symbol).length > 0 && bytes(_symbol).length <= MAX_NAME_LENGTH);
		require(_totalSupply >= MIN_SUPPLY && _totalSupply <= MAX_SUPPLY);
		require(_initialMarketCap > 0 && _upperMarketCap > _initialMarketCap);
		require(_concentratedPercent < PERCENT_PRECISION);
		require(_creatorFee < PERCENT_PRECISION);
		info.team = new Team();
		info.team.initialize(_creator);
		info.creator = _creator;
		name = _name;
		symbol = _symbol;
		info.totalSupply = _totalSupply;
		info.users[address(this)].balance = _totalSupply;
		emit Transfer(address(0x0), address(this), _totalSupply);
		info.initialMarketCap = _initialMarketCap;
		info.upperMarketCap = _upperMarketCap;
		info.concentratedPercent = _concentratedPercent;
		info.creatorFee = _creatorFee;
		_createLP(_initialMarketCap, _upperMarketCap, _concentratedPercent, _creatorFee);
	}

	function collectTradingFees() external {
		PositionManager _pm = PositionManager(ROUTER.positionManager());
		if (info.lowerPositionId != 0) {
			_pm.collect(PositionManager.CollectParams({
				tokenId: info.lowerPositionId,
				recipient: team(),
				amount0Max: UINT128_MAX,
				amount1Max: UINT128_MAX
			}));
		}
		_pm.collect(PositionManager.CollectParams({
			tokenId: info.upperPositionId,
			recipient: team(),
			amount0Max: UINT128_MAX,
			amount1Max: UINT128_MAX
		}));
		info.team.withdrawFees();
	}

	function transfer(address _to, uint256 _tokens) external returns (bool) {
		return _transfer(msg.sender, _to, _tokens);
	}

	function approve(address _spender, uint256 _tokens) external returns (bool) {
		return _approve(msg.sender, _spender, _tokens);
	}

	function transferFrom(address _from, address _to, uint256 _tokens) external returns (bool) {
		unchecked {
			uint256 _allowance = allowance(_from, msg.sender);
			require(_allowance >= _tokens);
			if (_allowance != UINT_MAX) {
				info.users[_from].allowance[msg.sender] -= _tokens;
			}
			return _transfer(_from, _to, _tokens);
		}
	}

	function transferAndCall(address _to, uint256 _tokens, bytes calldata _data) external returns (bool) {
		_transfer(msg.sender, _to, _tokens);
		uint32 _size;
		assembly {
			_size := extcodesize(_to)
		}
		if (_size > 0) {
			require(Callable(_to).tokenCallback(msg.sender, _tokens, _data));
		}
		return true;
	}
	

	function creator() public view returns (address) {
		return info.creator;
	}
	
	function team() public view returns (address) {
		return address(info.team);
	}

	function pool() public view returns (address) {
		return info.pool;
	}

	function totalSupply() public view returns (uint256) {
		return info.totalSupply;
	}

	function balanceOf(address _user) public view returns (uint256) {
		return info.users[_user].balance;
	}

	function allowance(address _user, address _spender) public view returns (uint256) {
		return info.users[_user].allowance[_spender];
	}

	function positions() external view returns (uint256 lower, uint256 upper) {
		return (info.lowerPositionId, info.upperPositionId);
	}

	function initialMarketCap() external view returns (string memory) {
		return string(abi.encodePacked(_uint2str(info.initialMarketCap, 18, 5), " ETH"));
	}

	function upperMarketCap() external view returns (string memory) {
		return string(abi.encodePacked(_uint2str(info.upperMarketCap, 18, 5), " ETH"));
	}

	function concentratedPercent() external view returns (string memory) {
		return string(abi.encodePacked(_uint2str(info.concentratedPercent * 100, 3, 3), "%"));
	}

	function creatorFee() external view returns (string memory) {
		return string(abi.encodePacked(_uint2str(info.creatorFee * 100, 3, 3), "%"));
	}


	function _createLP(uint256 _initialMarketCap, uint256 _upperMarketCap, uint256 _concentratedPercent, uint256 _creatorFee) internal {
		unchecked {
			address _this = address(this);
			address _weth = ROUTER.WETH9();
			bool _weth0 = _weth < _this;
			(uint160 _initialSqrtPrice, ) = _getPriceAndTickFromValues(_weth0, totalSupply(), _initialMarketCap);
			info.pool = Factory(ROUTER.factory()).createPool(_this, _weth, 10000);
			Pool(pool()).initialize(_initialSqrtPrice);
			PositionManager _pm = PositionManager(ROUTER.positionManager());
			_approve(_this, address(_pm), totalSupply());
			( , int24 _minTick) = _getPriceAndTickFromValues(_weth0, totalSupply(), _initialMarketCap);
			( , int24 _maxTick) = _getPriceAndTickFromValues(_weth0, totalSupply(), _upperMarketCap);
			uint256 _concentratedTokens = _concentratedPercent * totalSupply() / PERCENT_PRECISION;
			if (_concentratedTokens > 0) {
				if (_creatorFee > 0) {
					_pm.mint(PositionManager.MintParams({
						token0: _weth0 ? _weth : _this,
						token1: !_weth0 ? _weth : _this,
						fee: 10000,
						tickLower: _weth0 ? _minTick - 200 : _minTick,
						tickUpper: !_weth0 ? _minTick + 200 : _minTick,
						amount0Desired: _weth0 ? 0 :  _concentratedTokens * _creatorFee / PERCENT_PRECISION,
						amount1Desired: !_weth0 ? 0 : _concentratedTokens * _creatorFee / PERCENT_PRECISION,
						amount0Min: 0,
						amount1Min: 0,
						recipient: creator(),
						deadline: block.timestamp
					}));
				}
				(info.lowerPositionId, , , ) = _pm.mint(PositionManager.MintParams({
					token0: _weth0 ? _weth : _this,
					token1: !_weth0 ? _weth : _this,
					fee: 10000,
					tickLower: _weth0 ? _minTick - 200 : _minTick,
					tickUpper: !_weth0 ? _minTick + 200 : _minTick,
					amount0Desired: _weth0 ? 0 :  _concentratedTokens * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION,
					amount1Desired: !_weth0 ? 0 : _concentratedTokens * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION,
					amount0Min: 0,
					amount1Min: 0,
					recipient: _this,
					deadline: block.timestamp
				}));
				_minTick = _weth0 ? _minTick - 200 : _minTick + 200;
			}
			if (_creatorFee > 0) {
				_pm.mint(PositionManager.MintParams({
					token0: _weth0 ? _weth : _this,
					token1: !_weth0 ? _weth : _this,
					fee: 10000,
					tickLower: _weth0 ? _maxTick : _minTick,
					tickUpper: !_weth0 ? _maxTick : _minTick,
					amount0Desired: _weth0 ? 0 :  (totalSupply() - _concentratedTokens) * _creatorFee / PERCENT_PRECISION,
					amount1Desired: !_weth0 ? 0 : (totalSupply() - _concentratedTokens) * _creatorFee / PERCENT_PRECISION,
					amount0Min: 0,
					amount1Min: 0,
					recipient: creator(),
					deadline: block.timestamp
				}));
			}
			(info.upperPositionId, , , ) = _pm.mint(PositionManager.MintParams({
				token0: _weth0 ? _weth : _this,
				token1: !_weth0 ? _weth : _this,
				fee: 10000,
				tickLower: _weth0 ? _maxTick : _minTick,
				tickUpper: !_weth0 ? _maxTick : _minTick,
				amount0Desired: _weth0 ? 0 :  (totalSupply() - _concentratedTokens) * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION,
				amount1Desired: !_weth0 ? 0 : (totalSupply() - _concentratedTokens) * (PERCENT_PRECISION - _creatorFee) / PERCENT_PRECISION,
				amount0Min: 0,
				amount1Min: 0,
				recipient: _this,
				deadline: block.timestamp
			}));
			if (_this.balance > 0) {
				ROUTER.exactInputSingle{value:_this.balance}(Router.ExactInputSingleParams({
					tokenIn: _weth,
					tokenOut: _this,
					fee: 10000,
					recipient: creator(),
					amountIn: _this.balance,
					amountOutMinimum: 0,
					sqrtPriceLimitX96: 0
				}));
			}
		}
	}
	
	function _approve(address _owner, address _spender, uint256 _tokens) internal returns (bool) {
		info.users[_owner].allowance[_spender] = _tokens;
		emit Approval(_owner, _spender, _tokens);
		return true;
	}
	
	function _transfer(address _from, address _to, uint256 _tokens) internal returns (bool) {
		unchecked {
			require(_tokens > 0);
			require(balanceOf(_from) >= _tokens);
			info.users[_from].balance -= _tokens;
			info.users[_to].balance += _tokens;
			emit Transfer(_from, _to, _tokens);
			return true;
		}
	}


	function _getSqrtRatioAtTick(int24 tick) internal pure returns (uint160 sqrtPriceX96) {
		unchecked {
			uint256 absTick = tick < 0 ? uint256(-int256(tick)) : uint256(int256(tick));
			require(absTick <= uint256(int256(MAX_TICK)), 'T');

			uint256 ratio = absTick & 0x1 != 0 ? 0xfffcb933bd6fad37aa2d162d1a594001 : 0x100000000000000000000000000000000;
			if (absTick & 0x2 != 0) ratio = (ratio * 0xfff97272373d413259a46990580e213a) >> 128;
			if (absTick & 0x4 != 0) ratio = (ratio * 0xfff2e50f5f656932ef12357cf3c7fdcc) >> 128;
			if (absTick & 0x8 != 0) ratio = (ratio * 0xffe5caca7e10e4e61c3624eaa0941cd0) >> 128;
			if (absTick & 0x10 != 0) ratio = (ratio * 0xffcb9843d60f6159c9db58835c926644) >> 128;
			if (absTick & 0x20 != 0) ratio = (ratio * 0xff973b41fa98c081472e6896dfb254c0) >> 128;
			if (absTick & 0x40 != 0) ratio = (ratio * 0xff2ea16466c96a3843ec78b326b52861) >> 128;
			if (absTick & 0x80 != 0) ratio = (ratio * 0xfe5dee046a99a2a811c461f1969c3053) >> 128;
			if (absTick & 0x100 != 0) ratio = (ratio * 0xfcbe86c7900a88aedcffc83b479aa3a4) >> 128;
			if (absTick & 0x200 != 0) ratio = (ratio * 0xf987a7253ac413176f2b074cf7815e54) >> 128;
			if (absTick & 0x400 != 0) ratio = (ratio * 0xf3392b0822b70005940c7a398e4b70f3) >> 128;
			if (absTick & 0x800 != 0) ratio = (ratio * 0xe7159475a2c29b7443b29c7fa6e889d9) >> 128;
			if (absTick & 0x1000 != 0) ratio = (ratio * 0xd097f3bdfd2022b8845ad8f792aa5825) >> 128;
			if (absTick & 0x2000 != 0) ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128;
			if (absTick & 0x4000 != 0) ratio = (ratio * 0x70d869a156d2a1b890bb3df62baf32f7) >> 128;
			if (absTick & 0x8000 != 0) ratio = (ratio * 0x31be135f97d08fd981231505542fcfa6) >> 128;
			if (absTick & 0x10000 != 0) ratio = (ratio * 0x9aa508b5b7a84e1c677de54f3e99bc9) >> 128;
			if (absTick & 0x20000 != 0) ratio = (ratio * 0x5d6af8dedb81196699c329225ee604) >> 128;
			if (absTick & 0x40000 != 0) ratio = (ratio * 0x2216e584f5fa1ea926041bedfe98) >> 128;
			if (absTick & 0x80000 != 0) ratio = (ratio * 0x48a170391f7dc42444e8fa2) >> 128;

			if (tick > 0) ratio = type(uint256).max / ratio;

			sqrtPriceX96 = uint160((ratio >> 32) + (ratio % (1 << 32) == 0 ? 0 : 1));
		}
	}

	function _getTickAtSqrtRatio(uint160 sqrtPriceX96) internal pure returns (int24 tick) {
		unchecked {
			require(sqrtPriceX96 >= MIN_SQRT_RATIO && sqrtPriceX96 < MAX_SQRT_RATIO, 'R');
			uint256 ratio = uint256(sqrtPriceX96) << 32;

			uint256 r = ratio;
			uint256 msb = 0;

			assembly {
				let f := shl(7, gt(r, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(6, gt(r, 0xFFFFFFFFFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(5, gt(r, 0xFFFFFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(4, gt(r, 0xFFFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(3, gt(r, 0xFF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(2, gt(r, 0xF))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := shl(1, gt(r, 0x3))
				msb := or(msb, f)
				r := shr(f, r)
			}
			assembly {
				let f := gt(r, 0x1)
				msb := or(msb, f)
			}

			if (msb >= 128) r = ratio >> (msb - 127);
			else r = ratio << (127 - msb);

			int256 log_2 = (int256(msb) - 128) << 64;

			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(63, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(62, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(61, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(60, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(59, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(58, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(57, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(56, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(55, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(54, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(53, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(52, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(51, f))
				r := shr(f, r)
			}
			assembly {
				r := shr(127, mul(r, r))
				let f := shr(128, r)
				log_2 := or(log_2, shl(50, f))
			}

			int256 log_sqrt10001 = log_2 * 255738958999603826347141;

			int24 tickLow = int24((log_sqrt10001 - 3402992956809132418596140100660247210) >> 128);
			int24 tickHi = int24((log_sqrt10001 + 291339464771989622907027621153398088495) >> 128);

			tick = tickLow == tickHi ? tickLow : _getSqrtRatioAtTick(tickHi) <= sqrtPriceX96 ? tickHi : tickLow;
		}
	}

	function _sqrt(uint256 _n) internal pure returns (uint256 result) {
		unchecked {
			uint256 _tmp = (_n + 1) / 2;
			result = _n;
			while (_tmp < result) {
				result = _tmp;
				_tmp = (_n / _tmp + _tmp) / 2;
			}
		}
	}

	function _getPriceAndTickFromValues(bool _weth0, uint256 _tokens, uint256 _weth) internal pure returns (uint160 price, int24 tick) {
		uint160 _tmpPrice = uint160(_sqrt(2**192 / (!_weth0 ? _tokens : _weth) * (_weth0 ? _tokens : _weth)));
		tick = _getTickAtSqrtRatio(_tmpPrice);
		tick = tick - (tick % 200);
		price = _getSqrtRatioAtTick(tick);
	}

	function _uint2str(uint256 _value, uint256 _scale, uint256 _maxDecimals) internal pure returns (string memory str) {
		uint256 _d = _scale > _maxDecimals ? _maxDecimals : _scale;
		uint256 _n = _value / 10**(_scale > _d ? _scale - _d : 0);
		if (_n == 0) {
			return "0";
		}
		uint256 _digits = 1;
		uint256 _tmp = _n;
		while (_tmp > 9) {
			_tmp /= 10;
			_digits++;
		}
		_tmp = _digits > _d ? _digits : _d + 1;
		uint256 _offset = (_tmp > _d + 1 ? _tmp - _d - 1 > _d ? _d : _tmp - _d - 1 : 0);
		for (uint256 i = 0; i < _tmp - _offset; i++) {
			uint256 _dec = i < _tmp - _digits ? 0 : (_n / (10**(_tmp - i - 1))) % 10;
			bytes memory _char = new bytes(1);
			_char[0] = bytes1(uint8(_dec) + 48);
			str = string(abi.encodePacked(str, string(_char)));
			if (i < _tmp - _d - 1) {
				if ((i + 1) % 3 == (_tmp - _d) % 3) {
					str = string(abi.encodePacked(str, ","));
				}
			} else {
				if ((_n / 10**_offset) % 10**(_tmp - _offset - i - 1) == 0) {
					break;
				} else if (i == _tmp - _d - 1) {
					str = string(abi.encodePacked(str, "."));
				}
			}
		}
	}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","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":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_user","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":"_tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectTradingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"concentratedPercent","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorFee","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialMarketCap","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"},{"internalType":"uint256","name":"_initialMarketCap","type":"uint256"},{"internalType":"uint256","name":"_upperMarketCap","type":"uint256"},{"internalType":"uint256","name":"_concentratedPercent","type":"uint256"},{"internalType":"uint256","name":"_creatorFee","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positions","outputs":[{"internalType":"uint256","name":"lower","type":"uint256"},{"internalType":"uint256","name":"upper","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"source","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokens","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferAndCall","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":"_tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upperMarketCap","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b506131b18061001d5f395ff3fe608060405260043610610131575f3560e01c806367e828bf116100a8578063a9059cbb1161006d578063a9059cbb14610329578063ba5b798214610348578063bdaaa6401461036f578063dd62ed3e14610383578063e88958dc146103cb578063f83d08ba146103df575f80fd5b806367e828bf1461029857806370a08231146102ac57806385f2aef2146102e0578063947f66901461030257806395d89b4114610315575f80fd5b806318160ddd116100f957806318160ddd146101ec57806323b872dd1461020a578063313ce567146102295780633b5f19351461024f5780634000aea01461026357806353f8b30314610282575f80fd5b806302d05d3f1461013557806306fdde031461016b578063095ea7b31461018c5780630bb68bd2146101bb57806316f0115b146101cf575b5f80fd5b348015610140575f80fd5b506004546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b348015610176575f80fd5b5061017f6103f3565b6040516101629190612017565b348015610197575f80fd5b506101ab6101a6366004612060565b61047e565b6040519015158152602001610162565b3480156101c6575f80fd5b5061017f610493565b3480156101da575f80fd5b506003546001600160a01b031661014e565b3480156101f7575f80fd5b506005545b604051908152602001610162565b348015610215575f80fd5b506101ab61022436600461208a565b6104d4565b348015610234575f80fd5b5061023d601281565b60405160ff9091168152602001610162565b34801561025a575f80fd5b5061017f610551565b34801561026e575f80fd5b506101ab61027d3660046120c8565b610575565b34801561028d575f80fd5b50610296610616565b005b3480156102a3575f80fd5b5061017f610879565b3480156102b7575f80fd5b506101fc6102c636600461214a565b6001600160a01b03165f908152600a602052604090205490565b3480156102eb575f80fd5b5060025461010090046001600160a01b031661014e565b610296610310366004612202565b610895565b348015610320575f80fd5b5061017f610a86565b348015610334575f80fd5b506101ab610343366004612060565b610a93565b348015610353575f80fd5b50600b54600c5460408051928352602083019190915201610162565b34801561037a575f80fd5b5061017f610a9f565b34801561038e575f80fd5b506101fc61039d36600461229f565b6001600160a01b039182165f908152600a602090815260408083209390941682526001909201909152205490565b3480156103d6575f80fd5b5061017f610ab3565b3480156103ea575f80fd5b50610296610ac8565b5f80546103ff906122d6565b80601f016020809104026020016040519081016040528092919081815260200182805461042b906122d6565b80156104765780601f1061044d57610100808354040283529160200191610476565b820191905f5260205f20905b81548152906001019060200180831161045957829003601f168201915b505050505081565b5f61048a338484610af2565b90505b92915050565b6008546060906104b0906104a890606461231c565b600380610b5e565b6040516020016104c09190612333565b604051602081830303815290604052905090565b6001600160a01b0383165f908152600a6020908152604080832033845260010190915281205482811015610506575f80fd5b5f19811461053b576001600160a01b0385165f908152600a602090815260408083203384526001019091529020805484900390555b610546858585610e76565b9150505b9392505050565b606061056560026004015460126005610b5e565b6040516020016104c09190612357565b5f610581338686610e76565b50843b63ffffffff81161561060a57604051636be32e7360e01b81526001600160a01b03871690636be32e73906105c290339089908990899060040161237e565b6020604051808303815f875af11580156105de573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060291906123c5565b61060a575f80fd5b50600195945050505050565b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610667573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068b91906123e4565b600b549091501561075457806001600160a01b031663fc6f7865604051806080016040528060026009015481526020016106d36002546001600160a01b036101009091041690565b6001600160a01b031681526001600160801b0360208201819052604091820152516001600160e01b031960e084901b16815261071291906004016123ff565b60408051808303815f875af115801561072d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107519190612442565b50505b806001600160a01b031663fc6f786560405180608001604052806002600a015481526020016107916002546001600160a01b036101009091041690565b6001600160a01b031681526001600160801b0360208201819052604091820152516001600160e01b031960e084901b1681526107d091906004016123ff565b60408051808303815f875af11580156107eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080f9190612442565b505060025f0160019054906101000a90046001600160a01b03166001600160a01b031663476343ee6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610860575f80fd5b505af1158015610872573d5f803e3d5ffd5b5050505050565b6040518060600160405280603681526020016131466036913981565b60025460ff16156108a4575f80fd5b600554156108b0575f80fd5b5f87511180156108c257506020875111155b6108ca575f80fd5b5f86511180156108dc57506020865111155b6108e4575f80fd5b662386f26fc10000851015801561090957506d314dc6448d9338c15b0a000000008511155b610911575f80fd5b5f8411801561091f57508383115b610927575f80fd5b6103e88210610934575f80fd5b6103e88110610941575f80fd5b60405161094d90611fe8565b604051809103905ff080158015610966573d5f803e3d5ffd5b5060028054610100600160a81b0319166101006001600160a01b039384168102919091179182905560405163189acdbd60e31b81528b8416600482015291049091169063c4d66de8906024015f604051808303815f87803b1580156109c9575f80fd5b505af11580156109db573d5f803e3d5ffd5b5050600480546001600160a01b0319166001600160a01b038c16179055505f9050610a0688826124b2565b506001610a1387826124b2565b506005859055305f818152600a60209081526040808320899055518881527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36006849055600783905560088290556009819055610a7c84848484610f0c565b5050505050505050565b600180546103ff906122d6565b5f61048a338484610e76565b606061056560026005015460126005610b5e565b6009546060906104b0906104a890606461231c565b60025460ff1615610ad7575f80fd5b60055415610ae3575f80fd5b6002805460ff19166001179055565b6001600160a01b038381165f818152600a602090815260408083209487168084526001909501825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b60605f828411610b6e5783610b70565b825b90505f818511610b80575f610b8a565b610b8a828661256e565b610b9590600a612661565b610b9f9087612680565b9050805f03610bcb57604051806040016040528060018152602001600360fc1b8152509250505061054a565b6001815b6009811115610bf757610be3600a82612680565b905081610bef81612693565b925050610bcf565b838211610c0e57610c098460016126ab565b610c10565b815b90505f610c1e8560016126ab565b8211610c2a575f610c63565b846001610c37828561256e565b610c41919061256e565b11610c61576001610c52868461256e565b610c5c919061256e565b610c63565b845b90505f5b610c71828461256e565b811015610e69575f610c83858561256e565b8210610cc557600a6001610c97848761256e565b610ca1919061256e565b610cac90600a612661565b610cb69088612680565b610cc091906126be565b610cc7565b5f5b6040805160018082528183019092529192505f9190602082018180368337019050509050610cf68260306126d1565b60f81b815f81518110610d0b57610d0b6126ea565b60200101906001600160f81b03191690815f1a9053508881604051602001610d349291906126fe565b60408051601f1981840301815291905298506001610d52898761256e565b610d5c919061256e565b831015610dbd576003610d6f898761256e565b610d7991906126be565b6003610d868560016126ab565b610d9091906126be565b03610db85788604051602001610da6919061272c565b60405160208183030381529060405298505b610e54565b600183610dca868861256e565b610dd4919061256e565b610dde919061256e565b610de990600a612661565b610df485600a612661565b610dfe9089612680565b610e0891906126be565b5f03610e15575050610e69565b6001610e21898761256e565b610e2b919061256e565b8303610e545788604051602001610e429190612750565b60405160208183030381529060405298505b50508080610e6190612693565b915050610c67565b5050505050509392505050565b5f808211610e82575f80fd5b81610ea1856001600160a01b03165f908152600a602052604090205490565b1015610eab575f80fd5b6001600160a01b038085165f818152600a6020526040808220805487900390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b4c9086815260200190565b5f3090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8591906123e4565b90506001600160a01b03808316908216105f610faa82610fa460055490565b8a6118e4565b5090507368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102191906123e4565b60405163a167129560e01b81526001600160a01b03868116600483015285811660248301526127106044830152919091169063a1671295906064016020604051808303815f875af1158015611078573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109c91906123e4565b600380546001600160a01b0319166001600160a01b0392909216918217905560405163f637731d60e01b81526001600160a01b038381166004830152919091169063f637731d906024015f604051808303815f87803b1580156110fd575f80fd5b505af115801561110f573d5f803e3d5ffd5b505050505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611164573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118891906123e4565b905061119d858261119860055490565b610af2565b505f6111b2846111ac60055490565b8c6118e4565b9150505f6111c3856111ac60055490565b9150505f6103e86111d360055490565b8b02816111e2576111e261266c565b049050801561149557881561133e57836001600160a01b0316638831645660405180610160016040528089611217578b611219565b8a5b6001600160a01b031681526020018915611233578b611235565b8a5b6001600160a01b03168152612710602082015260400189611256578661125b565b60c887035b60020b8152602001891561126f5786611274565b8660c8015b60020b81526020018961128d576103e8858e020461128f565b5f5b815260200189156112a6576103e8858e02046112a8565b5f5b81526020015f81526020015f81526020016112cb6004546001600160a01b031690565b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016112f99190612774565b6080604051808303815f875af1158015611315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113399190612838565b505050505b836001600160a01b0316638831645660405180610160016040528089611364578b611366565b8a5b6001600160a01b031681526020018915611380578b611382565b8a5b6001600160a01b031681526127106020820152604001896113a357866113a8565b60c887035b60020b815260200189156113bc57866113c1565b8660c8015b60020b8152602001896113dc576103e88d81038602046113de565b5f5b815260200189156113f7576103e88d81038602046113f9565b5f5b81526020015f81526020015f81526020018b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016114399190612774565b6080604051808303815f875af1158015611455573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114799190612838565b505050600b558561148d578260c801611492565b60c883035b92505b881561161057836001600160a01b03166388316456604051806101600160405280896114c1578b6114c3565b8a5b6001600160a01b0316815260200189156114dd578b6114df565b8a5b6001600160a01b031681526127106020820152604001896115005786611502565b855b60020b815260200189156115165786611518565b855b60020b815260200189611548576103e88d8661153360055490565b0302816115425761154261266c565b0461154a565b5f5b81526020018915611578576103e88d8661156360055490565b0302816115725761157261266c565b0461157a565b5f5b81526020015f81526020015f815260200161159d6004546001600160a01b031690565b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016115cb9190612774565b6080604051808303815f875af11580156115e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160b9190612838565b505050505b836001600160a01b0316638831645660405180610160016040528089611636578b611638565b8a5b6001600160a01b031681526020018915611652578b611654565b8a5b6001600160a01b031681526127106020820152604001896116755786611677565b855b60020b8152602001891561168b578661168d565b855b60020b8152602001896116c1576103e88d6103e803866116ac60055490565b0302816116bb576116bb61266c565b046116c3565b5f5b815260200189156116f5576103e88d6103e803866116e060055490565b0302816116ef576116ef61266c565b046116f7565b5f5b81526020015f81526020015f81526020018b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016117379190612774565b6080604051808303815f875af1158015611753573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117779190612838565b505050600c556001600160a01b03881631156118d6577368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b03166304e45aaf896001600160a01b0316316040518060e001604052808b6001600160a01b031681526020018c6001600160a01b0316815260200161271062ffffff1681526020016118036004546001600160a01b031690565b6001600160a01b0390811682528d8116316020808401919091525f604080850182905260609485019190915280516001600160e01b031960e089901b168152855184166004820152918501518316602483015284015162ffffff16604482015291830151811660648301526080830151608483015260a083015160a483015260c09092015190911660c482015260e40160206040518083038185885af11580156118af573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906118d4919061287e565b505b505050505050505050505050565b5f805f611922866118f557846118f7565b855b87156119035785611905565b865b61191390600160c01b612680565b61191d919061231c565b61195a565b905061192d8161199d565b915061193a60c883612895565b61194490836128b6565b915061194f82611cba565b925050935093915050565b80600260018201045b81811015611997578091506002818285816119805761198061266c565b04018161198f5761198f61266c565b049050611963565b50919050565b5f6401000276a36001600160a01b038316108015906119d8575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b611a0d5760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110611aa157607f810383901c9150611aab565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14611cab57886001600160a01b0316611c9082611cba565b6001600160a01b03161115611ca55781611cad565b80611cad565b815b9998505050505050505050565b5f805f8360020b12611ccf578260020b611cd6565b8260020b5f035b9050620d89e8811115611d0f5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401611a04565b5f816001165f03611d2457600160801b611d36565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611d6a576ffff97272373d413259a46990580e213a0260801c5b6004821615611d89576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611da8576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611dc7576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611de6576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611e05576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611e24576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611e44576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611e64576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611e84576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611ea4576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611ec4576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611ee4576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611f04576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611f24576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611f45576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611f65576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611f84576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611fa1576b048a170391f7dc42444e8fa20260801c5b5f8460020b1315611fc057805f1981611fbc57611fbc61266c565b0490505b640100000000810615611fd4576001611fd6565b5f5b60ff16602082901c0192505050919050565b61086a806128dc83390190565b5f5b8381101561200f578181015183820152602001611ff7565b50505f910152565b602081525f8251806020840152612035816040850160208701611ff5565b601f01601f19169190910160400192915050565b6001600160a01b038116811461205d575f80fd5b50565b5f8060408385031215612071575f80fd5b823561207c81612049565b946020939093013593505050565b5f805f6060848603121561209c575f80fd5b83356120a781612049565b925060208401356120b781612049565b929592945050506040919091013590565b5f805f80606085870312156120db575f80fd5b84356120e681612049565b935060208501359250604085013567ffffffffffffffff80821115612109575f80fd5b818701915087601f83011261211c575f80fd5b81358181111561212a575f80fd5b88602082850101111561213b575f80fd5b95989497505060200194505050565b5f6020828403121561215a575f80fd5b813561054a81612049565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612188575f80fd5b813567ffffffffffffffff808211156121a3576121a3612165565b604051601f8301601f19908116603f011681019082821181831017156121cb576121cb612165565b816040528381528660208588010111156121e3575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f80610100898b03121561221a575f80fd5b883561222581612049565b9750602089013567ffffffffffffffff80821115612241575f80fd5b61224d8c838d01612179565b985060408b0135915080821115612262575f80fd5b5061226f8b828c01612179565b989b979a5097986060810135985060808101359760a0820135975060c0820135965060e090910135945092505050565b5f80604083850312156122b0575f80fd5b82356122bb81612049565b915060208301356122cb81612049565b809150509250929050565b600181811c908216806122ea57607f821691505b60208210810361199757634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761048d5761048d612308565b5f8251612344818460208701611ff5565b602560f81b920191825250600101919050565b5f8251612368818460208701611ff5565b630408aa8960e31b920191825250600401919050565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f602082840312156123d5575f80fd5b8151801515811461054a575f80fd5b5f602082840312156123f4575f80fd5b815161054a81612049565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b5f8060408385031215612453575f80fd5b505080516020909101519092909150565b601f8211156124ad575f81815260208120601f850160051c8101602086101561248a5750805b601f850160051c820191505b818110156124a957828155600101612496565b5050505b505050565b815167ffffffffffffffff8111156124cc576124cc612165565b6124e0816124da84546122d6565b84612464565b602080601f831160018114612513575f84156124fc5750858301515b5f19600386901b1c1916600185901b1785556124a9565b5f85815260208120601f198616915b8281101561254157888601518255948401946001909101908401612522565b508582101561255e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561048d5761048d612308565b600181815b808511156125bb57815f19048211156125a1576125a1612308565b808516156125ae57918102915b93841c9390800290612586565b509250929050565b5f826125d15750600161048d565b816125dd57505f61048d565b81600181146125f357600281146125fd57612619565b600191505061048d565b60ff84111561260e5761260e612308565b50506001821b61048d565b5060208310610133831016604e8410600b841016171561263c575081810a61048d565b6126468383612581565b805f190482111561265957612659612308565b029392505050565b5f61048a83836125c3565b634e487b7160e01b5f52601260045260245ffd5b5f8261268e5761268e61266c565b500490565b5f600182016126a4576126a4612308565b5060010190565b8082018082111561048d5761048d612308565b5f826126cc576126cc61266c565b500690565b60ff818116838216019081111561048d5761048d612308565b634e487b7160e01b5f52603260045260245ffd5b5f835161270f818460208801611ff5565b835190830190612723818360208801611ff5565b01949350505050565b5f825161273d818460208701611ff5565b600b60fa1b920191825250600101919050565b5f8251612761818460208701611ff5565b601760f91b920191825250600101919050565b81516001600160a01b03168152610160810160208301516127a060208401826001600160a01b03169052565b5060408301516127b7604084018262ffffff169052565b5060608301516127cc606084018260020b9052565b5060808301516127e1608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151612827828501826001600160a01b03169052565b505061014092830151919092015290565b5f805f806080858703121561284b575f80fd5b8451935060208501516001600160801b0381168114612868575f80fd5b6040860151606090960151949790965092505050565b5f6020828403121561288e575f80fd5b5051919050565b5f8260020b806128a7576128a761266c565b808360020b0791505092915050565b600282810b9082900b03627fffff198112627fffff8213171561048d5761048d61230856fe608060405234801561000f575f80fd5b5061084d8061001d5f395ff3fe60806040526004361061007c575f3560e01c8063894760691161004c5780638947606914610117578063c4d66de814610136578063e086e5ec14610155578063fc0c546a14610169575f80fd5b80633a98ef3914610087578063476343ee146100af5780634c02f62e146100c557806357a858fc146100d9575f80fd5b3661008357005b5f80fd5b348015610092575f80fd5b5061009c60015481565b6040519081526020015b60405180910390f35b3480156100ba575f80fd5b506100c36101a0565b005b3480156100d0575f80fd5b506100c36101bf565b3480156100e4575f80fd5b506100f86100f33660046106ea565b610236565b604080516001600160a01b0390931683526020830191909152016100a6565b348015610122575f80fd5b506100c3610131366004610715565b61026b565b348015610141575f80fd5b506100c3610150366004610715565b61052f565b348015610160575f80fd5b506100c3610599565b348015610174575f80fd5b50600254610188906001600160a01b031681565b6040516001600160a01b0390911681526020016100a6565b6101a86101bf565b6002546101bd906001600160a01b031661026b565b565b6101bd7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101319190610737565b5f8181548110610244575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e09190610737565b9050806001600160a01b0316826001600160a01b0316036103c0576040516370a0823160e01b81523060048201526001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa158015610345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103699190610752565b6040518263ffffffff1660e01b815260040161038791815260200190565b5f604051808303815f87803b15801561039e575f80fd5b505af11580156103b0573d5f803e3d5ffd5b505050506103bc610599565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610404573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104289190610752565b9050801561052a575f5b5f54811015610528575f80828154811061044e5761044e610769565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03908116808452600192830154948401859052915492945088169263a9059cbb929061049d9088610791565b6104a791906107ae565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156104ef573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051391906107cd565b50508080610520906107ec565b915050610432565b505b505050565b6001541561053b575f80fd5b600280546001600160a01b0319163317905561055881600361063c565b61057773e6c791fbd46db3f4eda5f7bb76474f4fa530733e600261063c565b61059673c28c9da0f8a500dffc16ff09a3dd1cc4c530d346600161063c565b50565b478015610596575f5b5f548110156103bc575f8082815481106105be576105be610769565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03168083526001918201549383018490529054919350916108fc91906106079087610791565b61061191906107ae565b6040518115909202915f818181858888f1935050505050508080610634906107ec565b9150506105a2565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564909201919091558154839291906106e1908490610804565b90915550505050565b5f602082840312156106fa575f80fd5b5035919050565b6001600160a01b0381168114610596575f80fd5b5f60208284031215610725575f80fd5b813561073081610701565b9392505050565b5f60208284031215610747575f80fd5b815161073081610701565b5f60208284031215610762575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107a8576107a861077d565b92915050565b5f826107c857634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156107dd575f80fd5b81518015158114610730575f80fd5b5f600182016107fd576107fd61077d565b5060010190565b808201808211156107a8576107a861077d56fea26469706673582212205a7d6207f78ca60fa96c729b5948f291193052a1303377654ac9c3ef10d5ae3a64736f6c6343000815003343726561746564207769746820426f73736d616e27732042616b657279202862616b6572792e6d756c6c65742e6361706974616c2921a2646970667358221220d15a9c359bb5a5fd7a5ffce6c29d3ea55d4d85e9848f95dfc71def0599c5044e64736f6c63430008150033

Deployed Bytecode

0x608060405260043610610131575f3560e01c806367e828bf116100a8578063a9059cbb1161006d578063a9059cbb14610329578063ba5b798214610348578063bdaaa6401461036f578063dd62ed3e14610383578063e88958dc146103cb578063f83d08ba146103df575f80fd5b806367e828bf1461029857806370a08231146102ac57806385f2aef2146102e0578063947f66901461030257806395d89b4114610315575f80fd5b806318160ddd116100f957806318160ddd146101ec57806323b872dd1461020a578063313ce567146102295780633b5f19351461024f5780634000aea01461026357806353f8b30314610282575f80fd5b806302d05d3f1461013557806306fdde031461016b578063095ea7b31461018c5780630bb68bd2146101bb57806316f0115b146101cf575b5f80fd5b348015610140575f80fd5b506004546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b348015610176575f80fd5b5061017f6103f3565b6040516101629190612017565b348015610197575f80fd5b506101ab6101a6366004612060565b61047e565b6040519015158152602001610162565b3480156101c6575f80fd5b5061017f610493565b3480156101da575f80fd5b506003546001600160a01b031661014e565b3480156101f7575f80fd5b506005545b604051908152602001610162565b348015610215575f80fd5b506101ab61022436600461208a565b6104d4565b348015610234575f80fd5b5061023d601281565b60405160ff9091168152602001610162565b34801561025a575f80fd5b5061017f610551565b34801561026e575f80fd5b506101ab61027d3660046120c8565b610575565b34801561028d575f80fd5b50610296610616565b005b3480156102a3575f80fd5b5061017f610879565b3480156102b7575f80fd5b506101fc6102c636600461214a565b6001600160a01b03165f908152600a602052604090205490565b3480156102eb575f80fd5b5060025461010090046001600160a01b031661014e565b610296610310366004612202565b610895565b348015610320575f80fd5b5061017f610a86565b348015610334575f80fd5b506101ab610343366004612060565b610a93565b348015610353575f80fd5b50600b54600c5460408051928352602083019190915201610162565b34801561037a575f80fd5b5061017f610a9f565b34801561038e575f80fd5b506101fc61039d36600461229f565b6001600160a01b039182165f908152600a602090815260408083209390941682526001909201909152205490565b3480156103d6575f80fd5b5061017f610ab3565b3480156103ea575f80fd5b50610296610ac8565b5f80546103ff906122d6565b80601f016020809104026020016040519081016040528092919081815260200182805461042b906122d6565b80156104765780601f1061044d57610100808354040283529160200191610476565b820191905f5260205f20905b81548152906001019060200180831161045957829003601f168201915b505050505081565b5f61048a338484610af2565b90505b92915050565b6008546060906104b0906104a890606461231c565b600380610b5e565b6040516020016104c09190612333565b604051602081830303815290604052905090565b6001600160a01b0383165f908152600a6020908152604080832033845260010190915281205482811015610506575f80fd5b5f19811461053b576001600160a01b0385165f908152600a602090815260408083203384526001019091529020805484900390555b610546858585610e76565b9150505b9392505050565b606061056560026004015460126005610b5e565b6040516020016104c09190612357565b5f610581338686610e76565b50843b63ffffffff81161561060a57604051636be32e7360e01b81526001600160a01b03871690636be32e73906105c290339089908990899060040161237e565b6020604051808303815f875af11580156105de573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060291906123c5565b61060a575f80fd5b50600195945050505050565b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610667573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068b91906123e4565b600b549091501561075457806001600160a01b031663fc6f7865604051806080016040528060026009015481526020016106d36002546001600160a01b036101009091041690565b6001600160a01b031681526001600160801b0360208201819052604091820152516001600160e01b031960e084901b16815261071291906004016123ff565b60408051808303815f875af115801561072d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107519190612442565b50505b806001600160a01b031663fc6f786560405180608001604052806002600a015481526020016107916002546001600160a01b036101009091041690565b6001600160a01b031681526001600160801b0360208201819052604091820152516001600160e01b031960e084901b1681526107d091906004016123ff565b60408051808303815f875af11580156107eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080f9190612442565b505060025f0160019054906101000a90046001600160a01b03166001600160a01b031663476343ee6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610860575f80fd5b505af1158015610872573d5f803e3d5ffd5b5050505050565b6040518060600160405280603681526020016131466036913981565b60025460ff16156108a4575f80fd5b600554156108b0575f80fd5b5f87511180156108c257506020875111155b6108ca575f80fd5b5f86511180156108dc57506020865111155b6108e4575f80fd5b662386f26fc10000851015801561090957506d314dc6448d9338c15b0a000000008511155b610911575f80fd5b5f8411801561091f57508383115b610927575f80fd5b6103e88210610934575f80fd5b6103e88110610941575f80fd5b60405161094d90611fe8565b604051809103905ff080158015610966573d5f803e3d5ffd5b5060028054610100600160a81b0319166101006001600160a01b039384168102919091179182905560405163189acdbd60e31b81528b8416600482015291049091169063c4d66de8906024015f604051808303815f87803b1580156109c9575f80fd5b505af11580156109db573d5f803e3d5ffd5b5050600480546001600160a01b0319166001600160a01b038c16179055505f9050610a0688826124b2565b506001610a1387826124b2565b506005859055305f818152600a60209081526040808320899055518881527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36006849055600783905560088290556009819055610a7c84848484610f0c565b5050505050505050565b600180546103ff906122d6565b5f61048a338484610e76565b606061056560026005015460126005610b5e565b6009546060906104b0906104a890606461231c565b60025460ff1615610ad7575f80fd5b60055415610ae3575f80fd5b6002805460ff19166001179055565b6001600160a01b038381165f818152600a602090815260408083209487168084526001909501825280832086905551858152919392917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060019392505050565b60605f828411610b6e5783610b70565b825b90505f818511610b80575f610b8a565b610b8a828661256e565b610b9590600a612661565b610b9f9087612680565b9050805f03610bcb57604051806040016040528060018152602001600360fc1b8152509250505061054a565b6001815b6009811115610bf757610be3600a82612680565b905081610bef81612693565b925050610bcf565b838211610c0e57610c098460016126ab565b610c10565b815b90505f610c1e8560016126ab565b8211610c2a575f610c63565b846001610c37828561256e565b610c41919061256e565b11610c61576001610c52868461256e565b610c5c919061256e565b610c63565b845b90505f5b610c71828461256e565b811015610e69575f610c83858561256e565b8210610cc557600a6001610c97848761256e565b610ca1919061256e565b610cac90600a612661565b610cb69088612680565b610cc091906126be565b610cc7565b5f5b6040805160018082528183019092529192505f9190602082018180368337019050509050610cf68260306126d1565b60f81b815f81518110610d0b57610d0b6126ea565b60200101906001600160f81b03191690815f1a9053508881604051602001610d349291906126fe565b60408051601f1981840301815291905298506001610d52898761256e565b610d5c919061256e565b831015610dbd576003610d6f898761256e565b610d7991906126be565b6003610d868560016126ab565b610d9091906126be565b03610db85788604051602001610da6919061272c565b60405160208183030381529060405298505b610e54565b600183610dca868861256e565b610dd4919061256e565b610dde919061256e565b610de990600a612661565b610df485600a612661565b610dfe9089612680565b610e0891906126be565b5f03610e15575050610e69565b6001610e21898761256e565b610e2b919061256e565b8303610e545788604051602001610e429190612750565b60405160208183030381529060405298505b50508080610e6190612693565b915050610c67565b5050505050509392505050565b5f808211610e82575f80fd5b81610ea1856001600160a01b03165f908152600a602052604090205490565b1015610eab575f80fd5b6001600160a01b038085165f818152600a6020526040808220805487900390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b4c9086815260200190565b5f3090505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8591906123e4565b90506001600160a01b03808316908216105f610faa82610fa460055490565b8a6118e4565b5090507368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102191906123e4565b60405163a167129560e01b81526001600160a01b03868116600483015285811660248301526127106044830152919091169063a1671295906064016020604051808303815f875af1158015611078573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109c91906123e4565b600380546001600160a01b0319166001600160a01b0392909216918217905560405163f637731d60e01b81526001600160a01b038381166004830152919091169063f637731d906024015f604051808303815f87803b1580156110fd575f80fd5b505af115801561110f573d5f803e3d5ffd5b505050505f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611164573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061118891906123e4565b905061119d858261119860055490565b610af2565b505f6111b2846111ac60055490565b8c6118e4565b9150505f6111c3856111ac60055490565b9150505f6103e86111d360055490565b8b02816111e2576111e261266c565b049050801561149557881561133e57836001600160a01b0316638831645660405180610160016040528089611217578b611219565b8a5b6001600160a01b031681526020018915611233578b611235565b8a5b6001600160a01b03168152612710602082015260400189611256578661125b565b60c887035b60020b8152602001891561126f5786611274565b8660c8015b60020b81526020018961128d576103e8858e020461128f565b5f5b815260200189156112a6576103e8858e02046112a8565b5f5b81526020015f81526020015f81526020016112cb6004546001600160a01b031690565b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016112f99190612774565b6080604051808303815f875af1158015611315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113399190612838565b505050505b836001600160a01b0316638831645660405180610160016040528089611364578b611366565b8a5b6001600160a01b031681526020018915611380578b611382565b8a5b6001600160a01b031681526127106020820152604001896113a357866113a8565b60c887035b60020b815260200189156113bc57866113c1565b8660c8015b60020b8152602001896113dc576103e88d81038602046113de565b5f5b815260200189156113f7576103e88d81038602046113f9565b5f5b81526020015f81526020015f81526020018b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016114399190612774565b6080604051808303815f875af1158015611455573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114799190612838565b505050600b558561148d578260c801611492565b60c883035b92505b881561161057836001600160a01b03166388316456604051806101600160405280896114c1578b6114c3565b8a5b6001600160a01b0316815260200189156114dd578b6114df565b8a5b6001600160a01b031681526127106020820152604001896115005786611502565b855b60020b815260200189156115165786611518565b855b60020b815260200189611548576103e88d8661153360055490565b0302816115425761154261266c565b0461154a565b5f5b81526020018915611578576103e88d8661156360055490565b0302816115725761157261266c565b0461157a565b5f5b81526020015f81526020015f815260200161159d6004546001600160a01b031690565b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016115cb9190612774565b6080604051808303815f875af11580156115e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160b9190612838565b505050505b836001600160a01b0316638831645660405180610160016040528089611636578b611638565b8a5b6001600160a01b031681526020018915611652578b611654565b8a5b6001600160a01b031681526127106020820152604001896116755786611677565b855b60020b8152602001891561168b578661168d565b855b60020b8152602001896116c1576103e88d6103e803866116ac60055490565b0302816116bb576116bb61266c565b046116c3565b5f5b815260200189156116f5576103e88d6103e803866116e060055490565b0302816116ef576116ef61266c565b046116f7565b5f5b81526020015f81526020015f81526020018b6001600160a01b03168152602001428152506040518263ffffffff1660e01b81526004016117379190612774565b6080604051808303815f875af1158015611753573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117779190612838565b505050600c556001600160a01b03881631156118d6577368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b03166304e45aaf896001600160a01b0316316040518060e001604052808b6001600160a01b031681526020018c6001600160a01b0316815260200161271062ffffff1681526020016118036004546001600160a01b031690565b6001600160a01b0390811682528d8116316020808401919091525f604080850182905260609485019190915280516001600160e01b031960e089901b168152855184166004820152918501518316602483015284015162ffffff16604482015291830151811660648301526080830151608483015260a083015160a483015260c09092015190911660c482015260e40160206040518083038185885af11580156118af573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906118d4919061287e565b505b505050505050505050505050565b5f805f611922866118f557846118f7565b855b87156119035785611905565b865b61191390600160c01b612680565b61191d919061231c565b61195a565b905061192d8161199d565b915061193a60c883612895565b61194490836128b6565b915061194f82611cba565b925050935093915050565b80600260018201045b81811015611997578091506002818285816119805761198061266c565b04018161198f5761198f61266c565b049050611963565b50919050565b5f6401000276a36001600160a01b038316108015906119d8575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b611a0d5760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064015b60405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110611aa157607f810383901c9150611aab565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14611cab57886001600160a01b0316611c9082611cba565b6001600160a01b03161115611ca55781611cad565b80611cad565b815b9998505050505050505050565b5f805f8360020b12611ccf578260020b611cd6565b8260020b5f035b9050620d89e8811115611d0f5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401611a04565b5f816001165f03611d2457600160801b611d36565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611d6a576ffff97272373d413259a46990580e213a0260801c5b6004821615611d89576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615611da8576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615611dc7576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611de6576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611e05576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611e24576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611e44576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611e64576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615611e84576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615611ea4576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615611ec4576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611ee4576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611f04576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611f24576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611f45576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611f65576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615611f84576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611fa1576b048a170391f7dc42444e8fa20260801c5b5f8460020b1315611fc057805f1981611fbc57611fbc61266c565b0490505b640100000000810615611fd4576001611fd6565b5f5b60ff16602082901c0192505050919050565b61086a806128dc83390190565b5f5b8381101561200f578181015183820152602001611ff7565b50505f910152565b602081525f8251806020840152612035816040850160208701611ff5565b601f01601f19169190910160400192915050565b6001600160a01b038116811461205d575f80fd5b50565b5f8060408385031215612071575f80fd5b823561207c81612049565b946020939093013593505050565b5f805f6060848603121561209c575f80fd5b83356120a781612049565b925060208401356120b781612049565b929592945050506040919091013590565b5f805f80606085870312156120db575f80fd5b84356120e681612049565b935060208501359250604085013567ffffffffffffffff80821115612109575f80fd5b818701915087601f83011261211c575f80fd5b81358181111561212a575f80fd5b88602082850101111561213b575f80fd5b95989497505060200194505050565b5f6020828403121561215a575f80fd5b813561054a81612049565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612188575f80fd5b813567ffffffffffffffff808211156121a3576121a3612165565b604051601f8301601f19908116603f011681019082821181831017156121cb576121cb612165565b816040528381528660208588010111156121e3575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f80610100898b03121561221a575f80fd5b883561222581612049565b9750602089013567ffffffffffffffff80821115612241575f80fd5b61224d8c838d01612179565b985060408b0135915080821115612262575f80fd5b5061226f8b828c01612179565b989b979a5097986060810135985060808101359760a0820135975060c0820135965060e090910135945092505050565b5f80604083850312156122b0575f80fd5b82356122bb81612049565b915060208301356122cb81612049565b809150509250929050565b600181811c908216806122ea57607f821691505b60208210810361199757634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761048d5761048d612308565b5f8251612344818460208701611ff5565b602560f81b920191825250600101919050565b5f8251612368818460208701611ff5565b630408aa8960e31b920191825250600401919050565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b5f602082840312156123d5575f80fd5b8151801515811461054a575f80fd5b5f602082840312156123f4575f80fd5b815161054a81612049565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b5f8060408385031215612453575f80fd5b505080516020909101519092909150565b601f8211156124ad575f81815260208120601f850160051c8101602086101561248a5750805b601f850160051c820191505b818110156124a957828155600101612496565b5050505b505050565b815167ffffffffffffffff8111156124cc576124cc612165565b6124e0816124da84546122d6565b84612464565b602080601f831160018114612513575f84156124fc5750858301515b5f19600386901b1c1916600185901b1785556124a9565b5f85815260208120601f198616915b8281101561254157888601518255948401946001909101908401612522565b508582101561255e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561048d5761048d612308565b600181815b808511156125bb57815f19048211156125a1576125a1612308565b808516156125ae57918102915b93841c9390800290612586565b509250929050565b5f826125d15750600161048d565b816125dd57505f61048d565b81600181146125f357600281146125fd57612619565b600191505061048d565b60ff84111561260e5761260e612308565b50506001821b61048d565b5060208310610133831016604e8410600b841016171561263c575081810a61048d565b6126468383612581565b805f190482111561265957612659612308565b029392505050565b5f61048a83836125c3565b634e487b7160e01b5f52601260045260245ffd5b5f8261268e5761268e61266c565b500490565b5f600182016126a4576126a4612308565b5060010190565b8082018082111561048d5761048d612308565b5f826126cc576126cc61266c565b500690565b60ff818116838216019081111561048d5761048d612308565b634e487b7160e01b5f52603260045260245ffd5b5f835161270f818460208801611ff5565b835190830190612723818360208801611ff5565b01949350505050565b5f825161273d818460208701611ff5565b600b60fa1b920191825250600101919050565b5f8251612761818460208701611ff5565b601760f91b920191825250600101919050565b81516001600160a01b03168152610160810160208301516127a060208401826001600160a01b03169052565b5060408301516127b7604084018262ffffff169052565b5060608301516127cc606084018260020b9052565b5060808301516127e1608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151612827828501826001600160a01b03169052565b505061014092830151919092015290565b5f805f806080858703121561284b575f80fd5b8451935060208501516001600160801b0381168114612868575f80fd5b6040860151606090960151949790965092505050565b5f6020828403121561288e575f80fd5b5051919050565b5f8260020b806128a7576128a761266c565b808360020b0791505092915050565b600282810b9082900b03627fffff198112627fffff8213171561048d5761048d61230856fe608060405234801561000f575f80fd5b5061084d8061001d5f395ff3fe60806040526004361061007c575f3560e01c8063894760691161004c5780638947606914610117578063c4d66de814610136578063e086e5ec14610155578063fc0c546a14610169575f80fd5b80633a98ef3914610087578063476343ee146100af5780634c02f62e146100c557806357a858fc146100d9575f80fd5b3661008357005b5f80fd5b348015610092575f80fd5b5061009c60015481565b6040519081526020015b60405180910390f35b3480156100ba575f80fd5b506100c36101a0565b005b3480156100d0575f80fd5b506100c36101bf565b3480156100e4575f80fd5b506100f86100f33660046106ea565b610236565b604080516001600160a01b0390931683526020830191909152016100a6565b348015610122575f80fd5b506100c3610131366004610715565b61026b565b348015610141575f80fd5b506100c3610150366004610715565b61052f565b348015610160575f80fd5b506100c3610599565b348015610174575f80fd5b50600254610188906001600160a01b031681565b6040516001600160a01b0390911681526020016100a6565b6101a86101bf565b6002546101bd906001600160a01b031661026b565b565b6101bd7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101319190610737565b5f8181548110610244575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b03909116915082565b5f7368b3465833fb72a70ecdf485e0e4c7bd8665fc456001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e09190610737565b9050806001600160a01b0316826001600160a01b0316036103c0576040516370a0823160e01b81523060048201526001600160a01b03821690632e1a7d4d9082906370a0823190602401602060405180830381865afa158015610345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103699190610752565b6040518263ffffffff1660e01b815260040161038791815260200190565b5f604051808303815f87803b15801561039e575f80fd5b505af11580156103b0573d5f803e3d5ffd5b505050506103bc610599565b5050565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa158015610404573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104289190610752565b9050801561052a575f5b5f54811015610528575f80828154811061044e5761044e610769565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03908116808452600192830154948401859052915492945088169263a9059cbb929061049d9088610791565b6104a791906107ae565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156104ef573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051391906107cd565b50508080610520906107ec565b915050610432565b505b505050565b6001541561053b575f80fd5b600280546001600160a01b0319163317905561055881600361063c565b61057773e6c791fbd46db3f4eda5f7bb76474f4fa530733e600261063c565b61059673c28c9da0f8a500dffc16ff09a3dd1cc4c530d346600161063c565b50565b478015610596575f5b5f548110156103bc575f8082815481106105be576105be610769565b5f9182526020918290206040805180820190915260029092020180546001600160a01b03168083526001918201549383018490529054919350916108fc91906106079087610791565b61061191906107ae565b6040518115909202915f818181858888f1935050505050508080610634906107ec565b9150506105a2565b604080518082019091526001600160a01b038381168252602082018381525f80546001808201835582805294517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563600290920291820180546001600160a01b031916919095161790935590517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564909201919091558154839291906106e1908490610804565b90915550505050565b5f602082840312156106fa575f80fd5b5035919050565b6001600160a01b0381168114610596575f80fd5b5f60208284031215610725575f80fd5b813561073081610701565b9392505050565b5f60208284031215610747575f80fd5b815161073081610701565b5f60208284031215610762575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107a8576107a861077d565b92915050565b5f826107c857634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156107dd575f80fd5b81518015158114610730575f80fd5b5f600182016107fd576107fd61077d565b5060010190565b808201808211156107a8576107a861077d56fea26469706673582212205a7d6207f78ca60fa96c729b5948f291193052a1303377654ac9c3ef10d5ae3a64736f6c6343000815003343726561746564207769746820426f73736d616e27732042616b657279202862616b6572792e6d756c6c65742e6361706974616c2921a2646970667358221220d15a9c359bb5a5fd7a5ffce6c29d3ea55d4d85e9848f95dfc71def0599c5044e64736f6c63430008150033

Deployed Bytecode Sourcemap

3382:17300:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7704:78;;;;;;;;;;-1:-1:-1;7765:12:0;;-1:-1:-1;;;;;7765:12:0;7704:78;;;-1:-1:-1;;;;;287:32:1;;;269:51;;257:2;242:18;7704:78:0;;;;;;;;4103:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6884:132::-;;;;;;;;;;-1:-1:-1;6884:132:0;;;;;:::i;:::-;;:::i;:::-;;;1608:14:1;;1601:22;1583:41;;1571:2;1556:18;6884:132:0;1443:187:1;8752:164:0;;;;;;;;;;;;;:::i;7874:72::-;;;;;;;;;;-1:-1:-1;7932:9:0;;-1:-1:-1;;;;;7932:9:0;7874:72;;7951:86;;;;;;;;;;-1:-1:-1;8016:16:0;;7951:86;;;1781:25:1;;;1769:2;1754:18;7951:86:0;1635:177:1;7021:347:0;;;;;;;;;;-1:-1:-1;7021:347:0;;;;;:::i;:::-;;:::i;4149:35::-;;;;;;;;;;;;4182:2;4149:35;;;;;2450:4:1;2438:17;;;2420:36;;2408:2;2393:18;4149:35:0;2278:184:1;8434:156:0;;;;;;;;;;;;;:::i;7373:323::-;;;;;;;;;;-1:-1:-1;7373:323:0;;;;;:::i;:::-;;:::i;6222:528::-;;;;;;;;;;;;;:::i;:::-;;4190:88;;;;;;;;;;;;;:::i;8042:106::-;;;;;;;;;;-1:-1:-1;8042:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;8118:17:0;8097:7;8118:17;;;:10;:17;;;;;:25;;8042:106;7788:81;;;;;;;;;;-1:-1:-1;7854:4:0;:9;;;;-1:-1:-1;;;;;7854:9:0;7788:81;;4988:1229;;;;;;:::i;:::-;;:::i;4125:20::-;;;;;;;;;;;;;:::i;6755:124::-;;;;;;;;;;-1:-1:-1;6755:124:0;;;;;:::i;:::-;;:::i;8294:135::-;;;;;;;;;;-1:-1:-1;8381:20:0;;8403;;8294:135;;;5576:25:1;;;5632:2;5617:18;;5610:34;;;;5549:18;8294:135:0;5402:248:1;8595:152:0;;;;;;;;;;;;;:::i;8153:136::-;;;;;;;;;;-1:-1:-1;8153:136:0;;;;;:::i;:::-;-1:-1:-1;;;;;8247:17:0;;;8226:7;8247:17;;;:10;:17;;;;;;;;:37;;;;;;:27;;;;:37;;;;;;8153:136;8921:146;;;;;;;;;;;;;:::i;4871:111::-;;;;;;;;;;;;;:::i;4103:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6884:132::-;6954:4;6972:39;6981:10;6993:8;7003:7;6972:8;:39::i;:::-;6965:46;;6884:132;;;;;:::o;8752:164::-;8867:24;;8806:13;;8857:47;;8867:30;;8894:3;8867:30;:::i;:::-;8899:1;8902;8857:9;:47::i;:::-;8840:70;;;;;;;;:::i;:::-;;;;;;;;;;;;;8826:85;;8752:164;:::o;7021:347::-;-1:-1:-1;;;;;8247:17:0;;7106:4;8247:17;;;:10;:17;;;;;;;;7171:10;8247:37;;:27;;:37;;;;;;7210:7;7196:10;:21;;7188:30;;;;;;-1:-1:-1;;7228:10:0;:22;7224:92;;-1:-1:-1;;;;;7259:17:0;;;;;;:10;:17;;;;;;;;7287:10;7259:39;;:27;;:39;;;;;:50;;;;;;;7224:92;7328:30;7338:5;7345:3;7350:7;7328:9;:30::i;:::-;7321:37;;;7021:347;;;;;;:::o;8434:156::-;8485:13;8536:39;8546:4;:21;;;8569:2;8573:1;8536:9;:39::i;:::-;8519:65;;;;;;;;:::i;7373:323::-;7468:4;7479:35;7489:10;7501:3;7506:7;7479:9;:35::i;:::-;-1:-1:-1;7560:16:0;;7589:9;;;;7585:91;;7614:55;;-1:-1:-1;;;7614:55:0;;-1:-1:-1;;;;;7614:27:0;;;;;:55;;7642:10;;7654:7;;7663:5;;;;7614:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7606:64;;;;;;-1:-1:-1;7687:4:0;;7373:323;-1:-1:-1;;;;;7373:323:0:o;6222:528::-;6266:19;3805:42;-1:-1:-1;;;;;6304:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6338:20;;6266:63;;-1:-1:-1;6338:25:0;6334:213;;6371:3;-1:-1:-1;;;;;6371:11:0;;6383:157;;;;;;;;6429:4;:20;;;6383:157;;;;6467:6;7854:4;:9;-1:-1:-1;;;;;7854:9:0;;;;;;7788:81;6467:6;-1:-1:-1;;;;;6383:157:0;;;-1:-1:-1;;;;;6383:157:0;;;;;;;;;;;6371:170;-1:-1:-1;;;;;;6371:170:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6334:213;6551:3;-1:-1:-1;;;;;6551:11:0;;6563:152;;;;;;;;6608:4;:20;;;6563:152;;;;6645:6;7854:4;:9;-1:-1:-1;;;;;7854:9:0;;;;;;7788:81;6645:6;-1:-1:-1;;;;;6563:152:0;;;-1:-1:-1;;;;;6563:152:0;;;;;;;;;;;6551:165;-1:-1:-1;;;;;;6551:165:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6721:4;:9;;;;;;;;;;-1:-1:-1;;;;;6721:9:0;-1:-1:-1;;;;;6721:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6261:489;6222:528::o;4190:88::-;;;;;;;;;;;;;;;;;;;:::o;4988:1229::-;5226:4;:11;;;5225:12;5217:21;;;;;;8016:16;;5251:18;5243:27;;;;;;5305:1;5289:5;5283:19;:23;:65;;;;;3563:2;5316:5;5310:19;:38;;5283:65;5275:74;;;;;;5386:1;5368:7;5362:21;:25;:69;;;;;3563:2;5397:7;5391:21;:40;;5362:69;5354:78;;;;;;3607:4;5445:12;:26;;:56;;;;;3668:4;5475:12;:26;;5445:56;5437:65;;;;;;5535:1;5515:17;:21;:60;;;;;5558:17;5540:15;:35;5515:60;5507:69;;;;;;3745:4;5589:20;:40;5581:49;;;;;;3745:4;5643:11;:31;5635:40;;;;;;5692:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5680:4:0;:22;;-1:-1:-1;;;;;;5680:22:0;;-1:-1:-1;;;;;5680:22:0;;;;;;;;;;;;;5707:30;;-1:-1:-1;;;5707:30:0;;287:32:1;;;5707:30:0;;;269:51:1;5707:9:0;;;;;;:20;;242:18:1;;5707:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5742:12:0;:23;;-1:-1:-1;;;;;;5742:23:0;-1:-1:-1;;;;;5742:23:0;;;;;-1:-1:-1;;;;5770:12:0;5777:5;-1:-1:-1;5770:12:0;:::i;:::-;-1:-1:-1;5787:6:0;:16;5796:7;5787:6;:16;:::i;:::-;-1:-1:-1;5808:16:0;:31;;;5863:4;5844:25;;;;:10;:25;;;;;;;;:48;;;5902:51;1781:25:1;;;5902:51:0;;1754:18:1;5902:51:0;;;;;;;5958:21;:41;;;6004:19;:37;;;6046:24;:47;;;6098:15;:29;;;6132:80;5982:17;6026:15;6073:20;6116:11;6132:9;:80::i;:::-;4988:1229;;;;;;;;:::o;4125:20::-;;;;;;;:::i;6755:124::-;6821:4;6839:35;6849:10;6861:3;6866:7;6839:9;:35::i;8595:152::-;8644:13;8695:37;8705:4;:19;;;8726:2;8730:1;8695:9;:37::i;8921:146::-;9027:15;;8966:13;;9017:38;;9027:21;;9045:3;9027:21;:::i;4871:111::-;4910:4;:11;;;4909:12;4901:21;;;;;;8016:16;;4935:18;4927:27;;;;;;4959:4;:18;;-1:-1:-1;;4959:18:0;4973:4;4959:18;;;4871:111::o;12786:212::-;-1:-1:-1;;;;;12884:18:0;;;12873:4;12884:18;;;:10;:18;;;;;;;;:38;;;;;;:28;;;;:38;;;;;:48;;;12942:35;1781:25:1;;;12873:4:0;;12884:38;:18;12942:35;;1754:18:1;12942:35:0;;;;;;;;-1:-1:-1;12989:4:0;12786:212;;;;;:::o;19576:1103::-;19672:17;19696:10;19718:12;19709:6;:21;:45;;19748:6;19709:45;;;19733:12;19709:45;19696:58;;19759:10;19795:2;19786:6;:11;:29;;19814:1;19786:29;;;19800:11;19809:2;19800:6;:11;:::i;:::-;19781:35;;:2;:35;:::i;:::-;19772:44;;:6;:44;:::i;:::-;19759:57;;19825:2;19831:1;19825:7;19821:35;;19840:10;;;;;;;;;;;;;-1:-1:-1;;;19840:10:0;;;;;;;;;19821:35;19878:1;19899:2;19906:54;19920:1;19913:4;:8;19906:54;;;19929:10;19937:2;19929:10;;:::i;:::-;;-1:-1:-1;19945:9:0;;;;:::i;:::-;;;;19906:54;;;19981:2;19971:7;:12;:31;;19996:6;:2;20001:1;19996:6;:::i;:::-;19971:31;;;19986:7;19971:31;19964:38;-1:-1:-1;20007:15:0;20033:6;:2;20038:1;20033:6;:::i;:::-;20026:4;:13;:59;;20084:1;20026:59;;;20058:2;20054:1;20042:9;20058:2;20042:4;:9;:::i;:::-;:13;;;;:::i;:::-;:18;:39;;20080:1;20068:9;20075:2;20068:4;:9;:::i;:::-;:13;;;;:::i;:::-;20042:39;;;20063:2;20042:39;20007:79;;20096:9;20091:584;20115:14;20122:7;20115:4;:14;:::i;:::-;20111:1;:18;20091:584;;;20142:12;20161:14;20168:7;20161:4;:14;:::i;:::-;20157:1;:18;:57;;20212:2;20205:1;20194:8;20201:1;20194:4;:8;:::i;:::-;:12;;;;:::i;:::-;20189:18;;:2;:18;:::i;:::-;20183:25;;:2;:25;:::i;:::-;20182:32;;;;:::i;:::-;20157:57;;;20178:1;20157:57;20241:12;;;20251:1;20241:12;;;;;;;;;20142:72;;-1:-1:-1;20220:18:0;;20241:12;;;;;;;;;;;-1:-1:-1;;20220:33:0;-1:-1:-1;20277:16:0;20283:4;20291:2;20277:16;:::i;:::-;20270:24;;20259:5;20265:1;20259:8;;;;;;;;:::i;:::-;;;;:35;-1:-1:-1;;;;;20259:35:0;;;;;;;;;20330:3;20342:5;20313:36;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;20313:36:0;;;;;;;;;;-1:-1:-1;20376:1:0;20364:9;20371:2;20364:4;:9;:::i;:::-;:13;;;;:::i;:::-;20360:1;:17;20356:314;;;20419:1;20406:9;20413:2;20406:4;:9;:::i;:::-;20405:15;;;;:::i;:::-;20400:1;20391:5;:1;20395;20391:5;:::i;:::-;20390:11;;;;:::i;:::-;:30;20386:92;;20460:3;20443:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;20430:40;;20386:92;20356:314;;;20548:1;20544;20527:14;20534:7;20527:4;:14;:::i;:::-;:18;;;;:::i;:::-;:22;;;;:::i;:::-;20522:28;;:2;:28;:::i;:::-;20507:11;20511:7;20507:2;:11;:::i;:::-;20502:16;;:2;:16;:::i;:::-;20501:49;;;;:::i;:::-;20554:1;20501:54;20497:167;;20565:5;;;;20497:167;20605:1;20593:9;20600:2;20593:4;:9;:::i;:::-;:13;;;;:::i;:::-;20588:1;:18;20584:80;;20646:3;20629:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;20616:40;;20584:80;20136:539;;20131:3;;;;;:::i;:::-;;;;20091:584;;;;19691:988;;;;;19576:1103;;;;;:::o;13004:320::-;13086:4;13131:1;13121:7;:11;13113:20;;;;;;13167:7;13147:16;13157:5;-1:-1:-1;;;;;8118:17:0;8097:7;8118:17;;;:10;:17;;;;;:25;;8042:106;13147:16;:27;;13139:36;;;;;;-1:-1:-1;;;;;13181:17:0;;;;;;;:10;:17;;;;;;:36;;;;;;;13223:15;;;;;;;;;;:34;;;;;;13268:29;;;;;;13210:7;1781:25:1;;1769:2;1754:18;;1635:177;9074:3706:0;9226:13;9250:4;9226:29;;9261:13;3805:42;-1:-1:-1;;;;;9277:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9261:30;-1:-1:-1;;;;;;9311:13:0;;;;;;;9297:11;9362:68;9311:13;9397;8016:16;;;7951:86;9397:13;9412:17;9362:26;:68::i;:::-;9330:100;;;3805:42;-1:-1:-1;;;;;9456:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9448:57;;-1:-1:-1;;;9448:57:0;;-1:-1:-1;;;;;16010:15:1;;;9448:57:0;;;15992:34:1;16062:15;;;16042:18;;;16035:43;9499:5:0;16094:18:1;;;16087:49;9448:36:0;;;;;;;15927:18:1;;9448:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9436:9;:69;;-1:-1:-1;;;;;;9436:69:0;-1:-1:-1;;;;;9436:69:0;;;;;;;;;9511:42;;-1:-1:-1;;;9511:42:0;;-1:-1:-1;;;;;287:32:1;;;9511:42:0;;;269:51:1;9511:23:0;;;;;;;242:18:1;;9511:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:19;3805:42;-1:-1:-1;;;;;9597:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9559:63;;9628:44;9637:5;9652:3;9658:13;8016:16;;;7951:86;9658:13;9628:8;:44::i;:::-;;9682:14;9700:68;9727:6;9735:13;8016:16;;;7951:86;9735:13;9750:17;9700:26;:68::i;:::-;9678:90;;;9778:14;9796:66;9823:6;9831:13;8016:16;;;7951:86;9796:66;9774:88;;;9868:27;3745:4;9921:13;8016:16;;;7951:86;9921:13;9898:20;:36;:56;;;;;:::i;:::-;;;-1:-1:-1;9964:23:0;;9960:1291;;10000:15;;9996:581;;10025:3;-1:-1:-1;;;;;10025:8:0;;10034:534;;;;;;;;10078:6;:22;;10095:5;10078:22;;;10087:5;10078:22;-1:-1:-1;;;;;10034:534:0;;;;;10118:6;10117:7;:23;;10135:5;10117:23;;;10127:5;10117:23;-1:-1:-1;;;;;10034:534:0;;;10154:5;10034:534;;;;;;10179:6;:34;;10205:8;10179:34;;;10199:3;10188:8;:14;10179:34;10034:534;;;;;;10234:6;10233:7;:35;;10260:8;10233:35;;;10243:8;10254:3;10243:14;10233:35;10034:534;;;;;;10293:6;:67;;3745:4;10307:33;;;:53;10293:67;;;10302:1;10293:67;10034:534;;;;10386:6;10385:7;:67;;3745:4;10399:33;;;:53;10385:67;;;10395:1;10385:67;10034:534;;;;10473:1;10034:534;;;;10495:1;10034:534;;;;10516:9;7765:12;;-1:-1:-1;;;;;7765:12:0;;7704:78;10516:9;-1:-1:-1;;;;;10034:534:0;;;;;10544:15;10034:534;;;10025:544;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;9996:581;10614:3;-1:-1:-1;;;;;10614:8:0;;10623:562;;;;;;;;10666:6;:22;;10683:5;10666:22;;;10675:5;10666:22;-1:-1:-1;;;;;10623:562:0;;;;;10705:6;10704:7;:23;;10722:5;10704:23;;;10714:5;10704:23;-1:-1:-1;;;;;10623:562:0;;;10740:5;10623:562;;;;;;10764:6;:34;;10790:8;10764:34;;;10784:3;10773:8;:14;10764:34;10623:562;;;;;;10818:6;10817:7;:35;;10844:8;10817:35;;;10827:8;10838:3;10827:14;10817:35;10623:562;;;;;;10876:6;:89;;3745:4;10913:31;;;10890:55;;:75;10876:89;;;10885:1;10876:89;10623:562;;;;10990:6;10989:7;:89;;3745:4;11026:31;;;11003:55;;:75;10989:89;;;10999:1;10989:89;10623:562;;;;11098:1;10623:562;;;;11119:1;10623:562;;;;11139:5;-1:-1:-1;;;;;10623:562:0;;;;;11162:15;10623:562;;;10614:572;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;10584:20:0;10583:603;11204:6;:40;;11230:8;11241:3;11230:14;11204:40;;;11224:3;11213:8;:14;11204:40;11193:51;;9960:1291;11260:15;;11256:591;;11284:3;-1:-1:-1;;;;;11284:8:0;;11293:546;;;;;;;;11336:6;:22;;11353:5;11336:22;;;11345:5;11336:22;-1:-1:-1;;;;;11293:546:0;;;;;11375:6;11374:7;:23;;11392:5;11374:23;;;11384:5;11374:23;-1:-1:-1;;;;;11293:546:0;;;11410:5;11293:546;;;;;;11434:6;:28;;11454:8;11434:28;;;11443:8;11434:28;11293:546;;;;;;11482:6;11481:7;:29;;11502:8;11481:29;;;11491:8;11481:29;11293:546;;;;;;11534:6;:85;;3745:4;11588:11;11565:19;11549:13;8016:16;;;7951:86;11549:13;:35;11548:51;:71;;;;;:::i;:::-;;11534:85;;;11543:1;11534:85;11293:546;;;;11644:6;11643:7;:85;;3745:4;11697:11;11674:19;11658:13;8016:16;;;7951:86;11658:13;:35;11657:51;:71;;;;;:::i;:::-;;11643:85;;;11653:1;11643:85;11293:546;;;;11748:1;11293:546;;;;11769:1;11293:546;;;;11789:9;7765:12;;-1:-1:-1;;;;;7765:12:0;;7704:78;11789:9;-1:-1:-1;;;;;11293:546:0;;;;;11816:15;11293:546;;;11284:556;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;11256:591;11883:3;-1:-1:-1;;;;;11883:8:0;;11892:574;;;;;;;;11934:6;:22;;11951:5;11934:22;;;11943:5;11934:22;-1:-1:-1;;;;;11892:574:0;;;;;11972:6;11971:7;:23;;11989:5;11971:23;;;11981:5;11971:23;-1:-1:-1;;;;;11892:574:0;;;12006:5;11892:574;;;;;;12029:6;:28;;12049:8;12029:28;;;12038:8;12029:28;11892:574;;;;;;12076:6;12075:7;:29;;12096:8;12075:29;;;12085:8;12075:29;11892:574;;;;;;12127:6;:107;;3745:4;12202:11;3745:4;12182:31;12158:19;12142:13;8016:16;;;7951:86;12142:13;:35;12141:73;:93;;;;;:::i;:::-;;12127:107;;;12136:1;12127:107;11892:574;;;;12258:6;12257:7;:107;;3745:4;12332:11;3745:4;12312:31;12288:19;12272:13;8016:16;;;7951:86;12272:13;:35;12271:73;:93;;;;;:::i;:::-;;12257:107;;;12267:1;12257:107;11892:574;;;;12383:1;11892:574;;;;12403:1;11892:574;;;;12422:5;-1:-1:-1;;;;;11892:574:0;;;;;12444:15;11892:574;;;11883:584;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;11853:20:0;11852:615;-1:-1:-1;;;;;12477:13:0;;;:17;12473:298;;3805:42;-1:-1:-1;;;;;12503:23:0;;12533:5;-1:-1:-1;;;;;12533:13:0;;12548:215;;;;;;;;12595:5;-1:-1:-1;;;;;12548:215:0;;;;;12618:5;-1:-1:-1;;;;;12548:215:0;;;;;12636:5;12548:215;;;;;;12660:9;7765:12;;-1:-1:-1;;;;;7765:12:0;;7704:78;12660:9;-1:-1:-1;;;;;12548:215:0;;;;;12687:13;;;;12548:215;;;;;;;;-1:-1:-1;12548:215:0;;;;;;;;;;;;;;;12503:261;;-1:-1:-1;;;;;;12503:261:0;;;;;;;18456:13:1;;18452:22;;12503:261:0;;;18434:41:1;18523:17;;;18517:24;18513:33;;18491:20;;;18484:63;18595:17;;18589:24;18615:8;18585:39;18563:20;;;18556:69;18673:17;;;18667:24;18663:33;;18641:20;;;18634:63;18753:4;18741:17;;18735:24;18713:20;;;18706:54;18414:3;18804:17;;18798:24;18776:20;;;18769:54;18883:4;18871:17;;;18865:24;18861:33;;;18839:20;;;18832:63;18368:19;;12503:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12473:298;9210:3566;;;;;;;;9074:3706;;;;:::o;19218:353::-;19322:13;19337:10;19354:17;19382:72;19428:6;:24;;19447:5;19428:24;;;19437:7;19428:24;19399:6;19398:7;:25;;19418:5;19398:25;;;19408:7;19398:25;19388:36;;-1:-1:-1;;;19388:36:0;:::i;:::-;:65;;;;:::i;:::-;19382:5;:72::i;:::-;19354:101;;19467:30;19487:9;19467:19;:30::i;:::-;19460:37;-1:-1:-1;19517:10:0;19524:3;19460:37;19517:10;:::i;:::-;19509:19;;:4;:19;:::i;:::-;19502:26;;19541:25;19561:4;19541:19;:25::i;:::-;19533:33;;19349:222;19218:353;;;;;;:::o;18982:231::-;19085:6;19095:1;19090;19085:6;;19084:12;19119:85;19133:6;19126:4;:13;19119:85;;;19157:4;19148:13;;19196:1;19188:4;19181;19176:2;:9;;;;;:::i;:::-;;:16;19175:22;;;;;:::i;:::-;;19168:29;;19119:85;;;19053:156;18982:231;;;:::o;15551:3426::-;15625:10;3991;-1:-1:-1;;;;;15666:30:0;;;;;;:63;;-1:-1:-1;4048:49:0;-1:-1:-1;;;;;15700:29:0;;;15666:63;15658:77;;;;-1:-1:-1;;;15658:77:0;;19666:2:1;15658:77:0;;;19648:21:1;19705:1;19685:18;;;19678:29;-1:-1:-1;;;19723:18:1;;;19716:31;19764:18;;15658:77:0;;;;;;;;;-1:-1:-1;;;;;15782:2:0;15757:27;;;;-1:-1:-1;;;;;15870:41:0;;15867:1;15863:49;15946:9;;;16004:18;15998:25;;15995:1;15991:33;16058:9;;;16116:10;16110:17;;16107:1;16103:25;16162:9;;;16220:6;16214:13;;16211:1;16207:21;16262:9;;;16320:4;16314:11;;16311:1;16307:19;;;16360:9;;;16418:3;16412:10;;16409:1;16405:18;16457:9;;;16509:10;;;16506:1;16502:18;;;16554:9;;;;16599:10;;;16037;;16141;;;16241;;;16339;16436;;;16533;16622;16656:3;16649:10;;16645:75;;16681:3;16675;:9;16665:5;:20;;16661:24;;16645:75;;;16716:3;16710;:9;16700:5;:20;;16696:24;;16645:75;16806:9;;;16801:3;16797:19;;;16831:11;;;;16889:9;;;;16939;;16930:19;;;16964:11;;;17022:9;17072;;17063:19;;;17097:11;;;17155:9;17205;;17196:19;;;17230:11;;;17288:9;17338;;17329:19;;;17363:11;;;17421:9;17471;;17462:19;;;17496:11;;;17554:9;17604;;17595:19;;;17629:11;;;17687:9;17737;;17728:19;;;17762:11;;;17820:9;17870;;17861:19;;;17895:11;;;17953:9;18003;;17994:19;;;18028:11;;;18086:9;18136;;18127:19;;;18161:11;;;18219:9;18269;;18260:19;;;18294:11;;;18352:9;18402;;18393:19;;;18427:11;;;;18485:9;;;;18535;;18526:19;;;;;16806:9;-1:-1:-1;;16744:17:0;;16766:2;16743:25;16867:10;;;;;;;16857:21;17000:10;;;;;;;16990:21;;;;17133:10;;;;;;;17123:21;;;;17266:10;;;;;;;17256:21;;;;17399:10;;;;;;;17389:21;;;;17532:10;;;;;;;17522:21;;;;17665:10;;;;;;;17655:21;17798:10;;;;;;;17788:21;17931:10;;;;;;;17921:21;18064:10;;;;;;;18054:21;18197:10;;;;;;;18187:21;18330:10;;;;;;;18320:21;18463:10;;;;;;;18453:21;18596:10;;;;;;;18586:21;18651:24;18643:32;;-1:-1:-1;;18706:53:0;;16758:3;18705:62;;;;18812:39;18796:55;;18795:64;;18875:17;;;;;;;;;:92;;18936:12;-1:-1:-1;;;;;18905:43:0;:27;18925:6;18905:19;:27::i;:::-;-1:-1:-1;;;;;18905:43:0;;;:62;;18960:7;18875:92;;18905:62;18951:6;18875:92;;;18895:7;18875:92;18868:99;15551:3426;-1:-1:-1;;;;;;;;;15551:3426:0:o;13331:2215::-;13395:20;13438:15;13463:1;13456:4;:8;;;:57;;13507:4;13500:12;;13456:57;;;13483:4;13476:12;;13475:13;;13456:57;13438:75;-1:-1:-1;3935:9:0;13527:36;;;13519:50;;;;-1:-1:-1;;;13519:50:0;;19995:2:1;13519:50:0;;;19977:21:1;20034:1;20014:18;;;20007:29;-1:-1:-1;;;20052:18:1;;;20045:31;20093:18;;13519:50:0;19793:324:1;13519:50:0;13577:13;13593:7;13603:3;13593:13;13610:1;13593:18;:93;;-1:-1:-1;;;13593:93:0;;;13614:34;13593:93;13577:109;;;-1:-1:-1;13706:3:0;13696:13;;:18;13692:83;;13733:34;13725:42;13772:3;13724:51;13692:83;13795:3;13785:13;;:18;13781:83;;13822:34;13814:42;13861:3;13813:51;13781:83;13884:3;13874:13;;:18;13870:83;;13911:34;13903:42;13950:3;13902:51;13870:83;13973:4;13963:14;;:19;13959:84;;14001:34;13993:42;14040:3;13992:51;13959:84;14063:4;14053:14;;:19;14049:84;;14091:34;14083:42;14130:3;14082:51;14049:84;14153:4;14143:14;;:19;14139:84;;14181:34;14173:42;14220:3;14172:51;14139:84;14243:4;14233:14;;:19;14229:84;;14271:34;14263:42;14310:3;14262:51;14229:84;14333:5;14323:15;;:20;14319:85;;14362:34;14354:42;14401:3;14353:51;14319:85;14424:5;14414:15;;:20;14410:85;;14453:34;14445:42;14492:3;14444:51;14410:85;14515:5;14505:15;;:20;14501:85;;14544:34;14536:42;14583:3;14535:51;14501:85;14606:5;14596:15;;:20;14592:85;;14635:34;14627:42;14674:3;14626:51;14592:85;14697:6;14687:16;;:21;14683:86;;14727:34;14719:42;14766:3;14718:51;14683:86;14789:6;14779:16;;:21;14775:86;;14819:34;14811:42;14858:3;14810:51;14775:86;14881:6;14871:16;;:21;14867:86;;14911:34;14903:42;14950:3;14902:51;14867:86;14973:6;14963:16;;:21;14959:86;;15003:34;14995:42;15042:3;14994:51;14959:86;15065:7;15055:17;;:22;15051:86;;15096:33;15088:41;15134:3;15087:50;15051:86;15157:7;15147:17;;:22;15143:85;;15188:32;15180:40;15225:3;15179:49;15143:85;15248:7;15238:17;;:22;15234:83;;15279:30;15271:38;15314:3;15270:47;15234:83;15337:7;15327:17;;:22;15323:78;;15368:25;15360:33;15398:3;15359:42;15323:78;15420:1;15413:4;:8;;;15409:47;;;15451:5;-1:-1:-1;;15431:25:0;;;;;:::i;:::-;;15423:33;;15409:47;15513:7;15504:5;:17;:22;:30;;15533:1;15504:30;;;15529:1;15504:30;15487:48;;15497:2;15488:5;:11;;15487:48;15464:72;;13422:2120;;13331:2215;;;:::o;-1:-1:-1:-;;;;;;;;:::o;331:250:1:-;416:1;426:113;440:6;437:1;434:13;426:113;;;516:11;;;510:18;497:11;;;490:39;462:2;455:10;426:113;;;-1:-1:-1;;573:1:1;555:16;;548:27;331:250::o;586:396::-;735:2;724:9;717:21;698:4;767:6;761:13;810:6;805:2;794:9;790:18;783:34;826:79;898:6;893:2;882:9;878:18;873:2;865:6;861:15;826:79;:::i;:::-;966:2;945:15;-1:-1:-1;;941:29:1;926:45;;;;973:2;922:54;;586:396;-1:-1:-1;;586:396:1:o;987:131::-;-1:-1:-1;;;;;1062:31:1;;1052:42;;1042:70;;1108:1;1105;1098:12;1042:70;987:131;:::o;1123:315::-;1191:6;1199;1252:2;1240:9;1231:7;1227:23;1223:32;1220:52;;;1268:1;1265;1258:12;1220:52;1307:9;1294:23;1326:31;1351:5;1326:31;:::i;:::-;1376:5;1428:2;1413:18;;;;1400:32;;-1:-1:-1;;;1123:315:1:o;1817:456::-;1894:6;1902;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;2018:9;2005:23;2037:31;2062:5;2037:31;:::i;:::-;2087:5;-1:-1:-1;2144:2:1;2129:18;;2116:32;2157:33;2116:32;2157:33;:::i;:::-;1817:456;;2209:7;;-1:-1:-1;;;2263:2:1;2248:18;;;;2235:32;;1817:456::o;2467:794::-;2555:6;2563;2571;2579;2632:2;2620:9;2611:7;2607:23;2603:32;2600:52;;;2648:1;2645;2638:12;2600:52;2687:9;2674:23;2706:31;2731:5;2706:31;:::i;:::-;2756:5;-1:-1:-1;2808:2:1;2793:18;;2780:32;;-1:-1:-1;2863:2:1;2848:18;;2835:32;2886:18;2916:14;;;2913:34;;;2943:1;2940;2933:12;2913:34;2981:6;2970:9;2966:22;2956:32;;3026:7;3019:4;3015:2;3011:13;3007:27;2997:55;;3048:1;3045;3038:12;2997:55;3088:2;3075:16;3114:2;3106:6;3103:14;3100:34;;;3130:1;3127;3120:12;3100:34;3175:7;3170:2;3161:6;3157:2;3153:15;3149:24;3146:37;3143:57;;;3196:1;3193;3186:12;3143:57;2467:794;;;;-1:-1:-1;;3227:2:1;3219:11;;-1:-1:-1;;;2467:794:1:o;3266:247::-;3325:6;3378:2;3366:9;3357:7;3353:23;3349:32;3346:52;;;3394:1;3391;3384:12;3346:52;3433:9;3420:23;3452:31;3477:5;3452:31;:::i;3518:127::-;3579:10;3574:3;3570:20;3567:1;3560:31;3610:4;3607:1;3600:15;3634:4;3631:1;3624:15;3650:719;3693:5;3746:3;3739:4;3731:6;3727:17;3723:27;3713:55;;3764:1;3761;3754:12;3713:55;3800:6;3787:20;3826:18;3863:2;3859;3856:10;3853:36;;;3869:18;;:::i;:::-;3944:2;3938:9;3912:2;3998:13;;-1:-1:-1;;3994:22:1;;;4018:2;3990:31;3986:40;3974:53;;;4042:18;;;4062:22;;;4039:46;4036:72;;;4088:18;;:::i;:::-;4128:10;4124:2;4117:22;4163:2;4155:6;4148:18;4209:3;4202:4;4197:2;4189:6;4185:15;4181:26;4178:35;4175:55;;;4226:1;4223;4216:12;4175:55;4290:2;4283:4;4275:6;4271:17;4264:4;4256:6;4252:17;4239:54;4337:1;4330:4;4325:2;4317:6;4313:15;4309:26;4302:37;4357:6;4348:15;;;;;;3650:719;;;;:::o;4374:1023::-;4516:6;4524;4532;4540;4548;4556;4564;4572;4625:3;4613:9;4604:7;4600:23;4596:33;4593:53;;;4642:1;4639;4632:12;4593:53;4681:9;4668:23;4700:31;4725:5;4700:31;:::i;:::-;4750:5;-1:-1:-1;4806:2:1;4791:18;;4778:32;4829:18;4859:14;;;4856:34;;;4886:1;4883;4876:12;4856:34;4909:50;4951:7;4942:6;4931:9;4927:22;4909:50;:::i;:::-;4899:60;;5012:2;5001:9;4997:18;4984:32;4968:48;;5041:2;5031:8;5028:16;5025:36;;;5057:1;5054;5047:12;5025:36;;5080:52;5124:7;5113:8;5102:9;5098:24;5080:52;:::i;:::-;4374:1023;;;;-1:-1:-1;5070:62:1;;5179:2;5164:18;;5151:32;;-1:-1:-1;5230:3:1;5215:19;;5202:33;;5282:3;5267:19;;5254:33;;-1:-1:-1;5334:3:1;5319:19;;5306:33;;-1:-1:-1;5386:3:1;5371:19;;;5358:33;;-1:-1:-1;4374:1023:1;-1:-1:-1;;;4374:1023:1:o;5655:388::-;5723:6;5731;5784:2;5772:9;5763:7;5759:23;5755:32;5752:52;;;5800:1;5797;5790:12;5752:52;5839:9;5826:23;5858:31;5883:5;5858:31;:::i;:::-;5908:5;-1:-1:-1;5965:2:1;5950:18;;5937:32;5978:33;5937:32;5978:33;:::i;:::-;6030:7;6020:17;;;5655:388;;;;;:::o;6048:380::-;6127:1;6123:12;;;;6170;;;6191:61;;6245:4;6237:6;6233:17;6223:27;;6191:61;6298:2;6290:6;6287:14;6267:18;6264:38;6261:161;;6344:10;6339:3;6335:20;6332:1;6325:31;6379:4;6376:1;6369:15;6407:4;6404:1;6397:15;6433:127;6494:10;6489:3;6485:20;6482:1;6475:31;6525:4;6522:1;6515:15;6549:4;6546:1;6539:15;6565:168;6638:9;;;6669;;6686:15;;;6680:22;;6666:37;6656:71;;6707:18;;:::i;6738:452::-;6970:3;7008:6;7002:13;7024:66;7083:6;7078:3;7071:4;7063:6;7059:17;7024:66;:::i;:::-;-1:-1:-1;;;7112:16:1;;7137:18;;;-1:-1:-1;7182:1:1;7171:13;;6738:452;-1:-1:-1;6738:452:1:o;7195:455::-;7427:3;7465:6;7459:13;7481:66;7540:6;7535:3;7528:4;7520:6;7516:17;7481:66;:::i;:::-;-1:-1:-1;;;7569:16:1;;7594:21;;;-1:-1:-1;7642:1:1;7631:13;;7195:455;-1:-1:-1;7195:455:1:o;7655:559::-;-1:-1:-1;;;;;7868:32:1;;7850:51;;7932:2;7917:18;;7910:34;;;7980:2;7975;7960:18;;7953:30;;;7999:18;;7992:34;;;8019:6;8069;8063:3;8048:19;;8035:49;8134:1;8104:22;;;8128:3;8100:32;;;8093:43;;;;8197:2;8176:15;;;-1:-1:-1;;8172:29:1;8157:45;8153:55;;7655:559;-1:-1:-1;;;7655:559:1:o;8219:277::-;8286:6;8339:2;8327:9;8318:7;8314:23;8310:32;8307:52;;;8355:1;8352;8345:12;8307:52;8387:9;8381:16;8440:5;8433:13;8426:21;8419:5;8416:32;8406:60;;8462:1;8459;8452:12;8501:251;8571:6;8624:2;8612:9;8603:7;8599:23;8595:32;8592:52;;;8640:1;8637;8630:12;8592:52;8672:9;8666:16;8691:31;8716:5;8691:31;:::i;8757:572::-;8982:13;;8964:32;;9056:4;9044:17;;;9038:24;-1:-1:-1;;;;;9034:50:1;9012:20;;;9005:80;9132:4;9120:17;;;9114:24;-1:-1:-1;;;;;9229:21:1;;;9207:20;;;9200:51;;;;9311:4;9299:17;;;9293:24;9289:33;9267:20;;;9260:63;;;;8951:3;8936:19;;8757:572::o;9334:245::-;9413:6;9421;9474:2;9462:9;9453:7;9449:23;9445:32;9442:52;;;9490:1;9487;9480:12;9442:52;-1:-1:-1;;9513:16:1;;9569:2;9554:18;;;9548:25;9513:16;;9548:25;;-1:-1:-1;9334:245:1:o;9710:545::-;9812:2;9807:3;9804:11;9801:448;;;9848:1;9873:5;9869:2;9862:17;9918:4;9914:2;9904:19;9988:2;9976:10;9972:19;9969:1;9965:27;9959:4;9955:38;10024:4;10012:10;10009:20;10006:47;;;-1:-1:-1;10047:4:1;10006:47;10102:2;10097:3;10093:12;10090:1;10086:20;10080:4;10076:31;10066:41;;10157:82;10175:2;10168:5;10165:13;10157:82;;;10220:17;;;10201:1;10190:13;10157:82;;;10161:3;;;9801:448;9710:545;;;:::o;10431:1352::-;10557:3;10551:10;10584:18;10576:6;10573:30;10570:56;;;10606:18;;:::i;:::-;10635:97;10725:6;10685:38;10717:4;10711:11;10685:38;:::i;:::-;10679:4;10635:97;:::i;:::-;10787:4;;10851:2;10840:14;;10868:1;10863:663;;;;11570:1;11587:6;11584:89;;;-1:-1:-1;11639:19:1;;;11633:26;11584:89;-1:-1:-1;;10388:1:1;10384:11;;;10380:24;10376:29;10366:40;10412:1;10408:11;;;10363:57;11686:81;;10833:944;;10863:663;9657:1;9650:14;;;9694:4;9681:18;;-1:-1:-1;;10899:20:1;;;11017:236;11031:7;11028:1;11025:14;11017:236;;;11120:19;;;11114:26;11099:42;;11212:27;;;;11180:1;11168:14;;;;11047:19;;11017:236;;;11021:3;11281:6;11272:7;11269:19;11266:201;;;11342:19;;;11336:26;-1:-1:-1;;11425:1:1;11421:14;;;11437:3;11417:24;11413:37;11409:42;11394:58;11379:74;;11266:201;-1:-1:-1;;;;;11513:1:1;11497:14;;;11493:22;11480:36;;-1:-1:-1;10431:1352:1:o;11788:128::-;11855:9;;;11876:11;;;11873:37;;;11890:18;;:::i;11921:422::-;12010:1;12053:5;12010:1;12067:270;12088:7;12078:8;12075:21;12067:270;;;12147:4;12143:1;12139:6;12135:17;12129:4;12126:27;12123:53;;;12156:18;;:::i;:::-;12206:7;12196:8;12192:22;12189:55;;;12226:16;;;;12189:55;12305:22;;;;12265:15;;;;12067:270;;;12071:3;11921:422;;;;;:::o;12348:806::-;12397:5;12427:8;12417:80;;-1:-1:-1;12468:1:1;12482:5;;12417:80;12516:4;12506:76;;-1:-1:-1;12553:1:1;12567:5;;12506:76;12598:4;12616:1;12611:59;;;;12684:1;12679:130;;;;12591:218;;12611:59;12641:1;12632:10;;12655:5;;;12679:130;12716:3;12706:8;12703:17;12700:43;;;12723:18;;:::i;:::-;-1:-1:-1;;12779:1:1;12765:16;;12794:5;;12591:218;;12893:2;12883:8;12880:16;12874:3;12868:4;12865:13;12861:36;12855:2;12845:8;12842:16;12837:2;12831:4;12828:12;12824:35;12821:77;12818:159;;;-1:-1:-1;12930:19:1;;;12962:5;;12818:159;13009:34;13034:8;13028:4;13009:34;:::i;:::-;13079:6;13075:1;13071:6;13067:19;13058:7;13055:32;13052:58;;;13090:18;;:::i;:::-;13128:20;;12348:806;-1:-1:-1;;;12348:806:1:o;13159:131::-;13219:5;13248:36;13275:8;13269:4;13248:36;:::i;13295:127::-;13356:10;13351:3;13347:20;13344:1;13337:31;13387:4;13384:1;13377:15;13411:4;13408:1;13401:15;13427:120;13467:1;13493;13483:35;;13498:18;;:::i;:::-;-1:-1:-1;13532:9:1;;13427:120::o;13552:135::-;13591:3;13612:17;;;13609:43;;13632:18;;:::i;:::-;-1:-1:-1;13679:1:1;13668:13;;13552:135::o;13692:125::-;13757:9;;;13778:10;;;13775:36;;;13791:18;;:::i;13822:112::-;13854:1;13880;13870:35;;13885:18;;:::i;:::-;-1:-1:-1;13919:9:1;;13822:112::o;13939:148::-;14027:4;14006:12;;;14020;;;14002:31;;14045:13;;14042:39;;;14061:18;;:::i;14092:127::-;14153:10;14148:3;14144:20;14141:1;14134:31;14184:4;14181:1;14174:15;14208:4;14205:1;14198:15;14224:496;14403:3;14441:6;14435:13;14457:66;14516:6;14511:3;14504:4;14496:6;14492:17;14457:66;:::i;:::-;14586:13;;14545:16;;;;14608:70;14586:13;14545:16;14655:4;14643:17;;14608:70;:::i;:::-;14694:20;;14224:496;-1:-1:-1;;;;14224:496:1:o;14725:452::-;14957:3;14995:6;14989:13;15011:66;15070:6;15065:3;15058:4;15050:6;15046:17;15011:66;:::i;:::-;-1:-1:-1;;;15099:16:1;;15124:18;;;-1:-1:-1;15169:1:1;15158:13;;14725:452;-1:-1:-1;14725:452:1:o;15182:::-;15414:3;15452:6;15446:13;15468:66;15527:6;15522:3;15515:4;15507:6;15503:17;15468:66;:::i;:::-;-1:-1:-1;;;15556:16:1;;15581:18;;;-1:-1:-1;15626:1:1;15615:13;;15182:452;-1:-1:-1;15182:452:1:o;16451:1223::-;16669:13;;-1:-1:-1;;;;;80:31:1;68:44;;16637:3;16622:19;;16741:4;16733:6;16729:17;16723:24;16756:54;16804:4;16793:9;16789:20;16775:12;-1:-1:-1;;;;;80:31:1;68:44;;14:104;16756:54;;16859:4;16851:6;16847:17;16841:24;16874:60;16928:4;16917:9;16913:20;16897:14;15720:8;15709:20;15697:33;;15639:97;16874:60;;16983:4;16975:6;16971:17;16965:24;16998:54;17046:4;17035:9;17031:20;17015:14;16430:1;16419:20;16407:33;;16355:91;16998:54;;17101:4;17093:6;17089:17;17083:24;17116:54;17164:4;17153:9;17149:20;17133:14;16430:1;16419:20;16407:33;;16355:91;17116:54;;17226:4;17218:6;17214:17;17208:24;17201:4;17190:9;17186:20;17179:54;17289:4;17281:6;17277:17;17271:24;17264:4;17253:9;17249:20;17242:54;17352:4;17344:6;17340:17;17334:24;17327:4;17316:9;17312:20;17305:54;17378:6;17438:2;17430:6;17426:15;17420:22;17415:2;17404:9;17400:18;17393:50;;17462:6;17517:2;17509:6;17505:15;17499:22;17530:54;17580:2;17569:9;17565:18;17549:14;-1:-1:-1;;;;;80:31:1;68:44;;14:104;17530:54;-1:-1:-1;;17603:6:1;17651:15;;;17645:22;17625:18;;;;17618:50;16451:1223;:::o;17679:489::-;17776:6;17784;17792;17800;17853:3;17841:9;17832:7;17828:23;17824:33;17821:53;;;17870:1;17867;17860:12;17821:53;17899:9;17893:16;17883:26;;17952:2;17941:9;17937:18;17931:25;-1:-1:-1;;;;;17989:5:1;17985:46;17978:5;17975:57;17965:85;;18046:1;18043;18036:12;17965:85;18114:2;18099:18;;18093:25;18158:2;18143:18;;;18137:25;17679:489;;18069:5;;-1:-1:-1;17679:489:1;-1:-1:-1;;;17679:489:1:o;18906:184::-;18976:6;19029:2;19017:9;19008:7;19004:23;19000:32;18997:52;;;19045:1;19042;19035:12;18997:52;-1:-1:-1;19068:16:1;;18906:184;-1:-1:-1;18906:184:1:o;19095:166::-;19125:1;19166;19163;19152:16;19187:3;19177:37;;19194:18;;:::i;:::-;19251:3;19247:1;19244;19233:16;19228:27;19223:32;;;19095:166;;;;:::o;19266:193::-;19364:1;19353:16;;;19335;;;;19331:39;-1:-1:-1;;19385:23:1;;19420:8;19410:19;;19382:48;19379:74;;;19433:18;;:::i

Swarm Source

ipfs://d15a9c359bb5a5fd7a5ffce6c29d3ea55d4d85e9848f95dfc71def0599c5044e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.