BscScan - Sponsored slots available. Book your slot here!
BEP-20
Decentralized Web
Overview
Max Total Supply
100,000,000INFTY3
Holders
1,052 ( 0.190%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
4,020.155884313066071491 INFTY3Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Web3Infinity
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/** *Submitted for verification at BscScan.com on 2024-06-21 */ /** Token Name : Web3 Infinity Website : https://web3infinity.io/ Telegram : https://t.me/web3_infinity Twitter : https://twitter.com/_web3infinity LIQ+REW+RSQ = PQS */ pragma solidity ^0.8.26; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address public _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Web3Infinity is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 public BuyIndex; uint256 public SellIndex; uint256 public TotalIndex; uint256 public CurrentIndex; uint256 public OnChange; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public _maxTxAmount = 1000000 * 10**18; string private _name = "Web3 Infinity"; string private _symbol = "INFTY3"; uint8 private _decimals = 18; uint256 public _taxFee = 10; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 5; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; uint256 private numTokensSellToAddToLiquidity = 500000 * 10**18; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; event Purchase(address indexed to, uint256 amount); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _owner = _msgSender(); _rOwned[_owner] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner, death address and this contract from fee _isExcludedFromFee[_owner] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0),_owner , _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function withdrawBNB(uint256 amount) external onlyOwner { uint256 contractBalance = address(this).balance; require(amount <= contractBalance, "Insufficient BNB balance in the contract"); (bool success,) = payable(msg.sender).call{value: amount}(""); require(success, "BNB withdrawal failed"); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { require(taxFee <= 70, "Fee too high."); require(taxFee >= 1, "Fee too low."); _taxFee = taxFee; } function setLiquidityPercent(uint256 lFee) external onlyOwner() { _liquidityFee = lFee; } receive() external payable { } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()){ require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");} // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee){ removeAllFee(); } _transferStandard(sender, recipient, amount); if(!takeFee){ restoreAllFee(); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } //Call this function with true, before presale and false after presale and LQ is added on PCS. function setPresaleState(bool presale) external onlyOwner() { if (presale) { _taxFee = 0; _previousTaxFee = _taxFee; inSwapAndLiquify = false; emit SwapAndLiquifyEnabledUpdated(false); } else { _taxFee = 10; _previousTaxFee = _taxFee; inSwapAndLiquify = true; emit SwapAndLiquifyEnabledUpdated(true); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Purchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BuyIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CurrentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OnChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TotalIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lFee","type":"uint256"}],"name":"setLiquidityPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"presale","type":"bool"}],"name":"setPresaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526a52b7d2dcc80cd2e4000000600e55600e545f196100229190610544565b5f1961002e91906105a1565b600f5569d3c21bcecceda10000006011556040518060400160405280600d81526020017f5765623320496e66696e69747900000000000000000000000000000000000000815250601290816100839190610805565b506040518060400160405280600681526020017f494e465459330000000000000000000000000000000000000000000000000000815250601390816100c89190610805565b50601260145f6101000a81548160ff021916908360ff160217905550600a60155560155460165560056017556017546018556969e10de76676d08000006019556001601a60016101000a81548160ff02191690831515021790555034801561012e575f80fd5b5061013d61050760201b60201c565b5f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f5460035f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f7310ed43c718714eb63d5aa57b78b54704e256024e90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610240573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102649190610932565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ed9190610932565b6040518363ffffffff1660e01b815260040161030a92919061096c565b6020604051808303815f875af1158015610326573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061034a9190610932565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160065f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e546040516104f991906109a2565b60405180910390a3506109bb565b5f33905090565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61054e8261050e565b91506105598361050e565b92508261056957610568610517565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6105ab8261050e565b91506105b68361050e565b92508282039050818111156105ce576105cd610574565b5b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061064f57607f821691505b6020821081036106625761066161060b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610689565b6106ce8683610689565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6107096107046106ff8461050e565b6106e6565b61050e565b9050919050565b5f819050919050565b610722836106ef565b61073661072e82610710565b848454610695565b825550505050565b5f90565b61074a61073e565b610755818484610719565b505050565b5b818110156107785761076d5f82610742565b60018101905061075b565b5050565b601f8211156107bd5761078e81610668565b6107978461067a565b810160208510156107a6578190505b6107ba6107b28561067a565b83018261075a565b50505b505050565b5f82821c905092915050565b5f6107dd5f19846008026107c2565b1980831691505092915050565b5f6107f583836107ce565b9150826002028217905092915050565b61080e826105d4565b67ffffffffffffffff811115610827576108266105de565b5b6108318254610638565b61083c82828561077c565b5f60209050601f83116001811461086d575f841561085b578287015190505b61086585826107ea565b8655506108cc565b601f19841661087b86610668565b5f5b828110156108a25784890151825560018201915060208501945060208101905061087d565b868310156108bf57848901516108bb601f8916826107ce565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610901826108d8565b9050919050565b610911816108f7565b811461091b575f80fd5b50565b5f8151905061092c81610908565b92915050565b5f60208284031215610947576109466108d4565b5b5f6109548482850161091e565b91505092915050565b610966816108f7565b82525050565b5f60408201905061097f5f83018561095d565b61098c602083018461095d565b9392505050565b61099c8161050e565b82525050565b5f6020820190506109b55f830184610993565b92915050565b60805160a051614a6c610a065f395f81816114b6015261285101525f8181610d3301528181613096015281816131750152818161319c0152818161323201526132590152614a6c5ff3fe608060405260043610610254575f3560e01c806352390c021161013857806395d89b41116100b5578063b6c5232411610079578063b6c52324146108c7578063bce4d6ae146108f1578063dd46706414610919578063dd62ed3e14610941578063ea2f0b371461097d578063f2fde38b146109a55761025b565b806395d89b41146107e5578063a457c2d71461080f578063a69df4b51461084b578063a9059cbb14610861578063b2bdfa7b1461089d5761025b565b8063715018a6116100fc578063715018a6146107155780637d1db4a51461072b57806388f82020146107555780638da5cb5b14610791578063956f1677146107bb5761025b565b806352390c02146106215780635342acb4146106495780636bc87c3a146106855780636c782e7a146106af57806370a08231146106d95761025b565b80632d838119116101d15780633bbaa223116101955780633bbaa2231461051557806340328eb41461053f578063437823ec146105695780634549b0391461059157806349bd5a5e146105cd5780634a74bb02146105f75761025b565b80632d83811914610421578063313ce5671461045d5780633685d4191461048757806339509351146104af5780633b124fe7146104eb5761025b565b80631694505e116102185780631694505e1461033f57806318160ddd146103695780631a3f0cda146103935780631b6187c4146103bb57806323b872dd146103e55761025b565b8063061c82d01461025f57806306fdde0314610287578063095ea7b3146102b1578063127f4b2e146102ed57806313114a9d146103155761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b50610285600480360381019061028091906137f0565b6109cd565b005b348015610292575f80fd5b5061029b610af3565b6040516102a8919061388b565b60405180910390f35b3480156102bc575f80fd5b506102d760048036038101906102d29190613905565b610b83565b6040516102e4919061395d565b60405180910390f35b3480156102f8575f80fd5b50610313600480360381019061030e91906137f0565b610ba0565b005b348015610320575f80fd5b50610329610d28565b6040516103369190613985565b60405180910390f35b34801561034a575f80fd5b50610353610d31565b60405161036091906139f9565b60405180910390f35b348015610374575f80fd5b5061037d610d55565b60405161038a9190613985565b60405180910390f35b34801561039e575f80fd5b506103b960048036038101906103b491906137f0565b610d5e565b005b3480156103c6575f80fd5b506103cf610dfc565b6040516103dc9190613985565b60405180910390f35b3480156103f0575f80fd5b5061040b60048036038101906104069190613a12565b610e02565b604051610418919061395d565b60405180910390f35b34801561042c575f80fd5b50610447600480360381019061044291906137f0565b610ed6565b6040516104549190613985565b60405180910390f35b348015610468575f80fd5b50610471610f42565b60405161047e9190613a7d565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a89190613a96565b610f57565b005b3480156104ba575f80fd5b506104d560048036038101906104d09190613905565b611287565b6040516104e2919061395d565b60405180910390f35b3480156104f6575f80fd5b506104ff611335565b60405161050c9190613985565b60405180910390f35b348015610520575f80fd5b5061052961133b565b6040516105369190613985565b60405180910390f35b34801561054a575f80fd5b50610553611341565b6040516105609190613985565b60405180910390f35b348015610574575f80fd5b5061058f600480360381019061058a9190613a96565b611347565b005b34801561059c575f80fd5b506105b760048036038101906105b29190613aeb565b611433565b6040516105c49190613985565b60405180910390f35b3480156105d8575f80fd5b506105e16114b4565b6040516105ee9190613b38565b60405180910390f35b348015610602575f80fd5b5061060b6114d8565b604051610618919061395d565b60405180910390f35b34801561062c575f80fd5b5061064760048036038101906106429190613a96565b6114eb565b005b348015610654575f80fd5b5061066f600480360381019061066a9190613a96565b61178e565b60405161067c919061395d565b60405180910390f35b348015610690575f80fd5b506106996117e0565b6040516106a69190613985565b60405180910390f35b3480156106ba575f80fd5b506106c36117e6565b6040516106d09190613985565b60405180910390f35b3480156106e4575f80fd5b506106ff60048036038101906106fa9190613a96565b6117ec565b60405161070c9190613985565b60405180910390f35b348015610720575f80fd5b506107296118cf565b005b348015610736575f80fd5b5061073f611a1d565b60405161074c9190613985565b60405180910390f35b348015610760575f80fd5b5061077b60048036038101906107769190613a96565b611a23565b604051610788919061395d565b60405180910390f35b34801561079c575f80fd5b506107a5611a75565b6040516107b29190613b38565b60405180910390f35b3480156107c6575f80fd5b506107cf611a9c565b6040516107dc9190613985565b60405180910390f35b3480156107f0575f80fd5b506107f9611aa2565b604051610806919061388b565b60405180910390f35b34801561081a575f80fd5b5061083560048036038101906108309190613905565b611b32565b604051610842919061395d565b60405180910390f35b348015610856575f80fd5b5061085f611bfa565b005b34801561086c575f80fd5b5061088760048036038101906108829190613905565b611dc9565b604051610894919061395d565b60405180910390f35b3480156108a8575f80fd5b506108b1611de6565b6040516108be9190613b38565b60405180910390f35b3480156108d2575f80fd5b506108db611e09565b6040516108e89190613985565b60405180910390f35b3480156108fc575f80fd5b5061091760048036038101906109129190613b51565b611e12565b005b348015610924575f80fd5b5061093f600480360381019061093a91906137f0565b611f78565b005b34801561094c575f80fd5b5061096760048036038101906109629190613b7c565b612138565b6040516109749190613985565b60405180910390f35b348015610988575f80fd5b506109a3600480360381019061099e9190613a96565b6121ba565b005b3480156109b0575f80fd5b506109cb60048036038101906109c69190613a96565b6122a5565b005b6109d5612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5890613c04565b60405180910390fd5b6046811115610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613c6c565b60405180910390fd5b6001811015610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613cd4565b60405180910390fd5b8060158190555050565b606060128054610b0290613d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2e90613d1f565b8015610b795780601f10610b5057610100808354040283529160200191610b79565b820191905f5260205f20905b815481529060010190602001808311610b5c57829003601f168201915b5050505050905090565b5f610b96610b8f612462565b8484612469565b6001905092915050565b610ba8612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b90613c04565b60405180910390fd5b5f47905080821115610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290613dbf565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1683604051610ca090613e0a565b5f6040518083038185875af1925050503d805f8114610cda576040519150601f19603f3d011682016040523d82523d5f602084013e610cdf565b606091505b5050905080610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a90613e68565b60405180910390fd5b505050565b5f601054905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600e54905090565b610d66612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990613c04565b60405180910390fd5b8060178190555050565b600d5481565b5f610e0e84848461262c565b610ecb84610e1a612462565b610ec6856040518060600160405280602881526020016149ea6028913960055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e7d612462565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129899092919063ffffffff16565b612469565b600190509392505050565b5f600f54821115610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1390613ef6565b60405180910390fd5b5f610f256129eb565b9050610f3a8184612a1490919063ffffffff16565b915050919050565b5f60145f9054906101000a900460ff16905090565b610f5f612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613c04565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90613f5e565b60405180910390fd5b5f5b600880549050811015611283578173ffffffffffffffffffffffffffffffffffffffff16600882815481106110ae576110ad613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361127657600860016008805490506111059190613fd6565b8154811061111657611115613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061115257611151613f7c565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600880548061123f5761123e614009565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611283565b8080600101915050611076565b5050565b5f61132b611293612462565b846113268560055f6112a3612462565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a5d90919063ffffffff16565b612469565b6001905092915050565b60155481565b600b5481565b600a5481565b61134f612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290613c04565b60405180910390fd5b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600e54831115611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090614080565b60405180910390fd5b81611498575f61148884612aba565b50505050509050809150506114ae565b5f6114a284612aba565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601a60019054906101000a900460ff1681565b6114f3612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613c04565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090613f5e565b60405180910390fd5b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156116d65761169460035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ed6565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600881908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60175481565b600c5481565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156118815760045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506118ca565b6118c760035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ed6565b90505b919050565b6118d7612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90613c04565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b606060138054611ab190613d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90613d1f565b8015611b285780601f10611aff57610100808354040283529160200191611b28565b820191905f5260205f20905b815481529060010190602001808311611b0b57829003601f168201915b5050505050905090565b5f611bf0611b3e612462565b84611beb85604051806060016040528060258152602001614a126025913960055f611b67612462565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129899092919063ffffffff16565b612469565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c809061410e565b60405180910390fd5b6002544211611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490614176565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f611ddc611dd5612462565b848461262c565b6001905092915050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b611e1a612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d90613c04565b60405180910390fd5b8015611f11575f6015819055506015546016819055505f601a5f6101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1595f604051611f04919061395d565b60405180910390a1611f75565b600a6015819055506015546016819055506001601a5f6101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1596001604051611f6c919061395d565b60405180910390a15b50565b611f80612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200390613c04565b60405180910390fd5b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426120b69190614194565b6002819055505f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6121c2612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224590613c04565b60405180910390fd5b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6122ad612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090613c04565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614237565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce906142c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c90614353565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161261f9190613985565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361269a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612691906143e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ff9061446f565b60405180910390fd5b5f811161274a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612741906144fd565b60405180910390fd5b612752611a75565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127c05750612790611a75565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561280b5760115481111561280a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128019061458b565b60405180910390fd5b5b5f612815306117ec565b905060115481106128265760115490505b5f60195482101590508080156128485750601a5f9054906101000a900460ff16155b80156128a057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128b85750601a60019054906101000a900460ff165b156128cc5760195491506128cb82612b0e565b5b5f6001905060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061296c575060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612975575f90505b61298186868684612bdd565b505050505050565b5f8383111582906129d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c7919061388b565b60405180910390fd5b505f83856129de9190613fd6565b9050809150509392505050565b5f805f6129f6612c0a565b91509150612a0d8183612a1490919063ffffffff16565b9250505090565b5f612a5583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e9f565b905092915050565b5f808284612a6b9190614194565b905083811015612ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa7906145f3565b60405180910390fd5b8091505092915050565b5f805f805f805f805f612acc8a612f00565b9250925092505f805f612ae78d86612ae26129eb565b612f56565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601a5f6101000a81548160ff0219169083151502179055505f612b3d600283612a1490919063ffffffff16565b90505f612b538284612fb090919063ffffffff16565b90505f479050612b6283612ff9565b5f612b768247612fb090919063ffffffff16565b9050612b82838261322c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612bb593929190614611565b60405180910390a1505050505f601a5f6101000a81548160ff02191690831515021790555050565b80612beb57612bea613303565b5b612bf684848461333c565b80612c0457612c036134fc565b5b50505050565b5f805f600f5490505f600e5490505f5b600880549050811015612e62578260035f60088481548110612c3f57612c3e613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541180612d2457508160045f60088481548110612cc057612cbf613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b15612d3b57600f54600e5494509450505050612e9b565b612dc660035f60088481548110612d5557612d54613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205484612fb090919063ffffffff16565b9250612e5360045f60088481548110612de257612de1613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612fb090919063ffffffff16565b91508080600101915050612c1a565b50612e7a600e54600f54612a1490919063ffffffff16565b821015612e9257600f54600e54935093505050612e9b565b81819350935050505b9091565b5f8083118290612ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edc919061388b565b60405180910390fd5b505f8385612ef39190614673565b9050809150509392505050565b5f805f80612f0d85613510565b90505f612f1986613540565b90505f612f4182612f33858a612fb090919063ffffffff16565b612fb090919063ffffffff16565b90508083839550955095505050509193909250565b5f805f80612f6d858861357090919063ffffffff16565b90505f612f83868861357090919063ffffffff16565b90505f612f998284612fb090919063ffffffff16565b905082818395509550955050505093509350939050565b5f612ff183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612989565b905092915050565b5f600267ffffffffffffffff811115613015576130146146a3565b5b6040519080825280602002602001820160405280156130435781602001602082028036833780820191505090505b50905030815f8151811061305a57613059613f7c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312191906146e4565b8160018151811061313557613134613f7c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061319a307f000000000000000000000000000000000000000000000000000000000000000084612469565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131fb9594939291906147ff565b5f604051808303815f87803b158015613212575f80fd5b505af1158015613224573d5f803e3d5ffd5b505050505050565b613257307f000000000000000000000000000000000000000000000000000000000000000084612469565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016132bb96959493929190614857565b60606040518083038185885af11580156132d7573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906132fc91906148ca565b5050505050565b5f60155414801561331557505f601754145b61333a576015546016819055506017546018819055505f6015819055505f6017819055505b565b5f805f805f8061334b87612aba565b9550955095509550955095506133a78660035f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fb090919063ffffffff16565b60035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506134388560035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a5d90919063ffffffff16565b60035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613482816135e7565b61348c848361377f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516134e99190613985565b60405180910390a3505050505050505050565b601654601581905550601854601781905550565b5f613539606461352b6015548561357090919063ffffffff16565b612a1490919063ffffffff16565b9050919050565b5f613569606461355b6017548561357090919063ffffffff16565b612a1490919063ffffffff16565b9050919050565b5f808303613580575f90506135e1565b5f828461358d919061491a565b905082848261359c9190614673565b146135dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d3906149cb565b60405180910390fd5b809150505b92915050565b5f6135f06129eb565b90505f613606828461357090919063ffffffff16565b90506136588160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a5d90919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561377a576137388360045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a5d90919063ffffffff16565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050565b61379482600f54612fb090919063ffffffff16565b600f819055506137af81601054612a5d90919063ffffffff16565b6010819055505050565b5f80fd5b5f819050919050565b6137cf816137bd565b81146137d9575f80fd5b50565b5f813590506137ea816137c6565b92915050565b5f60208284031215613805576138046137b9565b5b5f613812848285016137dc565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61385d8261381b565b6138678185613825565b9350613877818560208601613835565b61388081613843565b840191505092915050565b5f6020820190508181035f8301526138a38184613853565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6138d4826138ab565b9050919050565b6138e4816138ca565b81146138ee575f80fd5b50565b5f813590506138ff816138db565b92915050565b5f806040838503121561391b5761391a6137b9565b5b5f613928858286016138f1565b9250506020613939858286016137dc565b9150509250929050565b5f8115159050919050565b61395781613943565b82525050565b5f6020820190506139705f83018461394e565b92915050565b61397f816137bd565b82525050565b5f6020820190506139985f830184613976565b92915050565b5f819050919050565b5f6139c16139bc6139b7846138ab565b61399e565b6138ab565b9050919050565b5f6139d2826139a7565b9050919050565b5f6139e3826139c8565b9050919050565b6139f3816139d9565b82525050565b5f602082019050613a0c5f8301846139ea565b92915050565b5f805f60608486031215613a2957613a286137b9565b5b5f613a36868287016138f1565b9350506020613a47868287016138f1565b9250506040613a58868287016137dc565b9150509250925092565b5f60ff82169050919050565b613a7781613a62565b82525050565b5f602082019050613a905f830184613a6e565b92915050565b5f60208284031215613aab57613aaa6137b9565b5b5f613ab8848285016138f1565b91505092915050565b613aca81613943565b8114613ad4575f80fd5b50565b5f81359050613ae581613ac1565b92915050565b5f8060408385031215613b0157613b006137b9565b5b5f613b0e858286016137dc565b9250506020613b1f85828601613ad7565b9150509250929050565b613b32816138ca565b82525050565b5f602082019050613b4b5f830184613b29565b92915050565b5f60208284031215613b6657613b656137b9565b5b5f613b7384828501613ad7565b91505092915050565b5f8060408385031215613b9257613b916137b9565b5b5f613b9f858286016138f1565b9250506020613bb0858286016138f1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613bee602083613825565b9150613bf982613bba565b602082019050919050565b5f6020820190508181035f830152613c1b81613be2565b9050919050565b7f46656520746f6f20686967682e000000000000000000000000000000000000005f82015250565b5f613c56600d83613825565b9150613c6182613c22565b602082019050919050565b5f6020820190508181035f830152613c8381613c4a565b9050919050565b7f46656520746f6f206c6f772e00000000000000000000000000000000000000005f82015250565b5f613cbe600c83613825565b9150613cc982613c8a565b602082019050919050565b5f6020820190508181035f830152613ceb81613cb2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613d3657607f821691505b602082108103613d4957613d48613cf2565b5b50919050565b7f496e73756666696369656e7420424e422062616c616e636520696e20746865205f8201527f636f6e7472616374000000000000000000000000000000000000000000000000602082015250565b5f613da9602883613825565b9150613db482613d4f565b604082019050919050565b5f6020820190508181035f830152613dd681613d9d565b9050919050565b5f81905092915050565b50565b5f613df55f83613ddd565b9150613e0082613de7565b5f82019050919050565b5f613e1482613dea565b9150819050919050565b7f424e42207769746864726177616c206661696c656400000000000000000000005f82015250565b5f613e52601583613825565b9150613e5d82613e1e565b602082019050919050565b5f6020820190508181035f830152613e7f81613e46565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f613ee0602a83613825565b9150613eeb82613e86565b604082019050919050565b5f6020820190508181035f830152613f0d81613ed4565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f613f48601b83613825565b9150613f5382613f14565b602082019050919050565b5f6020820190508181035f830152613f7581613f3c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613fe0826137bd565b9150613feb836137bd565b925082820390508181111561400357614002613fa9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f61406a601f83613825565b915061407582614036565b602082019050919050565b5f6020820190508181035f8301526140978161405e565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c5f8201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b5f6140f8602383613825565b91506141038261409e565b604082019050919050565b5f6020820190508181035f830152614125816140ec565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c20372064617973005f82015250565b5f614160601f83613825565b915061416b8261412c565b602082019050919050565b5f6020820190508181035f83015261418d81614154565b9050919050565b5f61419e826137bd565b91506141a9836137bd565b92508282019050808211156141c1576141c0613fa9565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614221602683613825565b915061422c826141c7565b604082019050919050565b5f6020820190508181035f83015261424e81614215565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6142af602483613825565b91506142ba82614255565b604082019050919050565b5f6020820190508181035f8301526142dc816142a3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61433d602283613825565b9150614348826142e3565b604082019050919050565b5f6020820190508181035f83015261436a81614331565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6143cb602583613825565b91506143d682614371565b604082019050919050565b5f6020820190508181035f8301526143f8816143bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614459602383613825565b9150614464826143ff565b604082019050919050565b5f6020820190508181035f8301526144868161444d565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6144e7602983613825565b91506144f28261448d565b604082019050919050565b5f6020820190508181035f830152614514816144db565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f614575602883613825565b91506145808261451b565b604082019050919050565b5f6020820190508181035f8301526145a281614569565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6145dd601b83613825565b91506145e8826145a9565b602082019050919050565b5f6020820190508181035f83015261460a816145d1565b9050919050565b5f6060820190506146245f830186613976565b6146316020830185613976565b61463e6040830184613976565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61467d826137bd565b9150614688836137bd565b92508261469857614697614646565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506146de816138db565b92915050565b5f602082840312156146f9576146f86137b9565b5b5f614706848285016146d0565b91505092915050565b5f819050919050565b5f61473261472d6147288461470f565b61399e565b6137bd565b9050919050565b61474281614718565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61477a816138ca565b82525050565b5f61478b8383614771565b60208301905092915050565b5f602082019050919050565b5f6147ad82614748565b6147b78185614752565b93506147c283614762565b805f5b838110156147f25781516147d98882614780565b97506147e483614797565b9250506001810190506147c5565b5085935050505092915050565b5f60a0820190506148125f830188613976565b61481f6020830187614739565b818103604083015261483181866147a3565b90506148406060830185613b29565b61484d6080830184613976565b9695505050505050565b5f60c08201905061486a5f830189613b29565b6148776020830188613976565b6148846040830187614739565b6148916060830186614739565b61489e6080830185613b29565b6148ab60a0830184613976565b979650505050505050565b5f815190506148c4816137c6565b92915050565b5f805f606084860312156148e1576148e06137b9565b5b5f6148ee868287016148b6565b93505060206148ff868287016148b6565b9250506040614910868287016148b6565b9150509250925092565b5f614924826137bd565b915061492f836137bd565b925082820261493d816137bd565b9150828204841483151761495457614953613fa9565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6149b5602183613825565b91506149c08261495b565b604082019050919050565b5f6020820190508181035f8301526149e2816149a9565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a9ba2ad9f94f285e1e7c9209ed229d896cff0ab0f03dcea659e5d28b9761ccca64736f6c634300081a0033
Deployed Bytecode
0x608060405260043610610254575f3560e01c806352390c021161013857806395d89b41116100b5578063b6c5232411610079578063b6c52324146108c7578063bce4d6ae146108f1578063dd46706414610919578063dd62ed3e14610941578063ea2f0b371461097d578063f2fde38b146109a55761025b565b806395d89b41146107e5578063a457c2d71461080f578063a69df4b51461084b578063a9059cbb14610861578063b2bdfa7b1461089d5761025b565b8063715018a6116100fc578063715018a6146107155780637d1db4a51461072b57806388f82020146107555780638da5cb5b14610791578063956f1677146107bb5761025b565b806352390c02146106215780635342acb4146106495780636bc87c3a146106855780636c782e7a146106af57806370a08231146106d95761025b565b80632d838119116101d15780633bbaa223116101955780633bbaa2231461051557806340328eb41461053f578063437823ec146105695780634549b0391461059157806349bd5a5e146105cd5780634a74bb02146105f75761025b565b80632d83811914610421578063313ce5671461045d5780633685d4191461048757806339509351146104af5780633b124fe7146104eb5761025b565b80631694505e116102185780631694505e1461033f57806318160ddd146103695780631a3f0cda146103935780631b6187c4146103bb57806323b872dd146103e55761025b565b8063061c82d01461025f57806306fdde0314610287578063095ea7b3146102b1578063127f4b2e146102ed57806313114a9d146103155761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b50610285600480360381019061028091906137f0565b6109cd565b005b348015610292575f80fd5b5061029b610af3565b6040516102a8919061388b565b60405180910390f35b3480156102bc575f80fd5b506102d760048036038101906102d29190613905565b610b83565b6040516102e4919061395d565b60405180910390f35b3480156102f8575f80fd5b50610313600480360381019061030e91906137f0565b610ba0565b005b348015610320575f80fd5b50610329610d28565b6040516103369190613985565b60405180910390f35b34801561034a575f80fd5b50610353610d31565b60405161036091906139f9565b60405180910390f35b348015610374575f80fd5b5061037d610d55565b60405161038a9190613985565b60405180910390f35b34801561039e575f80fd5b506103b960048036038101906103b491906137f0565b610d5e565b005b3480156103c6575f80fd5b506103cf610dfc565b6040516103dc9190613985565b60405180910390f35b3480156103f0575f80fd5b5061040b60048036038101906104069190613a12565b610e02565b604051610418919061395d565b60405180910390f35b34801561042c575f80fd5b50610447600480360381019061044291906137f0565b610ed6565b6040516104549190613985565b60405180910390f35b348015610468575f80fd5b50610471610f42565b60405161047e9190613a7d565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a89190613a96565b610f57565b005b3480156104ba575f80fd5b506104d560048036038101906104d09190613905565b611287565b6040516104e2919061395d565b60405180910390f35b3480156104f6575f80fd5b506104ff611335565b60405161050c9190613985565b60405180910390f35b348015610520575f80fd5b5061052961133b565b6040516105369190613985565b60405180910390f35b34801561054a575f80fd5b50610553611341565b6040516105609190613985565b60405180910390f35b348015610574575f80fd5b5061058f600480360381019061058a9190613a96565b611347565b005b34801561059c575f80fd5b506105b760048036038101906105b29190613aeb565b611433565b6040516105c49190613985565b60405180910390f35b3480156105d8575f80fd5b506105e16114b4565b6040516105ee9190613b38565b60405180910390f35b348015610602575f80fd5b5061060b6114d8565b604051610618919061395d565b60405180910390f35b34801561062c575f80fd5b5061064760048036038101906106429190613a96565b6114eb565b005b348015610654575f80fd5b5061066f600480360381019061066a9190613a96565b61178e565b60405161067c919061395d565b60405180910390f35b348015610690575f80fd5b506106996117e0565b6040516106a69190613985565b60405180910390f35b3480156106ba575f80fd5b506106c36117e6565b6040516106d09190613985565b60405180910390f35b3480156106e4575f80fd5b506106ff60048036038101906106fa9190613a96565b6117ec565b60405161070c9190613985565b60405180910390f35b348015610720575f80fd5b506107296118cf565b005b348015610736575f80fd5b5061073f611a1d565b60405161074c9190613985565b60405180910390f35b348015610760575f80fd5b5061077b60048036038101906107769190613a96565b611a23565b604051610788919061395d565b60405180910390f35b34801561079c575f80fd5b506107a5611a75565b6040516107b29190613b38565b60405180910390f35b3480156107c6575f80fd5b506107cf611a9c565b6040516107dc9190613985565b60405180910390f35b3480156107f0575f80fd5b506107f9611aa2565b604051610806919061388b565b60405180910390f35b34801561081a575f80fd5b5061083560048036038101906108309190613905565b611b32565b604051610842919061395d565b60405180910390f35b348015610856575f80fd5b5061085f611bfa565b005b34801561086c575f80fd5b5061088760048036038101906108829190613905565b611dc9565b604051610894919061395d565b60405180910390f35b3480156108a8575f80fd5b506108b1611de6565b6040516108be9190613b38565b60405180910390f35b3480156108d2575f80fd5b506108db611e09565b6040516108e89190613985565b60405180910390f35b3480156108fc575f80fd5b5061091760048036038101906109129190613b51565b611e12565b005b348015610924575f80fd5b5061093f600480360381019061093a91906137f0565b611f78565b005b34801561094c575f80fd5b5061096760048036038101906109629190613b7c565b612138565b6040516109749190613985565b60405180910390f35b348015610988575f80fd5b506109a3600480360381019061099e9190613a96565b6121ba565b005b3480156109b0575f80fd5b506109cb60048036038101906109c69190613a96565b6122a5565b005b6109d5612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5890613c04565b60405180910390fd5b6046811115610aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9c90613c6c565b60405180910390fd5b6001811015610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613cd4565b60405180910390fd5b8060158190555050565b606060128054610b0290613d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2e90613d1f565b8015610b795780601f10610b5057610100808354040283529160200191610b79565b820191905f5260205f20905b815481529060010190602001808311610b5c57829003601f168201915b5050505050905090565b5f610b96610b8f612462565b8484612469565b6001905092915050565b610ba8612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b90613c04565b60405180910390fd5b5f47905080821115610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290613dbf565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1683604051610ca090613e0a565b5f6040518083038185875af1925050503d805f8114610cda576040519150601f19603f3d011682016040523d82523d5f602084013e610cdf565b606091505b5050905080610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a90613e68565b60405180910390fd5b505050565b5f601054905090565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e81565b5f600e54905090565b610d66612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990613c04565b60405180910390fd5b8060178190555050565b600d5481565b5f610e0e84848461262c565b610ecb84610e1a612462565b610ec6856040518060600160405280602881526020016149ea6028913960055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e7d612462565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129899092919063ffffffff16565b612469565b600190509392505050565b5f600f54821115610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1390613ef6565b60405180910390fd5b5f610f256129eb565b9050610f3a8184612a1490919063ffffffff16565b915050919050565b5f60145f9054906101000a900460ff16905090565b610f5f612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613c04565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90613f5e565b60405180910390fd5b5f5b600880549050811015611283578173ffffffffffffffffffffffffffffffffffffffff16600882815481106110ae576110ad613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361127657600860016008805490506111059190613fd6565b8154811061111657611115613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061115257611151613f7c565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600880548061123f5761123e614009565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611283565b8080600101915050611076565b5050565b5f61132b611293612462565b846113268560055f6112a3612462565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a5d90919063ffffffff16565b612469565b6001905092915050565b60155481565b600b5481565b600a5481565b61134f612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d290613c04565b60405180910390fd5b600160065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f600e54831115611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090614080565b60405180910390fd5b81611498575f61148884612aba565b50505050509050809150506114ae565b5f6114a284612aba565b50505050915050809150505b92915050565b7f000000000000000000000000852535f9bfa775f2cbaccc6565f4b1a32a37a1f181565b601a60019054906101000a900460ff1681565b6114f3612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461157f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157690613c04565b60405180910390fd5b60075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090613f5e565b60405180910390fd5b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156116d65761169460035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ed6565b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b600160075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600881908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60175481565b600c5481565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156118815760045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490506118ca565b6118c760035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610ed6565b90505b919050565b6118d7612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a90613c04565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60115481565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b606060138054611ab190613d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054611add90613d1f565b8015611b285780601f10611aff57610100808354040283529160200191611b28565b820191905f5260205f20905b815481529060010190602001808311611b0b57829003601f168201915b5050505050905090565b5f611bf0611b3e612462565b84611beb85604051806060016040528060258152602001614a126025913960055f611b67612462565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129899092919063ffffffff16565b612469565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c809061410e565b60405180910390fd5b6002544211611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490614176565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f611ddc611dd5612462565b848461262c565b6001905092915050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b611e1a612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d90613c04565b60405180910390fd5b8015611f11575f6015819055506015546016819055505f601a5f6101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1595f604051611f04919061395d565b60405180910390a1611f75565b600a6015819055506015546016819055506001601a5f6101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1596001604051611f6c919061395d565b60405180910390a15b50565b611f80612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200390613c04565b60405180910390fd5b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426120b69190614194565b6002819055505f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6121c2612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224590613c04565b60405180910390fd5b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6122ad612462565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090613c04565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614237565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ce906142c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c90614353565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161261f9190613985565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361269a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612691906143e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ff9061446f565b60405180910390fd5b5f811161274a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612741906144fd565b60405180910390fd5b612752611a75565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127c05750612790611a75565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561280b5760115481111561280a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128019061458b565b60405180910390fd5b5b5f612815306117ec565b905060115481106128265760115490505b5f60195482101590508080156128485750601a5f9054906101000a900460ff16155b80156128a057507f000000000000000000000000852535f9bfa775f2cbaccc6565f4b1a32a37a1f173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156128b85750601a60019054906101000a900460ff165b156128cc5760195491506128cb82612b0e565b5b5f6001905060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061296c575060065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612975575f90505b61298186868684612bdd565b505050505050565b5f8383111582906129d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c7919061388b565b60405180910390fd5b505f83856129de9190613fd6565b9050809150509392505050565b5f805f6129f6612c0a565b91509150612a0d8183612a1490919063ffffffff16565b9250505090565b5f612a5583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e9f565b905092915050565b5f808284612a6b9190614194565b905083811015612ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa7906145f3565b60405180910390fd5b8091505092915050565b5f805f805f805f805f612acc8a612f00565b9250925092505f805f612ae78d86612ae26129eb565b612f56565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601a5f6101000a81548160ff0219169083151502179055505f612b3d600283612a1490919063ffffffff16565b90505f612b538284612fb090919063ffffffff16565b90505f479050612b6283612ff9565b5f612b768247612fb090919063ffffffff16565b9050612b82838261322c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612bb593929190614611565b60405180910390a1505050505f601a5f6101000a81548160ff02191690831515021790555050565b80612beb57612bea613303565b5b612bf684848461333c565b80612c0457612c036134fc565b5b50505050565b5f805f600f5490505f600e5490505f5b600880549050811015612e62578260035f60088481548110612c3f57612c3e613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541180612d2457508160045f60088481548110612cc057612cbf613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054115b15612d3b57600f54600e5494509450505050612e9b565b612dc660035f60088481548110612d5557612d54613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205484612fb090919063ffffffff16565b9250612e5360045f60088481548110612de257612de1613f7c565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483612fb090919063ffffffff16565b91508080600101915050612c1a565b50612e7a600e54600f54612a1490919063ffffffff16565b821015612e9257600f54600e54935093505050612e9b565b81819350935050505b9091565b5f8083118290612ee5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612edc919061388b565b60405180910390fd5b505f8385612ef39190614673565b9050809150509392505050565b5f805f80612f0d85613510565b90505f612f1986613540565b90505f612f4182612f33858a612fb090919063ffffffff16565b612fb090919063ffffffff16565b90508083839550955095505050509193909250565b5f805f80612f6d858861357090919063ffffffff16565b90505f612f83868861357090919063ffffffff16565b90505f612f998284612fb090919063ffffffff16565b905082818395509550955050505093509350939050565b5f612ff183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612989565b905092915050565b5f600267ffffffffffffffff811115613015576130146146a3565b5b6040519080825280602002602001820160405280156130435781602001602082028036833780820191505090505b50905030815f8151811061305a57613059613f7c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312191906146e4565b8160018151811061313557613134613f7c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061319a307f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e84612469565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131fb9594939291906147ff565b5f604051808303815f87803b158015613212575f80fd5b505af1158015613224573d5f803e3d5ffd5b505050505050565b613257307f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e84612469565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b81526004016132bb96959493929190614857565b60606040518083038185885af11580156132d7573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906132fc91906148ca565b5050505050565b5f60155414801561331557505f601754145b61333a576015546016819055506017546018819055505f6015819055505f6017819055505b565b5f805f805f8061334b87612aba565b9550955095509550955095506133a78660035f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fb090919063ffffffff16565b60035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506134388560035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a5d90919063ffffffff16565b60035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613482816135e7565b61348c848361377f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516134e99190613985565b60405180910390a3505050505050505050565b601654601581905550601854601781905550565b5f613539606461352b6015548561357090919063ffffffff16565b612a1490919063ffffffff16565b9050919050565b5f613569606461355b6017548561357090919063ffffffff16565b612a1490919063ffffffff16565b9050919050565b5f808303613580575f90506135e1565b5f828461358d919061491a565b905082848261359c9190614673565b146135dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d3906149cb565b60405180910390fd5b809150505b92915050565b5f6135f06129eb565b90505f613606828461357090919063ffffffff16565b90506136588160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a5d90919063ffffffff16565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561377a576137388360045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612a5d90919063ffffffff16565b60045f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b505050565b61379482600f54612fb090919063ffffffff16565b600f819055506137af81601054612a5d90919063ffffffff16565b6010819055505050565b5f80fd5b5f819050919050565b6137cf816137bd565b81146137d9575f80fd5b50565b5f813590506137ea816137c6565b92915050565b5f60208284031215613805576138046137b9565b5b5f613812848285016137dc565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61385d8261381b565b6138678185613825565b9350613877818560208601613835565b61388081613843565b840191505092915050565b5f6020820190508181035f8301526138a38184613853565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6138d4826138ab565b9050919050565b6138e4816138ca565b81146138ee575f80fd5b50565b5f813590506138ff816138db565b92915050565b5f806040838503121561391b5761391a6137b9565b5b5f613928858286016138f1565b9250506020613939858286016137dc565b9150509250929050565b5f8115159050919050565b61395781613943565b82525050565b5f6020820190506139705f83018461394e565b92915050565b61397f816137bd565b82525050565b5f6020820190506139985f830184613976565b92915050565b5f819050919050565b5f6139c16139bc6139b7846138ab565b61399e565b6138ab565b9050919050565b5f6139d2826139a7565b9050919050565b5f6139e3826139c8565b9050919050565b6139f3816139d9565b82525050565b5f602082019050613a0c5f8301846139ea565b92915050565b5f805f60608486031215613a2957613a286137b9565b5b5f613a36868287016138f1565b9350506020613a47868287016138f1565b9250506040613a58868287016137dc565b9150509250925092565b5f60ff82169050919050565b613a7781613a62565b82525050565b5f602082019050613a905f830184613a6e565b92915050565b5f60208284031215613aab57613aaa6137b9565b5b5f613ab8848285016138f1565b91505092915050565b613aca81613943565b8114613ad4575f80fd5b50565b5f81359050613ae581613ac1565b92915050565b5f8060408385031215613b0157613b006137b9565b5b5f613b0e858286016137dc565b9250506020613b1f85828601613ad7565b9150509250929050565b613b32816138ca565b82525050565b5f602082019050613b4b5f830184613b29565b92915050565b5f60208284031215613b6657613b656137b9565b5b5f613b7384828501613ad7565b91505092915050565b5f8060408385031215613b9257613b916137b9565b5b5f613b9f858286016138f1565b9250506020613bb0858286016138f1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613bee602083613825565b9150613bf982613bba565b602082019050919050565b5f6020820190508181035f830152613c1b81613be2565b9050919050565b7f46656520746f6f20686967682e000000000000000000000000000000000000005f82015250565b5f613c56600d83613825565b9150613c6182613c22565b602082019050919050565b5f6020820190508181035f830152613c8381613c4a565b9050919050565b7f46656520746f6f206c6f772e00000000000000000000000000000000000000005f82015250565b5f613cbe600c83613825565b9150613cc982613c8a565b602082019050919050565b5f6020820190508181035f830152613ceb81613cb2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613d3657607f821691505b602082108103613d4957613d48613cf2565b5b50919050565b7f496e73756666696369656e7420424e422062616c616e636520696e20746865205f8201527f636f6e7472616374000000000000000000000000000000000000000000000000602082015250565b5f613da9602883613825565b9150613db482613d4f565b604082019050919050565b5f6020820190508181035f830152613dd681613d9d565b9050919050565b5f81905092915050565b50565b5f613df55f83613ddd565b9150613e0082613de7565b5f82019050919050565b5f613e1482613dea565b9150819050919050565b7f424e42207769746864726177616c206661696c656400000000000000000000005f82015250565b5f613e52601583613825565b9150613e5d82613e1e565b602082019050919050565b5f6020820190508181035f830152613e7f81613e46565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f613ee0602a83613825565b9150613eeb82613e86565b604082019050919050565b5f6020820190508181035f830152613f0d81613ed4565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c7564656400000000005f82015250565b5f613f48601b83613825565b9150613f5382613f14565b602082019050919050565b5f6020820190508181035f830152613f7581613f3c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613fe0826137bd565b9150613feb836137bd565b925082820390508181111561400357614002613fa9565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f61406a601f83613825565b915061407582614036565b602082019050919050565b5f6020820190508181035f8301526140978161405e565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c5f8201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b5f6140f8602383613825565b91506141038261409e565b604082019050919050565b5f6020820190508181035f830152614125816140ec565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c20372064617973005f82015250565b5f614160601f83613825565b915061416b8261412c565b602082019050919050565b5f6020820190508181035f83015261418d81614154565b9050919050565b5f61419e826137bd565b91506141a9836137bd565b92508282019050808211156141c1576141c0613fa9565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614221602683613825565b915061422c826141c7565b604082019050919050565b5f6020820190508181035f83015261424e81614215565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6142af602483613825565b91506142ba82614255565b604082019050919050565b5f6020820190508181035f8301526142dc816142a3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61433d602283613825565b9150614348826142e3565b604082019050919050565b5f6020820190508181035f83015261436a81614331565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6143cb602583613825565b91506143d682614371565b604082019050919050565b5f6020820190508181035f8301526143f8816143bf565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614459602383613825565b9150614464826143ff565b604082019050919050565b5f6020820190508181035f8301526144868161444d565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6144e7602983613825565b91506144f28261448d565b604082019050919050565b5f6020820190508181035f830152614514816144db565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f614575602883613825565b91506145808261451b565b604082019050919050565b5f6020820190508181035f8301526145a281614569565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6145dd601b83613825565b91506145e8826145a9565b602082019050919050565b5f6020820190508181035f83015261460a816145d1565b9050919050565b5f6060820190506146245f830186613976565b6146316020830185613976565b61463e6040830184613976565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61467d826137bd565b9150614688836137bd565b92508261469857614697614646565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506146de816138db565b92915050565b5f602082840312156146f9576146f86137b9565b5b5f614706848285016146d0565b91505092915050565b5f819050919050565b5f61473261472d6147288461470f565b61399e565b6137bd565b9050919050565b61474281614718565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61477a816138ca565b82525050565b5f61478b8383614771565b60208301905092915050565b5f602082019050919050565b5f6147ad82614748565b6147b78185614752565b93506147c283614762565b805f5b838110156147f25781516147d98882614780565b97506147e483614797565b9250506001810190506147c5565b5085935050505092915050565b5f60a0820190506148125f830188613976565b61481f6020830187614739565b818103604083015261483181866147a3565b90506148406060830185613b29565b61484d6080830184613976565b9695505050505050565b5f60c08201905061486a5f830189613b29565b6148776020830188613976565b6148846040830187614739565b6148916060830186614739565b61489e6080830185613b29565b6148ab60a0830184613976565b979650505050505050565b5f815190506148c4816137c6565b92915050565b5f805f606084860312156148e1576148e06137b9565b5b5f6148ee868287016148b6565b93505060206148ff868287016148b6565b9250506040614910868287016148b6565b9150509250925092565b5f614924826137bd565b915061492f836137bd565b925082820261493d816137bd565b9150828204841483151761495457614953613fa9565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6149b5602183613825565b91506149c08261495b565b604082019050919050565b5f6020820190508181035f8301526149e2816149a9565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220a9ba2ad9f94f285e1e7c9209ed229d896cff0ab0f03dcea659e5d28b9761ccca64736f6c634300081a0033
Deployed Bytecode Sourcemap
25560:16083:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32425:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28060:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28972:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30188:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30093:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26727:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28337:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32631:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26140:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29141:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30985:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28246:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31701:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29462:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26542:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26074:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26043:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32188:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30541:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26785:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26928:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31246:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35853:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26626:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26106:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28440:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16131:148;;;;;;;;;;;;;:::i;:::-;;26365:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29965:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15488:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26013:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28151:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29688:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17149:305;;;;;;;;;;;;;:::i;:::-;;28646:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15220:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16686:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41198:440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16851:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28821:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32307:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16434:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32425:194;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32517:2:::1;32507:6;:12;;32499:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32566:1;32556:6;:11;;32548:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;32605:6;32595:7;:16;;;;32425:194:::0;:::o;28060:83::-;28097:13;28130:5;28123:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28060:83;:::o;28972:161::-;29047:4;29064:39;29073:12;:10;:12::i;:::-;29087:7;29096:6;29064:8;:39::i;:::-;29121:4;29114:11;;28972:161;;;;:::o;30188:345::-;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30255:23:::1;30281:21;30255:47;;30331:15;30321:6;:25;;30313:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;30413:12;30438:10;30430:24;;30462:6;30430:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30412:61;;;30492:7;30484:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;30244:289;;30188:345:::0;:::o;30093:87::-;30135:7;30162:10;;30155:17;;30093:87;:::o;26727:51::-;;;:::o;28337:95::-;28390:7;28417;;28410:14;;28337:95;:::o;32631:103::-;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32722:4:::1;32706:13;:20;;;;32631:103:::0;:::o;26140:23::-;;;;:::o;29141:313::-;29239:4;29256:36;29266:6;29274:9;29285:6;29256:9;:36::i;:::-;29303:121;29312:6;29320:12;:10;:12::i;:::-;29334:89;29372:6;29334:89;;;;;;;;;;;;;;;;;:11;:19;29346:6;29334:19;;;;;;;;;;;;;;;:33;29354:12;:10;:12::i;:::-;29334:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29303:8;:121::i;:::-;29442:4;29435:11;;29141:313;;;;;:::o;30985:253::-;31051:7;31090;;31079;:18;;31071:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31155:19;31178:10;:8;:10::i;:::-;31155:33;;31206:24;31218:11;31206:7;:11;;:24;;;;:::i;:::-;31199:31;;;30985:253;;;:::o;28246:83::-;28287:5;28312:9;;;;;;;;;;;28305:16;;28246:83;:::o;31701:479::-;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31783:11:::1;:20;31795:7;31783:20;;;;;;;;;;;;;;;;;;;;;;;;;31775:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31851:9;31846:327;31870:9;:16;;;;31866:1;:20;31846:327;;;31928:7;31912:23;;:9;31922:1;31912:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;31908:254:::1;;31971:9;32000:1;31981:9;:16;;;;:20;;;;:::i;:::-;31971:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31956:9;31966:1;31956:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32040:1;32021:7;:16;32029:7;32021:16;;;;;;;;;;;;;;;:20;;;;32083:5;32060:11;:20;32072:7;32060:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32107:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;32141:5;;31908:254;31888:3;;;;;;;31846:327;;;;31701:479:::0;:::o;29462:218::-;29550:4;29567:83;29576:12;:10;:12::i;:::-;29590:7;29599:50;29638:10;29599:11;:25;29611:12;:10;:12::i;:::-;29599:25;;;;;;;;;;;;;;;:34;29625:7;29599:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29567:8;:83::i;:::-;29668:4;29661:11;;29462:218;;;;:::o;26542:27::-;;;;:::o;26074:25::-;;;;:::o;26043:24::-;;;;:::o;32188:111::-;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32287:4:::1;32257:18;:27;32276:7;32257:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32188:111:::0;:::o;30541:436::-;30631:7;30670;;30659;:18;;30651:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30729:17;30724:246;;30764:15;30788:19;30799:7;30788:10;:19::i;:::-;30763:44;;;;;;;30829:7;30822:14;;;;;30724:246;30871:23;30902:19;30913:7;30902:10;:19::i;:::-;30869:52;;;;;;;30943:15;30936:22;;;30541:436;;;;;:::o;26785:38::-;;;:::o;26928:40::-;;;;;;;;;;;;;:::o;31246:447::-;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31443:11:::1;:20;31455:7;31443:20;;;;;;;;;;;;;;;;;;;;;;;;;31442:21;31434:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31528:1;31509:7;:16;31517:7;31509:16;;;;;;;;;;;;;;;;:20;31506:108;;;31565:37;31585:7;:16;31593:7;31585:16;;;;;;;;;;;;;;;;31565:19;:37::i;:::-;31546:7;:16;31554:7;31546:16;;;;;;;;;;;;;;;:56;;;;31506:108;31647:4;31624:11;:20;31636:7;31624:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31662:9;31677:7;31662:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31246:447:::0;:::o;35853:123::-;35917:4;35941:18;:27;35960:7;35941:27;;;;;;;;;;;;;;;;;;;;;;;;;35934:34;;35853:123;;;:::o;26626:32::-;;;;:::o;26106:27::-;;;;:::o;28440:198::-;28506:7;28530:11;:20;28542:7;28530:20;;;;;;;;;;;;;;;;;;;;;;;;;28526:49;;;28559:7;:16;28567:7;28559:16;;;;;;;;;;;;;;;;28552:23;;;;28526:49;28593:37;28613:7;:16;28621:7;28613:16;;;;;;;;;;;;;;;;28593:19;:37::i;:::-;28586:44;;28440:198;;;;:::o;16131:148::-;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16238:1:::1;16201:40;;16222:6;::::0;::::1;;;;;;;;16201:40;;;;;;;;;;;;16269:1;16252:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16131:148::o:0;26365:46::-;;;;:::o;29965:120::-;30033:4;30057:11;:20;30069:7;30057:20;;;;;;;;;;;;;;;;;;;;;;;;;30050:27;;29965:120;;;:::o;15488:79::-;15526:7;15553:6;;;;;;;;;;;15546:13;;15488:79;:::o;26013:23::-;;;;:::o;28151:87::-;28190:13;28223:7;28216:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28151:87;:::o;29688:269::-;29781:4;29798:129;29807:12;:10;:12::i;:::-;29821:7;29830:96;29869:15;29830:96;;;;;;;;;;;;;;;;;:11;:25;29842:12;:10;:12::i;:::-;29830:25;;;;;;;;;;;;;;;:34;29856:7;29830:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29798:8;:129::i;:::-;29945:4;29938:11;;29688:269;;;;:::o;17149:305::-;17219:10;17201:28;;:14;;;;;;;;;;;:28;;;17193:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;17306:9;;17288:15;:27;17280:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;17397:14;;;;;;;;;;;17368:44;;17389:6;;;;;;;;;;17368:44;;;;;;;;;;;;17432:14;;;;;;;;;;;17423:6;;:23;;;;;;;;;;;;;;;;;;17149:305::o;28646:167::-;28724:4;28741:42;28751:12;:10;:12::i;:::-;28765:9;28776:6;28741:9;:42::i;:::-;28801:4;28794:11;;28646:167;;;;:::o;15220:21::-;;;;;;;;;;;;:::o;16686:89::-;16731:7;16758:9;;16751:16;;16686:89;:::o;41198:440::-;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41273:7:::1;41269:362;;;41307:1;41297:7;:11;;;;41341:7;;41323:15;:25;;;;41382:5;41363:16;;:24;;;;;;;;;;;;;;;;;;41407:35;41436:5;41407:35;;;;;;:::i;:::-;;;;;;;;41269:362;;;41485:2;41475:7;:12;;;;41520:7;;41502:15;:25;;;;41561:4;41542:16;;:23;;;;;;;;;;;;;;;;;;41585:34;41614:4;41585:34;;;;;;:::i;:::-;;;;;;;;41269:362;41198:440:::0;:::o;16851:226::-;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16932:6:::1;::::0;::::1;;;;;;;;16915:14;;:23;;;;;;;;;;;;;;;;;;16966:1;16949:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17009:4;16991:15;:22;;;;:::i;:::-;16979:9;:34;;;;17066:1;17029:40;;17050:6;::::0;::::1;;;;;;;;17029:40;;;;;;;;;;;;16851:226:::0;:::o;28821:143::-;28902:7;28929:11;:18;28941:5;28929:18;;;;;;;;;;;;;;;:27;28948:7;28929:27;;;;;;;;;;;;;;;;28922:34;;28821:143;;;;:::o;32307:110::-;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32404:5:::1;32374:18;:27;32393:7;32374:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32307:110:::0;:::o;16434:244::-;15710:12;:10;:12::i;:::-;15700:22;;:6;;;;;;;;;;:22;;;15692:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16543:1:::1;16523:22;;:8;:22;;::::0;16515:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16633:8;16604:38;;16625:6;::::0;::::1;;;;;;;;16604:38;;;;;;;;;;;;16662:8;16653:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16434:244:::0;:::o;8173:98::-;8226:7;8253:10;8246:17;;8173:98;:::o;35984:337::-;36094:1;36077:19;;:5;:19;;;36069:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36175:1;36156:21;;:7;:21;;;36148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36259:6;36229:11;:18;36241:5;36229:18;;;;;;;;;;;;;;;:27;36248:7;36229:27;;;;;;;;;;;;;;;:36;;;;36297:7;36281:32;;36290:5;36281:32;;;36306:6;36281:32;;;;;;:::i;:::-;;;;;;;;35984:337;;;:::o;36329:1767::-;36467:1;36451:18;;:4;:18;;;36443:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36544:1;36530:16;;:2;:16;;;36522:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36614:1;36605:6;:10;36597:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36678:7;:5;:7::i;:::-;36670:15;;:4;:15;;;;:32;;;;;36695:7;:5;:7::i;:::-;36689:13;;:2;:13;;;;36670:32;36667:117;;;36725:12;;36715:6;:22;;36707:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;36667:117;37078:28;37109:24;37127:4;37109:9;:24::i;:::-;37078:55;;37181:12;;37157:20;:36;37154:112;;37242:12;;37219:35;;37154:112;37278:24;37329:29;;37305:20;:53;;37278:80;;37387:19;:53;;;;;37424:16;;;;;;;;;;;37423:17;37387:53;:91;;;;;37465:13;37457:21;;:4;:21;;;;37387:91;:129;;;;;37495:21;;;;;;;;;;;37387:129;37369:318;;;37566:29;;37543:52;;37639:36;37654:20;37639:14;:36::i;:::-;37369:318;37760:12;37775:4;37760:19;;37879:18;:24;37898:4;37879:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;37907:18;:22;37926:2;37907:22;;;;;;;;;;;;;;;;;;;;;;;;;37879:50;37876:96;;;37955:5;37945:15;;37876:96;38050:38;38065:4;38070:2;38073:6;38080:7;38050:14;:38::i;:::-;36432:1664;;;36329:1767;;;:::o;4583:192::-;4669:7;4702:1;4697;:6;;4705:12;4689:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4729:9;4745:1;4741;:5;;;;:::i;:::-;4729:17;;4766:1;4759:8;;;4583:192;;;;;:::o;34043:163::-;34084:7;34105:15;34122;34141:19;:17;:19::i;:::-;34104:56;;;;34178:20;34190:7;34178;:11;;:20;;;;:::i;:::-;34171:27;;;;34043:163;:::o;5981:132::-;6039:7;6066:39;6070:1;6073;6066:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6059:46;;5981:132;;;;:::o;3680:181::-;3738:7;3758:9;3774:1;3770;:5;;;;:::i;:::-;3758:17;;3799:1;3794;:6;;3786:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3852:1;3845:8;;;3680:181;;;;:::o;32947:407::-;33006:7;33015;33024;33033;33042;33051;33072:23;33097:12;33111:18;33133:20;33145:7;33133:11;:20::i;:::-;33071:82;;;;;;33165:15;33182:23;33207:12;33223:38;33235:7;33244:4;33250:10;:8;:10::i;:::-;33223:11;:38::i;:::-;33164:97;;;;;;33280:7;33289:15;33306:4;33312:15;33329:4;33335:10;33272:74;;;;;;;;;;;;;;;;;;32947:407;;;;;;;:::o;38104:977::-;27273:4;27254:16;;:23;;;;;;;;;;;;;;;;;;38240:12:::1;38255:27;38280:1;38255:20;:24;;:27;;;;:::i;:::-;38240:42;;38293:17;38313:30;38338:4;38313:20;:24;;:30;;;;:::i;:::-;38293:50;;38621:22;38646:21;38621:46;;38712:22;38729:4;38712:16;:22::i;:::-;38865:18;38886:41;38912:14;38886:21;:25;;:41;;;;:::i;:::-;38865:62;;38977:35;38990:9;39001:10;38977:12;:35::i;:::-;39030:43;39045:4;39051:10;39063:9;39030:43;;;;;;;;:::i;:::-;;;;;;;;38178:903;;;;27319:5:::0;27300:16;;:24;;;;;;;;;;;;;;;;;;38104:977;:::o;40286:294::-;40397:7;40393:55;;40420:14;:12;:14::i;:::-;40393:55;40462:44;40480:6;40488:9;40499:6;40462:17;:44::i;:::-;40523:7;40519:54;;40546:15;:13;:15::i;:::-;40519:54;40286:294;;;;:::o;34214:555::-;34264:7;34273;34293:15;34311:7;;34293:25;;34329:15;34347:7;;34329:25;;34370:9;34365:289;34389:9;:16;;;;34385:1;:20;34365:289;;;34455:7;34431;:21;34439:9;34449:1;34439:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34431:21;;;;;;;;;;;;;;;;:31;:66;;;;34490:7;34466;:21;34474:9;34484:1;34474:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34466:21;;;;;;;;;;;;;;;;:31;34431:66;34427:97;;;34507:7;;34516;;34499:25;;;;;;;;;34427:97;34549:34;34561:7;:21;34569:9;34579:1;34569:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34561:21;;;;;;;;;;;;;;;;34549:7;:11;;:34;;;;:::i;:::-;34539:44;;34608:34;34620:7;:21;34628:9;34638:1;34628:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34620:21;;;;;;;;;;;;;;;;34608:7;:11;;:34;;;;:::i;:::-;34598:44;;34407:3;;;;;;;34365:289;;;;34678:20;34690:7;;34678;;:11;;:20;;;;:::i;:::-;34668:7;:30;34664:61;;;34708:7;;34717;;34700:25;;;;;;;;34664:61;34744:7;34753;34736:25;;;;;;34214:555;;;:::o;6609:278::-;6695:7;6727:1;6723;:5;6730:12;6715:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6754:9;6770:1;6766;:5;;;;:::i;:::-;6754:17;;6878:1;6871:8;;;6609:278;;;;;:::o;33362:331::-;33422:7;33431;33440;33460:12;33475:24;33491:7;33475:15;:24::i;:::-;33460:39;;33511:18;33532:30;33554:7;33532:21;:30::i;:::-;33511:51;;33573:23;33599:33;33621:10;33599:17;33611:4;33599:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33573:59;;33651:15;33668:4;33674:10;33643:42;;;;;;;;;33362:331;;;;;:::o;33701:334::-;33796:7;33805;33814;33834:15;33852:24;33864:11;33852:7;:11;;:24;;;;:::i;:::-;33834:42;;33887:12;33902:21;33911:11;33902:4;:8;;:21;;;;:::i;:::-;33887:36;;33934:23;33960:17;33972:4;33960:7;:11;;:17;;;;:::i;:::-;33934:43;;33996:7;34005:15;34022:4;33988:39;;;;;;;;;33701:334;;;;;;;:::o;4144:136::-;4202:7;4229:43;4233:1;4236;4229:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4222:50;;4144:136;;;;:::o;39089:589::-;39215:21;39253:1;39239:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39215:40;;39284:4;39266;39271:1;39266:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39310:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39300:4;39305:1;39300:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39345:62;39362:4;39377:15;39395:11;39345:8;:62::i;:::-;39446:15;:66;;;39527:11;39553:1;39597:4;39624;39644:15;39446:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39144:534;39089:589;:::o;39686:519::-;39834:62;39851:4;39866:15;39884:11;39834:8;:62::i;:::-;39939:15;:31;;;39978:9;40011:4;40031:11;40057:1;40100;40151:4;40171:15;39939:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39686:519;;:::o;35478:234::-;35535:1;35524:7;;:12;:34;;;;;35557:1;35540:13;;:18;35524:34;35560:7;35521:46;35597:7;;35579:15;:25;;;;35639:13;;35615:21;:37;;;;35675:1;35665:7;:11;;;;35703:1;35687:13;:17;;;;35478:234;:::o;40588:502::-;40687:15;40704:23;40729:12;40743:23;40768:12;40782:18;40804:19;40815:7;40804:10;:19::i;:::-;40686:137;;;;;;;;;;;;40852:28;40872:7;40852;:15;40860:6;40852:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40834:7;:15;40842:6;40834:15;;;;;;;;;;;;;;;:46;;;;40912:39;40935:15;40912:7;:18;40920:9;40912:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;40891:7;:18;40899:9;40891:18;;;;;;;;;;;;;;;:60;;;;40962:26;40977:10;40962:14;:26::i;:::-;40999:23;41011:4;41017;40999:11;:23::i;:::-;41055:9;41038:44;;41047:6;41038:44;;;41066:15;41038:44;;;;;;:::i;:::-;;;;;;;;40675:415;;;;;;40588:502;;;:::o;35720:125::-;35774:15;;35764:7;:25;;;;35816:21;;35800:13;:37;;;;35720:125::o;35140:154::-;35204:7;35231:55;35270:5;35231:20;35243:7;;35231;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;35224:62;;35140:154;;;:::o;35302:166::-;35372:7;35399:61;35444:5;35399:26;35411:13;;35399:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;35392:68;;35302:166;;;:::o;5034:471::-;5092:7;5342:1;5337;:6;5333:47;;5367:1;5360:8;;;;5333:47;5392:9;5408:1;5404;:5;;;;:::i;:::-;5392:17;;5437:1;5432;5428;:5;;;;:::i;:::-;:10;5420:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5496:1;5489:8;;;5034:471;;;;;:::o;34777:355::-;34840:19;34863:10;:8;:10::i;:::-;34840:33;;34884:18;34905:27;34920:11;34905:10;:14;;:27;;;;:::i;:::-;34884:48;;34968:38;34995:10;34968:7;:22;34984:4;34968:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;34943:7;:22;34959:4;34943:22;;;;;;;;;;;;;;;:63;;;;35020:11;:26;35040:4;35020:26;;;;;;;;;;;;;;;;;;;;;;;;;35017:107;;;35086:38;35113:10;35086:7;:22;35102:4;35086:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35061:7;:22;35077:4;35061:22;;;;;;;;;;;;;;;:63;;;;35017:107;34829:303;;34777:355;:::o;32792:147::-;32870:17;32882:4;32870:7;;:11;;:17;;;;:::i;:::-;32860:7;:27;;;;32911:20;32926:4;32911:10;;:14;;:20;;;;:::i;:::-;32898:10;:33;;;;32792:147;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:139::-;1394:6;1389:3;1384;1378:23;1435:1;1426:6;1421:3;1417:16;1410:27;1305:139;;;:::o;1450:102::-;1491:6;1542:2;1538:7;1533:2;1526:5;1522:14;1518:28;1508:38;;1450:102;;;:::o;1558:377::-;1646:3;1674:39;1707:5;1674:39;:::i;:::-;1729:71;1793:6;1788:3;1729:71;:::i;:::-;1722:78;;1809:65;1867:6;1862:3;1855:4;1848:5;1844:16;1809:65;:::i;:::-;1899:29;1921:6;1899:29;:::i;:::-;1894:3;1890:39;1883:46;;1650:285;1558:377;;;;:::o;1941:313::-;2054:4;2092:2;2081:9;2077:18;2069:26;;2141:9;2135:4;2131:20;2127:1;2116:9;2112:17;2105:47;2169:78;2242:4;2233:6;2169:78;:::i;:::-;2161:86;;1941:313;;;;:::o;2260:126::-;2297:7;2337:42;2330:5;2326:54;2315:65;;2260:126;;;:::o;2392:96::-;2429:7;2458:24;2476:5;2458:24;:::i;:::-;2447:35;;2392:96;;;:::o;2494:122::-;2567:24;2585:5;2567:24;:::i;:::-;2560:5;2557:35;2547:63;;2606:1;2603;2596:12;2547:63;2494:122;:::o;2622:139::-;2668:5;2706:6;2693:20;2684:29;;2722:33;2749:5;2722:33;:::i;:::-;2622:139;;;;:::o;2767:474::-;2835:6;2843;2892:2;2880:9;2871:7;2867:23;2863:32;2860:119;;;2898:79;;:::i;:::-;2860:119;3018:1;3043:53;3088:7;3079:6;3068:9;3064:22;3043:53;:::i;:::-;3033:63;;2989:117;3145:2;3171:53;3216:7;3207:6;3196:9;3192:22;3171:53;:::i;:::-;3161:63;;3116:118;2767:474;;;;;:::o;3247:90::-;3281:7;3324:5;3317:13;3310:21;3299:32;;3247:90;;;:::o;3343:109::-;3424:21;3439:5;3424:21;:::i;:::-;3419:3;3412:34;3343:109;;:::o;3458:210::-;3545:4;3583:2;3572:9;3568:18;3560:26;;3596:65;3658:1;3647:9;3643:17;3634:6;3596:65;:::i;:::-;3458:210;;;;:::o;3674:118::-;3761:24;3779:5;3761:24;:::i;:::-;3756:3;3749:37;3674:118;;:::o;3798:222::-;3891:4;3929:2;3918:9;3914:18;3906:26;;3942:71;4010:1;3999:9;3995:17;3986:6;3942:71;:::i;:::-;3798:222;;;;:::o;4026:60::-;4054:3;4075:5;4068:12;;4026:60;;;:::o;4092:142::-;4142:9;4175:53;4193:34;4202:24;4220:5;4202:24;:::i;:::-;4193:34;:::i;:::-;4175:53;:::i;:::-;4162:66;;4092:142;;;:::o;4240:126::-;4290:9;4323:37;4354:5;4323:37;:::i;:::-;4310:50;;4240:126;;;:::o;4372:153::-;4449:9;4482:37;4513:5;4482:37;:::i;:::-;4469:50;;4372:153;;;:::o;4531:185::-;4645:64;4703:5;4645:64;:::i;:::-;4640:3;4633:77;4531:185;;:::o;4722:276::-;4842:4;4880:2;4869:9;4865:18;4857:26;;4893:98;4988:1;4977:9;4973:17;4964:6;4893:98;:::i;:::-;4722:276;;;;:::o;5004:619::-;5081:6;5089;5097;5146:2;5134:9;5125:7;5121:23;5117:32;5114:119;;;5152:79;;:::i;:::-;5114:119;5272:1;5297:53;5342:7;5333:6;5322:9;5318:22;5297:53;:::i;:::-;5287:63;;5243:117;5399:2;5425:53;5470:7;5461:6;5450:9;5446:22;5425:53;:::i;:::-;5415:63;;5370:118;5527:2;5553:53;5598:7;5589:6;5578:9;5574:22;5553:53;:::i;:::-;5543:63;;5498:118;5004:619;;;;;:::o;5629:86::-;5664:7;5704:4;5697:5;5693:16;5682:27;;5629:86;;;:::o;5721:112::-;5804:22;5820:5;5804:22;:::i;:::-;5799:3;5792:35;5721:112;;:::o;5839:214::-;5928:4;5966:2;5955:9;5951:18;5943:26;;5979:67;6043:1;6032:9;6028:17;6019:6;5979:67;:::i;:::-;5839:214;;;;:::o;6059:329::-;6118:6;6167:2;6155:9;6146:7;6142:23;6138:32;6135:119;;;6173:79;;:::i;:::-;6135:119;6293:1;6318:53;6363:7;6354:6;6343:9;6339:22;6318:53;:::i;:::-;6308:63;;6264:117;6059:329;;;;:::o;6394:116::-;6464:21;6479:5;6464:21;:::i;:::-;6457:5;6454:32;6444:60;;6500:1;6497;6490:12;6444:60;6394:116;:::o;6516:133::-;6559:5;6597:6;6584:20;6575:29;;6613:30;6637:5;6613:30;:::i;:::-;6516:133;;;;:::o;6655:468::-;6720:6;6728;6777:2;6765:9;6756:7;6752:23;6748:32;6745:119;;;6783:79;;:::i;:::-;6745:119;6903:1;6928:53;6973:7;6964:6;6953:9;6949:22;6928:53;:::i;:::-;6918:63;;6874:117;7030:2;7056:50;7098:7;7089:6;7078:9;7074:22;7056:50;:::i;:::-;7046:60;;7001:115;6655:468;;;;;:::o;7129:118::-;7216:24;7234:5;7216:24;:::i;:::-;7211:3;7204:37;7129:118;;:::o;7253:222::-;7346:4;7384:2;7373:9;7369:18;7361:26;;7397:71;7465:1;7454:9;7450:17;7441:6;7397:71;:::i;:::-;7253:222;;;;:::o;7481:323::-;7537:6;7586:2;7574:9;7565:7;7561:23;7557:32;7554:119;;;7592:79;;:::i;:::-;7554:119;7712:1;7737:50;7779:7;7770:6;7759:9;7755:22;7737:50;:::i;:::-;7727:60;;7683:114;7481:323;;;;:::o;7810:474::-;7878:6;7886;7935:2;7923:9;7914:7;7910:23;7906:32;7903:119;;;7941:79;;:::i;:::-;7903:119;8061:1;8086:53;8131:7;8122:6;8111:9;8107:22;8086:53;:::i;:::-;8076:63;;8032:117;8188:2;8214:53;8259:7;8250:6;8239:9;8235:22;8214:53;:::i;:::-;8204:63;;8159:118;7810:474;;;;;:::o;8290:182::-;8430:34;8426:1;8418:6;8414:14;8407:58;8290:182;:::o;8478:366::-;8620:3;8641:67;8705:2;8700:3;8641:67;:::i;:::-;8634:74;;8717:93;8806:3;8717:93;:::i;:::-;8835:2;8830:3;8826:12;8819:19;;8478:366;;;:::o;8850:419::-;9016:4;9054:2;9043:9;9039:18;9031:26;;9103:9;9097:4;9093:20;9089:1;9078:9;9074:17;9067:47;9131:131;9257:4;9131:131;:::i;:::-;9123:139;;8850:419;;;:::o;9275:163::-;9415:15;9411:1;9403:6;9399:14;9392:39;9275:163;:::o;9444:366::-;9586:3;9607:67;9671:2;9666:3;9607:67;:::i;:::-;9600:74;;9683:93;9772:3;9683:93;:::i;:::-;9801:2;9796:3;9792:12;9785:19;;9444:366;;;:::o;9816:419::-;9982:4;10020:2;10009:9;10005:18;9997:26;;10069:9;10063:4;10059:20;10055:1;10044:9;10040:17;10033:47;10097:131;10223:4;10097:131;:::i;:::-;10089:139;;9816:419;;;:::o;10241:162::-;10381:14;10377:1;10369:6;10365:14;10358:38;10241:162;:::o;10409:366::-;10551:3;10572:67;10636:2;10631:3;10572:67;:::i;:::-;10565:74;;10648:93;10737:3;10648:93;:::i;:::-;10766:2;10761:3;10757:12;10750:19;;10409:366;;;:::o;10781:419::-;10947:4;10985:2;10974:9;10970:18;10962:26;;11034:9;11028:4;11024:20;11020:1;11009:9;11005:17;10998:47;11062:131;11188:4;11062:131;:::i;:::-;11054:139;;10781:419;;;:::o;11206:180::-;11254:77;11251:1;11244:88;11351:4;11348:1;11341:15;11375:4;11372:1;11365:15;11392:320;11436:6;11473:1;11467:4;11463:12;11453:22;;11520:1;11514:4;11510:12;11541:18;11531:81;;11597:4;11589:6;11585:17;11575:27;;11531:81;11659:2;11651:6;11648:14;11628:18;11625:38;11622:84;;11678:18;;:::i;:::-;11622:84;11443:269;11392:320;;;:::o;11718:227::-;11858:34;11854:1;11846:6;11842:14;11835:58;11927:10;11922:2;11914:6;11910:15;11903:35;11718:227;:::o;11951:366::-;12093:3;12114:67;12178:2;12173:3;12114:67;:::i;:::-;12107:74;;12190:93;12279:3;12190:93;:::i;:::-;12308:2;12303:3;12299:12;12292:19;;11951:366;;;:::o;12323:419::-;12489:4;12527:2;12516:9;12512:18;12504:26;;12576:9;12570:4;12566:20;12562:1;12551:9;12547:17;12540:47;12604:131;12730:4;12604:131;:::i;:::-;12596:139;;12323:419;;;:::o;12748:147::-;12849:11;12886:3;12871:18;;12748:147;;;;:::o;12901:114::-;;:::o;13021:398::-;13180:3;13201:83;13282:1;13277:3;13201:83;:::i;:::-;13194:90;;13293:93;13382:3;13293:93;:::i;:::-;13411:1;13406:3;13402:11;13395:18;;13021:398;;;:::o;13425:379::-;13609:3;13631:147;13774:3;13631:147;:::i;:::-;13624:154;;13795:3;13788:10;;13425:379;;;:::o;13810:171::-;13950:23;13946:1;13938:6;13934:14;13927:47;13810:171;:::o;13987:366::-;14129:3;14150:67;14214:2;14209:3;14150:67;:::i;:::-;14143:74;;14226:93;14315:3;14226:93;:::i;:::-;14344:2;14339:3;14335:12;14328:19;;13987:366;;;:::o;14359:419::-;14525:4;14563:2;14552:9;14548:18;14540:26;;14612:9;14606:4;14602:20;14598:1;14587:9;14583:17;14576:47;14640:131;14766:4;14640:131;:::i;:::-;14632:139;;14359:419;;;:::o;14784:229::-;14924:34;14920:1;14912:6;14908:14;14901:58;14993:12;14988:2;14980:6;14976:15;14969:37;14784:229;:::o;15019:366::-;15161:3;15182:67;15246:2;15241:3;15182:67;:::i;:::-;15175:74;;15258:93;15347:3;15258:93;:::i;:::-;15376:2;15371:3;15367:12;15360:19;;15019:366;;;:::o;15391:419::-;15557:4;15595:2;15584:9;15580:18;15572:26;;15644:9;15638:4;15634:20;15630:1;15619:9;15615:17;15608:47;15672:131;15798:4;15672:131;:::i;:::-;15664:139;;15391:419;;;:::o;15816:177::-;15956:29;15952:1;15944:6;15940:14;15933:53;15816:177;:::o;15999:366::-;16141:3;16162:67;16226:2;16221:3;16162:67;:::i;:::-;16155:74;;16238:93;16327:3;16238:93;:::i;:::-;16356:2;16351:3;16347:12;16340:19;;15999:366;;;:::o;16371:419::-;16537:4;16575:2;16564:9;16560:18;16552:26;;16624:9;16618:4;16614:20;16610:1;16599:9;16595:17;16588:47;16652:131;16778:4;16652:131;:::i;:::-;16644:139;;16371:419;;;:::o;16796:180::-;16844:77;16841:1;16834:88;16941:4;16938:1;16931:15;16965:4;16962:1;16955:15;16982:180;17030:77;17027:1;17020:88;17127:4;17124:1;17117:15;17151:4;17148:1;17141:15;17168:194;17208:4;17228:20;17246:1;17228:20;:::i;:::-;17223:25;;17262:20;17280:1;17262:20;:::i;:::-;17257:25;;17306:1;17303;17299:9;17291:17;;17330:1;17324:4;17321:11;17318:37;;;17335:18;;:::i;:::-;17318:37;17168:194;;;;:::o;17368:180::-;17416:77;17413:1;17406:88;17513:4;17510:1;17503:15;17537:4;17534:1;17527:15;17554:181;17694:33;17690:1;17682:6;17678:14;17671:57;17554:181;:::o;17741:366::-;17883:3;17904:67;17968:2;17963:3;17904:67;:::i;:::-;17897:74;;17980:93;18069:3;17980:93;:::i;:::-;18098:2;18093:3;18089:12;18082:19;;17741:366;;;:::o;18113:419::-;18279:4;18317:2;18306:9;18302:18;18294:26;;18366:9;18360:4;18356:20;18352:1;18341:9;18337:17;18330:47;18394:131;18520:4;18394:131;:::i;:::-;18386:139;;18113:419;;;:::o;18538:222::-;18678:34;18674:1;18666:6;18662:14;18655:58;18747:5;18742:2;18734:6;18730:15;18723:30;18538:222;:::o;18766:366::-;18908:3;18929:67;18993:2;18988:3;18929:67;:::i;:::-;18922:74;;19005:93;19094:3;19005:93;:::i;:::-;19123:2;19118:3;19114:12;19107:19;;18766:366;;;:::o;19138:419::-;19304:4;19342:2;19331:9;19327:18;19319:26;;19391:9;19385:4;19381:20;19377:1;19366:9;19362:17;19355:47;19419:131;19545:4;19419:131;:::i;:::-;19411:139;;19138:419;;;:::o;19563:181::-;19703:33;19699:1;19691:6;19687:14;19680:57;19563:181;:::o;19750:366::-;19892:3;19913:67;19977:2;19972:3;19913:67;:::i;:::-;19906:74;;19989:93;20078:3;19989:93;:::i;:::-;20107:2;20102:3;20098:12;20091:19;;19750:366;;;:::o;20122:419::-;20288:4;20326:2;20315:9;20311:18;20303:26;;20375:9;20369:4;20365:20;20361:1;20350:9;20346:17;20339:47;20403:131;20529:4;20403:131;:::i;:::-;20395:139;;20122:419;;;:::o;20547:191::-;20587:3;20606:20;20624:1;20606:20;:::i;:::-;20601:25;;20640:20;20658:1;20640:20;:::i;:::-;20635:25;;20683:1;20680;20676:9;20669:16;;20704:3;20701:1;20698:10;20695:36;;;20711:18;;:::i;:::-;20695:36;20547:191;;;;:::o;20744:225::-;20884:34;20880:1;20872:6;20868:14;20861:58;20953:8;20948:2;20940:6;20936:15;20929:33;20744:225;:::o;20975:366::-;21117:3;21138:67;21202:2;21197:3;21138:67;:::i;:::-;21131:74;;21214:93;21303:3;21214:93;:::i;:::-;21332:2;21327:3;21323:12;21316:19;;20975:366;;;:::o;21347:419::-;21513:4;21551:2;21540:9;21536:18;21528:26;;21600:9;21594:4;21590:20;21586:1;21575:9;21571:17;21564:47;21628:131;21754:4;21628:131;:::i;:::-;21620:139;;21347:419;;;:::o;21772:223::-;21912:34;21908:1;21900:6;21896:14;21889:58;21981:6;21976:2;21968:6;21964:15;21957:31;21772:223;:::o;22001:366::-;22143:3;22164:67;22228:2;22223:3;22164:67;:::i;:::-;22157:74;;22240:93;22329:3;22240:93;:::i;:::-;22358:2;22353:3;22349:12;22342:19;;22001:366;;;:::o;22373:419::-;22539:4;22577:2;22566:9;22562:18;22554:26;;22626:9;22620:4;22616:20;22612:1;22601:9;22597:17;22590:47;22654:131;22780:4;22654:131;:::i;:::-;22646:139;;22373:419;;;:::o;22798:221::-;22938:34;22934:1;22926:6;22922:14;22915:58;23007:4;23002:2;22994:6;22990:15;22983:29;22798:221;:::o;23025:366::-;23167:3;23188:67;23252:2;23247:3;23188:67;:::i;:::-;23181:74;;23264:93;23353:3;23264:93;:::i;:::-;23382:2;23377:3;23373:12;23366:19;;23025:366;;;:::o;23397:419::-;23563:4;23601:2;23590:9;23586:18;23578:26;;23650:9;23644:4;23640:20;23636:1;23625:9;23621:17;23614:47;23678:131;23804:4;23678:131;:::i;:::-;23670:139;;23397:419;;;:::o;23822:224::-;23962:34;23958:1;23950:6;23946:14;23939:58;24031:7;24026:2;24018:6;24014:15;24007:32;23822:224;:::o;24052:366::-;24194:3;24215:67;24279:2;24274:3;24215:67;:::i;:::-;24208:74;;24291:93;24380:3;24291:93;:::i;:::-;24409:2;24404:3;24400:12;24393:19;;24052:366;;;:::o;24424:419::-;24590:4;24628:2;24617:9;24613:18;24605:26;;24677:9;24671:4;24667:20;24663:1;24652:9;24648:17;24641:47;24705:131;24831:4;24705:131;:::i;:::-;24697:139;;24424:419;;;:::o;24849:222::-;24989:34;24985:1;24977:6;24973:14;24966:58;25058:5;25053:2;25045:6;25041:15;25034:30;24849:222;:::o;25077:366::-;25219:3;25240:67;25304:2;25299:3;25240:67;:::i;:::-;25233:74;;25316:93;25405:3;25316:93;:::i;:::-;25434:2;25429:3;25425:12;25418:19;;25077:366;;;:::o;25449:419::-;25615:4;25653:2;25642:9;25638:18;25630:26;;25702:9;25696:4;25692:20;25688:1;25677:9;25673:17;25666:47;25730:131;25856:4;25730:131;:::i;:::-;25722:139;;25449:419;;;:::o;25874:228::-;26014:34;26010:1;26002:6;25998:14;25991:58;26083:11;26078:2;26070:6;26066:15;26059:36;25874:228;:::o;26108:366::-;26250:3;26271:67;26335:2;26330:3;26271:67;:::i;:::-;26264:74;;26347:93;26436:3;26347:93;:::i;:::-;26465:2;26460:3;26456:12;26449:19;;26108:366;;;:::o;26480:419::-;26646:4;26684:2;26673:9;26669:18;26661:26;;26733:9;26727:4;26723:20;26719:1;26708:9;26704:17;26697:47;26761:131;26887:4;26761:131;:::i;:::-;26753:139;;26480:419;;;:::o;26905:227::-;27045:34;27041:1;27033:6;27029:14;27022:58;27114:10;27109:2;27101:6;27097:15;27090:35;26905:227;:::o;27138:366::-;27280:3;27301:67;27365:2;27360:3;27301:67;:::i;:::-;27294:74;;27377:93;27466:3;27377:93;:::i;:::-;27495:2;27490:3;27486:12;27479:19;;27138:366;;;:::o;27510:419::-;27676:4;27714:2;27703:9;27699:18;27691:26;;27763:9;27757:4;27753:20;27749:1;27738:9;27734:17;27727:47;27791:131;27917:4;27791:131;:::i;:::-;27783:139;;27510:419;;;:::o;27935:177::-;28075:29;28071:1;28063:6;28059:14;28052:53;27935:177;:::o;28118:366::-;28260:3;28281:67;28345:2;28340:3;28281:67;:::i;:::-;28274:74;;28357:93;28446:3;28357:93;:::i;:::-;28475:2;28470:3;28466:12;28459:19;;28118:366;;;:::o;28490:419::-;28656:4;28694:2;28683:9;28679:18;28671:26;;28743:9;28737:4;28733:20;28729:1;28718:9;28714:17;28707:47;28771:131;28897:4;28771:131;:::i;:::-;28763:139;;28490:419;;;:::o;28915:442::-;29064:4;29102:2;29091:9;29087:18;29079:26;;29115:71;29183:1;29172:9;29168:17;29159:6;29115:71;:::i;:::-;29196:72;29264:2;29253:9;29249:18;29240:6;29196:72;:::i;:::-;29278;29346:2;29335:9;29331:18;29322:6;29278:72;:::i;:::-;28915:442;;;;;;:::o;29363:180::-;29411:77;29408:1;29401:88;29508:4;29505:1;29498:15;29532:4;29529:1;29522:15;29549:185;29589:1;29606:20;29624:1;29606:20;:::i;:::-;29601:25;;29640:20;29658:1;29640:20;:::i;:::-;29635:25;;29679:1;29669:35;;29684:18;;:::i;:::-;29669:35;29726:1;29723;29719:9;29714:14;;29549:185;;;;:::o;29740:180::-;29788:77;29785:1;29778:88;29885:4;29882:1;29875:15;29909:4;29906:1;29899:15;29926:143;29983:5;30014:6;30008:13;29999:22;;30030:33;30057:5;30030:33;:::i;:::-;29926:143;;;;:::o;30075:351::-;30145:6;30194:2;30182:9;30173:7;30169:23;30165:32;30162:119;;;30200:79;;:::i;:::-;30162:119;30320:1;30345:64;30401:7;30392:6;30381:9;30377:22;30345:64;:::i;:::-;30335:74;;30291:128;30075:351;;;;:::o;30432:85::-;30477:7;30506:5;30495:16;;30432:85;;;:::o;30523:158::-;30581:9;30614:61;30632:42;30641:32;30667:5;30641:32;:::i;:::-;30632:42;:::i;:::-;30614:61;:::i;:::-;30601:74;;30523:158;;;:::o;30687:147::-;30782:45;30821:5;30782:45;:::i;:::-;30777:3;30770:58;30687:147;;:::o;30840:114::-;30907:6;30941:5;30935:12;30925:22;;30840:114;;;:::o;30960:184::-;31059:11;31093:6;31088:3;31081:19;31133:4;31128:3;31124:14;31109:29;;30960:184;;;;:::o;31150:132::-;31217:4;31240:3;31232:11;;31270:4;31265:3;31261:14;31253:22;;31150:132;;;:::o;31288:108::-;31365:24;31383:5;31365:24;:::i;:::-;31360:3;31353:37;31288:108;;:::o;31402:179::-;31471:10;31492:46;31534:3;31526:6;31492:46;:::i;:::-;31570:4;31565:3;31561:14;31547:28;;31402:179;;;;:::o;31587:113::-;31657:4;31689;31684:3;31680:14;31672:22;;31587:113;;;:::o;31736:732::-;31855:3;31884:54;31932:5;31884:54;:::i;:::-;31954:86;32033:6;32028:3;31954:86;:::i;:::-;31947:93;;32064:56;32114:5;32064:56;:::i;:::-;32143:7;32174:1;32159:284;32184:6;32181:1;32178:13;32159:284;;;32260:6;32254:13;32287:63;32346:3;32331:13;32287:63;:::i;:::-;32280:70;;32373:60;32426:6;32373:60;:::i;:::-;32363:70;;32219:224;32206:1;32203;32199:9;32194:14;;32159:284;;;32163:14;32459:3;32452:10;;31860:608;;;31736:732;;;;:::o;32474:831::-;32737:4;32775:3;32764:9;32760:19;32752:27;;32789:71;32857:1;32846:9;32842:17;32833:6;32789:71;:::i;:::-;32870:80;32946:2;32935:9;32931:18;32922:6;32870:80;:::i;:::-;32997:9;32991:4;32987:20;32982:2;32971:9;32967:18;32960:48;33025:108;33128:4;33119:6;33025:108;:::i;:::-;33017:116;;33143:72;33211:2;33200:9;33196:18;33187:6;33143:72;:::i;:::-;33225:73;33293:3;33282:9;33278:19;33269:6;33225:73;:::i;:::-;32474:831;;;;;;;;:::o;33311:807::-;33560:4;33598:3;33587:9;33583:19;33575:27;;33612:71;33680:1;33669:9;33665:17;33656:6;33612:71;:::i;:::-;33693:72;33761:2;33750:9;33746:18;33737:6;33693:72;:::i;:::-;33775:80;33851:2;33840:9;33836:18;33827:6;33775:80;:::i;:::-;33865;33941:2;33930:9;33926:18;33917:6;33865:80;:::i;:::-;33955:73;34023:3;34012:9;34008:19;33999:6;33955:73;:::i;:::-;34038;34106:3;34095:9;34091:19;34082:6;34038:73;:::i;:::-;33311:807;;;;;;;;;:::o;34124:143::-;34181:5;34212:6;34206:13;34197:22;;34228:33;34255:5;34228:33;:::i;:::-;34124:143;;;;:::o;34273:663::-;34361:6;34369;34377;34426:2;34414:9;34405:7;34401:23;34397:32;34394:119;;;34432:79;;:::i;:::-;34394:119;34552:1;34577:64;34633:7;34624:6;34613:9;34609:22;34577:64;:::i;:::-;34567:74;;34523:128;34690:2;34716:64;34772:7;34763:6;34752:9;34748:22;34716:64;:::i;:::-;34706:74;;34661:129;34829:2;34855:64;34911:7;34902:6;34891:9;34887:22;34855:64;:::i;:::-;34845:74;;34800:129;34273:663;;;;;:::o;34942:410::-;34982:7;35005:20;35023:1;35005:20;:::i;:::-;35000:25;;35039:20;35057:1;35039:20;:::i;:::-;35034:25;;35094:1;35091;35087:9;35116:30;35134:11;35116:30;:::i;:::-;35105:41;;35295:1;35286:7;35282:15;35279:1;35276:22;35256:1;35249:9;35229:83;35206:139;;35325:18;;:::i;:::-;35206:139;34990:362;34942:410;;;;:::o;35358:220::-;35498:34;35494:1;35486:6;35482:14;35475:58;35567:3;35562:2;35554:6;35550:15;35543:28;35358:220;:::o;35584:366::-;35726:3;35747:67;35811:2;35806:3;35747:67;:::i;:::-;35740:74;;35823:93;35912:3;35823:93;:::i;:::-;35941:2;35936:3;35932:12;35925:19;;35584:366;;;:::o;35956:419::-;36122:4;36160:2;36149:9;36145:18;36137:26;;36209:9;36203:4;36199:20;36195:1;36184:9;36180:17;36173:47;36237:131;36363:4;36237:131;:::i;:::-;36229:139;;35956:419;;;:::o
Swarm Source
ipfs://a9ba2ad9f94f285e1e7c9209ed229d896cff0ab0f03dcea659e5d28b9761ccca
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.